Доделал отмену бронирования, подогнал под мобилки
This commit is contained in:
parent
73f77d58f8
commit
990ff22376
|
@ -99,4 +99,15 @@ class WishesController extends Controller
|
||||||
$wish->save();
|
$wish->save();
|
||||||
return response()->json($wish, 200);
|
return response()->json($wish, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function unbook(Request $request)
|
||||||
|
{
|
||||||
|
$request->validate([
|
||||||
|
'id' => 'required|exists:wishes,id'
|
||||||
|
]);
|
||||||
|
$wish = Wish::find($request->get('id'));
|
||||||
|
$wish->book_user_id = null;
|
||||||
|
$wish->save();
|
||||||
|
return response()->json($wish, 200);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,6 +103,25 @@ export const useWishStore = defineStore('wish', {
|
||||||
result = error;
|
result = error;
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
|
},
|
||||||
|
async unbook(id, token){
|
||||||
|
let result = null;
|
||||||
|
await axios.post(`/api/wish/unbook`,
|
||||||
|
{
|
||||||
|
id: id
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
token: token
|
||||||
|
},
|
||||||
|
}
|
||||||
|
).then((response)=>{
|
||||||
|
result = response;
|
||||||
|
}).catch((error)=>{
|
||||||
|
result = error;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,19 +1,27 @@
|
||||||
<template>
|
<template>
|
||||||
<v-card class="bg-gradient" style="height: 100%">
|
<v-card class="bg-gradient" style="height: 100%" :class="isWide ? '' : 'd-flex justify-center align-center'">
|
||||||
<v-card-text class="d-flex justify-center align-center">
|
<v-card-text class="d-flex justify-center align-center">
|
||||||
<v-card class="align-center justify-center h-auto card-bg" :class="isWide ? 'w-66' : 'w-100'">
|
<v-card class="align-center justify-center h-auto card-bg" :class="isWide ? 'w-66' : 'w-100'">
|
||||||
<v-card-title class="d-flex justify-space-between">
|
<v-card-title class="d-flex justify-space-between" :class="isWide ? '' : 'text-subtitle-1'">
|
||||||
<div>
|
<div v-if="isWide">
|
||||||
<span>Добро пожаловать в </span>
|
<span>Добро пожаловать в </span>
|
||||||
<span><a href="/" class="link-no-decor">Wishlist</a>, </span>
|
<span><a href="/" class="link-no-decor">Wishlist</a>, </span>
|
||||||
<span v-if="userStore.user !== null">{{ userStore.user['name'] }}</span>
|
<span v-if="userStore.user !== null">{{ userStore.user['name'] }}</span>
|
||||||
<span v-else>Гость</span>
|
<span v-else>Гость</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="!isWide">
|
||||||
|
<p>Добро пожаловать в </p>
|
||||||
|
<p><a href="/" class="link-no-decor">Wishlist</a>, {{ isAuthenticated ? userStore.user['name'] : 'Гость' }}!</p>
|
||||||
|
</div>
|
||||||
<span v-if="isAuthenticated" class="link-no-decor align-end" @click="logout">Выйти</span>
|
<span v-if="isAuthenticated" class="link-no-decor align-end" @click="logout">Выйти</span>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<a class="link-no-decor align-end" @click="showAuthDialog = true">Вход/Регистрация</a>
|
<div v-if="isWide"><a class="link-no-decor align-end" @click="showAuthDialog = true">Вход/Регистрация</a></div>
|
||||||
|
<div v-else class="d-flex flex-column justify-center align-end" @click="showAuthDialog = true">
|
||||||
|
<a class="link-no-decor">Вход/</a>
|
||||||
|
<a class="link-no-decor">Регистрация</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<v-dialog v-model="showAuthDialog" class="w-66">
|
<v-dialog v-model="showAuthDialog" :class="isWide ? 'w-66' : 'w-100'">
|
||||||
<v-card class="card-bg">
|
<v-card class="card-bg">
|
||||||
<v-card-title class="d-flex justify-end">
|
<v-card-title class="d-flex justify-end">
|
||||||
<v-icon @click="showAuthDialog = false" class="cursor-pointer" color="white" icon="mdi-close-thick"></v-icon>
|
<v-icon @click="showAuthDialog = false" class="cursor-pointer" color="white" icon="mdi-close-thick"></v-icon>
|
||||||
|
|
|
@ -33,6 +33,15 @@ export default {
|
||||||
closeBookDialog(){
|
closeBookDialog(){
|
||||||
this.bookConfirmationDialog = false;
|
this.bookConfirmationDialog = false;
|
||||||
},
|
},
|
||||||
|
updateFrontWishes(){
|
||||||
|
this.fetching = true;
|
||||||
|
let urlArray = window.location.href.split('/');
|
||||||
|
let user_id = urlArray[urlArray.length - 1];
|
||||||
|
this.wishStore.getUserWishes(user_id).then((res)=>{
|
||||||
|
this.wishes = res;
|
||||||
|
this.fetching = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
book(){
|
book(){
|
||||||
this.bookLoading = true;
|
this.bookLoading = true;
|
||||||
this.wishStore.book(this.bookItemId, this.userStore.user["id"], this.userStore.token).then((response)=>{
|
this.wishStore.book(this.bookItemId, this.userStore.user["id"], this.userStore.token).then((response)=>{
|
||||||
|
@ -42,18 +51,17 @@ export default {
|
||||||
this.bookError = true;
|
this.bookError = true;
|
||||||
} else {
|
} else {
|
||||||
this.bookConfirmationDialog = false;
|
this.bookConfirmationDialog = false;
|
||||||
this.fetching = true;
|
this.updateFrontWishes();
|
||||||
let urlArray = window.location.href.split('/');
|
|
||||||
let user_id = urlArray[urlArray.length - 1];
|
|
||||||
this.wishStore.getUserWishes(user_id).then((res)=>{
|
|
||||||
this.wishes = res;
|
|
||||||
this.fetching = false;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
this.bookLoading = false;
|
this.bookLoading = false;
|
||||||
}).catch(()=>{
|
}).catch(()=>{
|
||||||
this.bookLoading = false;
|
this.bookLoading = false;
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
unbook(id){
|
||||||
|
this.wishStore.unbook(id, this.userStore.token).then(()=>{
|
||||||
|
this.updateFrontWishes();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -101,7 +109,8 @@ export default {
|
||||||
<v-btn v-if="isAuthenticated && !isSameUser" @click="bookDialog(wish['id'], wish['name'])">Забронировать</v-btn>
|
<v-btn v-if="isAuthenticated && !isSameUser" @click="bookDialog(wish['id'], wish['name'])">Забронировать</v-btn>
|
||||||
<span v-else>Нет</span>
|
<span v-else>Нет</span>
|
||||||
</span>
|
</span>
|
||||||
<span v-else><v-icon color="green" icon="mdi-check-bold"></v-icon></span>
|
<span v-else>Да <v-icon @click="unbook(wish['id'])" v-if="isAuthenticated && userStore.user['id'] == wish['book_user']['id']" class="cursor-pointer" icon="mdi-close-thick" color="red"></v-icon></span>
|
||||||
|
<!-- <span v-else><v-icon color="green" icon="mdi-check-bold"></v-icon></span>-->
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -132,10 +141,10 @@ export default {
|
||||||
<v-label class="mr-3 ml-5 text-body-1">Цена: {{ wish['price'] }}₽</v-label>
|
<v-label class="mr-3 ml-5 text-body-1">Цена: {{ wish['price'] }}₽</v-label>
|
||||||
<v-label class="mr-3 ml-5 text-body-1">Забронировано:
|
<v-label class="mr-3 ml-5 text-body-1">Забронировано:
|
||||||
<span v-if="wish['book_user'] === null">
|
<span v-if="wish['book_user'] === null">
|
||||||
<v-btn v-if="isAuthenticated && !isSameUser" @click="bookDialog(wish['id'], wish['name'])">Забронировать</v-btn>
|
<v-btn v-if="isAuthenticated && !isSameUser" @click="bookDialog(wish['id'], wish['name'])" :size="isWide ? '' : 'small'">Забронировать</v-btn>
|
||||||
<span v-else>Нет</span>
|
<span v-else>Нет</span>
|
||||||
</span>
|
</span>
|
||||||
<span v-else> Да</span>
|
<span v-else> Да <v-icon @click="unbook(wish['id'])" v-if="isAuthenticated && userStore.user['id'] == wish['book_user']['id']" class="cursor-pointer" icon="mdi-close-thick" color="red"></v-icon></span>
|
||||||
</v-label>
|
</v-label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -60,6 +60,11 @@ export default {
|
||||||
copyLink(){
|
copyLink(){
|
||||||
navigator.clipboard.writeText(this.wishlistLink);
|
navigator.clipboard.writeText(this.wishlistLink);
|
||||||
this.snackbar = true;
|
this.snackbar = true;
|
||||||
|
},
|
||||||
|
unbook(id){
|
||||||
|
this.wishStore.unbook(id, this.userStore.token).then(()=>{
|
||||||
|
this.updateFrontWishes();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,7 +101,7 @@ export default {
|
||||||
<td>{{ wish['name'] }}</td>
|
<td>{{ wish['name'] }}</td>
|
||||||
<td>{{ wish['price'] }}</td>
|
<td>{{ wish['price'] }}</td>
|
||||||
<td><a target="_blank" :href="wish['url']">{{ wish['url'] }}</a></td>
|
<td><a target="_blank" :href="wish['url']">{{ wish['url'] }}</a></td>
|
||||||
<td>{{ wish['book_user'] === null ? 'Нет' : wish['book_user']['name'] }}</td>
|
<td>{{ wish['book_user'] === null ? 'Нет' : wish['book_user']['name'] }}<v-icon v-if="wish['book_user'] !== null" @click="unbook(wish['id'])" class="cursor-pointer" icon="mdi-close-thick" color="red"></v-icon></td>
|
||||||
<td><v-icon @click="editWish(wish['id'])" class="cursor-pointer" color="white" icon="mdi-pencil"></v-icon></td>
|
<td><v-icon @click="editWish(wish['id'])" class="cursor-pointer" color="white" icon="mdi-pencil"></v-icon></td>
|
||||||
<td><v-icon @click="deleteWish(wish['id'])" class="cursor-pointer" color="white" icon="mdi-trash-can"></v-icon></td>
|
<td><v-icon @click="deleteWish(wish['id'])" class="cursor-pointer" color="white" icon="mdi-trash-can"></v-icon></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -124,7 +129,9 @@ export default {
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-column">
|
<div class="d-flex flex-column">
|
||||||
<v-label class="mr-3 ml-5 text-body-1">Цена: {{ wish['price'] }}₽</v-label>
|
<v-label class="mr-3 ml-5 text-body-1">Цена: {{ wish['price'] }}₽</v-label>
|
||||||
<v-label class="mr-3 ml-5 text-body-1">Забронировано: {{ wish['book_user'] === null ? 'Нет' : wish['book_user']['name'] }}</v-label>
|
<v-label class="mr-3 ml-5 text-body-1">Забронировано: {{ wish['book_user'] === null ? 'Нет' : wish['book_user']['name'] }}
|
||||||
|
<v-icon v-if="wish['book_user'] !== null" @click="unbook(wish['id'])" class="cursor-pointer" icon="mdi-close-thick" color="red"></v-icon>
|
||||||
|
</v-label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-100 mt-3">
|
<div class="w-100 mt-3">
|
||||||
|
@ -140,38 +147,6 @@ export default {
|
||||||
<DeleteWish :dialogDelete="dialogDeleteClose" :updateFrontWishes="updateFrontWishes" :wish_id="wishToDelete"/>
|
<DeleteWish :dialogDelete="dialogDeleteClose" :updateFrontWishes="updateFrontWishes" :wish_id="wishToDelete"/>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
</div>
|
</div>
|
||||||
<!-- <v-table v-if="!fetching && !isWide" class="card-bg w-100 h-auto mt-5 pa-3">-->
|
|
||||||
<!-- <thead>-->
|
|
||||||
<!-- <tr>-->
|
|
||||||
<!-- <th class="text-subtitle-1">Наименование</th>-->
|
|
||||||
<!-- <th class="text-subtitle-1">Цена</th>-->
|
|
||||||
<!-- <th class="text-subtitle-1">Забронировано</th>-->
|
|
||||||
<!-- <th class="text-subtitle-1"></th>-->
|
|
||||||
<!-- <th class="text-subtitle-1"></th>-->
|
|
||||||
<!-- </tr>-->
|
|
||||||
<!-- </thead>-->
|
|
||||||
<!-- <tbody>-->
|
|
||||||
<!-- <tr v-for="wish in wishesList">-->
|
|
||||||
<!-- <td><a target="_blank" :href="wish['url']">{{ wish['name'] }}</a></td>-->
|
|
||||||
<!-- <td>{{ wish['price'] }}</td>-->
|
|
||||||
<!-- <td>{{ wish['book_user'] === null ? 'Нет' : wish['book_user']['name'] }}</td>-->
|
|
||||||
<!-- <td><v-icon @click="editWish(wish['id'])" class="cursor-pointer" color="white" icon="mdi-pencil"></v-icon></td>-->
|
|
||||||
<!-- <td><v-icon @click="deleteWish(wish['id'])" class="cursor-pointer" color="white" icon="mdi-trash-can"></v-icon></td>-->
|
|
||||||
<!-- </tr>-->
|
|
||||||
<!-- <tr class="text-center">-->
|
|
||||||
<!-- <td colspan="6"><v-btn @click="dialogCreate = true" color="#212022" elevation="0" block><v-icon class="cursor-pointer" icon="mdi-plus-thick"></v-icon></v-btn></td>-->
|
|
||||||
<!-- </tr>-->
|
|
||||||
<!-- </tbody>-->
|
|
||||||
<!-- <v-dialog v-model="dialogCreate" :class="isWide ? 'w-66' : 'w-100'">-->
|
|
||||||
<!-- <CreateWish :dialogCreate="dialogCreateClose" :updateFrontWishes="updateFrontWishes"/>-->
|
|
||||||
<!-- </v-dialog>-->
|
|
||||||
<!-- <v-dialog v-model="dialogEdit" :class="isWide ? 'w-66' : 'w-100'">-->
|
|
||||||
<!-- <EditWish :dialogEdit="dialogEditClose" :updateFrontWishes="updateFrontWishes" :wish_id="wishToEditId"/>-->
|
|
||||||
<!-- </v-dialog>-->
|
|
||||||
<!-- <v-dialog v-model="dialogDelete" :class="isWide ? 'w-66' : 'w-100'">-->
|
|
||||||
<!-- <DeleteWish :dialogDelete="dialogDeleteClose" :updateFrontWishes="updateFrontWishes" :wish_id="wishToDelete"/>-->
|
|
||||||
<!-- </v-dialog>-->
|
|
||||||
<!-- </v-table>-->
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -39,5 +39,6 @@ Route::group(['prefix' => 'wish'], function () {
|
||||||
Route::post('destroy', [WishesController::class, 'destroy']);
|
Route::post('destroy', [WishesController::class, 'destroy']);
|
||||||
Route::get('by_id/{id}', [WishesController::class, 'getWishById']);
|
Route::get('by_id/{id}', [WishesController::class, 'getWishById']);
|
||||||
Route::post('book', [WishesController::class, 'book']);
|
Route::post('book', [WishesController::class, 'book']);
|
||||||
|
Route::post('unbook', [WishesController::class, 'unbook']);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue