feat: add request page

This commit is contained in:
Sergey Krylov 2025-02-07 07:12:55 +03:00
parent 6c99e47383
commit 49757c614a
5 changed files with 105 additions and 10 deletions

View File

@ -12,9 +12,11 @@
setup() { setup() {
const route = useRoute(); const route = useRoute();
const layout = computed(() => route.meta.layout); const layout = computed(() => route.meta.layout);
const layoutProps = computed(() => route.meta.layoutProps);
return { return {
layout, layout,
layoutProps,
} }
} }
} }
@ -24,6 +26,7 @@
<component <component
:is="layout + '-layout'" :is="layout + '-layout'"
v-if="layout" v-if="layout"
v-bind="layoutProps"
/> />
</template> </template>

View File

@ -1,6 +1,11 @@
<template> <template>
<the-navbar /> <the-navbar />
<div class="container with-nav"> <div class="container with-nav">
<router-link v-if="back" :to="{name: PAGE.HOME}">
<div class="breadcrumbs text-white">
<- К списку заявок
</div>
</router-link>
<app-alert /> <app-alert />
<div class="card"> <div class="card">
<router-view /> <router-view />
@ -8,14 +13,10 @@
</div> </div>
</template> </template>
<script> <script setup lang="ts">
import TheNavbar from '../components/TheNavbar.vue' import TheNavbar from '../components/TheNavbar.vue'
import AppAlert from '@/components/ui/AppAlert.vue'; import AppAlert from '@/components/ui/AppAlert.vue';
export default { import { PAGE } from '@/router';
components: {AppAlert, TheNavbar }
} defineProps<{back?: boolean}>()
</script> </script>
<style lang="scss" scoped>
</style>

View File

@ -10,7 +10,7 @@ export enum PAGE {
export const PAGE_URL: Record<PAGE, string> = { export const PAGE_URL: Record<PAGE, string> = {
[PAGE.HOME]: '/', [PAGE.HOME]: '/',
[PAGE.REQUEST]: '/:id', [PAGE.REQUEST]: '/request/:id',
[PAGE.AUTH]: '/auth', [PAGE.AUTH]: '/auth',
[PAGE.HELP]: '/help' [PAGE.HELP]: '/help'
} }
@ -45,9 +45,12 @@ const routes = [
{ {
path: PAGE_URL[PAGE.REQUEST], path: PAGE_URL[PAGE.REQUEST],
name: PAGE.REQUEST, name: PAGE.REQUEST,
component: () => import('../views/AuthPage.vue'), component: () => import('../views/RequestPage.vue'),
meta: { meta: {
layout: 'main', layout: 'main',
layoutProps: {
back: true
}
} }
}, },
] ]

View File

@ -45,6 +45,17 @@ const requestModule: Module<State, any> = {
await dispatch('alert/setAlert', {message: 'Ошибка при попытке получить список заявок', type: 'danger', title: 'Ошибка', time: 5000}, {root: true}) await dispatch('alert/setAlert', {message: 'Ошибка при попытке получить список заявок', type: 'danger', title: 'Ошибка', time: 5000}, {root: true})
} }
}, },
loadRequestById: async (injectee, payload) => {
const { dispatch } = injectee;
const {id} = payload;
try {
const token = authModule.state.token;
const { data } = await requestApi.get(`/requests/${id}.json?auth=${token}`);
return data;
} catch (e) {
await dispatch('alert/setAlert', {message: 'Ошибка при попытке получить заявку', type: 'danger', title: 'Ошибка', time: 5000}, {root: true})
}
},
create: async (injectee, payload: CreateRequestPayload) => { create: async (injectee, payload: CreateRequestPayload) => {
const { dispatch, commit } = injectee; const { dispatch, commit } = injectee;

77
src/views/RequestPage.vue Normal file
View File

@ -0,0 +1,77 @@
<template>
<h1>
Заявка
</h1>
<div
v-if="loading"
style="display: flex;"
>
<app-spinner />
</div>
<h2
v-else-if="!request"
class="text-center"
>
Заявка не найдена
</h2>
<table
v-else
class="table"
>
<tbody>
<tr>
<td>
<strong>
ФИО
</strong>
</td>
<td>{{ request.fio }}</td>
</tr>
<tr>
<td>
<strong>Сумма</strong>
</td>
<td>{{ currencyFormatter.format(request.amount) }}</td>
</tr>
<tr>
<td><strong>Телефон</strong></td>
<td>{{ request.phone }}</td>
</tr>
<tr>
<td><strong>Статус</strong></td>
<td>
<app-status :status="request.status" />
</td>
</tr>
</tbody>
</table>
</template>
<script setup>
import { useRoute } from 'vue-router';
import { useStore } from 'vuex';
import { onMounted, ref } from 'vue';
import AppSpinner from '@/components/ui/AppSpinner.vue';
import { currencyFormatter } from 'src/utils/helpers';
import AppStatus from '@/components/ui/AppStatus.vue';
const { params } = useRoute();
const { id } = params;
const store = useStore();
const request = ref();
const loading = ref(false);
onMounted(async () => {
loading.value = true;
request.value = await store.dispatch('request/loadRequestById', { id });
loading.value = false;
})
</script>
<style lang="scss" scoped>
</style>