From 7f5f49c82bff85eef13a3c08ca0cc255008613ae Mon Sep 17 00:00:00 2001
From: study2895 <144806675+study2895@users.noreply.github.com>
Date: Tue, 3 Dec 2024 05:39:28 +0900
Subject: [PATCH 01/17] =?UTF-8?q?[Feat]=20=EC=9D=B8=EC=A6=9D=EB=90=98?=
=?UTF-8?q?=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EC=82=AC=EC=9A=A9=EC=9E=90?=
=?UTF-8?q?=EB=8A=94=20=EB=82=B4=EB=B6=80=EB=A1=9C=20=EC=A0=91=EC=86=8D?=
=?UTF-8?q?=ED=95=A0=20=EC=88=98=20=EC=97=86=EB=8F=84=EB=A1=9D=20=EB=9D=BC?=
=?UTF-8?q?=EC=9A=B0=ED=84=B0=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/router/index.js | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/router/index.js b/src/router/index.js
index 739e8c0..f073eb5 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -7,7 +7,6 @@ import FeedLayout from '@/components/layout/FeedLayout.vue'
import akopolioCreate from '@/views/akopolio/create/akopolioCreate.vue'
import akopolioMain from '@/views/akopolio/main/akopolioMain.vue'
-
// 자동 임포트 함수 (src/views 내의 모든 .vue 파일을 임포트)
function importAllViews() {
const viewFiles = require.context('@/views', true, /\.vue$/)
@@ -81,8 +80,7 @@ const routes = [
path: 'edit/:id',
name: 'akopolioEdit',
component: importedViews['akopolioEdit'] // 자동 임포트 적용
- },
-
+ }
]
},
{
@@ -140,4 +138,16 @@ const router = createRouter({
//라우터 가드 설정(세션 기반 쿠기, 나중에 수정 필요)
// meta: { requiresAuth: true } // 인증이 필요한 페이지
+// 라우터 가드 설정
+router.beforeEach((to, from, next) => {
+ const isAuthenticated = store.getters['auth/isAuthenticated'] // 인증 여부 확인
+ if (to.matched.some((record) => record.path.startsWith('/auth'))) {
+ next() // /auth 경로는 인증 없이 접근 가능
+ } else if (!isAuthenticated) {
+ next('/auth/login') // 인증되지 않은 경우 로그인 페이지로 리다이렉트
+ } else {
+ next() // 인증된 경우 해당 경로로 이동
+ }
+})
+
export default router
From ab3ae18aec1baacd12f6799a21cfbd5cba856606 Mon Sep 17 00:00:00 2001
From: study2895 <144806675+study2895@users.noreply.github.com>
Date: Wed, 4 Dec 2024 22:39:04 +0900
Subject: [PATCH 02/17] =?UTF-8?q?[Fix]=20#9=20-=20=EC=9D=BC=EC=A0=95=20?=
=?UTF-8?q?=EC=9E=88=EB=8A=94=20=EB=82=A0=20=EB=8F=99=EA=B7=B8=EB=9D=BC?=
=?UTF-8?q?=EB=AF=B8=20=EB=B0=8F=20=EB=B0=94=ED=85=80=20=EC=8B=9C=ED=8A=B8?=
=?UTF-8?q?=20=EC=95=88=EB=9C=A8=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98?=
=?UTF-8?q?=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/router/index.js | 20 ++++-----
src/views/calendar/CalendarMainScript.js | 54 +++++++++++-------------
src/views/calendar/CalendarMainView.vue | 20 ++++++++-
3 files changed, 52 insertions(+), 42 deletions(-)
diff --git a/src/router/index.js b/src/router/index.js
index f073eb5..aa556ef 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -139,15 +139,15 @@ const router = createRouter({
//라우터 가드 설정(세션 기반 쿠기, 나중에 수정 필요)
// meta: { requiresAuth: true } // 인증이 필요한 페이지
// 라우터 가드 설정
-router.beforeEach((to, from, next) => {
- const isAuthenticated = store.getters['auth/isAuthenticated'] // 인증 여부 확인
- if (to.matched.some((record) => record.path.startsWith('/auth'))) {
- next() // /auth 경로는 인증 없이 접근 가능
- } else if (!isAuthenticated) {
- next('/auth/login') // 인증되지 않은 경우 로그인 페이지로 리다이렉트
- } else {
- next() // 인증된 경우 해당 경로로 이동
- }
-})
+// router.beforeEach((to, from, next) => {
+// const isAuthenticated = store.getters['auth/isAuthenticated'] // 인증 여부 확인
+// if (to.matched.some((record) => record.path.startsWith('/auth'))) {
+// next() // /auth 경로는 인증 없이 접근 가능
+// } else if (!isAuthenticated) {
+// next('/auth/login') // 인증되지 않은 경우 로그인 페이지로 리다이렉트
+// } else {
+// next() // 인증된 경우 해당 경로로 이동
+// }
+// })
export default router
diff --git a/src/views/calendar/CalendarMainScript.js b/src/views/calendar/CalendarMainScript.js
index bf3958e..27eb27a 100644
--- a/src/views/calendar/CalendarMainScript.js
+++ b/src/views/calendar/CalendarMainScript.js
@@ -1,4 +1,4 @@
-import { ref, computed, onMounted } from 'vue'
+import { ref, computed } from 'vue'
import axios from 'axios'
import {
format,
@@ -20,41 +20,32 @@ export const isScheduleOpen = ref(false)
export const currentYear = computed(() => format(currentDate.value, 'yyyy'))
export const currentMonth = computed(() => format(currentDate.value, 'M'))
-// 임시 학사 일정 데이터
-const temporaryEvents = [
- { title: '개강일', startDate: '2024-03-01', endDate: '2024-03-01' },
- { title: '종강일', startDate: '2024-06-30', endDate: '2024-06-30' },
- { title: '중간고사', startDate: '2024-04-15', endDate: '2024-04-19' },
- { title: '기말고사', startDate: '2024-06-15', endDate: '2024-06-19' },
- { title: '중간고사', startDate: '2024-10-21', endDate: '2024-10-25' }
-]
-
// 학사 일정 데이터 저장소
export const academicEvents = ref([])
// 백엔드에서 학사 일정 가져오기
export const fetchAcademicEvents = async () => {
try {
- console.log(
- 'API 요청 URL:',
- `${process.env.VUE_APP_BE_API_URL}/api/calendar`
- )
- const response = await axios.get(
- `${process.env.VUE_APP_BE_API_URL}/api/calendar`,
- {
- params: {
- year: currentYear.value,
- month: currentMonth.value
- }
- }
- )
- academicEvents.value = response.data || []
+ const apiUrl = `${process.env.VUE_APP_BE_API_URL}/api/academic-events/${currentYear.value}/${currentMonth.value}`
+ console.log('API 요청 URL:', apiUrl)
+
+ const response = await axios.get(apiUrl)
+
+ if (response.status === 200 && response.data) {
+ academicEvents.value = response.data.map((event) => ({
+ title: event.eventTitle,
+ department: event.department,
+ startDate: event.startDate,
+ endDate: event.endDate
+ }))
+ console.log('학사 일정 데이터:', academicEvents.value)
+ } else {
+ console.warn('학사 일정 데이터를 가져오는 데 실패했습니다.')
+ academicEvents.value = []
+ }
} catch (error) {
- console.log(
- '서버에 연결할 수 없어 임시 데이터를 사용합니다:',
- error.message
- )
- academicEvents.value = [...temporaryEvents]
+ console.error('학사 일정 데이터 가져오기 오류:', error.message)
+ academicEvents.value = []
}
}
@@ -106,12 +97,15 @@ export const hasEvent = (day) => {
const selectedDateStr = `${currentYear.value}-${String(
currentMonth.value
).padStart(2, '0')}-${String(day).padStart(2, '0')}`
- return academicEvents.value.some((event) =>
+
+ const result = academicEvents.value.some((event) =>
isWithinInterval(parseISO(selectedDateStr), {
start: parseISO(event.startDate),
end: parseISO(event.endDate)
})
)
+
+ return result
}
export const selectedEvents = computed(() => {
diff --git a/src/views/calendar/CalendarMainView.vue b/src/views/calendar/CalendarMainView.vue
index bf39f61..af7a085 100644
--- a/src/views/calendar/CalendarMainView.vue
+++ b/src/views/calendar/CalendarMainView.vue
@@ -85,7 +85,8 @@ onMounted(() => {
class="day-button"
:class="{
selected: day === selectedDay,
- 'sunday-saturday': isSundayOrSaturday(day)
+ 'sunday-saturday': isSundayOrSaturday(day),
+ 'has-event': hasEvent(day)
}"
v-for="day in week"
:key="day"
@@ -100,7 +101,12 @@ onMounted(() => {
class="schedule-popup"
v-if="isScheduleOpen && selectedEvents.length > 0"
>
-
+
학사 일정
+
+
{{ event.title }}
+
{{ formatDateRange(event.startDate, event.endDate) }}
+
+
@@ -252,4 +258,14 @@ onMounted(() => {
.link-button:hover {
background-color: #f1cdb1;
}
+.day-button.has-event::after {
+ content: '';
+ display: block;
+ width: 6px;
+ height: 6px;
+ background-color: #b3b3b3;
+ border-radius: 50%;
+ margin: 0 auto;
+ margin-top: 4px;
+}
From 703d9eee836be5884ebc9d1252e3b33f3d63ac3e Mon Sep 17 00:00:00 2001
From: yebin-jeong <2022112390@dgu.ac.kr>
Date: Wed, 4 Dec 2024 23:19:28 +0900
Subject: [PATCH 03/17] =?UTF-8?q?[Feature]=20#26=20-=20=EB=94=94=ED=85=8C?=
=?UTF-8?q?=EC=9D=BC=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=B0=B1=EC=97=94?=
=?UTF-8?q?=EB=93=9C=20=EC=97=B0=EA=B2=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/akopolio/detail/detail.js | 32 +++++++++++++++++------------
src/views/akopolio/main/main.js | 1 +
2 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/src/views/akopolio/detail/detail.js b/src/views/akopolio/detail/detail.js
index f916125..5bb4867 100644
--- a/src/views/akopolio/detail/detail.js
+++ b/src/views/akopolio/detail/detail.js
@@ -51,16 +51,19 @@ export default {
console.log("Portfolio ID:", portfolioId);
- // 포트폴리오 데이터 가져오기
- const fetchPortfolioById = async (portfolioId) => {
- try {
- const apiUrl = `${process.env.VUE_APP_BE_API_URL}/api/portfolios/${portfolioId}`;
- console.log('Fetching portfolio from URL:', apiUrl); // API URL 출력
-
- // Fetch 요청
- const response = await fetch(apiUrl);
- console.log('Response status:', response.status); // 상태 코드 확인
-
+ // 포트폴리오 데이터 가져오기
+ const fetchPortfolioById = async (portfolioId) => {
+ try {
+ const apiUrl = `${process.env.VUE_APP_BE_API_URL}/api/portfolios/${portfolioId}`
+ console.log('Fetching portfolio from URL:', apiUrl) // API URL 출력
+
+ // Fetch 요청
+ const response = await fetch(apiUrl, {
+ method: 'GET',
+ credentials: 'include'
+ })
+ console.log('Response status:', response.status) // 상태 코드 확인
+
if (!response.ok) {
console.error(`Response status: ${response.status}, ${response.statusText}`);
// 예외 처리를 통해 사용자에게 상세한 에러 메시지 제공
@@ -109,8 +112,11 @@ export default {
// 백엔드 API 연동
const response = await fetch(
`${process.env.VUE_APP_BE_API_URL}/api/portfolios/${portfolioId}`,
- { method: 'DELETE' }
- );
+ {
+ method: 'DELETE',
+ credentials: 'include'
+ }
+ )
if (!response.ok) {
throw new Error(`Failed to delete portfolio: ${response.statusText}`);
@@ -139,4 +145,4 @@ export default {
handleDeletePortfolio,
};
},
-};
+};
\ No newline at end of file
diff --git a/src/views/akopolio/main/main.js b/src/views/akopolio/main/main.js
index 6c6a72b..cbecde1 100644
--- a/src/views/akopolio/main/main.js
+++ b/src/views/akopolio/main/main.js
@@ -45,6 +45,7 @@ export default {
};
},
computed: {
+
filteredPortfolioList() {
let filteredList = this.portfolioList;
From 390ba2e53205210c3576e62e26be203d9ac4344e Mon Sep 17 00:00:00 2001
From: study2895 <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 00:05:25 +0900
Subject: [PATCH 04/17] =?UTF-8?q?[Feat]=20#9=20-=20=EC=BA=98=EB=A6=B0?=
=?UTF-8?q?=EB=8D=94=20=ED=8E=98=EC=9D=B4=EC=A7=80=20api=20=EC=97=B0?=
=?UTF-8?q?=EA=B2=B0=20=EA=B5=AC=ED=98=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/calendar/CalendarMainView.vue | 61 ++++++++++++++++++++++---
1 file changed, 55 insertions(+), 6 deletions(-)
diff --git a/src/views/calendar/CalendarMainView.vue b/src/views/calendar/CalendarMainView.vue
index af7a085..2f3c6ca 100644
--- a/src/views/calendar/CalendarMainView.vue
+++ b/src/views/calendar/CalendarMainView.vue
@@ -101,12 +101,16 @@ onMounted(() => {
class="schedule-popup"
v-if="isScheduleOpen && selectedEvents.length > 0"
>
-
학사 일정
-
-
{{ event.title }}
-
{{ formatDateRange(event.startDate, event.endDate) }}
+
+
-
@@ -225,7 +229,7 @@ onMounted(() => {
.schedule-popup {
position: fixed;
- bottom: 0;
+ bottom: -100%; /* 시작 위치: 화면 아래 */
left: 0;
right: 0;
background-color: #ffffff;
@@ -235,6 +239,9 @@ onMounted(() => {
max-height: 60vh;
width: 395px;
margin: 0 auto;
+ box-shadow: 0 -4px 6px rgba(0, 0, 0, 0.1);
+ animation: slide-up 0.3s ease-out forwards; /* 부드러운 위로 이동 애니메이션 */
+ z-index: 1000;
}
.link-button {
@@ -268,4 +275,46 @@ onMounted(() => {
margin: 0 auto;
margin-top: 4px;
}
+
+@keyframes slide-up {
+ from {
+ bottom: -100%; /* 초기 상태 */
+ }
+ to {
+ bottom: 0; /* 최종 상태 */
+ }
+}
+
+.popup-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 1rem;
+}
+
+.popup-header h2 {
+ font-size: 1.25rem;
+ font-weight: bold;
+ color: #4a4a4a;
+}
+
+.close-button {
+ background: none;
+ border: none;
+ font-size: 1.5rem;
+ font-weight: bold;
+ color: #b3b3b3;
+ cursor: pointer;
+ transition: color 0.3s;
+}
+
+.close-button:hover {
+ color: #ff7f00;
+}
+
+.popup-content {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+}
From 227fd195cf3d6c1992c212622ef37e8848166ad3 Mon Sep 17 00:00:00 2001
From: study2895 <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 00:06:01 +0900
Subject: [PATCH 05/17] =?UTF-8?q?[Feat]=20#21=20-=20=EB=A9=94=EC=9D=B8?=
=?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=97=B0=EA=B2=B0=20=EB=A1=9C?=
=?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/mainpage/MainpageView.vue | 105 +++++++++++-----------------
1 file changed, 41 insertions(+), 64 deletions(-)
diff --git a/src/views/mainpage/MainpageView.vue b/src/views/mainpage/MainpageView.vue
index eab74ce..185cd7d 100644
--- a/src/views/mainpage/MainpageView.vue
+++ b/src/views/mainpage/MainpageView.vue
@@ -49,7 +49,12 @@
}"
>
{{ task.name }}
-
+
@@ -63,7 +68,12 @@
}"
>
{{ task.name }}
-
+
@@ -88,7 +98,6 @@
From cba4d79b446f3732adcbeefd34aaf320730ea00d Mon Sep 17 00:00:00 2001
From: Jiwon Jeong <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 00:28:14 +0900
Subject: [PATCH 06/17] =?UTF-8?q?Docs:=20README.md=20=EC=97=85=EB=8D=B0?=
=?UTF-8?q?=EC=9D=B4=ED=8A=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 9771f63..c0c58b6 100644
--- a/README.md
+++ b/README.md
@@ -70,7 +70,8 @@
- ### 📑 API 명세서
- - 각 API의 설명, 요청 및 응답 예시를 포함합니다.
+ ![1](https://github.com/user-attachments/assets/21191f05-1f77-4c98-878c-f3b5ddaa6f99)
+
@@ -105,9 +106,15 @@
## ▶ 실행 방법
-1. **환경 설정**: 프로젝트 실행을 위한 필수 환경 변수 및 설정 정보를 포함합니다.
-2. **의존성 설치**: 프로젝트의 종속성을 설치하는 단계입니다.
+1. **환경 설정**: Node.js, npm, vue-cli를 설치합니다.
+ ```bash
+ npm install -g @vue/cli
+2. **의존성 설치**:
+ ```bash
+ npm install
3. **프로젝트 실행**: 실행 명령어로 프로젝트를 시작합니다.
+ ```bash
+ npm install
From d91a4c77d31f9ff2b4ec9b41215b67cebad03695 Mon Sep 17 00:00:00 2001
From: Jiwon Jeong <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 00:28:45 +0900
Subject: [PATCH 07/17] Docs: Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index c0c58b6..577c709 100644
--- a/README.md
+++ b/README.md
@@ -69,7 +69,7 @@
![osori](https://github.com/user-attachments/assets/d90a2ae9-aac0-4ba0-92bf-fd08abee8d4b)
-- ### 📑 API 명세서
+- ### 📑 API 명세서 일부
![1](https://github.com/user-attachments/assets/21191f05-1f77-4c98-878c-f3b5ddaa6f99)
From 046b827ef943964a6c405c97885153154625277f Mon Sep 17 00:00:00 2001
From: Jiwon Jeong <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 00:29:49 +0900
Subject: [PATCH 08/17] ]Docs] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 577c709..fce7abe 100644
--- a/README.md
+++ b/README.md
@@ -114,7 +114,7 @@
npm install
3. **프로젝트 실행**: 실행 명령어로 프로젝트를 시작합니다.
```bash
- npm install
+ npm run dev
From 860bace93eea76ade14facf3cc94a3e8d0454df6 Mon Sep 17 00:00:00 2001
From: Jiwon Jeong <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 00:41:39 +0900
Subject: [PATCH 09/17] =?UTF-8?q?Docs:=20=EB=94=94=EB=A0=89=ED=86=A0?=
=?UTF-8?q?=EB=A6=AC=20=ED=8A=B8=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=20=EC=9E=91?=
=?UTF-8?q?=EC=84=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 32 +++++++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index fce7abe..5628936 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,37 @@
## 🏗 설계 및 구현
- ### 📂 프로젝트 구조
- - 프로젝트의 주요 디렉토리 구조와 설명을 포함합니다.
+
+```
+📦 프로젝트 루트
+ ┣ 📂src
+ ┃ ┣ 📂assets
+ ┃ ┃ ┣ 📂data
+ ┃ ┃ ┣ 📂fonts
+ ┃ ┃ ┣ 📂Icons
+ ┃ ┃ ┃ ┗ 📂akoming
+ ┃ ┃ ┣ 📂images
+ ┃ ┃ ┗ 📂styles
+ ┃ ┣ 📂components # 공용 컴포넌트 모음
+ ┃ ┃ ┣ 📂common
+ ┃ ┃ ┗ 📂layout
+ ┃ ┣ 📂router # Vue Router 설정 파일
+ ┃ ┣ 📂store # Vuex 상태 관리 모듈
+ ┃ ┣ 📂views
+ ┃ ┃ ┣ 📂akopolio # 아코폴리오 관련 페이지
+ ┃ ┃ ┣ 📂calendar # 학사 일정 캘린더 관련 페이지
+ ┃ ┃ ┣ 📂feed # 피드 관련 페이지
+ ┃ ┃ ┣ 📂login # 로그인, 회원가입, 마이페이지 관련 페이지
+ ┃ ┃ ┣ 📂mainpage # 메인 페이지 관련 파일
+ ┃ ┃ ┗ 📜NotFound.vue # 404 에러 페이지
+ ┣ 📂public # 빌드되지 않는 정적 파일
+ ┣ 📂docs # 문서 폴더
+ ┃ ┗ 📜README.md
+ ┣ 📜App.vue # Vue 앱의 루트 컴포넌트
+ ┣ 📜main.js # Vue 앱 초기화 파일
+```
+
+
- ### 🧩 다이어그램
아키텍처 다이어그램, 서비스 흐름, 데이터 흐름 등을 그림으로 표현합니다.
From 7b47db9fef475a224be86f2314f9ff7f9d865cff Mon Sep 17 00:00:00 2001
From: Jiwon Jeong <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 00:42:55 +0900
Subject: [PATCH 10/17] Docs: Update README.md
---
README.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 5628936..390bc2f 100644
--- a/README.md
+++ b/README.md
@@ -65,11 +65,11 @@
┃ ┃ ┃ ┗ 📂akoming
┃ ┃ ┣ 📂images
┃ ┃ ┗ 📂styles
- ┃ ┣ 📂components # 공용 컴포넌트 모음
+ ┃ ┣ 📂components # 공용 컴포넌트
┃ ┃ ┣ 📂common
┃ ┃ ┗ 📂layout
- ┃ ┣ 📂router # Vue Router 설정 파일
- ┃ ┣ 📂store # Vuex 상태 관리 모듈
+ ┃ ┣ 📂router # Vue Router
+ ┃ ┣ 📂store # Vuex
┃ ┣ 📂views
┃ ┃ ┣ 📂akopolio # 아코폴리오 관련 페이지
┃ ┃ ┣ 📂calendar # 학사 일정 캘린더 관련 페이지
@@ -77,11 +77,11 @@
┃ ┃ ┣ 📂login # 로그인, 회원가입, 마이페이지 관련 페이지
┃ ┃ ┣ 📂mainpage # 메인 페이지 관련 파일
┃ ┃ ┗ 📜NotFound.vue # 404 에러 페이지
- ┣ 📂public # 빌드되지 않는 정적 파일
- ┣ 📂docs # 문서 폴더
+ ┣ 📂public
+ ┣ 📂docs # 보고서 등 문서 폴더
┃ ┗ 📜README.md
- ┣ 📜App.vue # Vue 앱의 루트 컴포넌트
- ┣ 📜main.js # Vue 앱 초기화 파일
+ ┣ 📜App.vue
+ ┣ 📜main.js
```
From fc1e696d5e5c5fe794a11ccac3394bba0a6662c6 Mon Sep 17 00:00:00 2001
From: study2895 <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 01:06:44 +0900
Subject: [PATCH 11/17] =?UTF-8?q?[Feat]=20=EB=A9=94=EC=9D=B8=20=ED=8E=98?=
=?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EB=A1=9C=EA=B7=B8=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/mainpage/MainpageView.vue | 134 +++++++++++++++++++++++++++-
1 file changed, 133 insertions(+), 1 deletion(-)
diff --git a/src/views/mainpage/MainpageView.vue b/src/views/mainpage/MainpageView.vue
index 185cd7d..86f1d7a 100644
--- a/src/views/mainpage/MainpageView.vue
+++ b/src/views/mainpage/MainpageView.vue
@@ -149,6 +149,7 @@ const fetchQuestStatus = async () => {
tasks.value[1].completed = questStatus.goalWritten
tasks.value[2].completed = questStatus.commentedOnFriendGoal
tasks.value[3].completed = questStatus.portfolioWritten
+ console.log('Updated tasks:', tasks.value) // 확인용 로그
// 스탬프 상태 업데이트
stamps.value.forEach((stamp, index) => {
@@ -189,4 +190,135 @@ onMounted(() => {
})
-
+
From 1d2a79257b5fa794bd7f32974a413f0f2147c244 Mon Sep 17 00:00:00 2001
From: study2895 <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 01:07:15 +0900
Subject: [PATCH 12/17] =?UTF-8?q?[Feat]=20=EB=9D=BC=EC=9A=B0=ED=84=B0?=
=?UTF-8?q?=EC=97=90=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=ED=95=98=EC=A7=80=20?=
=?UTF-8?q?=EC=95=8A=EC=9D=80=20=EC=82=AC=EC=9A=A9=EC=9E=90=EB=8A=94=20?=
=?UTF-8?q?=EB=8B=A4=EB=A5=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=20?=
=?UTF-8?q?=EC=A0=91=EA=B7=BC=ED=95=98=EC=A7=80=20=EB=AA=BB=ED=95=98?=
=?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/router/index.js | 48 +++++++++++++++++++++++++++++++++------------
1 file changed, 35 insertions(+), 13 deletions(-)
diff --git a/src/router/index.js b/src/router/index.js
index aa556ef..f35e74f 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -136,18 +136,40 @@ const router = createRouter({
routes
})
-//라우터 가드 설정(세션 기반 쿠기, 나중에 수정 필요)
-// meta: { requiresAuth: true } // 인증이 필요한 페이지
-// 라우터 가드 설정
-// router.beforeEach((to, from, next) => {
-// const isAuthenticated = store.getters['auth/isAuthenticated'] // 인증 여부 확인
-// if (to.matched.some((record) => record.path.startsWith('/auth'))) {
-// next() // /auth 경로는 인증 없이 접근 가능
-// } else if (!isAuthenticated) {
-// next('/auth/login') // 인증되지 않은 경우 로그인 페이지로 리다이렉트
-// } else {
-// next() // 인증된 경우 해당 경로로 이동
-// }
-// })
+//라우터 가드 설정
+// 글로벌 가드 추가
+router.beforeEach(async (to, from, next) => {
+ const isAuthPage = to.matched.some((record) =>
+ record.path.startsWith('/auth')
+ )
+
+ try {
+ // 세션 상태 확인 API 호출
+ const response = await fetch(
+ `${process.env.VUE_APP_BE_API_URL}/api/quests/status`,
+ {
+ method: 'GET',
+ credentials: 'include' // 세션 쿠키 포함
+ }
+ )
+
+ if (response.ok) {
+ if (isAuthPage) {
+ next('/main') // 이미 인증된 상태라면 메인 페이지로 이동
+ } else {
+ next() // 정상적으로 페이지 이동
+ }
+ } else {
+ if (isAuthPage) {
+ next() // 인증 경로로는 접근 가능
+ } else {
+ next('/auth/login') // 인증되지 않았으면 로그인 페이지로 이동
+ }
+ }
+ } catch (error) {
+ console.error('Error during authentication check:', error)
+ next('/auth/login') // 오류 발생 시 로그인 페이지로 이동
+ }
+})
export default router
From 7f22ba7879ad9d407a2586c7c0ad25108ca613de Mon Sep 17 00:00:00 2001
From: Jiwon Jeong <144806675+study2895@users.noreply.github.com>
Date: Thu, 5 Dec 2024 01:30:14 +0900
Subject: [PATCH 13/17] =?UTF-8?q?Docs:=20Update=20=ED=9A=8C=EC=9D=98?=
=?UTF-8?q?=EB=A1=9D.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
"docs/\355\232\214\354\235\230\353\241\235.md" | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git "a/docs/\355\232\214\354\235\230\353\241\235.md" "b/docs/\355\232\214\354\235\230\353\241\235.md"
index 7d5556e..c66493a 100644
--- "a/docs/\355\232\214\354\235\230\353\241\235.md"
+++ "b/docs/\355\232\214\354\235\230\353\241\235.md"
@@ -15,11 +15,12 @@
| 8차 | 2024년 10월 16일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 이소은 | https://www.notion.so/8-12db4ba0516b81178342cc75df07750b |
| 9차 | 2024년 10월 21일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정지원 | https://www.notion.so/9-12db4ba0516b8164b602fd248747296b |
| 10차 | 2024년 10월 23일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 최민 | https://www.notion.so/10-12db4ba0516b81d9a131f2c52ae5ee89 |
-| 11차 | 2024년 10월 28일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정예빈 | https://www.notion.so/11-12db4ba0516b8071b0f8fcce55a7a442?pvs=4 |
-| 12차 | 2024년 10월 30일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 이소은 | https://www.notion.so/12-bf84f851b63442adba1b69159a772725?pvs=4 |
-| 13차 | 2024년 11월 4일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정지원 | https://www.notion.so/13-a6297b09e7bd45fa904862463bca54c4?pvs=4 |
-| 14차 | 2024년 11월 6일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 최민 | https://www.notion.so/14-416a0ab074c54e1f945a72cd3c3acb18?pvs=4 |
-| 15차 | 2024년 11월 11일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정예빈 | https://www.notion.so/15-29633aca525242d983483ebc20b8871d?pvs=4 |
-| 16차 | 2024년 11월 18일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 이소은 | https://www.notion.so/16-dce780571dbe4f9a84e4bb58be834e66?pvs=4 |
-| 17차 | 2024년 11월 20일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정지원 | https://www.notion.so/17-476981be247b4d339ff70ae25a91d80e?pvs=4 |
-
+| 11차 | 2024년 10월 28일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정예빈 | https://www.notion.so/11-12db4ba0516b8071b0f8fcce55a7a442 |
+| 12차 | 2024년 10월 30일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 이소은 | https://www.notion.so/12-bf84f851b63442adba1b69159a772725 |
+| 13차 | 2024년 11월 4일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정지원 | https://www.notion.so/13-a6297b09e7bd45fa904862463bca54c4 |
+| 14차 | 2024년 11월 6일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 최민 | https://www.notion.so/14-416a0ab074c54e1f945a72cd3c3acb18 |
+| 15차 | 2024년 11월 11일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정예빈 | https://www.notion.so/15-29633aca525242d983483ebc20b8871d |
+| 16차 | 2024년 11월 18일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 이소은 | https://www.notion.so/16-dce780571dbe4f9a84e4bb58be834e66 |
+| 17차 | 2024년 11월 20일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정지원 | https://www.notion.so/17-476981be247b4d339ff70ae25a91d80e |
+| 18차 | 2024년 11월 27일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 최민 | https://www.notion.so/17-476981be247b4d339ff70ae25a91d80e |
+| 19차 | 2024년 12월 4일 | 정기 회의 | 이소은, 최민, 정지원, 정예빈 | 정예빈 | https://www.notion.so/17-476981be247b4d339ff70ae25a91d80e |
From 676038bd07df73a222c41d26dfed7d940cd1eb79 Mon Sep 17 00:00:00 2001
From: yebin-jeong <2022112390@dgu.ac.kr>
Date: Thu, 5 Dec 2024 01:51:04 +0900
Subject: [PATCH 14/17] =?UTF-8?q?[Feature]=20#26=20-=20=EC=83=81=EC=84=B8,?=
=?UTF-8?q?=20=EC=88=98=EC=A0=95=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=B0=B1?=
=?UTF-8?q?=EC=97=94=EB=93=9C=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/akopolio/Edit/akopolioEdit.vue | 7 +++-
src/views/akopolio/Edit/edit.js | 42 +++++++++++++++-----
src/views/akopolio/detail/akopolioDetail.vue | 14 +++----
src/views/akopolio/detail/detail.js | 17 ++++----
4 files changed, 54 insertions(+), 26 deletions(-)
diff --git a/src/views/akopolio/Edit/akopolioEdit.vue b/src/views/akopolio/Edit/akopolioEdit.vue
index 3bbea85..6193fe3 100644
--- a/src/views/akopolio/Edit/akopolioEdit.vue
+++ b/src/views/akopolio/Edit/akopolioEdit.vue
@@ -75,7 +75,12 @@
-
+
diff --git a/src/views/akopolio/Edit/edit.js b/src/views/akopolio/Edit/edit.js
index 3a5437b..6f6b641 100644
--- a/src/views/akopolio/Edit/edit.js
+++ b/src/views/akopolio/Edit/edit.js
@@ -84,13 +84,17 @@ export default {
textarea.style.height = `${textarea.scrollHeight}px`;
};
- const fetchPortfolioById = async (id) => {
+ // 포트폴리오 데이터 가져오기
+ const fetchPortfolioById = async (portfolioId) => {
try {
- const apiUrl = `${process.env.VUE_APP_BE_API_URL}/api/portfolios/${id}`;
- console.log('Fetching portfolio from URL:', apiUrl);
+ const apiUrl = `${process.env.VUE_APP_BE_API_URL}/api/portfolios/${portfolioId}`;
+ console.log('Fetching portfolio from URL:', apiUrl); // API URL 출력
- const response = await fetch(apiUrl);
- console.log('Response status:', response.status);
+ const response = await fetch(apiUrl, {
+ method: 'GET',
+ credentials: 'include',
+ });
+ console.log('Response status:', response.status); // 상태 코드 확인
if (!response.ok) {
console.error(`Response status: ${response.status}, ${response.statusText}`);
@@ -100,6 +104,7 @@ export default {
const data = await response.json();
console.log('Received portfolio data:', data);
+ // 포트폴리오 데이터 할당
portfolio.value = {
baseInfo: data.baseInfo || {},
experience: data.experience || { situation: '', task: '', action: '', result: '' },
@@ -107,7 +112,22 @@ export default {
photoUrls: data.photoUrls || [],
};
- images.value = portfolio.value.photoUrls || [];
+ // 각 변수에 포트폴리오 데이터 할당
+ activityName.value = portfolio.value.baseInfo.name || ''; // 활동명
+ activityDate.value = portfolio.value.baseInfo.startDate || ''; // 활동일 (startDate로 변경)
+ star.value = portfolio.value.experience || { situation: '', task: '', action: '', result: '' }; // STAR 모델
+ pmi.value = portfolio.value.pmi || { plus: '', minus: '', interesting: '' }; // PMI 모델
+ images.value = portfolio.value.photoUrls.map((imageUrl) => {
+ return {
+ previewUrl: imageUrl, // 서버에서 제공하는 URL을 미리보기 URL로 사용
+ name: imageUrl.split('/').pop(), // 파일 이름을 추출
+ size: 0, // 기존 이미지는 파일 크기 필요 없음
+ containerWidth: '300px', // 기본 크기 설정
+ containerHeight: '300px', // 기본 크기 설정
+ };
+ });
+ selectedTags.value = portfolio.value.baseInfo.tags || [];
+
} catch (error) {
console.error('Error fetching portfolio:', error);
alert('포트폴리오를 가져오는 중 오류가 발생했습니다.');
@@ -124,7 +144,7 @@ export default {
}
const newImagesPromises = selectedFiles.map((file) => {
- const previewUrl = URL.createObjectURL(file);
+ const previewUrl = URL.createObjectURL(file); // 새로 추가된 이미지는 미리보기 URL 생성
const imageElement = new Image();
imageElement.src = previewUrl;
@@ -171,7 +191,9 @@ export default {
};
const removeImage = (index) => {
- URL.revokeObjectURL(images.value[index].previewUrl);
+ if (images.value[index].previewUrl) {
+ URL.revokeObjectURL(images.value[index].previewUrl); // 생성한 URL을 해제
+ }
images.value.splice(index, 1);
};
@@ -219,6 +241,7 @@ export default {
return;
}
+
try {
const response = await axios.put(
`${process.env.VUE_APP_BE_API_URL}/api/portfolios/${id}`,
@@ -237,7 +260,7 @@ export default {
minus: pmi.value.minus,
interesting: pmi.value.interesting,
},
- photoUrls: images.value.map(image => image.name),
+ photoUrls: images.value.map(image => image.url),
},
{
headers: {
@@ -273,6 +296,7 @@ export default {
selectedTags.value = [];
await fetchUserData();
await fetchPortfolioById(portfolioId);
+
});
return {
diff --git a/src/views/akopolio/detail/akopolioDetail.vue b/src/views/akopolio/detail/akopolioDetail.vue
index e53ee7d..d9934e1 100644
--- a/src/views/akopolio/detail/akopolioDetail.vue
+++ b/src/views/akopolio/detail/akopolioDetail.vue
@@ -17,11 +17,11 @@
활동명
-
{{ portfolio ? portfolio.title : '' }}
+
{{ portfolio ? portfolio.name : '' }}
활동일
-
{{ portfolio ? portfolio.createdDate : '' }}
+
{{ portfolio ? portfolio.startDate : '' }}
분야 설정
@@ -36,22 +36,22 @@
경험 (STAR)
-
+
Situation
-
{{ portfolio.star.situation || '상황 정보가 없습니다.' }}
+
{{ portfolio.experience.situation || '상황 정보가 없습니다.' }}
Task
-
{{ portfolio.star.task || '내용이 없습니다.' }}
+
{{ portfolio.experience.task || '내용이 없습니다.' }}
Action
-
{{ portfolio.star.action || '내용이 없습니다.' }}
+
{{ portfolio.experience.action || '내용이 없습니다.' }}
Result
-
{{ portfolio.star.result || '내용이 없습니다.' }}
+
{{ portfolio.experience.result || '내용이 없습니다.' }}
diff --git a/src/views/akopolio/detail/detail.js b/src/views/akopolio/detail/detail.js
index 5bb4867..e77ef83 100644
--- a/src/views/akopolio/detail/detail.js
+++ b/src/views/akopolio/detail/detail.js
@@ -81,21 +81,20 @@ export default {
// 응답 데이터 확인
console.log('Received portfolio data:', data);
- // 포트폴리오 데이터를 구조에 맞게 저장
portfolio.value = {
- baseInfo: data.baseInfo || {}, // 기본 정보 저장
- experience: data.experience || {}, // 경험 정보 저장
- pmi: data.pmi || {}, // PMI 정보 저장
- photoUrls: data.photoUrls || [], // 사진 URL 배열 저장
+ name: data.baseInfo.name, // 활동명
+ startDate: data.baseInfo.startDate, // 활동일
+ tags: data.baseInfo.tags || [], // 태그
+ experience: data.experience || { situation: '', task: '', action: '', result: '' },
+ pmi: data.pmi || { plus: '', minus: '', interesting: '' },
+ photoUrls: data.photoUrls || [], // 이미지
};
- // 이미지 데이터 따로 저장
- images.value = portfolio.value.photoUrls;
-
+ images.value = data.photoUrls || [];
} catch (error) {
console.error('Error fetching portfolio:', error);
alert('포트폴리오를 가져오는 중 오류가 발생했습니다.');
- portfolio.value = null; // 오류 발생 시 초기화
+ portfolio.value = null;
images.value = [];
}
};
From 7603f50ace6432c8a7fa4074e97fb7d34820736d Mon Sep 17 00:00:00 2001
From: yebin-jeong <2022112390@dgu.ac.kr>
Date: Thu, 5 Dec 2024 02:54:59 +0900
Subject: [PATCH 15/17] =?UTF-8?q?[style]=20button=20div=EB=A1=9C=20?=
=?UTF-8?q?=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/akopolio/Edit/akopolioEdit.vue | 46 +++++++++++---------
src/views/akopolio/create/akopolioCreate.vue | 33 +++++++++-----
src/views/akopolio/detail/akopolioDetail.vue | 17 +++++---
src/views/akopolio/main/akopolioMain.vue | 23 ++++++----
src/views/akopolio/paginationNav.vue | 45 +++++++++++--------
5 files changed, 98 insertions(+), 66 deletions(-)
diff --git a/src/views/akopolio/Edit/akopolioEdit.vue b/src/views/akopolio/Edit/akopolioEdit.vue
index 6193fe3..58bbe6f 100644
--- a/src/views/akopolio/Edit/akopolioEdit.vue
+++ b/src/views/akopolio/Edit/akopolioEdit.vue
@@ -29,14 +29,14 @@
-
+
+ {{ tag }}
+
@@ -81,15 +81,15 @@
:alt="`Uploaded Image ${index + 1}`"
class="image-preview"
/>
-
+
X
-
-
+ 저장하기
+
@@ -160,7 +160,7 @@ textarea {
font-size: 12px;
}
-button {
+.tag-div {
display: inline-block;
margin: 3px;
padding: 5px 10px;
@@ -170,8 +170,13 @@ button {
border: 1px solid #eec092;
}
-button.active {
- background-color: #f6b87a;
+.tag-div.active {
+ background-color: #f7c088;
+}
+
+.tag-div:hover {
+ background-color: #f7c088;
+ cursor: pointer;
}
/* 분야 설정 박스 */
@@ -213,12 +218,14 @@ button.active {
font-size: 0.875rem;
font-weight: 500;
border-radius: 9999px;
+ text-align: center;
transition: background-color 0.3s ease;
margin-bottom: 20px;
}
.save-button:hover {
background-color: #e5a769;
+ cursor: pointer;
}
.experience-container h3,
@@ -274,16 +281,15 @@ label {
top: 5px;
right: 5px;
color: black;
- border: none;
- background: none; /* 배경색 제거 */
- font-size: 16px; /* X 아이콘이 더 잘 보이도록 크기 조정 */
+ background: none;
+ font-size: 15px;
cursor: pointer;
- transition: color 0.3s; /* 색상 전환 애니메이션 추가 */
+ transition: color 0.3s;
}
.delete-image-btn:hover {
- color: white;
+ color:#d9d9d9;
}
@@ -307,12 +313,10 @@ label {
object-fit: contain; /* 이미지가 컨테이너 내에서 비율을 유지하면서 크기 조정 */
}
-/* 기본 input[type="file"] 숨기기 */
input[type="file"] {
display: none;
}
-/* 커스텀 버튼 스타일 */
.custom-file-upload {
background-color: #faf5f0;
color: #f3ab62;
diff --git a/src/views/akopolio/create/akopolioCreate.vue b/src/views/akopolio/create/akopolioCreate.vue
index 29ddaee..5cca151 100644
--- a/src/views/akopolio/create/akopolioCreate.vue
+++ b/src/views/akopolio/create/akopolioCreate.vue
@@ -29,14 +29,15 @@
-
+
+ {{ tag }}
+
@@ -105,14 +106,14 @@
-
+
X
@@ -183,7 +184,7 @@ textarea {
font-size: 12px;
}
-button {
+.tag-item {
display: inline-block;
margin: 3px;
padding: 5px 10px;
@@ -191,12 +192,18 @@ button {
background-color: white;
transition: background-color 0.3s;
border: 1px solid #eec092;
+ cursor: pointer;
}
-button.active {
+.tag-item.active {
background-color: #f6b87a;
}
+.tag-item:hover {
+ background-color: #f6b87a;
+ cursor: pointer;
+}
+
/* 분야 설정 박스 */
.category-box {
background-color: white;
@@ -236,12 +243,14 @@ button.active {
font-size: 0.875rem;
font-weight: 500;
border-radius: 9999px;
+ text-align: center;
transition: background-color 0.3s ease;
margin-bottom: 20px;
}
.save-button:hover {
background-color: #e5a769;
+ cursor: pointer;
}
h3 {
diff --git a/src/views/akopolio/detail/akopolioDetail.vue b/src/views/akopolio/detail/akopolioDetail.vue
index d9934e1..3720fc6 100644
--- a/src/views/akopolio/detail/akopolioDetail.vue
+++ b/src/views/akopolio/detail/akopolioDetail.vue
@@ -4,11 +4,11 @@
@@ -122,24 +122,29 @@
.edit-button,
.delete-button {
display: flex;
+ align-items: center;
+ justify-content: center;
padding: 5px 10px;
border-radius: 10px;
- border: none;
cursor: pointer;
font-size: 10px;
gap: 4px;
+ background-color: white;
}
.edit-button {
- background-color: white;
color: black;
}
.delete-button {
- background-color: white;
color: red;
}
+.edit-button:hover,
+.delete-button:hover {
+ background-color: #f2eeee;
+}
+
.image-upload-container,
.experience-container,
.pmi-container {
diff --git a/src/views/akopolio/main/akopolioMain.vue b/src/views/akopolio/main/akopolioMain.vue
index 8f6d145..74b2264 100644
--- a/src/views/akopolio/main/akopolioMain.vue
+++ b/src/views/akopolio/main/akopolioMain.vue
@@ -10,7 +10,7 @@
@input="applyFilters"
placeholder="활동명을 입력하세요 (두 글자 이상)"
/>
-
+ 초기화
@@ -75,13 +75,13 @@
@change-page="handlePageChanged"
/>
-