bx-1379-redesign #15
|
@ -2,5 +2,5 @@
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<RouterView />
|
<RouterView />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
<Nav/>
|
<Nav />
|
||||||
</template>
|
</template>
|
|
@ -5,7 +5,7 @@ $white: #fff;
|
||||||
.nav {
|
.nav {
|
||||||
background-color: $white;
|
background-color: $white;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
height: 2rem;
|
// height: 2rem;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
right: 0;
|
right: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
@ -20,8 +20,8 @@ $white: #fff;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
font-size: 1.75rem;
|
font-size: 1.75rem;
|
||||||
width: 2rem;
|
width: 2.25rem;
|
||||||
height: 2rem;
|
height: 2.25rem;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ $white: #fff;
|
||||||
a,
|
a,
|
||||||
a[href].router-link-active {
|
a[href].router-link-active {
|
||||||
color: $white;
|
color: $white;
|
||||||
|
line-height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
|
|
|
@ -2,19 +2,16 @@
|
||||||
import { useRouter, useRoute } from "vue-router";
|
import { useRouter, useRoute } from "vue-router";
|
||||||
|
|
||||||
import KLogo from "../../assets/promo/logo.svg";
|
import KLogo from "../../assets/promo/logo.svg";
|
||||||
import { SERVER_URL } from "../../constants";
|
import { useItem } from "../../stores/item";
|
||||||
|
|
||||||
import Gallery from "./gallery.vue";
|
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
const page = useItem()
|
||||||
|
|
||||||
const startColor = `hsl(${(Math.random() * 360).toFixed()}, 100%, 50%)`
|
const startColor = `hsl(${(Math.random() * 360).toFixed()}, 100%, 50%)`
|
||||||
const endColor = `hsl(${(Math.random() * 360).toFixed()}, 100%, 50%)`
|
const endColor = `hsl(${(Math.random() * 360).toFixed()}, 100%, 50%)`
|
||||||
|
|
||||||
const res = await fetch(`${SERVER_URL}/api/item/${route.params.item ? (route.params.item + '/') : '?is_front=true'}`)
|
await page.load(route.params)
|
||||||
const pageArray = await res.json()
|
|
||||||
const page = Array.isArray(pageArray) ? pageArray[0] : pageArray
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
|
|
|
@ -1,32 +1,28 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Icon } from '@iconify/vue';
|
import { Icon } from '@iconify/vue';
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
import { usePromoSidebar } from '../stores/promo_sidebar';
|
|
||||||
|
import { useItem } from '../stores/item';
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const sidebar = usePromoSidebar()
|
const page = useItem()
|
||||||
const sidebarFunc = () => {
|
|
||||||
if (sidebar.is_open) {
|
|
||||||
sidebar.close()
|
|
||||||
} else {
|
|
||||||
sidebar.open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(route.params)
|
// console.log(route.name)
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="nav">
|
<div class="nav">
|
||||||
<div class="nav-group">
|
<div class="nav-group">
|
||||||
<span class="nav-icon" :class="[{ 'active': route.name == 'home' }]">
|
<span class="nav-icon" :class="[{ 'active': route.name == 'home' || route.fullPath == '/' }]">
|
||||||
<RouterLink :to="`/${route.params.item ? route.params.item.toString() : ''}`" @click.prevent="sidebarFunc">
|
<RouterLink :to="`/${page.slug}`">
|
||||||
<Icon icon="mdi:home-outline" />
|
<Icon icon="mdi:home-outline" />
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
</span>
|
</span>
|
||||||
<span class="nav-icon" :class="[{ 'active': route.name == 'scene' }]">
|
<span class="nav-icon" :class="[{ 'active': route.name == 'scene' }]" style="font-size: 1.875rem;">
|
||||||
|
<RouterLink :to="`/${page.slug}/${page.scene_3d}`">
|
||||||
<Icon icon="mdi:video-3d" />
|
<Icon icon="mdi:video-3d" />
|
||||||
|
</RouterLink>
|
||||||
</span>
|
</span>
|
||||||
<span class="nav-icon">
|
<span class="nav-icon" style="font-size: 1.375rem;">
|
||||||
<Icon icon="mdi:vector-arrange-below" />
|
<Icon icon="mdi:vector-arrange-below" />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -77,3 +77,18 @@ interface EnvVars {
|
||||||
env_displacementmap?: string,
|
env_displacementmap?: string,
|
||||||
env_normalmap?: string
|
env_normalmap?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface PageItem {
|
||||||
|
id: number;
|
||||||
|
images: Image[];
|
||||||
|
name: string;
|
||||||
|
slug: string;
|
||||||
|
is_front: boolean;
|
||||||
|
scene_3d: number;
|
||||||
|
}
|
||||||
|
interface Image {
|
||||||
|
id: number;
|
||||||
|
file: string;
|
||||||
|
alt: string;
|
||||||
|
title: string;
|
||||||
|
}
|
|
@ -9,7 +9,7 @@ import Promo from './components/Promo/index.vue'
|
||||||
import PromoMain from './components/Promo/main.vue'
|
import PromoMain from './components/Promo/main.vue'
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{ path: '/', component: Promo, name: 'index' },
|
{ path: '/', component: Promo, name: 'home_no' },
|
||||||
{ path: '/:item', component: Promo, name: 'home' },
|
{ path: '/:item', component: Promo, name: 'home' },
|
||||||
{ path: '/:item/:target', component: PromoMain, name: 'scene' },
|
{ path: '/:item/:target', component: PromoMain, name: 'scene' },
|
||||||
]
|
]
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
import { defineStore } from 'pinia'
|
||||||
|
import { SERVER_URL } from '../constants'
|
||||||
|
export const useItem = defineStore('item', {
|
||||||
|
state: () => {
|
||||||
|
return {
|
||||||
|
|
||||||
|
} as PageItem
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
async load(params: any) {
|
||||||
|
const res = await fetch(`${SERVER_URL}/api/item/${params.item ? (params.item + '/') : '?is_front=true'}`)
|
||||||
|
const pageArray = await res.json()
|
||||||
|
const page = Array.isArray(pageArray) ? pageArray[0] : pageArray
|
||||||
|
// this.$state = Object.assign(this.$state, page)
|
||||||
|
for (const key in page) {
|
||||||
|
this[key] = page[key]
|
||||||
|
}
|
||||||
|
return page
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
Loading…
Reference in New Issue