From 17b7bedeaac3b0f575c332941f0064119630ee98 Mon Sep 17 00:00:00 2001 From: LEEYOONGU <try3357@ajou.ac.kr> Date: Sat, 7 Dec 2019 23:04:17 +0900 Subject: [PATCH] =?UTF-8?q?=ED=94=84=EB=A1=A0=ED=8A=B8=EC=97=94=EB=93=9C?= =?UTF-8?q?=20=EC=B1=85=20=EB=AA=A9=EB=A1=9D=20=EB=B0=9B=EC=95=84=EC=98=A4?= =?UTF-8?q?=EA=B8=B0=20=EC=99=84=EC=84=B1,=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/models/Book.js | 2 +- backend/package-lock.json | 13 ++ frontend/src/components/BookSearchPage.vue | 20 +- frontend/src/components/home.vue | 100 ---------- .../src/components/home_hotlist/Hotlist.vue | 184 ++---------------- frontend/src/components/profile.vue | 36 ++-- .../components/profilecomponent/buylist.vue | 90 +++------ .../profilecomponent/profiledit.vue | 30 --- .../components/profilecomponent/sellist.vue | 30 ++- frontend/src/router/index.js | 2 +- 10 files changed, 97 insertions(+), 410 deletions(-) delete mode 100644 frontend/src/components/home.vue delete mode 100644 frontend/src/components/profilecomponent/profiledit.vue diff --git a/backend/models/Book.js b/backend/models/Book.js index 757788b..9756ebe 100644 --- a/backend/models/Book.js +++ b/backend/models/Book.js @@ -5,7 +5,7 @@ var autoInc = require("mongoose-auto-increment"); const BookSchema = new Schema({ _id: { type: Number }, title: { type: String }, - grade: { type: Number }, + grade: { type: String }, major: { type: String }, type: { type: String }, src: { type: String }, diff --git a/backend/package-lock.json b/backend/package-lock.json index 3b4c6fa..59961be 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -434,6 +434,11 @@ } } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "finalhandler": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", @@ -684,6 +689,14 @@ } } }, + "mongoose-auto-increment": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mongoose-auto-increment/-/mongoose-auto-increment-5.0.1.tgz", + "integrity": "sha1-gn4FHZzDcdq+i/8acEQx00HLed8=", + "requires": { + "extend": "^3.0.0" + } + }, "mongoose-legacy-pluralize": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", diff --git a/frontend/src/components/BookSearchPage.vue b/frontend/src/components/BookSearchPage.vue index e700ade..6bcce5c 100644 --- a/frontend/src/components/BookSearchPage.vue +++ b/frontend/src/components/BookSearchPage.vue @@ -3,8 +3,8 @@ <div class="select"> <multiselect style="float: left; marginLeft: 15%; width: 20%;" - v-model="grade" - :options="option1" + v-model.number="grade" + :options="option1" ></multiselect> <multiselect style="float: left; marginLeft: 0.5%; width: 20%;" @@ -26,15 +26,15 @@ > <!-- ==================================================================== --> - <div v-if="SearchResult === true"> - <div v-for="Book in Books" :key="Book._id"> + <div v-if="SearchResult === true "> + <div v-for="Book in Books" :key="Book._id" v-if="Book.grade.includes(grade) && Book.major.includes(major)" > <md-card style="width: 50%; margin: 4px;marginTop:100px; display: inline-block; vertical-align: top;" > <md-card-header> <md-card-header-text> <div class="md-title"> - {{ Book.title }} + {{ Book.title }} <br /> <br /> </div> @@ -133,7 +133,7 @@ export default { type: null, option1: ["1학년", "2학년", "3학년", "4학년"], option2: ["소프트웨어학과", "미디어학과", "경제학과"], - option3: ["전공 필수", "전공 선택", "교양선택", "기초과목"], + option3: ["test_title2", "전공선택", "교양선택", "기초과목"], Books: [], submit: { title: "", @@ -150,16 +150,12 @@ export default { this.Books = response.data; console.log("Success"); console.log(this.Books); + }); }, methods: { Search: function() { - if (this.grade !== null && this.major !== null && this.type !== null) { - this.SearchResult = true; - console.log(this.SearchResult); - } else { - alert("검색할 카테고리를 전부 입력해주세요"); - } + this.SearchResult = true; }, Register() { this.$http diff --git a/frontend/src/components/home.vue b/frontend/src/components/home.vue deleted file mode 100644 index eb70fd6..0000000 --- a/frontend/src/components/home.vue +++ /dev/null @@ -1,100 +0,0 @@ -<template> - <div> - <div class="md-layout" style="display: block; color:#F6F6F6"> - <div class="md-layout-item"> - <Hotlist /> - </div> - <div class="md-layout-item" style="backgroundColor:#F2CB61;">home</div> - <div class="md-layout-item" style="backgroundColor:#353535;">Implemented by 202-WebSysDesign</div> - </div> - </div> -</template> - -<script> -import Hotlist from "./home_hotlist/HotList"; -export default { - created() { - this - .$http - .get('/api/emails') - .then(response => { - console.log("Sending Success") - }) - }, - - data() { - return {}; - }, -components: { - Hotlist - }, - methods: { - - - } -}; -</script> - -<style lang="css"> -html, -body { - text-align: center; - /* margin:0; */ - /* width:100%; */ - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} - -.nav button { - color: #00b7ff; - text-align: center; - padding-right: 8%; - padding-left: 8%; - font-size: 18px; - text-decoration: none; -} - -.nav { - background-color: #333; - overflow: hidden; -} - -.header { - margin: 15px; - height: 12%; - font-size: 10px; -} - -.btn { - color: #00b7ff; - background-color: #333; - border-radius: 15%; -} - -h1 { - text-align: left; - font-size: 35px; -} - -.section { - height: 110%; - width: 100%; -} - -.aside { - height: 40px; - background-color: rgb(255, 220, 123); -} - -.footer { - height: 20px; - color: white; - background-color: #333; -} - -.myPage { - display: block; - margin-left: auto; - margin-right: auto; - height: 400px; -} -</style> diff --git a/frontend/src/components/home_hotlist/Hotlist.vue b/frontend/src/components/home_hotlist/Hotlist.vue index d5897c0..53c2b65 100644 --- a/frontend/src/components/home_hotlist/Hotlist.vue +++ b/frontend/src/components/home_hotlist/Hotlist.vue @@ -1,30 +1,21 @@ <template> <div> - <md-table v-model="searched" md-sort="name" md-sort-order="asc" md-card md-fixed-header> - <md-table-toolbar> - <div class="md-toolbar-section-start" style="min-height: 100px"></div> - <md-field md-clearable class="md-toolbar-section-end" style="max-width: 300px;"> - <md-input placeholder="책 이름으로 검색" v-model="search" @input="searchOnTable" /> - </md-field> - </md-table-toolbar> - <md-table-empty-state md-label="No Result" :md-description="`해당 이름으로 된 책이 없습니다.`"> - <md-button class="md-primary md-raised" @click="newUser">판매 등록하기</md-button> - </md-table-empty-state> + <md-table v-model="users" md-sort="title" md-sort-order="asc" md-card md-fixed-header> <md-table-row slot="md-table-row" slot-scope="{ item }" style="margin-top:100px"> - <md-table-cell md-label="판매순위" md-sort-by="id" md-numeric> + <md-table-cell md-label="재고" md-sort-by="stock" md-numeric> {{ - item.id + item.stock }} </md-table-cell> - <md-table-cell md-label="전공" md-sort-by="name"> + <md-table-cell md-label="전공" md-sort-by="major"> {{ - item.name + item.major }} </md-table-cell> - <md-table-cell md-label="책이름" md-sort-by="email"> + <md-table-cell md-label="책이름" md-sort-by="title"> {{ - item.email + item.title }} </md-table-cell> <md-table-cell> @@ -34,6 +25,7 @@ <md-button class="md-raised md-accent">판매</md-button> </md-table-cell> </md-table-row> + </md-table> </div> </template> @@ -45,170 +37,27 @@ const toLower = text => { const searchByName = (items, term) => { if (term) { - return items.filter(item => toLower(item.name).includes(toLower(term))); + return items.filter(item => toLower(item.title).includes(toLower(term))); } return items; }; - export default { name: "TableSearch", data: () => ({ - search: null, - searched: [], users: [ - { - id: 1, - name: "Shawna Dubbin", - email: "sdubbin0@geocities.com", - gender: "Male", - title: "Assistant Media Planner" - }, - { - id: 2, - name: "Odette Demageard", - email: "odemageard1@spotify.com", - gender: "Female", - title: "Account Coordinator" - }, - { - id: 3, - name: "Vera Taleworth", - email: "vtaleworth2@google.ca", - gender: "Male", - title: "Community Outreach Specialist" - }, - { - id: 4, - name: "Lonnie Izkovitz", - email: "lizkovitz3@youtu.be", - gender: "Female", - title: "Operator" - }, - { - id: 5, - name: "Thatcher Stave", - email: "tstave4@reference.com", - gender: "Male", - title: "Software Test Engineer III" - }, - { - id: 6, - name: "Karim Chipping", - email: "kchipping5@scribd.com", - gender: "Female", - title: "Safety Technician II" - }, - { - id: 7, - name: "Helge Holyard", - email: "hholyard6@howstuffworks.com", - gender: "Female", - title: "Internal Auditor" - }, - { - id: 8, - name: "Rod Titterton", - email: "rtitterton7@nydailynews.com", - gender: "Male", - title: "Technical Writer" - }, - { - id: 9, - name: "Gawen Applewhite", - email: "gapplewhite8@reverbnation.com", - gender: "Female", - title: "GIS Technical Architect" - }, - { - id: 10, - name: "Nero Mulgrew", - email: "nmulgrew9@plala.or.jp", - gender: "Female", - title: "Staff Scientist" - }, - { - id: 11, - name: "Cybill Rimington", - email: "crimingtona@usnews.com", - gender: "Female", - title: "Assistant Professor" - }, - { - id: 12, - name: "Maureene Eggleson", - email: "megglesonb@elpais.com", - gender: "Male", - title: "Recruiting Manager" - }, - { - id: 13, - name: "Cortney Caulket", - email: "ccaulketc@cbsnews.com", - gender: "Male", - title: "Safety Technician IV" - }, - { - id: 14, - name: "Selig Swynfen", - email: "sswynfend@cpanel.net", - gender: "Female", - title: "Environmental Specialist" - }, - { - id: 15, - name: "Ingar Raggles", - email: "iragglese@cbc.ca", - gender: "Female", - title: "VP Sales" - }, - { - id: 16, - name: "Karmen Mines", - email: "kminesf@topsy.com", - gender: "Male", - title: "Administrative Officer" - }, - { - id: 17, - name: "Salome Judron", - email: "sjudrong@jigsy.com", - gender: "Male", - title: "Staff Scientist" - }, - { - id: 18, - name: "Clarinda Marieton", - email: "cmarietonh@theatlantic.com", - gender: "Male", - title: "Paralegal" - }, - { - id: 19, - name: "Paxon Lotterington", - email: "plotteringtoni@netvibes.com", - gender: "Female", - title: "Marketing Assistant" - }, - { - id: 20, - name: "Maura Thoms", - email: "mthomsj@webeden.co.uk", - gender: "Male", - title: "Actuary" - } + ] }), methods: { - newUser() { - window.alert("판매 등록을 클릭했습니다."); - }, - searchOnTable() { - this.searched = searchByName(this.users, this.search); - } }, created() { - this.searched = this.users; + this.$http.get("/api/books").then(response => { + this.users = response.data; + console.log("success"); + console.log(this.users); + + }); } }; </script> @@ -217,5 +66,4 @@ export default { .md-field { max-width: 500px; } - </style> diff --git a/frontend/src/components/profile.vue b/frontend/src/components/profile.vue index 9248aed..57c4cd7 100644 --- a/frontend/src/components/profile.vue +++ b/frontend/src/components/profile.vue @@ -7,30 +7,29 @@ <section id="section2"> <sellist /> </section> - <aside> - <profiledit /> - </aside> </body> </html> </template> <script> import buylist from "./profilecomponent/buylist" import sellist from "./profilecomponent/sellist" -import profiledit from "./profilecomponent/profiledit" + export default { - data() { - return {}; - }, + + data: () => ({ + users: [ + + ] + }), components: { buylist, - profiledit, sellist }, methods: { checked () { return true; } - } + }, }; </script> @@ -43,33 +42,22 @@ components: { #section1 { float: left; width: 50%; - height: 300px; + height: 600px; margin-right: auto; padding-right: auto; border-style: groove; - + background-color: #FFF; } #section2 { float: right; width: 50%; - height: 300px; + height: 600px; margin-right: auto; padding-right: auto; border-style: groove; - - + background-color: #FFF; } -aside { - float: left; - width: 50%; - height: 300px; - margin-right: auto; - padding-right: auto; - background-color: white; - border-style: groove; - -} </style> \ No newline at end of file diff --git a/frontend/src/components/profilecomponent/buylist.vue b/frontend/src/components/profilecomponent/buylist.vue index 60e76dd..a53f69e 100644 --- a/frontend/src/components/profilecomponent/buylist.vue +++ b/frontend/src/components/profilecomponent/buylist.vue @@ -4,12 +4,12 @@ <span>Buylist</span> </md-toolbar> <md-list class="md-double-line" style="height : 230px"> - <md-list-item> + <md-list-item v-for="user in users" :key="user.title"> <md-button class="md-icon-button md-raised" style="color:#1DDB16;backgroundColor:#1DDB16"> <img src="../../assets/book-open-flat.png" /> </md-button> <div class="md-list-item-text"> - <span> 책 제목</span> + <span> {{user.title}}</span> <span> 구매 대기중</span> </div> <md-button class="md-icon-button md-raised md-accent"> @@ -19,72 +19,8 @@ <img src="../../assets/check-icon.png" /> </md-button> </md-list-item> - <md-divider></md-divider> - <md-list-item> - <md-button class="md-icon-button md-raised" style="color:#1DDB16;backgroundColor:#1DDB16"> - <img src="../../assets/book-open-flat.png" /> - </md-button> - <div class="md-list-item-text"> - <span> 책 제목</span> - <span> 구매 대기중</span> - </div> - <md-button class="md-icon-button md-raised md-accent"> - <img src="../../assets/x-512.png" /> - </md-button> - <md-button class="md-icon-button md-raised md-primary"> - <img src="../../assets/check-icon.png" /> - </md-button> - </md-list-item> - <md-divider></md-divider> - <md-list-item> - <md-button class="md-icon-button md-raised" style="color:#1DDB16;backgroundColor:#1DDB16"> - <img src="../../assets/book-open-flat.png" /> - </md-button> - <div class="md-list-item-text"> - <span> 책 제목</span> - <span> 구매 대기중</span> - </div> - <md-button class="md-icon-button md-raised md-accent"> - <img src="../../assets/x-512.png" /> - </md-button> - <md-button class="md-icon-button md-raised md-primary"> - <img src="../../assets/check-icon.png" /> - </md-button> - </md-list-item> - <md-divider></md-divider> - <md-list-item> - <md-button class="md-icon-button md-raised" style="color:#1DDB16;backgroundColor:#1DDB16"> - <img src="../../assets/book-open-flat.png" /> - </md-button> - <div class="md-list-item-text"> - <span> 책 제목</span> - <span> 구매 대기중</span> - </div> - <md-button class="md-icon-button md-raised md-accent"> - <img src="../../assets/x-512.png" /> - </md-button> - <md-button class="md-icon-button md-raised md-primary"> - <img src="../../assets/check-icon.png" /> - </md-button> - </md-list-item> - <md-divider></md-divider> - <md-list-item> - <md-button class="md-icon-button md-raised" style="color:#1DDB16;backgroundColor:#1DDB16"> - <img src="../../assets/book-open-flat.png" /> - </md-button> - <div class="md-list-item-text"> - <span> 책 제목</span> - <span> 구매 대기중</span> - </div> - <md-button class="md-icon-button md-raised md-accent"> - <img src="../../assets/x-512.png" /> - </md-button> - <md-button class="md-icon-button md-raised md-primary"> - <img src="../../assets/check-icon.png" /> - </md-button> - </md-list-item> - <md-divider></md-divider> </md-list> + </div> </template> @@ -96,8 +32,26 @@ import 'vue-material/dist/vue-material.min.css' import 'vue-material/dist/theme/default.css' Vue.use(VueMaterial) export default { - name: 'SubheaderExample' + name: 'SubheaderExample', + + data: () => ({ + users: [], + }), + methods: { + + }, + + mounted: function () { + this.$http.get("/api/books").then(response => { + this.users = response.data; + console.log("success"); + console.log(this.users); + }) + } } + + + </script> <style lang="scss" scoped> diff --git a/frontend/src/components/profilecomponent/profiledit.vue b/frontend/src/components/profilecomponent/profiledit.vue deleted file mode 100644 index ea4ff09..0000000 --- a/frontend/src/components/profilecomponent/profiledit.vue +++ /dev/null @@ -1,30 +0,0 @@ -<template> - <div class="viewport" style="overflow: auto;"> - <md-toolbar :md-elevation="1" style="height : 30px" class="md-title"> - <span>Profile 수정</span> - </md-toolbar> - <div style="margin-top:17%; display:inline-block"> - <md-chip class="md-primary" md-clickable>회원 정보 수정</md-chip> - </div> - </div> -</template> - -<script> -import Vue from 'vue' -import VueMaterial from 'vue-material' -import Multiselect from 'vue-multiselect' -import 'vue-material/dist/vue-material.min.css' -import 'vue-material/dist/theme/default.css' -Vue.use(VueMaterial) - export default { - name: 'SubheaderExample' - } -</script> - -<style lang="scss" scoped> - .viewport { - width: 100%; - display: inline-block; - vertical-align: top; - } -</style> \ No newline at end of file diff --git a/frontend/src/components/profilecomponent/sellist.vue b/frontend/src/components/profilecomponent/sellist.vue index d31dcf3..13ff193 100644 --- a/frontend/src/components/profilecomponent/sellist.vue +++ b/frontend/src/components/profilecomponent/sellist.vue @@ -1,16 +1,16 @@ <template> <div class="viewport" style="overflow: auto;"> <md-toolbar :md-elevation="1" style="height : 30px" class="md-title"> - <span>sellist</span> + <span>Sellist</span> </md-toolbar> <md-list class="md-double-line" style="height : 230px"> - <md-list-item> + <md-list-item v-for="user in users" :key="user.title"> <md-button class="md-icon-button md-raised" style="color:#1DDB16;backgroundColor:#1DDB16"> <img src="../../assets/book-open-flat.png" /> </md-button> <div class="md-list-item-text"> - <span> 책 제목</span> - <span> 판매중</span> + <span> {{user.title}}</span> + <span> 판매 대기중</span> </div> <md-button class="md-icon-button md-raised md-accent"> <img src="../../assets/x-512.png" /> @@ -19,8 +19,8 @@ <img src="../../assets/check-icon.png" /> </md-button> </md-list-item> - <md-divider></md-divider> </md-list> + </div> </template> @@ -32,8 +32,26 @@ import 'vue-material/dist/vue-material.min.css' import 'vue-material/dist/theme/default.css' Vue.use(VueMaterial) export default { - name: 'SubheaderExample' + name: 'SubheaderExample', + + data: () => ({ + users: [], + }), + methods: { + + }, + + mounted: function () { + this.$http.get("/api/books").then(response => { + this.users = response.data; + console.log("success"); + console.log(this.users); + }) } + } + + + </script> <style lang="scss" scoped> diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index f483827..4c3e913 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -1,7 +1,7 @@ import Vue from "vue"; import Router from "vue-router"; Vue.use(Router); -import home from "@/components/home"; +import home from "@/components/home_hotlist/Hotlist"; import mainpage from "@/components/mainpage"; import profile from "@/components/profile"; import BookSearchPage from "@/components/BookSearchPage"; -- GitLab