diff --git a/FrontendFolder/switch-room/src/assets/house/p1.jpeg b/FrontendFolder/switch-room/src/assets/house/p1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..bd83d3c0c4bfe52defd52601ac7b61353c3ecb4b Binary files /dev/null and b/FrontendFolder/switch-room/src/assets/house/p1.jpeg differ diff --git a/FrontendFolder/switch-room/src/assets/house/p2.jpeg b/FrontendFolder/switch-room/src/assets/house/p2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..747ce53102fd55eb22e83544d9ad2b0a421ac8db Binary files /dev/null and b/FrontendFolder/switch-room/src/assets/house/p2.jpeg differ diff --git a/FrontendFolder/switch-room/src/components/MatchOffer.vue b/FrontendFolder/switch-room/src/components/MatchOffer.vue index e9bbdee7837e91396bd1e9239099e6cf65ed75c4..366c4b836850fc29922318559a971ca04376c91d 100644 --- a/FrontendFolder/switch-room/src/components/MatchOffer.vue +++ b/FrontendFolder/switch-room/src/components/MatchOffer.vue @@ -1,8 +1,16 @@ <template> <div class="offerSide"> - <div class="card"> - <div class="container"> - <h4><b>Matched Offer Information</b></h4> + <div id="container"> + <div class="product-details"> + <h1>Matched Offer Information</h1> + <!-- <span class="hint-star star">--> + <!-- <i class="fa fa-star" aria-hidden="true"></i>--> + <!-- <i class="fa fa-star" aria-hidden="true"></i>--> + <!-- <i class="fa fa-star" aria-hidden="true"></i>--> + <!-- <i class="fa fa-star" aria-hidden="true"></i>--> + <!-- <i class="fa fa-star-o" aria-hidden="true"></i>--> + <!-- </span>--> + <p>Space Located City: {{ offer.spaceLocateCity }}</p> <p>Space Located State: {{ offer.state }}</p> <p>Available Time start: {{ offer.availableTimeStart }}</p> @@ -10,7 +18,42 @@ <p>Max People: {{ offer.maxNumberOfPeople }}</p> <p v-if="offer.offering">It is offering now</p> </div> + + <div class="product-image"> + <img src="../assets/house/p1.jpeg" class="image" /> + + <div class="info"> + <h2>Offer Description</h2> + <ul> + <li> + <strong>Step1 : </strong>Check the location with required space + </li> + <li> + <strong>Step2 : </strong>Check the time window with required + window + </li> + <li> + <strong>Step3 : </strong>Check the housing capacity carefully + </li> + <li> + <strong>Step4 : </strong>Check the status to make sure it is + offering + </li> + </ul> + </div> + </div> </div> + <!-- <div class="card">--> + <!-- <div class="container">--> + <!-- <h4><b>Matched Offer Information</b></h4>--> + <!-- <p>Space Located City: {{ offer.spaceLocateCity }}</p>--> + <!-- <p>Space Located State: {{ offer.state }}</p>--> + <!-- <p>Available Time start: {{ offer.availableTimeStart }}</p>--> + <!-- <p>Available Time end: {{ offer.availableTimeEnd }}</p>--> + <!-- <p>Max People: {{ offer.maxNumberOfPeople }}</p>--> + <!-- <p v-if="offer.offering">It is offering now</p>--> + <!-- </div>--> + <!-- </div>--> </div> </template> @@ -29,18 +72,195 @@ const props = defineProps<{ justify-content: center; align-items: center; } -.card { - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); - transition: 0.3s; +/*body {*/ +/* background: #dfc2f2;*/ +/* background-image: linear-gradient(to right, #ffffb3, #ffe6e6);*/ +/* background-attachment: fixed;*/ +/* background-size: cover;*/ +/*}*/ + +h1 { + font-size: large; + text-align: center; +} + +#container { + box-shadow: 0 15px 30px 1px grey; + background: rgba(255, 255, 255, 0.9); + text-align: center; + border-radius: 5px; + overflow: hidden; + height: 400px; + width: 800px; +} + +.product-details { + position: relative; + text-align: left; + overflow: hidden; + padding: 30px; + height: 100%; + float: left; width: 40%; +} + +#container .product-details h1 { + font-family: "Bebas Neue", cursive; + display: inline-block; + position: relative; + font-size: 30px; + color: #344055; + margin: 0; +} + +#container .product-details h1:before { + position: absolute; + content: ""; + right: 0%; + top: 0%; + transform: translate(25px, -15px); + font-family: "Bree Serif", serif; + display: inline-block; + background: #ffe6e6; + border-radius: 5px; + font-size: 14px; + padding: 5px; + color: white; + margin: 0; + animation: chan-sh 6s ease infinite; +} + +.hint-star { + display: inline-block; + margin-left: 0.5em; + color: gold; + width: 50%; +} + +#container .product-details > p { + font-family: "EB Garamond", serif; + text-align: center; + font-size: 18px; + color: #7d7d7d; +} +.control { + position: absolute; + bottom: 20%; + left: 22.8%; +} +.btn { + transform: translateY(0px); + transition: 0.3s linear; + background: #809fff; + border-radius: 5px; + position: relative; + overflow: hidden; + cursor: pointer; + outline: none; + border: none; + color: #eee; + padding: 0; + margin: 0; +} + +.btn:hover { + transform: translateY(-6px); + background: #1a66ff; +} + +.btn span { + font-family: "Farsan", cursive; + transition: transform 0.3s; + display: inline-block; + padding: 10px 20px; + font-size: 1.2em; + margin: 0; +} +.btn .price, +.shopping-cart { + background: #333; + border: 0; + margin: 0; +} + +.btn .price { + transform: translateX(-10%); + padding-right: 15px; +} + +.btn .shopping-cart { + transform: translateX(-100%); + position: absolute; + background: #333; + z-index: 1; + left: 0; + top: 0; +} + +.btn .buy { + z-index: 3; + font-weight: bolder; +} + +.btn:hover .price { + transform: translateX(-110%); +} + +.btn:hover .shopping-cart { + transform: translateX(0%); +} + +.product-image { + transition: all 0.3s ease-out; + display: inline-block; + position: relative; + overflow: hidden; + height: 100%; + float: right; + width: 45%; + display: inline-block; +} + +#container img { + width: 100%; + height: 100%; +} + +.info { + background: rgba(27, 26, 26, 0.9); + font-family: "Bree Serif", serif; + transition: all 0.3s ease-out; + transform: translateX(-100%); + position: absolute; + line-height: 1.8; + text-align: left; + font-size: 105%; + cursor: no-drop; + color: #fff; + height: 100%; + width: 100%; + left: 0; + top: 0; +} + +.info h2 { text-align: center; } +.product-image:hover .info { + transform: translateX(0); +} -.card:hover { - box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); +.info ul li { + transition: 0.3s ease; +} +.info ul li:hover { + transform: translateX(50px) scale(1.3); } -.container { - padding: 2px 16px; +.product-image:hover img { + transition: all 0.3s ease-out; +} +.product-image:hover img { + transform: scale(1.2, 1.2); } </style> diff --git a/FrontendFolder/switch-room/src/components/MatchWishList.vue b/FrontendFolder/switch-room/src/components/MatchWishList.vue index 2af628d7c9e746f9e2936e9a8bfe67723a3513ec..ee307260147667fe0b5a25307f8c53b3d9765ad5 100644 --- a/FrontendFolder/switch-room/src/components/MatchWishList.vue +++ b/FrontendFolder/switch-room/src/components/MatchWishList.vue @@ -1,14 +1,47 @@ <template> <div class="wishlistSide"> - <div class="card"> - <div class="container"> - <h4><b>Matched required space Information</b></h4> + <div id="container"> + <div class="product-details"> + <h1>Matched required space Information</h1> + <!-- <span class="hint-star star">--> + <!-- <i class="fa fa-star" aria-hidden="true"></i>--> + <!-- <i class="fa fa-star" aria-hidden="true"></i>--> + <!-- <i class="fa fa-star" aria-hidden="true"></i>--> + <!-- <i class="fa fa-star" aria-hidden="true"></i>--> + <!-- <i class="fa fa-star-o" aria-hidden="true"></i>--> + <!-- </span>--> + <p>required city: {{ wishlist.cityName }}</p> <p>required state: {{ wishlist.state }}</p> <p>required start time: {{ wishlist.startTime }}</p> <p>required end time: {{ wishlist.endTime }}</p> <p>required details: {{ wishlist.details }}</p> </div> + + <div class="product-image"> + <img src="../assets/house/p2.jpeg" class="image" /> + + <div class="info"> + <h2>Wishlist Description</h2> + <ul> + <li><strong>Step1 : </strong>Check the location with offer</li> + <li><strong>Step2 : </strong>Check the time window with offer</li> + <li> + <strong>Step3 : </strong>Check the details house keeper leaves + </li> + </ul> + </div> + </div> + <!-- <div class="card">--> + <!-- <div class="container">--> + <!-- <h4><b>Matched required space Information</b></h4>--> + <!-- <p>required city: {{ wishlist.cityName }}</p>--> + <!-- <p>required state: {{ wishlist.state }}</p>--> + <!-- <p>required start time: {{ wishlist.startTime }}</p>--> + <!-- <p>required end time: {{ wishlist.endTime }}</p>--> + <!-- <p>required details: {{ wishlist.details }}</p>--> + <!-- </div>--> + <!-- </div>--> </div> </div> </template> @@ -28,18 +61,188 @@ const props = defineProps<{ justify-content: center; align-items: center; } -.card { - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); - transition: 0.3s; +#container { + box-shadow: 0 15px 30px 1px grey; + background: rgba(255, 255, 255, 0.9); + text-align: center; + border-radius: 5px; + overflow: hidden; + height: 400px; + width: 800px; +} + +.product-details { + position: relative; + text-align: left; + overflow: hidden; + padding: 30px; + height: 100%; + float: left; width: 40%; +} + +#container .product-details h1 { + font-family: "Bebas Neue", cursive; + display: inline-block; + position: relative; + font-size: 30px; + color: #344055; + margin: 0; +} + +#container .product-details h1:before { + position: absolute; + content: ""; + right: 0%; + top: 0%; + transform: translate(25px, -15px); + font-family: "Bree Serif", serif; + display: inline-block; + background: #ffe6e6; + border-radius: 5px; + font-size: 14px; + padding: 5px; + color: white; + margin: 0; + animation: chan-sh 6s ease infinite; +} + +.hint-star { + display: inline-block; + margin-left: 0.5em; + color: gold; + width: 50%; +} + +h1 { + font-size: large; + text-align: center; +} + +#container .product-details > p { + font-family: "EB Garamond", serif; text-align: center; + font-size: 18px; + color: #7d7d7d; +} +.control { + position: absolute; + bottom: 20%; + left: 22.8%; +} +.btn { + transform: translateY(0px); + transition: 0.3s linear; + background: #809fff; + border-radius: 5px; + position: relative; + overflow: hidden; + cursor: pointer; + outline: none; + border: none; + color: #eee; + padding: 0; + margin: 0; +} + +.btn:hover { + transform: translateY(-6px); + background: #1a66ff; } -.card:hover { - box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); +.btn span { + font-family: "Farsan", cursive; + transition: transform 0.3s; + display: inline-block; + padding: 10px 20px; + font-size: 1.2em; + margin: 0; +} +.btn .price, +.shopping-cart { + background: #333; + border: 0; + margin: 0; } -.container { - padding: 2px 16px; +.btn .price { + transform: translateX(-10%); + padding-right: 15px; +} + +.btn .shopping-cart { + transform: translateX(-100%); + position: absolute; + background: #333; + z-index: 1; + left: 0; + top: 0; +} + +.btn .buy { + z-index: 3; + font-weight: bolder; +} + +.btn:hover .price { + transform: translateX(-110%); +} + +.btn:hover .shopping-cart { + transform: translateX(0%); +} + +.product-image { + transition: all 0.3s ease-out; + display: inline-block; + position: relative; + overflow: hidden; + height: 100%; + float: right; + width: 45%; + display: inline-block; +} + +#container img { + width: 100%; + height: 100%; +} + +.info { + background: rgba(27, 26, 26, 0.9); + font-family: "Bree Serif", serif; + transition: all 0.3s ease-out; + transform: translateX(-100%); + position: absolute; + line-height: 1.8; + text-align: left; + font-size: 105%; + cursor: no-drop; + color: #fff; + height: 100%; + width: 100%; + left: 0; + top: 0; +} + +.info h2 { + text-align: center; +} +.product-image:hover .info { + transform: translateX(0); +} + +.info ul li { + transition: 0.3s ease; +} +.info ul li:hover { + transform: translateX(50px) scale(1.3); +} + +.product-image:hover img { + transition: all 0.3s ease-out; +} +.product-image:hover img { + transform: scale(1.2, 1.2); } </style> diff --git a/FrontendFolder/switch-room/src/services/UserService.ts b/FrontendFolder/switch-room/src/services/UserService.ts index 77fed4b449d1a2805195905150257e14c38d5664..803612967dd6de200f8631a4b942e1c03bb0eb19 100644 --- a/FrontendFolder/switch-room/src/services/UserService.ts +++ b/FrontendFolder/switch-room/src/services/UserService.ts @@ -24,10 +24,10 @@ function getProfile() { return serverHttpService.Get(baseUrl + urlPath); } -export { +export { postUserDataToServer, loginUser, checkLoginSession, resetPassword, - getProfile + getProfile, }; diff --git a/FrontendFolder/switch-room/src/views/MatchedView.vue b/FrontendFolder/switch-room/src/views/MatchedView.vue index 641b85322d138e981295efb15fd422ca156c2742..b0706b641529cd02848d9638ad4a22b2442cf00a 100644 --- a/FrontendFolder/switch-room/src/views/MatchedView.vue +++ b/FrontendFolder/switch-room/src/views/MatchedView.vue @@ -1,10 +1,25 @@ <template> <div class="match-view"> - <p>This is the matched result page</p> - <match-offer :offer="offer"></match-offer> - <match-wish-list :wishlist="wishlist"></match-wish-list> - <button>Sign Agreement Documentation</button> - <button>It is not suitable</button> + <div class="parent"> + <div class="div1"> + The following are the matching choices matched by the system for you + <br /><strong class="strong-font" + >Tips: If after your careful consideration, you agree to the match + brought by the system, you need to click Agree to sign the agreement. + <br /> + If you do not agree, you need to click Disagree, and the system will + stop pushing for you.</strong + > + </div> + <div class="div2"><match-offer :offer="offer"></match-offer></div> + <div class="div3"> + <match-wish-list :wishlist="wishlist"></match-wish-list> + </div> + <div class="div4"> + <button>Sign Agreement</button> + <button>It is not suitable</button> + </div> + </div> </div> </template> @@ -61,6 +76,11 @@ watch( margin-left: 2%; } +.strong-font { + color: #1a66ff; + font-size: 20px; +} + button, button::after { margin-top: 2%; @@ -156,4 +176,28 @@ button:hover::after { transform: translate(0); } } + +.parent { + margin-top: 5%; + display: grid; + grid-template-columns: repeat(6, 1fr); + grid-template-rows: repeat(5, 1fr); + grid-column-gap: 0px; + grid-row-gap: 0px; +} + +.div1 { + grid-area: 1 / 1 / 2 / 7; + font-size: 30px; + font-family: Symbol; +} +.div2 { + grid-area: 2 / 1 / 5 / 4; +} +.div3 { + grid-area: 2 / 4 / 5 / 7; +} +.div4 { + grid-area: 5 / 1 / 6 / 7; +} </style>