mirror of
https://github.com/logos-storage/ethcc-demo.git
synced 2026-01-07 15:43:11 +00:00
add nav breadcrumbs
This commit is contained in:
parent
12702d4e59
commit
9dea49c11c
@ -7,6 +7,7 @@ import BlockNumber from '@/components/BlockNumber.vue'
|
|||||||
import AppNav from '@/components/AppNav.vue'
|
import AppNav from '@/components/AppNav.vue'
|
||||||
import ContractEventAlerts from '@/components/ContractEventAlerts.vue'
|
import ContractEventAlerts from '@/components/ContractEventAlerts.vue'
|
||||||
import { initDrawers, initDismisses } from 'flowbite'
|
import { initDrawers, initDismisses } from 'flowbite'
|
||||||
|
import NavBreadcrumb from './components/NavBreadcrumb.vue'
|
||||||
|
|
||||||
const alerts = ref([])
|
const alerts = ref([])
|
||||||
const id = ref(0)
|
const id = ref(0)
|
||||||
@ -173,6 +174,7 @@ onMounted(async () => {
|
|||||||
</header>
|
</header>
|
||||||
<main class="flex-1 mx-auto max-w-screen-xl w-full p-4">
|
<main class="flex-1 mx-auto max-w-screen-xl w-full p-4">
|
||||||
<ContractEventAlerts v-model="alerts"></ContractEventAlerts>
|
<ContractEventAlerts v-model="alerts"></ContractEventAlerts>
|
||||||
|
<NavBreadcrumb></NavBreadcrumb>
|
||||||
<RouterView />
|
<RouterView />
|
||||||
</main>
|
</main>
|
||||||
<footer class="w-full text-center border-t p-4 mt-4 flex-none">
|
<footer class="w-full text-center border-t p-4 mt-4 flex-none">
|
||||||
|
|||||||
@ -43,34 +43,6 @@ import { RouterLink } from 'vue-router'
|
|||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
class="items-center justify-between hidden w-full md:flex md:w-auto md:order-1"
|
|
||||||
id="navbar-sticky"
|
|
||||||
>
|
|
||||||
<ul
|
|
||||||
class="flex flex-col p-4 md:p-0 mt-4 font-medium border border-gray-100 rounded-lg bg-gray-50 md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 md:bg-white dark:bg-gray-800 md:dark:bg-gray-900 dark:border-gray-700"
|
|
||||||
>
|
|
||||||
<li>
|
|
||||||
<RouterLink
|
|
||||||
class="router-link block py-2 px-3 rounded md:bg-transparent md:text-blue-700 md:p-0 md:dark:text-blue-500"
|
|
||||||
to="/"
|
|
||||||
>Requests</RouterLink
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<RouterLink
|
|
||||||
class="router-link block py-2 px-3 rounded text-gray-900 hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 md:dark:hover:text-blue-500 dark:text-white dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
|
|
||||||
to="/slots"
|
|
||||||
>Slots</RouterLink
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
</nav>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
nav a.router-link-exact-active {
|
|
||||||
@apply text-white bg-blue-700 md:bg-transparent md:text-blue-700 md:p-0 dark:text-white md:dark:text-blue-500;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
78
src/components/NavBreadcrumb.vue
Normal file
78
src/components/NavBreadcrumb.vue
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<script setup>
|
||||||
|
import { shorten } from '@/utils/ids'
|
||||||
|
import { computed, ref, watch } from 'vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
const parts = ref(getPathParts())
|
||||||
|
|
||||||
|
function getPathParts() {
|
||||||
|
return route.path.split('/')
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => route.path,
|
||||||
|
(_) => {
|
||||||
|
parts.value = getPathParts()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const routeName = computed(() => {
|
||||||
|
if (route.name === 'Request details') {
|
||||||
|
return `Request ${shorten(route.params.requestId)}`
|
||||||
|
} else {
|
||||||
|
return route.name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<!-- Breadcrumb -->
|
||||||
|
<nav
|
||||||
|
class="flex px-5 py-3 text-gray-700 border border-gray-200 rounded-lg bg-gray-50 dark:bg-gray-800 dark:border-gray-700"
|
||||||
|
aria-label="Breadcrumb"
|
||||||
|
>
|
||||||
|
<ol class="inline-flex items-center space-x-1 md:space-x-2 rtl:space-x-reverse">
|
||||||
|
<li class="inline-flex items-center">
|
||||||
|
<RouterLink
|
||||||
|
to="/"
|
||||||
|
class="inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
class="w-3 h-3 me-2.5"
|
||||||
|
aria-hidden="true"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
viewBox="0 0 20 20"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="m19.707 9.293-2-2-7-7a1 1 0 0 0-1.414 0l-7 7-2 2a1 1 0 0 0 1.414 1.414L2 10.414V18a2 2 0 0 0 2 2h3a1 1 0 0 0 1-1v-4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v4a1 1 0 0 0 1 1h3a2 2 0 0 0 2-2v-7.586l.293.293a1 1 0 0 0 1.414-1.414Z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
Requests
|
||||||
|
</RouterLink>
|
||||||
|
</li>
|
||||||
|
<li v-if="route.path !== '/'" aria-current="page">
|
||||||
|
<div class="flex items-center">
|
||||||
|
<svg
|
||||||
|
class="rtl:rotate-180 w-3 h-3 mx-1 text-gray-400"
|
||||||
|
aria-hidden="true"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 6 10"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke="currentColor"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-width="2"
|
||||||
|
d="m1 9 4-4-4-4"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<span class="ms-1 text-sm font-medium text-gray-500 md:ms-2 dark:text-gray-400">{{
|
||||||
|
routeName
|
||||||
|
}}</span>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
</template>
|
||||||
@ -13,27 +13,19 @@ const router = createRouter({
|
|||||||
component: RequestsView
|
component: RequestsView
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/slots',
|
path: '/request/:requestId?',
|
||||||
name: 'slots',
|
name: 'Request details',
|
||||||
// route level code-splitting
|
|
||||||
// this generates a separate chunk (About.[hash].js) for this route
|
|
||||||
// which is lazy-loaded when the route is visited.
|
|
||||||
component: () => import('../views/SlotsView.vue')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/request/:requestId',
|
|
||||||
name: 'request',
|
|
||||||
component: RequestView,
|
component: RequestView,
|
||||||
props: true // pass :requestId to props in RequestView
|
props: true // pass :requestId to props in RequestView
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/404',
|
path: '/404',
|
||||||
name: 'NotFound',
|
name: '404 not found',
|
||||||
component: NotFoundView
|
component: NotFoundView
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/moderate',
|
path: '/moderate',
|
||||||
name: 'Moderate',
|
name: 'Moderate images',
|
||||||
component: ModerateView
|
component: ModerateView
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user