From 3da1bbb975151df950768c80c3a5a7fe432d412a Mon Sep 17 00:00:00 2001 From: bum12ark Date: Tue, 22 Feb 2022 14:36:49 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat(owner-vue):=20=EC=A0=90=EC=A3=BC?= =?UTF-8?q?=EC=9A=A9=20vue=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + owner-vue/babel.config.js | 5 + owner-vue/package.json | 50 +++++++ owner-vue/public/favicon.ico | Bin 0 -> 4286 bytes owner-vue/public/index.html | 18 +++ owner-vue/src/App.vue | 25 ++++ owner-vue/src/assets/logo.png | Bin 0 -> 6849 bytes owner-vue/src/assets/logo.svg | 1 + owner-vue/src/components/Sidebar.vue | 52 +++++++ owner-vue/src/components/Topbar.vue | 149 +++++++++++++++++++ owner-vue/src/main.js | 12 ++ owner-vue/src/plugins/vuetify.js | 11 ++ owner-vue/src/router/index.js | 20 +++ owner-vue/src/views/About.vue | 5 + owner-vue/src/views/Dashboard.vue | 212 +++++++++++++++++++++++++++ owner-vue/src/views/Home.vue | 15 ++ owner-vue/vue.config.js | 5 + 17 files changed, 581 insertions(+) create mode 100644 .gitignore create mode 100644 owner-vue/babel.config.js create mode 100644 owner-vue/package.json create mode 100644 owner-vue/public/favicon.ico create mode 100644 owner-vue/public/index.html create mode 100644 owner-vue/src/App.vue create mode 100644 owner-vue/src/assets/logo.png create mode 100644 owner-vue/src/assets/logo.svg create mode 100644 owner-vue/src/components/Sidebar.vue create mode 100644 owner-vue/src/components/Topbar.vue create mode 100644 owner-vue/src/main.js create mode 100644 owner-vue/src/plugins/vuetify.js create mode 100644 owner-vue/src/router/index.js create mode 100644 owner-vue/src/views/About.vue create mode 100644 owner-vue/src/views/Dashboard.vue create mode 100644 owner-vue/src/views/Home.vue create mode 100644 owner-vue/vue.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dc93eb4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/owner-vue/node_modules/ diff --git a/owner-vue/babel.config.js b/owner-vue/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/owner-vue/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/owner-vue/package.json b/owner-vue/package.json new file mode 100644 index 0000000..0582a79 --- /dev/null +++ b/owner-vue/package.json @@ -0,0 +1,50 @@ +{ + "name": "owner-admin", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "core-js": "^3.6.5", + "vue": "^2.6.11", + "vue-router": "^3.2.0", + "vuetify": "^2.4.0" + }, + "devDependencies": { + "@mdi/font": "^6.1.95", + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-plugin-router": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "babel-eslint": "^10.1.0", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "sass": "~1.32.0", + "sass-loader": "^10.0.0", + "vue-cli-plugin-vuetify": "~2.4.2", + "vue-template-compiler": "^2.6.11", + "vuetify-loader": "^1.7.0" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "eslint:recommended" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": {} + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/owner-vue/public/favicon.ico b/owner-vue/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/owner-vue/public/index.html b/owner-vue/public/index.html new file mode 100644 index 0000000..c02bc19 --- /dev/null +++ b/owner-vue/public/index.html @@ -0,0 +1,18 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + +
+ + + diff --git a/owner-vue/src/App.vue b/owner-vue/src/App.vue new file mode 100644 index 0000000..ed3f0a2 --- /dev/null +++ b/owner-vue/src/App.vue @@ -0,0 +1,25 @@ + + + diff --git a/owner-vue/src/assets/logo.png b/owner-vue/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43 GIT binary patch literal 6849 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 46 diff --git a/owner-vue/src/components/Sidebar.vue b/owner-vue/src/components/Sidebar.vue new file mode 100644 index 0000000..c5ac391 --- /dev/null +++ b/owner-vue/src/components/Sidebar.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/owner-vue/src/components/Topbar.vue b/owner-vue/src/components/Topbar.vue new file mode 100644 index 0000000..54684c7 --- /dev/null +++ b/owner-vue/src/components/Topbar.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/owner-vue/src/main.js b/owner-vue/src/main.js new file mode 100644 index 0000000..20afa10 --- /dev/null +++ b/owner-vue/src/main.js @@ -0,0 +1,12 @@ +import Vue from 'vue' +import App from './App.vue' +import vuetify from './plugins/vuetify' +import router from './router' + +Vue.config.productionTip = false + +new Vue({ + vuetify, + router, + render: h => h(App) +}).$mount('#app') diff --git a/owner-vue/src/plugins/vuetify.js b/owner-vue/src/plugins/vuetify.js new file mode 100644 index 0000000..d516d08 --- /dev/null +++ b/owner-vue/src/plugins/vuetify.js @@ -0,0 +1,11 @@ +import '@mdi/font/css/materialdesignicons.css' +import Vue from 'vue'; +import Vuetify from 'vuetify/lib/framework'; + +Vue.use(Vuetify); + +export default new Vuetify({ + icons: { + iconfont: 'mdi', // default - only for display purposes + }, +}); diff --git a/owner-vue/src/router/index.js b/owner-vue/src/router/index.js new file mode 100644 index 0000000..0f24492 --- /dev/null +++ b/owner-vue/src/router/index.js @@ -0,0 +1,20 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' + +Vue.use(VueRouter) + +const routes = [ + { + path: '/', + name: 'dashboard', + component: () => import('./../views/Dashboard') + }, +] + +const router = new VueRouter({ + mode: 'history', + base: process.env.BASE_URL, + routes +}) + +export default router diff --git a/owner-vue/src/views/About.vue b/owner-vue/src/views/About.vue new file mode 100644 index 0000000..3fa2807 --- /dev/null +++ b/owner-vue/src/views/About.vue @@ -0,0 +1,5 @@ + diff --git a/owner-vue/src/views/Dashboard.vue b/owner-vue/src/views/Dashboard.vue new file mode 100644 index 0000000..7eb71a8 --- /dev/null +++ b/owner-vue/src/views/Dashboard.vue @@ -0,0 +1,212 @@ + + + + + \ No newline at end of file diff --git a/owner-vue/src/views/Home.vue b/owner-vue/src/views/Home.vue new file mode 100644 index 0000000..44553c4 --- /dev/null +++ b/owner-vue/src/views/Home.vue @@ -0,0 +1,15 @@ + + + diff --git a/owner-vue/vue.config.js b/owner-vue/vue.config.js new file mode 100644 index 0000000..2ae460b --- /dev/null +++ b/owner-vue/vue.config.js @@ -0,0 +1,5 @@ +module.exports = { + transpileDependencies: [ + 'vuetify' + ] +} From c3d28c700452ac1bcc122a71e037a7f7a84b0409 Mon Sep 17 00:00:00 2001 From: bum12ark Date: Tue, 22 Feb 2022 21:59:41 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat(owner-vue):=20=EC=A7=80=EB=82=9C=20?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(=EB=9D=BC=EC=9A=B0=ED=84=B0,=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=ED=85=8C=EC=9D=B4=EB=B8=94,=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EB=84=A4=EC=9D=B4=EC=85=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 라우터 - 데이터 테이블 - 페이지네이션 - axios 모듈을 활용한 api 통신 --- owner-vue/package.json | 2 + owner-vue/src/api/order.js | 14 +++ owner-vue/src/router/index.js | 5 + owner-vue/src/views/PrevOrder.vue | 189 ++++++++++++++++++++++++++++++ 4 files changed, 210 insertions(+) create mode 100644 owner-vue/src/api/order.js create mode 100644 owner-vue/src/views/PrevOrder.vue diff --git a/owner-vue/package.json b/owner-vue/package.json index 0582a79..6a1a2aa 100644 --- a/owner-vue/package.json +++ b/owner-vue/package.json @@ -8,7 +8,9 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "axios": "^0.26.0", "core-js": "^3.6.5", + "moment": "^2.29.1", "vue": "^2.6.11", "vue-router": "^3.2.0", "vuetify": "^2.4.0" diff --git a/owner-vue/src/api/order.js b/owner-vue/src/api/order.js new file mode 100644 index 0000000..866823a --- /dev/null +++ b/owner-vue/src/api/order.js @@ -0,0 +1,14 @@ +import axios from "axios"; + +export default { + requestPrevOrder(startDate, endDate, page) { + const options = { + params: { + startDate: startDate, + endDate: endDate, + page: page + } + } + return axios.get("http://localhost:8001/order-service/prevOrder", options); + } +} \ No newline at end of file diff --git a/owner-vue/src/router/index.js b/owner-vue/src/router/index.js index 0f24492..43009c5 100644 --- a/owner-vue/src/router/index.js +++ b/owner-vue/src/router/index.js @@ -9,6 +9,11 @@ const routes = [ name: 'dashboard', component: () => import('./../views/Dashboard') }, + { + path: '/prev-order', + name: 'prev-order', + component: () => import('./../views/PrevOrder') + } ] const router = new VueRouter({ diff --git a/owner-vue/src/views/PrevOrder.vue b/owner-vue/src/views/PrevOrder.vue new file mode 100644 index 0000000..5523dd7 --- /dev/null +++ b/owner-vue/src/views/PrevOrder.vue @@ -0,0 +1,189 @@ + + + + + \ No newline at end of file From 4034304b04f86067598b126c45449e596de1e507 Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Tue, 22 Feb 2022 19:41:55 +0900 Subject: [PATCH 3/8] =?UTF-8?q?feat(owner-vue):=20owner=20vue=EC=97=90=20?= =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EC=96=BB=EC=96=B4?= =?UTF-8?q?=EC=98=A4=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit owner vue에 카테고리 얻어오는 기능 추가 --- .../src/main/resources/application.yml | 18 ++- owner-vue/package.json | 10 +- owner-vue/src/App.vue | 2 +- owner-vue/src/main.js | 4 + owner-vue/src/router/index.js | 5 + owner-vue/src/views/Category.vue | 103 ++++++++++++++++++ 6 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 owner-vue/src/views/Category.vue diff --git a/owner-apigateway-service/src/main/resources/application.yml b/owner-apigateway-service/src/main/resources/application.yml index 68321c9..52dbad8 100644 --- a/owner-apigateway-service/src/main/resources/application.yml +++ b/owner-apigateway-service/src/main/resources/application.yml @@ -14,6 +14,16 @@ spring: cloud: gateway: + globalcors: + cors-configurations: + '[/**]': + allowedOrigins: "http://localhost:8080" + allowedMethods: + - POST + - GET + - PUT + - OPTIONS + - DELETE routes: - id: owner-frontend-service uri: lb://OWNER-FRONTEND-SERVICE @@ -38,4 +48,10 @@ spring: predicates: - Path=/user-service/** filters: - - RewritePath=/user-service/(?.*),/$\{segment} \ No newline at end of file + - RewritePath=/user-service/(?.*),/$\{segment} + - id: owner-vue + uri: http://localhost:8080 + predicates: + - Path=/owner-vue/** + filters: + - RewritePath=/owner-vue/(?.*),/$\{segment} \ No newline at end of file diff --git a/owner-vue/package.json b/owner-vue/package.json index 0582a79..6033c79 100644 --- a/owner-vue/package.json +++ b/owner-vue/package.json @@ -3,14 +3,18 @@ "version": "0.1.0", "private": true, "scripts": { - "serve": "vue-cli-service serve", + "serve": "vue-cli-service serve --port 8080", "build": "vue-cli-service build", - "lint": "vue-cli-service lint" + "lint": "vue-cli-service lint", + "service": "node service.js" }, "dependencies": { + "@mdi/js": "^6.5.95", + "axios": "^0.26.0", "core-js": "^3.6.5", "vue": "^2.6.11", "vue-router": "^3.2.0", + "vuedraggable": "^2.24.3", "vuetify": "^2.4.0" }, "devDependencies": { @@ -22,6 +26,8 @@ "babel-eslint": "^10.1.0", "eslint": "^6.7.2", "eslint-plugin-vue": "^6.2.2", + "font-awesome": "^4.7.0", + "gulp": "^3.9.1", "sass": "~1.32.0", "sass-loader": "^10.0.0", "vue-cli-plugin-vuetify": "~2.4.2", diff --git a/owner-vue/src/App.vue b/owner-vue/src/App.vue index ed3f0a2..3674ca7 100644 --- a/owner-vue/src/App.vue +++ b/owner-vue/src/App.vue @@ -15,7 +15,7 @@ import Sidebar from "./components/Sidebar"; import Topbar from "./components/Topbar"; export default { name: "App", - components: { Topbar, Sidebar }, + components: { Topbar, Sidebar}, data: () => ({ cards: ["Today", "Yesterday"], drawer: null, diff --git a/owner-vue/src/main.js b/owner-vue/src/main.js index 20afa10..79288dd 100644 --- a/owner-vue/src/main.js +++ b/owner-vue/src/main.js @@ -1,7 +1,9 @@ +import 'font-awesome/css/font-awesome.min.css' // Ensure you are using css-loader import Vue from 'vue' import App from './App.vue' import vuetify from './plugins/vuetify' import router from './router' +import axios from "axios"; Vue.config.productionTip = false @@ -10,3 +12,5 @@ new Vue({ router, render: h => h(App) }).$mount('#app') +Vue.component('axios',axios) + diff --git a/owner-vue/src/router/index.js b/owner-vue/src/router/index.js index 0f24492..88e355e 100644 --- a/owner-vue/src/router/index.js +++ b/owner-vue/src/router/index.js @@ -9,6 +9,11 @@ const routes = [ name: 'dashboard', component: () => import('./../views/Dashboard') }, + { + path: '/category', + name: 'category', + component: () => import('./../views/Category') + }, ] const router = new VueRouter({ diff --git a/owner-vue/src/views/Category.vue b/owner-vue/src/views/Category.vue new file mode 100644 index 0000000..10d1933 --- /dev/null +++ b/owner-vue/src/views/Category.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file From 83d1b1b8bc2918d45954f2aa3dff6caaeb70881e Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Wed, 23 Feb 2022 14:12:08 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat(owner-vue):=20owner-vue=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit owner-vue에서 카테고리 기능 frontend 개발 --- config-service/.idea/.gitignore | 8 +++ owner-vue/.idea/.gitignore | 8 +++ owner-vue/src/App.vue | 5 +- owner-vue/src/views/Category.vue | 105 ++++++++++++++++++++++--------- owner-vue/vue.config.js | 14 ++++- 5 files changed, 109 insertions(+), 31 deletions(-) create mode 100644 config-service/.idea/.gitignore create mode 100644 owner-vue/.idea/.gitignore diff --git a/config-service/.idea/.gitignore b/config-service/.idea/.gitignore new file mode 100644 index 0000000..c3f502a --- /dev/null +++ b/config-service/.idea/.gitignore @@ -0,0 +1,8 @@ +# 디폴트 무시된 파일 +/shelf/ +/workspace.xml +# 에디터 기반 HTTP 클라이언트 요청 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/owner-vue/.idea/.gitignore b/owner-vue/.idea/.gitignore new file mode 100644 index 0000000..c3f502a --- /dev/null +++ b/owner-vue/.idea/.gitignore @@ -0,0 +1,8 @@ +# 디폴트 무시된 파일 +/shelf/ +/workspace.xml +# 에디터 기반 HTTP 클라이언트 요청 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/owner-vue/src/App.vue b/owner-vue/src/App.vue index 3674ca7..1121e76 100644 --- a/owner-vue/src/App.vue +++ b/owner-vue/src/App.vue @@ -13,6 +13,7 @@ diff --git a/owner-vue/src/views/Category.vue b/owner-vue/src/views/Category.vue index 10d1933..9ef4637 100644 --- a/owner-vue/src/views/Category.vue +++ b/owner-vue/src/views/Category.vue @@ -22,15 +22,24 @@ - + - - {{ item.name }} + + {{ item.name }} + + + - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + item-list @@ -42,7 +51,7 @@ diff --git a/owner-vue/vue.config.js b/owner-vue/vue.config.js index 2ae460b..bc0acb2 100644 --- a/owner-vue/vue.config.js +++ b/owner-vue/vue.config.js @@ -1,5 +1,17 @@ module.exports = { transpileDependencies: [ 'vuetify' - ] + ], + devServer:{ + proxy:{ + 'store-service/' :{ + target: 'http://localhost:8001', + ws:true, + }, + 'order-service/' :{ + target: 'http://localhost:8001', + ws:true, + } + } + } } From f700e7374bc927021a278d58c7e8b92c7dc70493 Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Wed, 23 Feb 2022 14:16:23 +0900 Subject: [PATCH 5/8] =?UTF-8?q?fix(owner-vue)=20:=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EB=B2=84=EA=B7=B8=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 카테고리 기능 버그 수정 --- owner-vue/src/views/Category.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/owner-vue/src/views/Category.vue b/owner-vue/src/views/Category.vue index 9ef4637..7e2c040 100644 --- a/owner-vue/src/views/Category.vue +++ b/owner-vue/src/views/Category.vue @@ -122,7 +122,7 @@ export default { .then(function (response) { console.log(response) vm.deletedList=[] - + vm.getCategoryList() }); }, From 21a41ab5377578c5268c86fd7d84fccfc2be78b0 Mon Sep 17 00:00:00 2001 From: bum12ark Date: Wed, 23 Feb 2022 17:05:23 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat(owner-vue):=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=ED=94=BC=EC=BB=A4=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- owner-vue/src/components/DatePicker.vue | 55 +++++++++++ owner-vue/src/views/PrevOrder.vue | 122 ++++++++++-------------- 2 files changed, 103 insertions(+), 74 deletions(-) create mode 100644 owner-vue/src/components/DatePicker.vue diff --git a/owner-vue/src/components/DatePicker.vue b/owner-vue/src/components/DatePicker.vue new file mode 100644 index 0000000..669644e --- /dev/null +++ b/owner-vue/src/components/DatePicker.vue @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/owner-vue/src/views/PrevOrder.vue b/owner-vue/src/views/PrevOrder.vue index 5523dd7..be67d30 100644 --- a/owner-vue/src/views/PrevOrder.vue +++ b/owner-vue/src/views/PrevOrder.vue @@ -9,57 +9,12 @@
- - - - - - - - - + + -

{{ dueDate }}, {{ endDate }}

+
{{startDate}} ~ {{endDate}} 내역

@@ -82,30 +37,57 @@ + + \ No newline at end of file diff --git a/owner-vue/src/router/index.js b/owner-vue/src/router/index.js index 43009c5..b48a5c7 100644 --- a/owner-vue/src/router/index.js +++ b/owner-vue/src/router/index.js @@ -13,6 +13,11 @@ const routes = [ path: '/prev-order', name: 'prev-order', component: () => import('./../views/PrevOrder') + }, + { + path: '/order', + name: 'order', + component: () => import('./../views/Order.vue') } ] diff --git a/owner-vue/src/views/Order.vue b/owner-vue/src/views/Order.vue new file mode 100644 index 0000000..303a431 --- /dev/null +++ b/owner-vue/src/views/Order.vue @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file From 0f72041559e6d0506ced22b33a8fb89ae186ba9d Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Wed, 23 Feb 2022 18:21:27 +0900 Subject: [PATCH 8/8] =?UTF-8?q?feat(owner-vue,=20store-service):=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EA=B4=80=EB=A6=AC=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EB=84=A4=EC=9D=B4=EC=85=98,=20=EA=B2=80=EC=83=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit owner-vue에 menu 화면 개발, store-service에 menu pagenation 개발 --- owner-vue/src/router/index.js | 5 + owner-vue/src/views/Category.vue | 10 +- owner-vue/src/views/Menu.vue | 122 ++++++++++++++++++ .../storeservice/domain/item/dto/ItemDto.java | 20 ++- .../domain/item/dto/ItemSearch.java | 20 +++ .../item/repository/ItemRepository.java | 5 + .../item/repository/ItemRepositoryCustom.java | 53 ++++++++ .../domain/item/service/ItemService.java | 6 + .../domain/item/service/ItemServiceImpl.java | 25 ++++ .../domain/item/web/ItemController.java | 78 ++++++++++- .../src/main/resources/application.yml | 2 +- 11 files changed, 332 insertions(+), 14 deletions(-) create mode 100644 owner-vue/src/views/Menu.vue create mode 100644 store-service/src/main/java/com/justpickup/storeservice/domain/item/dto/ItemSearch.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/domain/item/repository/ItemRepositoryCustom.java diff --git a/owner-vue/src/router/index.js b/owner-vue/src/router/index.js index 88e355e..e7f6764 100644 --- a/owner-vue/src/router/index.js +++ b/owner-vue/src/router/index.js @@ -14,6 +14,11 @@ const routes = [ name: 'category', component: () => import('./../views/Category') }, + { + path: '/menu', + name: 'menu', + component: () => import('./../views/Menu') + }, ] const router = new VueRouter({ diff --git a/owner-vue/src/views/Category.vue b/owner-vue/src/views/Category.vue index 7e2c040..a9679ee 100644 --- a/owner-vue/src/views/Category.vue +++ b/owner-vue/src/views/Category.vue @@ -133,13 +133,13 @@ export default { url:'/store-service/category', responseType:'json' }) - .then(function (response) { - console.log(response.data.data) - vm.categoryList = response.data.data; - }); + .then(function (response) { + console.log(response.data.data) + vm.categoryList = response.data.data; + }); } }, - created() { + mounted() { this.getCategoryList(); } } diff --git a/owner-vue/src/views/Menu.vue b/owner-vue/src/views/Menu.vue new file mode 100644 index 0000000..52db3d3 --- /dev/null +++ b/owner-vue/src/views/Menu.vue @@ -0,0 +1,122 @@ + + + + + \ No newline at end of file diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/dto/ItemDto.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/dto/ItemDto.java index f620c9c..2dc323e 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/item/dto/ItemDto.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/dto/ItemDto.java @@ -1,11 +1,17 @@ package com.justpickup.storeservice.domain.item.dto; +import com.justpickup.storeservice.domain.category.dto.CategoryDto; import com.justpickup.storeservice.domain.item.entity.Item; import com.justpickup.storeservice.global.entity.Yn; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; @Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder public class ItemDto { private Long id; @@ -16,15 +22,15 @@ public class ItemDto { private Long price; + private CategoryDto categoryDto; + /* private PhotoDto photoDto; - private CategoryDto categoryDto; private StoreDto storeDto; private List itemOptionDtoList; */ // == 생성 메소드 == // - @Builder public ItemDto(Long id, String name, Yn salesYn, Long price) { this.id = id; this.name = name; @@ -41,6 +47,16 @@ public class ItemDto { .build(); } + public static ItemDto createWithCategoryItemDto(Item item) { + return ItemDto.builder() + .id(item.getId()) + .name(item.getName()) + .categoryDto(new CategoryDto(item.getCategory())) + .price(item.getPrice()) + .salesYn(item.getSalesYn()) + .build(); + } + // TODO: 2022/02/03 queryDsl 쿼리 생성 시 구현 필요 // public static ItemDto createFullItemDto(Item item) { // return null diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/dto/ItemSearch.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/dto/ItemSearch.java new file mode 100644 index 0000000..de0d9c2 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/dto/ItemSearch.java @@ -0,0 +1,20 @@ +package com.justpickup.storeservice.domain.item.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ItemSearch { + + @NotNull + private String type; + + private String word; + + +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/repository/ItemRepository.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/repository/ItemRepository.java index de7b237..3e6b1d9 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/item/repository/ItemRepository.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/repository/ItemRepository.java @@ -1,7 +1,12 @@ package com.justpickup.storeservice.domain.item.repository; import com.justpickup.storeservice.domain.item.entity.Item; +import com.justpickup.storeservice.domain.store.entity.Store; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface ItemRepository extends JpaRepository { + + List findByStore(Store store); } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/repository/ItemRepositoryCustom.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/repository/ItemRepositoryCustom.java new file mode 100644 index 0000000..bcf1f2b --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/repository/ItemRepositoryCustom.java @@ -0,0 +1,53 @@ +package com.justpickup.storeservice.domain.item.repository; + +import com.justpickup.storeservice.domain.category.entity.QCategory; +import com.justpickup.storeservice.domain.item.entity.Item; +import com.justpickup.storeservice.domain.item.entity.QItem; +import com.justpickup.storeservice.domain.store.entity.QStore; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class ItemRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + public Page findItem(Long storeId,String word, Pageable pageable){ + + //count 가져오기 + Long count = queryFactory.select(QItem.item.count()) + .from(QItem.item) + .join(QItem.item.category) + .leftJoin(QItem.item.store) + .on(QItem.item.store.id.eq(storeId)) + .where( + QItem.item.name.contains(word) + .or(QItem.item.category.name.contains(word)) + ) + .limit(pageable.getPageSize()) + .offset(pageable.getOffset()) + .fetchOne(); + + //List 가져오기 + List itemList = queryFactory.selectFrom(QItem.item) + .join(QItem.item.category).fetchJoin() + .leftJoin(QItem.item.store) + .on(QItem.item.store.id.eq(storeId)) + .where( + QItem.item.name.contains(word) + .or(QItem.item.category.name.contains(word)) + ) + .limit(pageable.getPageSize()) + .offset(pageable.getOffset()) + .fetch(); + + return PageableExecutionUtils.getPage(itemList,pageable,() -> count); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemService.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemService.java index 518088d..ad7df81 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemService.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemService.java @@ -1,8 +1,14 @@ package com.justpickup.storeservice.domain.item.service; import com.justpickup.storeservice.domain.item.dto.ItemDto; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.List; public interface ItemService { ItemDto findItemByItemId(Long itemId); + + Page findItemList(Long storeId,String word, Pageable pageable); } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemServiceImpl.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemServiceImpl.java index 9722720..fe9a422 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemServiceImpl.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemServiceImpl.java @@ -1,14 +1,26 @@ package com.justpickup.storeservice.domain.item.service; +import com.justpickup.storeservice.domain.category.exception.NotFoundStoreException; import com.justpickup.storeservice.domain.item.dto.ItemDto; +import com.justpickup.storeservice.domain.item.dto.ItemSearch; import com.justpickup.storeservice.domain.item.entity.Item; import com.justpickup.storeservice.domain.item.exception.NotExistItemException; import com.justpickup.storeservice.domain.item.repository.ItemRepository; +import com.justpickup.storeservice.domain.item.repository.ItemRepositoryCustom; +import com.justpickup.storeservice.domain.store.entity.Store; +import com.justpickup.storeservice.domain.store.repository.StoreRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; +import java.util.stream.Collectors; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -16,6 +28,8 @@ import org.springframework.transaction.annotation.Transactional; public class ItemServiceImpl implements ItemService { private final ItemRepository itemRepository; + private final ItemRepositoryCustom itemRepositoryCustom; + private final StoreRepository storeRepository; @Override @@ -25,4 +39,15 @@ public class ItemServiceImpl implements ItemService { return ItemDto.createItemDto(findItem); } + + @Override + public Page findItemList( Long storeId,String word, Pageable pageable) { + + Page itemList = itemRepositoryCustom.findItem(storeId,word,pageable); + return PageableExecutionUtils.getPage(itemList.stream() + .map(ItemDto::createWithCategoryItemDto) + .collect(Collectors.toList()),pageable,itemList::getTotalElements); + } + + } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/web/ItemController.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/web/ItemController.java index 21f106d..e11698a 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/item/web/ItemController.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/web/ItemController.java @@ -1,5 +1,7 @@ package com.justpickup.storeservice.domain.item.web; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.justpickup.storeservice.domain.item.dto.ItemDto; import com.justpickup.storeservice.domain.item.service.ItemService; import com.justpickup.storeservice.global.dto.Result; @@ -8,21 +10,85 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; +import org.hibernate.annotations.Parameter; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; @RestController @RequiredArgsConstructor -@RequestMapping("/item") public class ItemController { private final ItemService itemService; - @GetMapping("/{itemId}") + @GetMapping("/item") + public ResponseEntity> getItemList( @RequestParam String word, + @PageableDefault(page = 0, size = 10) Pageable pageable){ + + Long storeId = 1L; + + Page itemDtoList = itemService.findItemList(storeId,word,pageable); + List itemList = itemDtoList.stream() + .map(GetItemListResponse.Item::new) + .collect(Collectors.toList()); + + GetItemListResponse getItemResponse = new GetItemListResponse( + itemList, + itemDtoList.getNumber(), + itemDtoList.getTotalPages() + ); + + + return ResponseEntity.status(HttpStatus.OK) + .body((Result)Result.createSuccessResult(getItemResponse)); + } + + + @Data @NoArgsConstructor @AllArgsConstructor + static class GetItemListResponse { + private List itemList; + private Page page; + + public GetItemListResponse(List itemList, int startPage,int totalPage) { + this.itemList = itemList; + this.page = new Page(startPage,totalPage); + } + + @Data + static class Item{ + private Long id; + private String name; + private Yn salesYn; + private Long price; + private String categoryName; + + public Item(ItemDto itemDto) { + this.id = itemDto.getId(); + this.name = itemDto.getName(); + this.salesYn = itemDto.getSalesYn(); + this.price = itemDto.getPrice(); + this.categoryName = itemDto.getCategoryDto().getName(); + } + } + + @Data @AllArgsConstructor + static class Page { + int startPage; + int totalPage; + } + + + } + + + @GetMapping("/item/{itemId}") public ResponseEntity getItem(@PathVariable("itemId") Long itemId) { ItemDto itemByItemId = itemService.findItemByItemId(itemId); diff --git a/store-service/src/main/resources/application.yml b/store-service/src/main/resources/application.yml index 96eeaf2..edc6376 100644 --- a/store-service/src/main/resources/application.yml +++ b/store-service/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 0 + port: 12343 spring: application: