1
0
mirror of https://github.com/robonen/metr.git synced 2026-03-20 10:54:41 +00:00

9 Commits

Author SHA1 Message Date
f8758a9b56 Update README.md 2022-06-24 01:48:25 +07:00
4e39df490a User authentication fix 2022-06-07 15:06:57 +07:00
9e1b0b5da1 Merge pull request #17 from robonen/Frontend_1.0_fixed
Frontend 1.0 fixed
2022-06-06 18:37:29 +07:00
dabimarie
2496867d21 Add PasswordAccept 2022-06-06 18:35:12 +07:00
dabimarie
c887a05c0b Add RecoveryNewPassword 2022-06-06 18:33:51 +07:00
Konstantin Vinokurov
99ef740a03 Merge pull request #16 from robonen/Backend_1.0
Offer search
2022-06-02 23:02:45 +07:00
Konstantin Vinokurov
a067507f59 Merge pull request #15 from robonen/Frontend_1.0
Frontend 1.0
2022-06-02 23:02:21 +07:00
Konstantin Vinokurov
d916977fc8 Vue, back edited,added 2022-06-02 23:00:58 +07:00
Konstantin Vinokurov
4bfe25d887 +Vue +edited backend 2022-06-02 23:00:42 +07:00
11 changed files with 144 additions and 26 deletions

View File

@@ -1,18 +1,13 @@
# Metr
<p align="center">
<a href="https://forma-web.ru">
<img alt="Logo" src="metr/logo.svg" width="300" title="Logo">
</a>
<img alt="Logo" src="metr/logo.svg" width="300" title="Logo">
</p>
<p align="center">
<a href="https://github.com/robonen/metr-frontend/actions">
<img src="https://github.com/robonen/metr-frontend/actions/workflows/release.yml/badge.svg" title="Release status">
</a>
<a href="https://github.com/robonen/metr-frontend/actions">
<img src="https://github.com/robonen/metr-frontend/actions/workflows/test.yml/badge.svg" title="Lint status">
</a>
<a href="https://github.com/robonen/metr-frontend/releases">
<img src="https://img.shields.io/github/v/release/robonen/metr-frontend?display_name=tag&label=Last%20Version&color=brightgreen" title="Last version">
</a>

View File

@@ -37,7 +37,7 @@ h1, h2, h3, h4, h5, h6 {
/* Intro */
.intro {
width: 100%;
height: 100vh;
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content:center;

View File

@@ -242,7 +242,15 @@ h1, h2, h3, h4, h5, h6 {
margin: 1% 0;
}
.rewiew__comment{
padding-left: 10px;
}
.review__stars {
display: flex;
flex-direction: row;
}
.user__stat{
padding-right: 10px;
}

View File

@@ -22,8 +22,8 @@ export default {
computed: {
...mapGetters({ user: 'user' }),
name() {
return this.user.last_name && this.user.first_name && this.user.middle_name
? `${this.user.last_name} ${this.user.first_name} ${this.user.middle_name}`
return this.user.last_name && this.user.first_name
? `${this.user.last_name} ${this.user.first_name} ${this.user.middle_name ?? ''}`
: 'Не указано';
}
}

View File

@@ -20,7 +20,7 @@
<div class="about__describtions">
<div class="descriptions__name">
<h4>Название для объявления:</h4>
<input type="text" size="40" v-model.trim="offer.name">
<input type="text" size="40" placeholder="Пример: Просторная квартира на Елисеевке" v-model.trim="offer.name">
</div>
<div class="descriptions__name">
<h4>Тип:</h4>
@@ -32,11 +32,11 @@
</div>
<div class="descriptions__address">
<h4>Адрес:</h4>
<input type="text" size="40" v-model.trim="offer.location">
<input type="text" size="40" placeholder="Пример: Комарино 12, д. 3" v-model.trim="offer.location">
</div>
<div class="descriptions__price">
<h4>Цена:</h4>
<input type="text" size="40" v-model.number="offer.price">
<input type="text" size="40" placeholder="Пример: '1200000'" v-model.number="offer.price">
</div>
<div class="descriptions__flats">
<h4>Кол-во комнат:</h4>
@@ -49,11 +49,12 @@
</div>
<div class="descriptions__square">
<h4>Площадь:</h4>
<input type="text" size="40" v-model.number="offer.space">
<input type="text" size="40" placeholder="Пример: '45'" v-model.number="offer.space">
</div>
<div class="descriptions__text">
<h4>Описание:</h4>
<input type="text" size="40" v-model.trim="offer.description">
<!-- <input type="text" size="40" v-model.trim="offer.description">-->
<textarea placeholder="Описание" class="descriptions__textarea" v-model.trim="offer.description"></textarea>
</div>
</div>
<button @click="action">Отправить</button>
@@ -263,12 +264,28 @@ export default {
margin-top: 1%;
}
.descriptions__textarea{
background-color: rgb(201, 233, 252);
border-radius: 5px;
border-color: white;
box-shadow: none;
border: 1px solid rgb(83, 110, 136);
width: 100%;
height: 100px;
font-size: 0.8em;
}
.about__describtions input {
background-color: rgb(201, 233, 252);
border-radius: 5px;
border-color: white;
box-shadow: none;
border: 1px solid rgb(83, 110, 136);
font-size: 0.8em;
}
.about__describtions h4 {
@@ -278,5 +295,6 @@ export default {
.descriptions__text input {
width: 100%;
height: 100px;
}
</style>

View File

@@ -30,10 +30,8 @@
</div>
<div class="header__search">
<div class="search">
<div class="search__block">
</div>
<div class="search__img">
<input text="" class="search__block" placeholder="Поиск" v-model.trim="query" @keydown.enter="search">
<div class="search__img" @click.prevent="search">
<a class="nav__link" href="#">
<img src="@/assets/images/search.jpg" alt="">
</a>
@@ -59,10 +57,24 @@
<script>
export default {
name: "TheHeader"
name: "TheHeader",
data() {
return {
query: '',
};
},
methods: {
search() {
this.$router.push({
path: '/catalog',
query: { q: this.query },
})
}
},
}
</script>
<style scoped>
/* Container */
.container {
@@ -137,7 +149,8 @@ export default {
width: 300px;
height: 40px;
margin: 0;
padding-top: 20px;
font-size: 1em;
background: white;
border: 1px solid black;

View File

@@ -133,11 +133,28 @@ export default {
const offers = await offerService.filter(this.sortParams);
this.offers = offers.data.data;
},
async addSearchParam(value) {
if (!value || !value.q) {
this.sortParams = this.sortParams.filter((e) => e.name !== 'search');
this.reloadOffers();
return;
}
await this.addSortParam('search', value.q);
}
},
async mounted() {
const offers = await offerService.all();
this.offers = offers.data.data;
}
if (this.$store.getters.userAuthenticated) {
this.$router.push('/profile');
return;
}
await this.addSearchParam(this.$route.query);
},
watch: {
'$route.query'(value) {
this.addSearchParam(value);
}
},
}
</script>

View File

@@ -75,9 +75,9 @@
</div>
<div class="reviews__blocks">
<div v-if="offer?.user?.feedback" class="review" v-for="(review, i) in offer.user.feedback" :key="i">
<div class="review__avatar">
<img src="@/assets/images/forcomment.png" alt="">
</div>
<!-- <div class="review__avatar">-->
<!-- <img src="@/assets/images/forcomment.png" alt="">-->
<!-- </div>-->
<div class="rewiew__comment">
<h5>{{ review.comment }}</h5>
</div>
@@ -150,6 +150,11 @@ export default {
}
},
async mounted() {
if (this.$store.getters.userAuthenticated) {
this.$router.push('/profile');
return;
}
const id = this.$route.params.id;
if (id === undefined)

View File

@@ -81,6 +81,12 @@ export default {
});
}
},
mounted() {
if (this.$store.getters.userAuthenticated) {
this.$router.push('/profile');
return;
}
}
}
</script>>

View File

@@ -0,0 +1,30 @@
<template>
<div class="container">
<div class="logo">
<div class="logoMetr">
</div>
</div>
<div class="title">
<h2>Восстановление пароля</h2>
</div>
<form action="" method="get" class="form__example">
<div class="form__example">
<label for="name"></label>
<input class="login" type="text" name="name" id="name" placeholder="Новый пароль" required>
</div>
<div class="form__example">
<label for="email"></label>
<input class="login" type="email" name="email" id="email" placeholder="Подтвердите пароль" required>
</div>
<div class="form__example">
<input class="form__input" type="submit" value="Сохранить пароль">
</div>
</form>
</div>
</template>
<script>
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,26 @@
<template>
<div class="container">
<div class="logo">
<div class="logoMetr">
</div>
</div>
<div class="title">
<h2>Восстановление пароля</h2>
</div>
<form action="" method="get" class="form__example">
<div class="form__example">
<label for="name"></label>
<input class="login" type="text" name="name" id="name" placeholder="Введите код подтверждения" required>
</div>
<div class="form__example">
<input class="form__input" type="submit" value="Принять">
</div>
</form>
</div>
</template>
<script>
</script>
<style scoped>
</style>