diff --git a/customer-vue/src/api/auth.js b/customer-vue/src/api/auth.js index 2c51de7..8066857 100644 --- a/customer-vue/src/api/auth.js +++ b/customer-vue/src/api/auth.js @@ -1,5 +1,6 @@ import axios from "axios"; import jwt from "@/common/jwt"; +import router from "@/router/router"; export default { async requestReissue() { @@ -22,5 +23,12 @@ export default { axios.defaults.headers.common['Authorization'] = "Bearer " + jwt.getToken(); return axios.get(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL+"/user-service/auth/check/access-token"); + }, + logout(){ + axios.post(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL+"/user-service/auth/logout",'',{headers: {"X-AUTH-TOKEN": jwt.getToken(),}}) + .finally(()=>{ + router.push('/login') + jwt.destroyAll() + }) } } \ No newline at end of file diff --git a/customer-vue/src/api/store.js b/customer-vue/src/api/store.js index 90062da..e67e52f 100644 --- a/customer-vue/src/api/store.js +++ b/customer-vue/src/api/store.js @@ -41,5 +41,12 @@ export default { }, requestStore(storeId) { return axios.get(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL + "/store-service/store/" + storeId); + }, + getFavoriteStoreByStoreId(storeId) { + return axios.get(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL + "/store-service/api/customer/favoriteStore/" + storeId); + }, + markStar(storeId) { + return axios.patch(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL + "/store-service/api/customer/favoriteStore/" + storeId); } + } \ No newline at end of file diff --git a/customer-vue/src/common/jwt.js b/customer-vue/src/common/jwt.js index 0783eb5..a453450 100644 --- a/customer-vue/src/common/jwt.js +++ b/customer-vue/src/common/jwt.js @@ -23,6 +23,9 @@ export default { localStorage.removeItem(EXPIRED_TIME_NAME); }, isExpired() { + if(this.getExpiredTime() == null || this.getToken() == null) + return true; + const expiredTime = this.getExpiredTime(); const expiredMoment = moment(expiredTime); diff --git a/customer-vue/src/components/AppNavigation.vue b/customer-vue/src/components/AppNavigation.vue index 85e7734..8a271e2 100644 --- a/customer-vue/src/components/AppNavigation.vue +++ b/customer-vue/src/components/AppNavigation.vue @@ -6,7 +6,7 @@ elevation="1" > - + mdi-arrow-left @@ -29,16 +29,31 @@ mdi-bell-outline + + mdi-logout + diff --git a/customer-vue/src/router/router.js b/customer-vue/src/router/router.js index beb5142..853733c 100644 --- a/customer-vue/src/router/router.js +++ b/customer-vue/src/router/router.js @@ -32,51 +32,63 @@ const routes = [ { path: '/', redirect: 'home', - beforeEnter: authCheck, component: HomeLayout, children: [ { path: "/home", + beforeEnter: authCheck, name: 'home', beforeEnter: authCheck, component: () => import('../views/HomeView') }, { path: "/search", + beforeEnter: authCheck, name: 'search-store', beforeEnter: authCheck, component: () => import('../views/SearchStore') }, { path: "/history", + beforeEnter: authCheck, name: 'order-history', beforeEnter: authCheck, component: () => import('../views/OrderHistory') }, { path: "/favorite", + beforeEnter: authCheck, name: 'favorite-store', beforeEnter: authCheck, component: () => import('../views/FavoriteStore') }, { path: "/notification", + beforeEnter: authCheck, name: 'notification', beforeEnter: authCheck, component: () => import('../views/NotificationView') }, { path: "/item/:itemId", + beforeEnter: authCheck, name: 'itemDetail', beforeEnter: authCheck, component: () => import('../views/ItemDetail') }, { path: "/order", + beforeEnter: authCheck, name: 'orderPage', beforeEnter: authCheck, component: () => import('../views/OrderPage') }, + { + path: "/mypage", + beforeEnter: authCheck, + name: 'mypage', + component: () => import('../views/MyPage') + }, ] }, { @@ -87,12 +99,12 @@ const routes = [ { path: '/store', redirect: 'store', - beforeEnter: authCheck, component: StoreLayout, children: [ { path: "/store/:storeId", name: "store", + beforeEnter: authCheck, component: () => import('../views/StoreView'), props: true }, diff --git a/customer-vue/src/views/ItemDetail.vue b/customer-vue/src/views/ItemDetail.vue index 440397c..1bd15b1 100644 --- a/customer-vue/src/views/ItemDetail.vue +++ b/customer-vue/src/views/ItemDetail.vue @@ -36,6 +36,7 @@ =0? this.setItem.count+v: 0; + this.setItem.count+v >=1? this.setItem.count+v: 1; }, addItem: function(){ + if(!this.validItem()) + return; + orderApi.addItemToBasket(this.setItem) .then(response=>{ console.log(response) @@ -156,7 +160,16 @@ export default { .catch(error=>{ console.log(error.response) }) + }, + validItem(){ + if(this.setItem.count <= 0 || isNaN(this.setItem.count)){ + alert("수량이 잘못되었습니다.") + this.setItem.count =1 + return false + } + } + }, } diff --git a/customer-vue/src/views/LoginPage.vue b/customer-vue/src/views/LoginPage.vue index 9f46eb6..471ae1a 100644 --- a/customer-vue/src/views/LoginPage.vue +++ b/customer-vue/src/views/LoginPage.vue @@ -120,7 +120,6 @@ export default { }, }, async mounted() { - if (!jwt.isExpired()) await router.push("/"); diff --git a/customer-vue/src/views/OrderPage.vue b/customer-vue/src/views/OrderPage.vue index 64a79f4..b756c9c 100644 --- a/customer-vue/src/views/OrderPage.vue +++ b/customer-vue/src/views/OrderPage.vue @@ -56,11 +56,6 @@ @click="saveOrder" color="primary" >주문하기 - - - - - @@ -90,10 +85,12 @@ export default { orderApi.saveOrder() .then(()=>{ + this.$emit('plusCount') alert('주문되었습니다.') this.$router.push("/history") }) .catch(error=>{ + alert("문제가 발생하였습니다. 다시 시도해보세요.") console.log(error) //this.$router.replace("/") }) @@ -105,8 +102,9 @@ export default { this.orderData=response.data.data }) .catch(error=>{ + alert("장바구니에 상품이 없습니다.") + this.$router.back(); console.log(error.response) - history.back(); }) }, } diff --git a/customer-vue/src/views/StoreView.vue b/customer-vue/src/views/StoreView.vue index 1c19d3b..2647ef1 100644 --- a/customer-vue/src/views/StoreView.vue +++ b/customer-vue/src/views/StoreView.vue @@ -28,6 +28,7 @@ class="mx-auto mb-5" outlined v-for="item in category.items" + @click="itemDetail(item.id)" :key="item.id" > @@ -91,6 +92,9 @@ export default { this.tags.push(category.name); }) }, + itemDetail: function (itemId) { + this.$router.push("/item/"+itemId) + } } } diff --git a/owner-vue/src/api/store.js b/owner-vue/src/api/store.js index 09d4ed4..d883cc9 100644 --- a/owner-vue/src/api/store.js +++ b/owner-vue/src/api/store.js @@ -20,7 +20,8 @@ export default { return axios.get(process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/owner/item/'+itemId) }, saveItem(method, itemData){ - const _url = process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/owner/item'+(method==='put'?+"/"+itemData.itemId:'') + const _url = process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/owner/item'+(method==='put'? "/"+itemData.itemId:'') + return axios({ method:method, url: _url, diff --git a/owner-vue/src/components/MenuItem.vue b/owner-vue/src/components/MenuItem.vue index 90ca66a..10f3311 100644 --- a/owner-vue/src/components/MenuItem.vue +++ b/owner-vue/src/components/MenuItem.vue @@ -163,6 +163,7 @@ export default { }, methods:{ save : function () { + this.dialog =false this.$emit('save') }, addItemOption : function (itemOptionValue,optionType){ diff --git a/owner-vue/src/views/Layout/DashboardLayout.vue b/owner-vue/src/views/Layout/DashboardLayout.vue index 51cd1e5..66858ea 100644 --- a/owner-vue/src/views/Layout/DashboardLayout.vue +++ b/owner-vue/src/views/Layout/DashboardLayout.vue @@ -1,9 +1,8 @@