diff --git a/README.md b/README.md
index 9771f63..390bc2f 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
+ โฃ ๐main.js
+```
+
+
- ### ๐งฉ ๋ค์ด์ด๊ทธ๋จ
์ํคํ
์ฒ ๋ค์ด์ด๊ทธ๋จ, ์๋น์ค ํ๋ฆ, ๋ฐ์ดํฐ ํ๋ฆ ๋ฑ์ ๊ทธ๋ฆผ์ผ๋ก ํํํฉ๋๋ค.
@@ -69,8 +99,9 @@
![osori](https://github.com/user-attachments/assets/d90a2ae9-aac0-4ba0-92bf-fd08abee8d4b)
-- ### ๐ API ๋ช
์ธ์
- - ๊ฐ API์ ์ค๋ช
, ์์ฒญ ๋ฐ ์๋ต ์์๋ฅผ ํฌํจํฉ๋๋ค.
+- ### ๐ API ๋ช
์ธ์ ์ผ๋ถ
+ ![1](https://github.com/user-attachments/assets/21191f05-1f77-4c98-878c-f3b5ddaa6f99)
+
@@ -105,9 +136,15 @@
## โถ ์คํ ๋ฐฉ๋ฒ
-1. **ํ๊ฒฝ ์ค์ **: ํ๋ก์ ํธ ์คํ์ ์ํ ํ์ ํ๊ฒฝ ๋ณ์ ๋ฐ ์ค์ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
-2. **์์กด์ฑ ์ค์น**: ํ๋ก์ ํธ์ ์ข
์์ฑ์ ์ค์นํ๋ ๋จ๊ณ์
๋๋ค.
+1. **ํ๊ฒฝ ์ค์ **: Node.js, npm, vue-cli๋ฅผ ์ค์นํฉ๋๋ค.
+ ```bash
+ npm install -g @vue/cli
+2. **์์กด์ฑ ์ค์น**:
+ ```bash
+ npm install
3. **ํ๋ก์ ํธ ์คํ**: ์คํ ๋ช
๋ น์ด๋ก ํ๋ก์ ํธ๋ฅผ ์์ํฉ๋๋ค.
+ ```bash
+ npm run dev
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 |
diff --git a/src/router/index.js b/src/router/index.js
index 739e8c0..f35e74f 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'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
-
+ }
]
},
{
@@ -138,6 +136,40 @@ const router = createRouter({
routes
})
-//๋ผ์ฐํฐ ๊ฐ๋ ์ค์ (์ธ์
๊ธฐ๋ฐ ์ฟ ๊ธฐ, ๋์ค์ ์์ ํ์)
-// meta: { requiresAuth: true } // ์ธ์ฆ์ด ํ์ํ ํ์ด์ง
+//๋ผ์ฐํฐ ๊ฐ๋ ์ค์
+// ๊ธ๋ก๋ฒ ๊ฐ๋ ์ถ๊ฐ
+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
diff --git a/src/store/index.js b/src/store/index.js
index f605fac..ca3228e 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1,60 +1,61 @@
-import { createStore } from 'vuex';
-import auth from '../views/test/auth.js'; // auth ๋ชจ๋ import
-import login from './modules/login.js'; // ๋ก๊ทธ์ธ ๋ชจ๋ import
-import { v4 as uuidv4 } from 'uuid'; // UUID๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ID ์์ฑ
+import { createStore } from 'vuex'
+import login from './modules/login.js' // ๋ก๊ทธ์ธ ๋ชจ๋ import
+import { v4 as uuidv4 } from 'uuid' // UUID๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ID ์์ฑ
// ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ํฌํธํด๋ฆฌ์ค ๊ฐ์ ธ์ค๊ธฐ
const getStoredPortfolios = () => {
- const storedPortfolios = localStorage.getItem('portfolios');
- return storedPortfolios ? JSON.parse(storedPortfolios) : [];
-};
+ const storedPortfolios = localStorage.getItem('portfolios')
+ return storedPortfolios ? JSON.parse(storedPortfolios) : []
+}
const store = createStore({
state: {
- portfolios: getStoredPortfolios(), // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ํฌํธํด๋ฆฌ์ค ์ด๊ธฐํ
+ portfolios: getStoredPortfolios() // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ํฌํธํด๋ฆฌ์ค ์ด๊ธฐํ
},
mutations: {
ADD_PORTFOLIO(state, portfolio) {
- const newPortfolio = { ...portfolio, id: uuidv4() }; // ๊ณ ์ ID ์ถ๊ฐ
- state.portfolios.push(newPortfolio); // ํฌํธํด๋ฆฌ์ค ์ถ๊ฐ
- localStorage.setItem('portfolios', JSON.stringify(state.portfolios)); // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ
+ const newPortfolio = { ...portfolio, id: uuidv4() } // ๊ณ ์ ID ์ถ๊ฐ
+ state.portfolios.push(newPortfolio) // ํฌํธํด๋ฆฌ์ค ์ถ๊ฐ
+ localStorage.setItem('portfolios', JSON.stringify(state.portfolios)) // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ
},
DELETE_PORTFOLIO(state, portfolioId) {
- state.portfolios = state.portfolios.filter(portfolio => portfolio.id !== portfolioId);
- localStorage.setItem('portfolios', JSON.stringify(state.portfolios)); // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ญ์ ํ ์ ์ฅ
+ state.portfolios = state.portfolios.filter(
+ (portfolio) => portfolio.id !== portfolioId
+ )
+ localStorage.setItem('portfolios', JSON.stringify(state.portfolios)) // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ญ์ ํ ์ ์ฅ
},
- // ์์ ๊ธฐ๋ฅ์ ์ํ UPDATE_PORTFOLIO ๋ฎคํ
์ด์
์ถ๊ฐ
- UPDATE_PORTFOLIO(state, updatedPortfolio) {
- const index = state.portfolios.findIndex(portfolio => portfolio.id === updatedPortfolio.id);
+ // ์์ ๊ธฐ๋ฅ์ ์ํ UPDATE_PORTFOLIO ๋ฎคํ
์ด์
์ถ๊ฐ
+ UPDATE_PORTFOLIO(state, updatedPortfolio) {
+ const index = state.portfolios.findIndex(
+ (portfolio) => portfolio.id === updatedPortfolio.id
+ )
if (index !== -1) {
- state.portfolios.splice(index, 1, updatedPortfolio); // ๊ธฐ์กด ํญ๋ชฉ์ ์
๋ฐ์ดํธ๋ ํญ๋ชฉ์ผ๋ก ๊ต์ฒด
- localStorage.setItem('portfolios', JSON.stringify(state.portfolios)); // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์
๋ฐ์ดํธ ํ ์ ์ฅ
+ state.portfolios.splice(index, 1, updatedPortfolio) // ๊ธฐ์กด ํญ๋ชฉ์ ์
๋ฐ์ดํธ๋ ํญ๋ชฉ์ผ๋ก ๊ต์ฒด
+ localStorage.setItem('portfolios', JSON.stringify(state.portfolios)) // ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์
๋ฐ์ดํธ ํ ์ ์ฅ
}
- },
+ }
},
actions: {
addPortfolio({ commit }, portfolio) {
- commit('ADD_PORTFOLIO', portfolio); // mutation ํธ์ถ
+ commit('ADD_PORTFOLIO', portfolio) // mutation ํธ์ถ
},
deletePortfolio({ commit }, portfolioId) {
- commit('DELETE_PORTFOLIO', portfolioId);
- },
- // ์์ ๊ธฐ๋ฅ์ ์ํ updatePortfolio ์ก์
์ถ๊ฐ
- updatePortfolio({ commit }, updatedPortfolio) {
- commit('UPDATE_PORTFOLIO', updatedPortfolio); // UPDATE_PORTFOLIO ๋ฎคํ
์ด์
ํธ์ถ
+ commit('DELETE_PORTFOLIO', portfolioId)
},
+ // ์์ ๊ธฐ๋ฅ์ ์ํ updatePortfolio ์ก์
์ถ๊ฐ
+ updatePortfolio({ commit }, updatedPortfolio) {
+ commit('UPDATE_PORTFOLIO', updatedPortfolio) // UPDATE_PORTFOLIO ๋ฎคํ
์ด์
ํธ์ถ
+ }
},
getters: {
getPortfolios(state) {
- return state.portfolios; // ํฌํธํด๋ฆฌ์ค ๋ชฉ๋ก ๋ฐํ
- },
+ return state.portfolios // ํฌํธํด๋ฆฌ์ค ๋ชฉ๋ก ๋ฐํ
+ }
},
modules: {
- login, // ๋ก๊ทธ์ธ ๋ชจ๋
- auth, // auth ๋ชจ๋
- },
-});
-
-export default store;
-
+ login // ๋ก๊ทธ์ธ ๋ชจ๋
+ // auth ๋ชจ๋
+ }
+})
+export default store
diff --git a/src/views/akopolio/Edit/akopolioEdit.vue b/src/views/akopolio/Edit/akopolioEdit.vue
index 3bbea85..58bbe6f 100644
--- a/src/views/akopolio/Edit/akopolioEdit.vue
+++ b/src/views/akopolio/Edit/akopolioEdit.vue
@@ -29,14 +29,14 @@
-
+
+ {{ tag }}
+
@@ -75,16 +75,21 @@
-
-
+
+
X
-
-
+ ์ ์ฅํ๊ธฐ
+
@@ -155,7 +160,7 @@ textarea {
font-size: 12px;
}
-button {
+.tag-div {
display: inline-block;
margin: 3px;
padding: 5px 10px;
@@ -165,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;
}
/* ๋ถ์ผ ์ค์ ๋ฐ์ค */
@@ -208,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,
@@ -269,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;
}
@@ -302,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/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/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 e53ee7d..3720fc6 100644
--- a/src/views/akopolio/detail/akopolioDetail.vue
+++ b/src/views/akopolio/detail/akopolioDetail.vue
@@ -4,11 +4,11 @@
@@ -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 || '๋ด์ฉ์ด ์์ต๋๋ค.' }}
@@ -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/detail/detail.js b/src/views/akopolio/detail/detail.js
index f916125..e77ef83 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}`);
// ์์ธ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ์์ธํ ์๋ฌ ๋ฉ์์ง ์ ๊ณต
@@ -78,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 = [];
}
};
@@ -109,8 +111,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 +144,4 @@ export default {
handleDeletePortfolio,
};
},
-};
+};
\ No newline at end of file
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"
/>
-
@@ -28,11 +34,10 @@ export default {
computed: {
visiblePages() {
const pages = [];
- const maxVisible = 5; // ์ต๋ ํ์ํ ํ์ด์ง ์
+ const maxVisible = 5;
let startPage = Math.max(1, this.currentPage - Math.floor(maxVisible / 2));
let endPage = Math.min(this.totalPages, startPage + maxVisible - 1);
- // ๋ ํ์ด์ง๊ฐ ๋ถ์กฑํ ๋ ์์ ํ์ด์ง ์กฐ์
if (endPage - startPage < maxVisible - 1) {
startPage = Math.max(1, endPage - maxVisible + 1);
}
@@ -60,21 +65,25 @@ export default {
margin-top: 20px;
}
-button {
+.page-item {
margin: 0 5px;
padding: 5px;
- cursor: pointer;
- background: none;
- border: none;
font-size: 16px;
+ cursor: pointer;
+ user-select: none;
}
-button.active{
+.page-item.active {
font-weight: bold;
}
-button:disabled {
+.page-item.disabled {
cursor: not-allowed;
opacity: 0.5;
}
-
\ No newline at end of file
+
+.page-item:not(.disabled):hover {
+ background-color: none;
+}
+
+
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..2f3c6ca 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,16 @@ onMounted(() => {
class="schedule-popup"
v-if="isScheduleOpen && selectedEvents.length > 0"
>
-
+
+
@@ -219,7 +229,7 @@ onMounted(() => {
.schedule-popup {
position: fixed;
- bottom: 0;
+ bottom: -100%; /* ์์ ์์น: ํ๋ฉด ์๋ */
left: 0;
right: 0;
background-color: #ffffff;
@@ -229,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 {
@@ -252,4 +265,56 @@ 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;
+}
+
+@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;
+}
diff --git a/src/views/mainpage/MainpageStyled.css b/src/views/mainpage/MainpageStyled.css
deleted file mode 100644
index 26690ee..0000000
--- a/src/views/mainpage/MainpageStyled.css
+++ /dev/null
@@ -1,130 +0,0 @@
-/* ์ธ๋ถ ์ปจํ
์ด๋ */
-.page-container {
- min-height: 100vh;
- background-color: #fff9f2;
- font-family: 'NanumSquareRound', sans-serif;
- display: flex;
- justify-content: center;
-}
-
-/* ๋ชจ๋ฐ์ผ ์ปจํ
์ด๋ */
-.mobile-container {
- width: 395px;
- min-width: 340px;
- background-color: #fae8da;
- min-height: 100vh;
- position: relative;
- overflow-y: auto;
-}
-
-/* ๋ฉ์ธ ์ปจํ
์ธ */
-.main-content {
- display: flex;
- flex-direction: column;
- padding: 6rem 1.5rem 6rem;
- font-family: 'NanumSquareRound', sans-serif;
-}
-
-.main-content .title {
- margin-bottom: 70px;
- font-size: 1.25rem;
- font-weight: 500;
- text-align: center;
- color: #4a4a4a;
- font-family: 'UhBeeSehyun', sans-serif;
-}
-
-/* ์คํฌํ ์์ญ */
-.stamp-container {
- position: relative;
- width: 390px;
- height: 520px;
- margin: 0 auto;
-}
-
-.stamp-container .stamp {
- position: absolute;
- width: 95px;
- height: 95px;
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.stamp-container .stamp img {
- width: 100%;
- height: 100%;
-}
-
-/* ํ ์ผ ํ์ ์์ญ */
-.task-container {
- margin-top: -80px;
- margin-bottom: 3rem;
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 0.75rem;
-}
-
-.task-container .task-row {
- display: flex;
- gap: 0.75rem;
- width: 100%;
- max-width: 290px;
-}
-
-.task-container .task-row .task {
- display: flex;
- align-items: center;
- justify-content: space-between;
- flex: 1;
- height: 40px;
- padding: 0 1rem;
- background-color: white;
- border-radius: 17px;
-}
-
-.task-container .task-row .task span {
- font-size: 0.875rem;
- font-family: 'NanumSquareRound', sans-serif;
- color: var(--task-color, #b3b3b3);
-}
-
-.task-container .task-row .task img {
- width: 20px;
- height: 20px;
- filter: var(--task-filter, grayscale(100%));
-}
-
-/* ์์ฝ ์ด๋ฏธ์ง ์์ญ */
-.ako-image-container {
- text-align: center;
- display: flex;
- flex-direction: column;
- align-items: center;
- margin-top: 2.5rem;
-}
-
-.ako-image-container .ako-status {
- display: flex;
- align-items: center;
- margin-bottom: 0.5rem;
-}
-
-.ako-image-container .ako-status img {
- width: 32px;
- height: 32px;
- margin-right: 0.5rem;
-}
-
-.ako-image-container .ako-status p {
- font-size: 0.875rem;
- color: #757575;
- font-family: 'NanumSquareRound', sans-serif;
-}
-
-.ako-image-container .ako-image {
- width: 256px;
- height: 256px;
- margin: 0 auto;
-}
diff --git a/src/views/mainpage/MainpageView.vue b/src/views/mainpage/MainpageView.vue
index eab74ce..86f1d7a 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 @@
-
+
diff --git a/src/views/test/AboutView.vue b/src/views/test/AboutView.vue
deleted file mode 100644
index 3fa2807..0000000
--- a/src/views/test/AboutView.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
This is an about page
-
-
diff --git a/src/views/test/ErrorMessage.vue b/src/views/test/ErrorMessage.vue
deleted file mode 100644
index 95385a2..0000000
--- a/src/views/test/ErrorMessage.vue
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
- {{ errorMessage }}
-
-
-
-
-
-
-
diff --git a/src/views/test/HelloWorld.vue b/src/views/test/HelloWorld.vue
deleted file mode 100644
index 75cbd09..0000000
--- a/src/views/test/HelloWorld.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
{{ msg }}
-
- For a guide and recipes on how to configure / customize this project,
- check out the
- vue-cli documentation.
-
-
Installed CLI Plugins
-
-
Essential Links
-
-
Ecosystem
-
-
-
-
-
-
-
-
diff --git a/src/views/test/HomeView.vue b/src/views/test/HomeView.vue
deleted file mode 100644
index 270fa07..0000000
--- a/src/views/test/HomeView.vue
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/src/views/test/NotFound2.vue b/src/views/test/NotFound2.vue
deleted file mode 100644
index c971c97..0000000
--- a/src/views/test/NotFound2.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
404
-
ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค
-
- ํ์ผ๋ก ๋์๊ฐ๊ธฐ
-
-
-
-
-
-
-
-
diff --git a/src/views/test/PortfolioByTag.vue b/src/views/test/PortfolioByTag.vue
deleted file mode 100644
index e9cd24a..0000000
--- a/src/views/test/PortfolioByTag.vue
+++ /dev/null
@@ -1,165 +0,0 @@
-
-
-
-
-
-
- ํ๊ทธ๋ก ๊ฒ์
-
-
-
-
-
-
-
- ๊ฒ์
-
-
-
-
-
-
๊ฒ์ ๊ฒฐ๊ณผ
-
- -
-
- {{ portfolio.title }}
-
- {{ portfolio.content }}
-
-
- {{ tag }}
-
-
-
-
-
-
-
ํด๋น ํ๊ทธ๋ก ์์ฑ๋ ํฌํธํด๋ฆฌ์ค๊ฐ ์์ต๋๋ค.
-
-
-
-
-
-
-
-
-
diff --git a/src/views/test/PortfolioCreate.vue b/src/views/test/PortfolioCreate.vue
deleted file mode 100644
index 3a39f9a..0000000
--- a/src/views/test/PortfolioCreate.vue
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
-
-
-
-
- ํฌํธํด๋ฆฌ์ค ์์ฑ
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/test/PortfolioTest.vue b/src/views/test/PortfolioTest.vue
deleted file mode 100644
index c32f984..0000000
--- a/src/views/test/PortfolioTest.vue
+++ /dev/null
@@ -1,280 +0,0 @@
-
-
-
-
-
-
ํฌํธํด๋ฆฌ์ค ์์ฑ
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ์ถ๊ฐ
-
-
-
-
-
- {{ tag }}
-
- ํ๊ทธ ์ญ์
-
-
-
-
-
-
- ํฌํธํด๋ฆฌ์ค ์ ์ฅ
-
-
-
-
-
-
ํ๊ทธ๋ก ๊ฒ์
-
-
-
- ๊ฒ์
-
-
-
-
-
๊ฒ์ ๊ฒฐ๊ณผ
-
- -
-
- {{ portfolio.title }}
-
- {{ portfolio.content }}
-
-
- {{ tag }}
-
-
-
-
-
-
- ํด๋น ํ๊ทธ๋ก ์์ฑ๋ ํฌํธํด๋ฆฌ์ค๊ฐ ์์ต๋๋ค.
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/test/Profile.vue b/src/views/test/Profile.vue
deleted file mode 100644
index 5a8f5da..0000000
--- a/src/views/test/Profile.vue
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/views/test/SignIn.vue b/src/views/test/SignIn.vue
deleted file mode 100644
index bb86d7b..0000000
--- a/src/views/test/SignIn.vue
+++ /dev/null
@@ -1,226 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/views/test/SignUpForm.vue b/src/views/test/SignUpForm.vue
deleted file mode 100644
index bcb6b3f..0000000
--- a/src/views/test/SignUpForm.vue
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/views/test/SignUpForm2.vue b/src/views/test/SignUpForm2.vue
deleted file mode 100644
index ba563f6..0000000
--- a/src/views/test/SignUpForm2.vue
+++ /dev/null
@@ -1,287 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ํ์๊ฐ์
-
-
-
-
-
- {{ message }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/test/TaliwindResopon.vue b/src/views/test/TaliwindResopon.vue
deleted file mode 100644
index aeaa5b8..0000000
--- a/src/views/test/TaliwindResopon.vue
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ card.title }}
-
-
{{ card.description }}
-
- {{ card.date }}
-
- ์์ธํ ๋ณด๊ธฐ
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/test/VerifyEmail.vue b/src/views/test/VerifyEmail.vue
deleted file mode 100644
index 7efdd32..0000000
--- a/src/views/test/VerifyEmail.vue
+++ /dev/null
@@ -1,208 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/views/test/WeeklyCalenderTest.vue b/src/views/test/WeeklyCalenderTest.vue
deleted file mode 100644
index 298da47..0000000
--- a/src/views/test/WeeklyCalenderTest.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/views/test/auth.js b/src/views/test/auth.js
deleted file mode 100644
index f570c59..0000000
--- a/src/views/test/auth.js
+++ /dev/null
@@ -1,72 +0,0 @@
-import axios from 'axios'
-
-const state = {
- user: null,
- isAuthenticated: false
-}
-
-const mutations = {
- login(state, user) {
- state.user = user
- state.isAuthenticated = true
- },
- logout(state) {
- state.user = null
- state.isAuthenticated = false
- }
-}
-
-const actions = {
- async login({ commit }, { email, password, rememberMe = false }) {
- try {
- const response = await axios.post(
- 'http://localhost:8080/api/users/login',
- {
- email,
- password
- }
- )
- const user = response.data.user
- commit('login', user)
-
- //remeber me ๋ก๊ทธ์ธ ์ํ ์ ์ง ๋ก์ง
- if (rememberMe) {
- // ๋ก๊ทธ์ธ ์ํ ์ ์ง ์ฒดํฌ ์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ
- localStorage.setItem('user', JSON.stringify(user))
- } else {
- // ์ฒดํฌ ์ํ ๊ฒฝ์ฐ ์ธ์
์คํ ๋ฆฌ์ง์ ์ ์ฅ
- sessionStorage.setItem('user', JSON.stringify(user))
- }
-
- //localStorage.setItem('user', JSON.stringify(user))
- return { success: true } // ๋ก๊ทธ์ธ ์ฑ๊ณต ์
- } catch (error) {
- console.log(error.response)
- const errorMessage = error.response?.data?.message || '๋ก๊ทธ์ธ ์คํจ'
- return { success: false, message: errorMessage } // ์๋ฌ ๋ฐ์ ์ ์๋ฌ ๋ฉ์์ง ๋ฐํ
- }
- },
- logout({ commit }) {
- commit('logout')
- localStorage.removeItem('user')
- sessionStorage.removeItem('user') // ์ธ์
์คํ ๋ฆฌ์ง์์๋ ์ญ์
- },
- initializeStore({ commit }) {
- const user = JSON.parse(localStorage.getItem('user'))
- if (user) {
- commit('login', user)
- }
- }
-}
-
-const getters = {
- isAuthenticated: (state) => state.isAuthenticated,
- user: (state) => state.user
-}
-
-export default {
- state,
- mutations,
- actions,
- getters
-}
diff --git a/src/views/test/posts.js b/src/views/test/posts.js
deleted file mode 100644
index e69de29..0000000
diff --git a/src/views/test/tags.js b/src/views/test/tags.js
deleted file mode 100644
index e69de29..0000000
diff --git a/src/views/test/testrouter.js b/src/views/test/testrouter.js
deleted file mode 100644
index 22e8e46..0000000
--- a/src/views/test/testrouter.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/* eslint-disable */
-import { createRouter, createWebHashHistory } from 'vue-router'
-import AuthLayout from '@/components/layout/AuthLayout.vue' // ์ค์ฒฉ ๋ผ์ฐํ
์ ๋ถ๋ชจ ๋ ์ด์์
-import PortfolioLayout from '@/components/layout/PortfolioLayout.vue' // ์ค์ฒฉ ๋ผ์ฐํ
์ ๋ถ๋ชจ ๋ ์ด์์
-
-// ์๋ ์ํฌํธ ํจ์ (src/views ๋ด์ ๋ชจ๋ .vue ํ์ผ์ ์ํฌํธ)
-function importAllViews() {
- const viewFiles = require.context('@/views', true, /\.vue$/)
- const views = {}
-
- // ๊ฐ ํ์ผ์ ์ํํ๋ฉด์ ์ํฌํธ
- viewFiles.keys().forEach((filePath) => {
- const viewName = filePath
- .split('/')
- .pop() // ํ์ผ ์ด๋ฆ๋ง ์ถ์ถ
- .replace('.vue', '') // .vue ํ์ฅ์ ์ ๊ฑฐ
-
- // ์ปดํฌ๋ํธ ์ด๋ฆ๊ณผ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋งตํ
- views[viewName] = viewFiles(filePath).default
- })
-
- return views
-}
-
-// ์๋์ผ๋ก ์ํฌํธ๋ ๋ชจ๋ Vue ์ปดํฌ๋ํธ ๊ฐ์ฒด
-const importedViews = importAllViews()
-
-const routes = [
- {
- path: '/',
- name: 'home',
- component: importedViews['HomeView'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: '/about',
- name: 'about',
- component: importedViews['AboutView'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: '/auth',
- component: AuthLayout, // ๋ถ๋ชจ ๋ ์ด์์
- children: [
- {
- path: 'signin',
- name: 'signin',
- component: importedViews['SignIn'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: 'signupform',
- name: 'signupform',
- component: importedViews['SignUpForm'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: 'verifyemail',
- name: 'verifyemail',
- component: importedViews['VerifyEmail'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: 'signupform2',
- name: 'SignUpForm2',
- component: importedViews['SignUpForm2'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: 'signup',
- name: 'SignupView',
- component: importedViews['SignupView'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: 'login',
- name: 'LoginView',
- component: importedViews['LoginView'] // ์๋ ์ํฌํธ ์ ์ฉ
- }
- ]
- },
- {
- path: '/profile',
- name: 'profile',
- component: importedViews['Profile'], // ์๋ ์ํฌํธ ์ ์ฉ
- meta: { requiresAuth: true } // ์ธ์ฆ์ด ํ์ํ ํ์ด์ง
- },
- {
- path: '/portfolios',
- component: PortfolioLayout, // ๊ณตํต ๋ ์ด์์ ์ปดํฌ๋ํธ
- children: [
- {
- path: 'new',
- name: 'CreatePortfolio',
- component: importedViews['PortfolioCreate'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: 'tag',
- name: 'SearchByTag',
- component: importedViews['PortfolioByTag'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: 'test',
- name: 'Test',
- component: importedViews['PortfolioTest'] // ์๋ ์ํฌํธ ์ ์ฉ
- }
- ]
- },
- {
- path: '/responsivetest',
- name: 'TaliwindResopon',
- component: importedViews['TaliwindResopon'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: '/weeklycalendertest',
- name: 'WeeklyCalenderTest',
- component: importedViews['WeeklyCalenderTest'] // ์๋ ์ํฌํธ ์ ์ฉ
- },
- {
- path: '/:catchAll(.*)',
- name: 'NotFound',
- component: importedViews['NotFound'] // ์๋ ์ํฌํธ ์ ์ฉ
- }
-]
-
-const router = createRouter({
- history: createWebHashHistory('/akoming/'), // Hash ๋ชจ๋๋ฅผ ์ฌ์ฉ
- routes
-})
-
-//๋ผ์ฐํฐ ๊ฐ๋ ์ค์ (์ธ์
๊ธฐ๋ฐ ์ฟ ๊ธฐ, ๋์ค์ ์์ ํ์)
-
-export default router