@ -0,0 +1,134 @@ | |||
<template> | |||
<div class="aboutmessage"> | |||
<div class="about position-relative"> | |||
<div class="message position-absolute"> | |||
<h2 class="color-fff font-bold">About Us</h2> | |||
<div class="color-fff font-700" :class="mobileShow ? 'font-size-14 aboutitem1' : 'font-size-20 aboutitem'"> | |||
<strong>· </strong> | |||
<p class="content"> | |||
MONTIERI Group is an one-stop service solution for international Hotel and real estate project | |||
development. Company was established in 2002, aims to provide one-stop solutions from design to | |||
product. | |||
We have developed branches in many cities in China,USA and Canada. We have successfully done many | |||
international projects globally. | |||
</p> | |||
</div> | |||
<div class="color-fff font-700 aboutitem" | |||
:class="mobileShow ? 'font-size-14 aboutitem1' : 'font-size-20 aboutitem'"> | |||
<strong>· </strong> | |||
<p class="content"> | |||
We have more than 17 years overseas experience, professional management and operation experience. | |||
The critical point is working backwards in mind, seeking and achieving value for every project and | |||
client. Then, working from achieving value to budget, time and quality, back to create a feasible | |||
concept. MONTIERI also invested in real estate projects in California and Canada。 | |||
</p> | |||
</div> | |||
<span class="color-fff btn position-absolute" :class="mobileShow ? 'font-size-20' : 'font-size-26'" | |||
@click="goPage">Back</span> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
import router from '../router'; | |||
import { onMounted, ref } from 'vue'; | |||
const goPage = () => router.back() | |||
let mobileShow = ref<any>(false) | |||
onMounted(() => { | |||
if (document.body.offsetWidth < 960) { | |||
mobileShow.value = true | |||
} else { | |||
mobileShow.value = false | |||
} | |||
window.addEventListener('resize', function () { | |||
if (document.body.offsetWidth < 960) { | |||
mobileShow.value = true | |||
} else { | |||
mobileShow.value = false | |||
} | |||
}) | |||
}) | |||
</script> | |||
<style scoped lang="less"> | |||
.aboutmessage { | |||
box-sizing: border-box; | |||
.about { | |||
// height: 42vw; | |||
height: 100%; | |||
background: url("../assets/img/aboutus.jpg") no-repeat; | |||
background-size: cover; | |||
background-position: center; | |||
box-sizing: border-box; | |||
.message { | |||
box-sizing: border-box; | |||
background: rgba(137, 144, 153, 0.35); | |||
top: 50%; | |||
transform: translateY(-50%); | |||
height: 50%; | |||
padding: 2vw 3vw; | |||
overflow: hidden; | |||
height: 50%; | |||
display: flex; | |||
flex-direction: column; | |||
.aboutitem { | |||
margin-top: 2vw; | |||
display: flex; | |||
.content { | |||
overflow: hidden; | |||
text-overflow: ellipsis; | |||
display: -webkit-box; | |||
-webkit-line-clamp: 4; | |||
-webkit-box-orient: vertical; | |||
display: -moz-box; | |||
-moz-line-clamp: 4; | |||
-moz-box-orient: vertical; | |||
word-wrap: break-word; | |||
word-break: break-all; | |||
white-space: normal; | |||
} | |||
} | |||
.aboutitem1 { | |||
margin-top: 2vw; | |||
display: flex; | |||
.content { | |||
overflow: hidden; | |||
text-overflow: ellipsis; | |||
display: -webkit-box; | |||
-webkit-line-clamp: 6; | |||
-webkit-box-orient: vertical; | |||
display: -moz-box; | |||
-moz-line-clamp: 6; | |||
-moz-box-orient: vertical; | |||
word-wrap: break-word; | |||
word-break: break-all; | |||
white-space: normal; | |||
} | |||
} | |||
.btn { | |||
cursor: pointer; | |||
bottom: 1vw; | |||
left: 50%; | |||
transform: translateX(-50%); | |||
} | |||
.btn:hover { | |||
color: rgb(255, 192, 0); | |||
} | |||
} | |||
} | |||
} | |||
@media screen and (width: 960px) {} | |||
</style> |
@ -0,0 +1,172 @@ | |||
<template> | |||
<div class="allcases"> | |||
<div class="cases"> | |||
<div class="cases-item" v-for="item, index in caseList" :key="index" @click="goPage(`/projectcase/${index}`)"> | |||
<div class="item-img"> | |||
<img :src="item.url" :alt="item.title"> | |||
<span class="imgbgc"></span> | |||
</div> | |||
<h3>{{ item.title }}</h3> | |||
<div class="other"> | |||
<span class="other-item"> | |||
<img src="../assets/img/i20.png" alt="location"> | |||
<p>{{ item.location }}</p> | |||
</span> | |||
<span class="other-item"> | |||
<img src="../assets/img/i21.png" alt="units"> | |||
<p>{{ item.units }} Units</p> | |||
</span> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
import router from '../router'; | |||
import { onMounted, ref } from 'vue' | |||
let caseList = Array<any>( | |||
{ | |||
title: 'Fairmont Empress Hotel', | |||
location: 'Victoria, Canada', | |||
units: '300+', | |||
url: '/src/assets/img/cases/01.jpg' | |||
}, | |||
{ | |||
title: 'Monsaraz Hilton', | |||
location: 'San Diego,USA', | |||
units: '200+', | |||
url: '/src/assets/img/cases/02.jpg' | |||
}, | |||
{ | |||
title: 'Canopy By Hilton San Francisco Soma Hotel', | |||
location: 'San Fransisco,USA', | |||
units: '200+', | |||
url: '/src/assets/img/cases/03.jpg' | |||
}, | |||
{ | |||
title: 'Lofts on Laurel', | |||
location: 'San Diego,USA', | |||
units: '20+', | |||
url: '/src/assets/img/cases/04.jpg' | |||
}, | |||
{ | |||
title: 'State&Oak Street', | |||
location: 'Carlsbad,CA,USA', | |||
units: '20+', | |||
url: '/src/assets/img/cases/05.jpg' | |||
}, | |||
{ | |||
title: '989 Johson Street', | |||
location: 'Victoria, Canada', | |||
units: '180+', | |||
url: '/src/assets/img/cases/06.jpg' | |||
}, | |||
{ | |||
title: 'Tarrace Lofts', | |||
location: 'Vista, California, USA', | |||
units: '20+', | |||
url: '/src/assets/img/cases/07.jpg' | |||
}, | |||
{ | |||
title: 'Ocean 17', | |||
location: 'Carlsbad,CA,USA', | |||
units: '17', | |||
url: '/src/assets/img/cases/08.jpg' | |||
}, | |||
) | |||
const goPage = (url: any) => { | |||
document.documentElement.scrollTop = 0 | |||
router.push({ | |||
path: url | |||
}) | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
.allcases { | |||
margin-top: 1rem; | |||
box-sizing: border-box; | |||
margin: 0; | |||
padding: 0; | |||
.cases { | |||
box-sizing: border-box; | |||
width: 100%; | |||
padding: 2rem; | |||
display: flex; | |||
flex-wrap: wrap; | |||
.cases-item { | |||
width: 30%; | |||
margin-bottom: 2rem; | |||
margin-right: 3.5rem; | |||
.item-img { | |||
position: relative; | |||
width: 100%; | |||
height: 75%; | |||
margin-bottom: 0.5rem; | |||
overflow: hidden; | |||
.imgbgc { | |||
position: absolute; | |||
bottom: 0; | |||
width: 100%; | |||
height: 0.5rem; | |||
z-index: 2; | |||
left: 0; | |||
background-color: #fa8106; | |||
} | |||
img { | |||
width: 100%; | |||
height: 100%; | |||
transition: 0.5s linear; | |||
} | |||
img:hover { | |||
scale: 1.2; | |||
} | |||
} | |||
.other { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: left; | |||
margin-top: 1rem; | |||
border-top: 1px solid #888; | |||
padding: 0.5rem 0 0 0; | |||
.other-item { | |||
display: flex; | |||
font-size: 14px; | |||
color: #888; | |||
img { | |||
margin-right: 1rem; | |||
} | |||
} | |||
.other-item:first-child { | |||
margin: 0.5rem 0; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
@media screen and (max-width: 960px) { | |||
.allcases{ | |||
.cases{ | |||
margin-top: 1rem; | |||
.cases-item{ | |||
width: 100%; | |||
margin-right: 0; | |||
margin-bottom: 3rem; | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,96 @@ | |||
<template> | |||
<div class="allproduct"> | |||
<div class="product"> | |||
<div class="product-img position-relative" v-for="item, index in allList" :key="index" @click="goPage(`/productcenter/${item.name}`)"> | |||
<img :src="item.url" :alt="item.name"> | |||
<span class="imgtitle position-absolute color-fff">{{ item.name }}</span> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
import router from '../router'; | |||
let allList = Array<any>( | |||
{ url: '/src/assets/img/center01.jpg', name: 'Door' }, | |||
{ url: '/src/assets/img/center02.jpg', name: 'Window' }, | |||
{ url: '/src/assets/img/center03.jpg', name: 'Railing' }, | |||
{ url: '/src/assets/img/center04.jpg', name: 'Building Materials' }, | |||
{ url: '/src/assets/img/center05.jpg', name: 'Kitchen Cabinets with Customization' }, | |||
{ url: '/src/assets/img/center06.jpg', name: 'Kitchen faucet and sink' }, | |||
{ url: '/src/assets/img/center07.jpg', name: 'Sanitary Ware' }, | |||
) | |||
const goPage = (url: any) => { | |||
document.documentElement.scrollTop = 0 | |||
router.push(url) | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
.allproduct { | |||
width: 100%; | |||
margin-top: 1rem; | |||
.product { | |||
box-sizing: border-box; | |||
padding: 1rem; | |||
width: 100%; | |||
display: flex; | |||
flex-wrap: wrap; | |||
.product-img { | |||
width: 23%; | |||
height: 35vw; | |||
overflow: hidden; | |||
margin-right: 2rem; | |||
margin-bottom: 2rem; | |||
img { | |||
width: 100%; | |||
height: 100%; | |||
transition: 0.5s linear; | |||
} | |||
.imgtitle { | |||
width: 100%; | |||
bottom: 0; | |||
left: 0; | |||
height: 3rem; | |||
background: rgba(0, 0, 0, 0.3); | |||
font-size: 26px; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
} | |||
img:hover { | |||
scale: 1.2; | |||
} | |||
img:hover+.imgtitle { | |||
background: #fa8106; | |||
} | |||
} | |||
} | |||
} | |||
@media screen and (max-width: 960px) { | |||
.allproduct { | |||
margin-top: 2rem; | |||
.product { | |||
display: flex; | |||
flex-direction: column; | |||
.product-img { | |||
width: 100%; | |||
height: 125vw; | |||
img { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
} | |||
} | |||
} | |||
}</style> |
@ -1,31 +0,0 @@ | |||
<template> | |||
<div class="breadcrumb d-flex flex-nowrap"> | |||
<div class="item" v-for="(item,index) in breadcrumbList" :key="index"> | |||
<a :href="item.href"><h5 class="color-666 d-inline-block font-size-16">{{ item.title }}</h5><span v-if="index != listLength" class="mx-1 color-666">/</span></a> | |||
</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
import {onMounted, ref} from "vue"; | |||
let breadcrumbList = ref<any>( | |||
[ | |||
{href:'/',title:'Home'}, | |||
{href:'/',title:'Case Detail'} | |||
] | |||
) | |||
let listLength = ref<number>(0) | |||
onMounted(async ()=>{ | |||
listLength.value = breadcrumbList.value.length - 1 | |||
}) | |||
</script> | |||
<style scoped lang="less"> | |||
.breadcrumb{ | |||
.item:hover h5{ | |||
color: #fa8106; | |||
} | |||
} | |||
</style> |
@ -1,83 +0,0 @@ | |||
<template> | |||
<div class="m-auto case-details" :class="mobileShow?'width-90':'width-80'"> | |||
<Breadcrumbs></Breadcrumbs> | |||
<div class="case-dateils"> | |||
<div class="switch-menu d-flex flex-nowrap"> | |||
<div class="s30 width-50 text-center" :class="selectIndex === index?'selected':''" v-for="(item,index) in switchList" @click="selectMethods(index)" :key="index"><span>{{ item }}</span></div> | |||
</div> | |||
<div class="case-content"> | |||
<div v-if="selectIndex === 0"> | |||
<img src="../assets/img/projectCase.png" class="width-100 mt-2" alt="Project Case"> | |||
</div> | |||
<div v-else-if="selectIndex === 1"> | |||
<h3 class="font-size-18 color-343434 mb-1">Quality</h3> | |||
<p class="line-height-2 font-size-16 color-343434">Striving for perfection is our philosophy.</p> | |||
<p class="line-height-2 font-size-16 color-343434">Owing to its European quality control standards, automatic HOMAG product lines,integrated design and production software, and best raw materials from world well-known suppliers. OPPEIN can deliver excellent products in line with German quality. | |||
</p> | |||
<p class="line-height-2 font-size-16 color-343434">We have implemented a complex quality system to review all material and standard operating procedures are audited regularly to ensure the standards are met.. | |||
</p> | |||
<img src="../assets/img/projectCase1.png" class="width-100 mt-2" alt="Project Case"> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
import Breadcrumbs from "./Breadcrumbs.vue" | |||
import {onMounted, ref} from "vue"; | |||
let screenWidth = ref<any>('') | |||
let mobileShow = ref<any>(false) | |||
let selectIndex = ref<number>(1) | |||
let slidesPerView = ref<number>(3) | |||
let switchList = ref<any>(['DETAILS','QUALITY']) | |||
onMounted(async ()=>{ | |||
screenWidth.value = document.body.offsetWidth; | |||
if(screenWidth.value<800){ | |||
mobileShow.value = true | |||
slidesPerView.value = 1 | |||
}else if(screenWidth.value<1000){ | |||
mobileShow.value = true | |||
slidesPerView.value = 2 | |||
}else{ | |||
mobileShow.value = false | |||
slidesPerView.value = 3 | |||
} | |||
window.addEventListener('resize',function(){ | |||
screenWidth.value = document.body.offsetWidth; | |||
if(screenWidth.value<800){ | |||
mobileShow.value = true | |||
slidesPerView.value = 1 | |||
}else if(screenWidth.value<1000){ | |||
mobileShow.value = true | |||
slidesPerView.value = 2 | |||
}else{ | |||
mobileShow.value = false | |||
slidesPerView.value = 3 | |||
} | |||
}) | |||
}) | |||
const selectMethods = (index:number) => { | |||
selectIndex.value = index | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
.s30{ | |||
font-size: calc(30 * 100vw / 1920); | |||
span{ | |||
transition: all .5s; | |||
cursor: pointer; | |||
} | |||
} | |||
.s30 span:hover{ | |||
color: #fa8106; | |||
border-bottom: 2px solid #fa8106; | |||
} | |||
.selected{ | |||
span{ | |||
color: #fa8106; | |||
border-bottom: 2px solid #fa8106; | |||
} | |||
} | |||
</style> |
@ -0,0 +1,336 @@ | |||
<template> | |||
<div> | |||
<div class="procurement align-items-center width-80 m-auto"> | |||
<div class="pa-2 border-box"> | |||
<div class="casemessage"> | |||
<div class="casemessage-left"> | |||
<p class="font-size-26"><strong>{{ casemessage.title }}</strong></p> | |||
<div class="address-year" :class="mobileShow ? 'font-size-12' : 'font-size-16'"> | |||
<span class="address"> | |||
<i class="iconfont icon-zuobiao" :class="mobileShow ? 'font-size-12' : 'font-size-16'"></i> | |||
<span>{{ casemessage.country }}</span> | |||
</span> | |||
<span class="year"> | |||
<i class="iconfont icon-shijian" :class="mobileShow ? 'font-size-12' : 'font-size-16'"></i> | |||
<span>{{ casemessage.year }}</span> | |||
</span> | |||
</div> | |||
<div class="message" :class="mobileShow ? 'font-size-12' : 'font-size-16'"> | |||
<p class="item"><strong>Address: </strong>{{ casemessage.address }}</p> | |||
<p class="item"><strong>Type: </strong>{{ casemessage.type }}</p> | |||
<p class="item"><strong>Solutions: </strong>{{ casemessage.solutions }}</p> | |||
<p class="item"><strong>Unites: </strong>{{ casemessage.unites }}</p> | |||
</div> | |||
<div class="share" :class="mobileShow ? 'font-size-16 mb-2 mt-1' : 'sont-size-22'"> | |||
<span><strong>Share To: </strong></span> | |||
</div> | |||
</div> | |||
<div class="casemessage-right" :class="mobileShow ? 'width-100' : 'width-70'"> | |||
<img :src="casemessage.img[0].details" :alt="casemessage.img[0].name" class="width-100 imgcase"> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="details"> | |||
<h2><strong>DETAILS</strong></h2> | |||
<img :src="casemessage.img[1].details" :alt="casemessage.img[1].name" class="img" :class="mobileShow ? 'width-70' : 'width-50'"> | |||
</div> | |||
<div class="btn position-relative" :class="mobileShow ? 'font-size-16' : 'font-size-22'" @click="goPage">Back</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
import router from '../router'; | |||
import { watch, reactive, ref, onMounted } from 'vue' | |||
let casemessage = reactive<any>({}) | |||
watch(() => router.currentRoute.value.params.name, (newValue: any) => { | |||
if (newValue == '0') { | |||
casemessage = { | |||
title: 'MONTIER Canada Hotel Project - Fairmont Empress Hotel', | |||
country: 'Victoria, Canada', | |||
year: 2020, | |||
address: '721 Government St, Victoria, BC V8W 1W5,Canada', | |||
type: 'Hotel', | |||
solutions: 'Furniture,Fixtures&Equipment, lights fixture', | |||
unites: '300+', | |||
img: [ | |||
{ details: '/src/assets/img/cases/01.jpg', name: 'MONTIER Canada Hotel Project - Fairmont Empress Hotel' }, | |||
{ details: '/src/assets/img/cases/001.jpg', name: 'MONTIER Canada Hotel Project - Fairmont Empress Hotel' } | |||
] | |||
} | |||
} else if (newValue == '1') { | |||
casemessage = { | |||
title: 'Monsaraz Hilton', | |||
country: 'San Diego,USA', | |||
year: 2021, | |||
address: '1451 Rosecrans St, San Diego, CA 92106,USA', | |||
type: 'Hotel', | |||
solutions: 'Furniture,Fixtures&Equipment, doors', | |||
unites: '200+', | |||
img: [ | |||
{ details: '/src/assets/img/cases/02.jpg', name: 'Monsaraz Hilton' }, | |||
{ details: '/src/assets/img/cases/002.jpg', name: 'Monsaraz Hilton' } | |||
] | |||
} | |||
} else if (newValue == '2') { | |||
casemessage = { | |||
title: 'Canopy By Hilton San Francisco Soma Hotel', | |||
country: 'San Fransisco,USA', | |||
year: 2018, | |||
address: '333 O\'Farrell St #101, San Francisco, CA 94102,USA', | |||
type: 'Hotel', | |||
solutions: 'Furniture,Fixtures&Equipment,lights fixture', | |||
unites: '200+', | |||
img: [ | |||
{ details: '/src/assets/img/cases/03.jpg', name: 'Canopy By Hilton San Francisco Soma Hotel' }, | |||
{ details: '/src/assets/img/cases/003.jpg', name: 'Canopy By Hilton San Francisco Soma Hotel' } | |||
] | |||
} | |||
} else if (newValue == '3') { | |||
casemessage = { | |||
title: 'Lofts on Laurel', | |||
country: 'San Diego,USA', | |||
year: 2021, | |||
address: '2466 First Ave., San Diego, CA 92101', | |||
type: 'Condo', | |||
solutions: 'Building Materials', | |||
unites: '20+', | |||
img: [ | |||
{ details: '/src/assets/img/cases/04.jpg', name: 'Lofts on Laurel' }, | |||
{ details: '/src/assets/img/cases/004.jpg', name: 'Lofts on Laurel' } | |||
] | |||
} | |||
} else if (newValue == '4') { | |||
casemessage = { | |||
title: 'State&Oak Street', | |||
country: 'Carlsbad,CA,USA', | |||
year: 2020, | |||
address: '3088 State St, Carlsbad, CA 92008', | |||
type: 'Condo', | |||
solutions: 'Building Materials', | |||
unites: '20+', | |||
img: [ | |||
{ details: '/src/assets/img/cases/05.jpg', name: 'State&Oak Street' }, | |||
{ details: '/src/assets/img/cases/005.jpg', name: 'State&Oak Street' } | |||
] | |||
} | |||
} else if (newValue == '5') { | |||
casemessage = { | |||
title: '989 Johson Street', | |||
country: 'Victoria, Canada', | |||
year: 2020, | |||
address: '989 Johnson StVictoria, BC V8V 3N7', | |||
type: 'Condo', | |||
solutions: 'Building Materials', | |||
unites: '180+', | |||
img: [ | |||
{ details: '/src/assets/img/cases/06.jpg', name: '989 Johson Street' }, | |||
{ details: '/src/assets/img/cases/006.jpg', name: '989 Johson Street' } | |||
] | |||
} | |||
} else if (newValue == '6') { | |||
casemessage = { | |||
title: 'Tarrace Lofts', | |||
country: 'Vista, California, USA', | |||
year: 2020, | |||
address: '516 S. Santa Fe Avenue,Vista,California', | |||
type: 'Apartment', | |||
solutions: 'Building Materials', | |||
unites: '20+', | |||
img: [ | |||
{ details: '/src/assets/img/cases/07.jpg', name: 'Tarrace Lofts' }, | |||
{ details: '/src/assets/img/cases/007.jpg', name: 'Tarrace Lofts' } | |||
] | |||
} | |||
} else if (newValue == '7') { | |||
casemessage = { | |||
title: 'Ocean 17', | |||
country: 'Carlsbad,CA,USA', | |||
year: 2023, | |||
address: '2501 State Street Carlsbad, California 92008,USA', | |||
type: 'Condo', | |||
solutions: 'Building Materials, lights fixture', | |||
unites: '17', | |||
img: [ | |||
{ details: '/src/assets/img/cases/08.jpg', name: 'Ocean 17' }, | |||
{ details: '/src/assets/img/cases/008.jpg', name: 'Ocean 17' } | |||
] | |||
} | |||
} | |||
}, { immediate: true, deep: true }) | |||
let mobileShow = ref<any>(false) | |||
const goPage = () => { | |||
document.documentElement.scrollTop = 0 | |||
router.back() | |||
} | |||
onMounted(() => { | |||
if (document.body.offsetWidth < 960) { | |||
mobileShow.value = true | |||
} else { | |||
mobileShow.value = false | |||
} | |||
window.addEventListener('resize', function () { | |||
if (document.body.offsetWidth < 960) { | |||
mobileShow.value = true | |||
} else { | |||
mobileShow.value = false | |||
} | |||
}) | |||
}) | |||
</script> | |||
<style scoped lang="less"> | |||
.btn { | |||
cursor: pointer; | |||
left: 50%; | |||
transform: translateX(-50%); | |||
margin: 3rem 0; | |||
float: left; | |||
font-weight: bold; | |||
padding: 1rem 2.5rem; | |||
border: 1px solid #333; | |||
} | |||
.btn:hover { | |||
color: #fa8106; | |||
border: 1px solid #fa8106; | |||
} | |||
.procurement { | |||
margin-top: 2vw; | |||
} | |||
.casemessage { | |||
padding: 15px; | |||
display: flex; | |||
justify-content: space-between; | |||
// align-items: center; | |||
overflow: hidden; | |||
.casemessage-left { | |||
width: 50%; | |||
font-size: 26px; | |||
margin-right: 5%; | |||
.address-year { | |||
padding: 1rem 0rem; | |||
border-bottom: 1px solid #333; | |||
display: flex; | |||
.address { | |||
margin-right: 4rem; | |||
} | |||
.address, | |||
.year { | |||
display: flex; | |||
align-items: center; | |||
span{ | |||
white-space: nowrap; | |||
} | |||
.iconfont { | |||
color: #ed7d31; | |||
// font-size: 2rem; | |||
margin-right: 1rem; | |||
} | |||
} | |||
} | |||
.message { | |||
padding: 4rem 0; | |||
// font-size: 16px; | |||
border-bottom: 2px solid rgba(232, 232, 232); | |||
.item { | |||
margin: 10px 0; | |||
// color: #888; | |||
} | |||
} | |||
.button-left { | |||
// position: absolute; | |||
cursor: pointer; | |||
float: left; | |||
padding: 10px 20px; | |||
background-color: #fa8106; | |||
float: left; | |||
margin-top: 5vw; | |||
font-size: 16px; | |||
color: #fff; | |||
} | |||
} | |||
.casemessage-right { | |||
// width: 45%; | |||
height: 25vw; | |||
overflow: hidden; | |||
img { | |||
transition: all 3s; | |||
} | |||
} | |||
.casemessage-right:hover img { | |||
transform: scale(1.1); | |||
} | |||
} | |||
.details { | |||
width: 75%; | |||
margin: 20px auto; | |||
text-align: left; | |||
.img { | |||
margin-top: 2rem; | |||
} | |||
} | |||
@media screen and (max-width: 960px) { | |||
.btn{ | |||
left: 50%; | |||
transform: translateX(-50%); | |||
} | |||
.details{ | |||
text-align: center; | |||
} | |||
.casemessage { | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-between; | |||
.casemessage-left { | |||
width: 100%; | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-between; | |||
margin-bottom: 10px; | |||
.address-year{ | |||
display: flex; | |||
flex-direction: column; | |||
.address{ | |||
margin-bottom: 0.5rem; | |||
} | |||
} | |||
.button-left { | |||
white-space: nowrap; | |||
} | |||
} | |||
.casemessage-right { | |||
height: 35vw; | |||
.imgcase { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -1,85 +0,0 @@ | |||
<template> | |||
<div class="productcenter"> | |||
<div class="box" v-if="!show"> | |||
{{ router.currentRoute.value.params.name }} | |||
</div> | |||
<div class="box" v-else> | |||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> | |||
<el-tab-pane :label="item.title" :name="item.position" v-for="item,index in productList" :key="index"> | |||
<div> | |||
<h2>{{ item.title }}</h2> | |||
</div> | |||
</el-tab-pane> | |||
</el-tabs> | |||
</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
import router from '../router'; | |||
import { ref } from 'vue' | |||
import type { TabsPaneContext } from 'element-plus/lib'; | |||
let show = ref<any>(false) | |||
let productList = Array<any>([]) | |||
let activeName = ref<any>('Floor') | |||
const handleClick = (tab: TabsPaneContext, event: Event) => { | |||
console.log(tab, event) | |||
} | |||
if (router.currentRoute.value.params.name == 'Building Materials') { | |||
show.value = true | |||
productList = [ | |||
{ title: 'Floor', position: 'Floor' }, | |||
{ title: 'Wall', position: 'Wall' }, | |||
{ title: 'roof', position: 'roof' } | |||
] | |||
activeName.value = productList[0].title | |||
} else if(router.currentRoute.value.params.name == 'Sanitary Ware') { | |||
show.value = true | |||
productList = [ | |||
{ title: 'Mirror', position: 'Mirror' }, | |||
{ title: 'Toilet', position: 'Toilet' }, | |||
{ title: 'Bathtub ', position: 'Bathtub ' }, | |||
{ title: 'Jacuzzi', position: 'Jacuzzi' }, | |||
{ title: 'Faucet', position: 'Faucet' }, | |||
{ title: 'Sink', position: 'Sink' }, | |||
{ title: 'Accessories', position: 'Accessories' }, | |||
{ title: 'Shower Glass', position: 'ShowerGlass' }, | |||
{ title: 'Bathroom', position: 'Bathroom' }, | |||
{ title: 'Shower system', position: 'Showersystem' }, | |||
] | |||
activeName.value = productList[0].title | |||
}else{ | |||
show.value = false | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
.productcenter { | |||
margin-top: 2vw; | |||
.box { | |||
width: 90%; | |||
margin: 0 auto; | |||
} | |||
} | |||
@media screen and (max-width: 960px) { | |||
.productcenter { | |||
margin-top: 14vw; | |||
} | |||
} | |||
</style> | |||
<style> | |||
.demo-tabs > .el-tabs__content { | |||
padding: 10px; | |||
color: #6b778c; | |||
font-size: 32px; | |||
font-weight: 600; | |||
} | |||
</style> |
@ -0,0 +1,158 @@ | |||
<template> | |||
<div class="productcenter"> | |||
<div class="door-bgc position-relative"> | |||
<img src="../assets/img/door/door.jpg" alt="Door"> | |||
<span class="position-absolute doortitle color-fff" :class="mobileShow ? 'font-size-16' : 'font-size-50'">Safety, Health, and Environmental | |||
Protection</span> | |||
</div> | |||
<div class="box"> | |||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> | |||
<el-tab-pane :label="item.title" :name="item.title" v-for="item, index in productList" :key="index"> | |||
<div> | |||
<h2>{{ item.title }}</h2> | |||
</div> | |||
</el-tab-pane> | |||
</el-tabs> | |||
</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
import router from '../router'; | |||
import { ref, watch, onMounted } from 'vue' | |||
import type { TabsPaneContext } from 'element-plus/lib'; | |||
let productList = Array<any>([]) | |||
let activeName = ref<any>('') | |||
let mobileShow = ref<any>(false) | |||
const handleClick = (tab: TabsPaneContext, event: Event) => { | |||
} | |||
onMounted(() => { | |||
if (document.body.offsetWidth < 960) { | |||
mobileShow.value = true | |||
} else { | |||
mobileShow.value = false | |||
} | |||
window.addEventListener('resize', function () { | |||
if (document.body.offsetWidth < 960) { | |||
mobileShow.value = true | |||
} else { | |||
mobileShow.value = false | |||
} | |||
}) | |||
}) | |||
// if (router.currentRoute.value.params.name == 'Building Materials') { | |||
// show.value = true | |||
// productList = [ | |||
// { title: 'Floor', position: 'Floor' }, | |||
// { title: 'Wall', position: 'Wall' }, | |||
// { title: 'roof', position: 'roof' } | |||
// ] | |||
// activeName.value = productList[0].title | |||
// } else if(router.currentRoute.value.params.name == 'Sanitary Ware') { | |||
// show.value = true | |||
// productList = [ | |||
// { title: 'Mirror', position: 'Mirror' }, | |||
// { title: 'Toilet', position: 'Toilet' }, | |||
// { title: 'Bathtub ', position: 'Bathtub ' }, | |||
// { title: 'Jacuzzi', position: 'Jacuzzi' }, | |||
// { title: 'Faucet', position: 'Faucet' }, | |||
// { title: 'Sink', position: 'Sink' }, | |||
// { title: 'Accessories', position: 'Accessories' }, | |||
// { title: 'Shower Glass', position: 'ShowerGlass' }, | |||
// { title: 'Bathroom', position: 'Bathroom' }, | |||
// { title: 'Shower system', position: 'Showersystem' }, | |||
// ] | |||
// activeName.value = productList[0].title | |||
// } | |||
// watch(() => router.currentRoute.value.params.name, (newValue: any) => { | |||
// if(newValue == 'Door'){ | |||
// console.log(123); | |||
// } | |||
// }, { }) | |||
if (router.currentRoute.value.params.name == 'Door') { | |||
productList = [ | |||
{ | |||
title: 'Entrance Doors', | |||
children: [ | |||
{} | |||
] | |||
}, | |||
{ title: 'Interior Doors' }, | |||
{ title: 'Fire Doors' }, | |||
{ title: 'Sliding Doors' } | |||
] | |||
activeName.value = productList[0].title | |||
} else if (router.currentRoute.value.params.name == 'Window') { | |||
console.log(2); | |||
} else if (router.currentRoute.value.params.name == 'Railing') { | |||
console.log(3); | |||
} else if (router.currentRoute.value.params.name == 'Building Materials') { | |||
console.log(4); | |||
} else if (router.currentRoute.value.params.name == 'Kitchen Cabinets with Customization') { | |||
console.log(5); | |||
} else if (router.currentRoute.value.params.name == 'Kitchen faucet and sink') { | |||
console.log(6); | |||
} else if (router.currentRoute.value.params.name == 'Sanitary Ware') { | |||
console.log(7); | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
.productcenter { | |||
box-sizing: border-box; | |||
margin: 0; | |||
padding: 0; | |||
.door-bgc { | |||
width: 100%; | |||
height: 60%; | |||
img { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
.doortitle { | |||
bottom: 0; | |||
left: 0; | |||
width: 100%; | |||
z-index: 999; | |||
height: 14%; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
background: rgba(0, 0, 0, 0.2); | |||
} | |||
} | |||
.box { | |||
width: 90%; | |||
margin: 2rem auto 0; | |||
} | |||
} | |||
@media screen and (max-width: 960px) { | |||
.productcenter { | |||
margin-top: 14vw; | |||
} | |||
} | |||
</style> | |||
<style> | |||
.demo-tabs>.el-tabs__content { | |||
padding: 10px; | |||
color: #6b778c; | |||
font-size: 32px; | |||
font-weight: 600; | |||
} | |||
</style> |
@ -1,129 +0,0 @@ | |||
<template> | |||
<div> | |||
<div class="procurement align-items-center width-80 m-auto"> | |||
<div class="bg-F4F4F4 pa-2 border-box"> | |||
<div class="casemessage"> | |||
<div class="casemessage-left"> | |||
<p class="font-size-30">Fairmont Empress Hotel</p> | |||
<div class="message"> | |||
<p class="item"><strong>Address: </strong>721 Government St, Victoria, BC V8W 1W5,Canada</p> | |||
<p class="item"><strong>Type: </strong>Hotel</p> | |||
<p class="item"><strong>Solutions: </strong>Furniture,Fixtures&Equipment, lights fixture</p> | |||
</div> | |||
<p class="button-left">Get Aa Free Quote ></p> | |||
</div> | |||
<div class="casemessage-right width-100"> | |||
<img src="../assets/img/Installwoodenflooring.jpg" alt="Installwoodenflooring" | |||
class="width-100 imgcase"> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="details"> | |||
<h2>DETAILS</h2> | |||
<p class="details-message">Oppein Home, the largest cabinet manufacturer in Asia, will supply high-end cabinetry | |||
and joinery for the | |||
AURA residential development by Aqualand, an Australian property, hospitality and investment company. | |||
This is the second collaboration between Oppein Home and Aqualand, and it turns out to be an impressive | |||
achievement for both companies.</p> | |||
<img src="../assets/img/Installwoodenflooring.jpg" alt="Install wooden flooring" class="width-100"> | |||
</div> | |||
</div> | |||
</template> | |||
<script setup lang="ts"> | |||
</script> | |||
<style scoped lang="less"> | |||
.procurement { | |||
margin-top: 2vw; | |||
} | |||
.casemessage { | |||
padding: 15px; | |||
display: flex; | |||
justify-content: space-between; | |||
// align-items: center; | |||
overflow: hidden; | |||
.casemessage-left { | |||
width: 50%; | |||
font-size: 26px; | |||
margin-right: 5%; | |||
.message { | |||
margin-top: 5vw; | |||
font-size: 16px; | |||
.item { | |||
margin: 10px 0; | |||
color: #888; | |||
} | |||
} | |||
.button-left { | |||
// position: absolute; | |||
cursor: pointer; | |||
float: left; | |||
padding: 10px 20px; | |||
background-color: #fa8106; | |||
float: left; | |||
margin-top: 5vw; | |||
font-size: 16px; | |||
color: #fff; | |||
} | |||
} | |||
.casemessage-right { | |||
// width: 45%; | |||
height: 20vw; | |||
overflow: hidden; | |||
img { | |||
transition: all 3s; | |||
} | |||
} | |||
.casemessage-right:hover img { | |||
transform: scale(1.1); | |||
} | |||
} | |||
.details { | |||
width: 80%; | |||
margin: 20px auto; | |||
text-align: center; | |||
.details-message { | |||
margin: 20px 0; | |||
text-align: left; | |||
} | |||
} | |||
@media screen and (max-width: 960px) { | |||
.casemessage { | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-between; | |||
.casemessage-left { | |||
display: flex; | |||
flex-wrap: wrap; | |||
font-size: 10px; | |||
margin-bottom: 10px; | |||
.button-left{ | |||
white-space: nowrap; | |||
} | |||
} | |||
.casemessage-right { | |||
height: 35vw; | |||
.imgcase { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
} | |||
} | |||
}</style> |