Browse Source

08月17日提交

master
xiaohei 1 year ago
parent
commit
754579fa41
66 changed files with 2169 additions and 254 deletions
  1. +2
    -2
      montier/index.html
  2. +0
    -1
      montier/public/vite.svg
  3. BIN
      montier/src/assets/img/01.jpg
  4. BIN
      montier/src/assets/img/01.png
  5. BIN
      montier/src/assets/img/Banner/Banner1.jpg
  6. BIN
      montier/src/assets/img/Banner/Banner3.jpg
  7. BIN
      montier/src/assets/img/Banner/banner2.jpg
  8. BIN
      montier/src/assets/img/Installationofplasticwindows.jpg
  9. BIN
      montier/src/assets/img/Installwoodenflooring.jpg
  10. BIN
      montier/src/assets/img/Quality icon/ASTM.jpg
  11. BIN
      montier/src/assets/img/Quality icon/ISO 9001.jpg
  12. BIN
      montier/src/assets/img/Quality icon/Intertek.jpg
  13. BIN
      montier/src/assets/img/Quality icon/NFRC.jpg
  14. BIN
      montier/src/assets/img/Quality icon/UL1.jpg
  15. BIN
      montier/src/assets/img/Quality icon/ce标志符号.jpg
  16. BIN
      montier/src/assets/img/Quality icon/intertek-ETL.jpg
  17. BIN
      montier/src/assets/img/Quality icon/sgs.jpg
  18. BIN
      montier/src/assets/img/Quality icon/门:FM.jpg
  19. BIN
      montier/src/assets/img/ShoppingCartonLaptop.jpg
  20. BIN
      montier/src/assets/img/about.jpg
  21. BIN
      montier/src/assets/img/center01.jpg
  22. BIN
      montier/src/assets/img/center01.png
  23. BIN
      montier/src/assets/img/center02.jpg
  24. BIN
      montier/src/assets/img/center02.png
  25. BIN
      montier/src/assets/img/center03.jpg
  26. BIN
      montier/src/assets/img/center03.png
  27. BIN
      montier/src/assets/img/center04.jpg
  28. BIN
      montier/src/assets/img/center04.png
  29. BIN
      montier/src/assets/img/center05.jpg
  30. BIN
      montier/src/assets/img/center05.png
  31. BIN
      montier/src/assets/img/center06.jpg
  32. BIN
      montier/src/assets/img/center06.png
  33. BIN
      montier/src/assets/img/center07.jpg
  34. BIN
      montier/src/assets/img/center07.png
  35. BIN
      montier/src/assets/img/i20.png
  36. BIN
      montier/src/assets/img/i21.png
  37. BIN
      montier/src/assets/img/information.jpg
  38. BIN
      montier/src/assets/img/logo.jpg
  39. BIN
      montier/src/assets/img/logo1.jpg
  40. BIN
      montier/src/assets/img/projectCase.png
  41. BIN
      montier/src/assets/img/projectCase1.png
  42. BIN
      montier/src/assets/img/塑胶窗的安装.jpg
  43. BIN
      montier/src/assets/img/安装木地板.jpg
  44. BIN
      montier/src/assets/img/实验室的高级男性研究员.jpg
  45. BIN
      montier/src/assets/img/木匠在车间用砂弯木栏杆.jpg
  46. BIN
      montier/src/assets/img/检查员正在用量规检查钢板的厚度。.jpg
  47. BIN
      montier/src/assets/img/混凝土建筑.jpg
  48. BIN
      montier/src/assets/img/用焊接量规检查焊件.jpg
  49. BIN
      montier/src/assets/img/社交网络的象征。社交网络符号与人的形象.jpg
  50. BIN
      montier/src/assets/img/笔记本电脑上的购物车.jpg
  51. +18
    -82
      montier/src/components/FooterPage.vue
  52. +186
    -29
      montier/src/components/HeaderPage.vue
  53. +0
    -29
      montier/src/pages/AboutMontieri.vue
  54. +109
    -0
      montier/src/pages/AboutUs.vue
  55. +31
    -0
      montier/src/pages/Breadcrumbs.vue
  56. +83
    -0
      montier/src/pages/CaseDetails.vue
  57. +100
    -56
      montier/src/pages/HomePage.vue
  58. +242
    -0
      montier/src/pages/Procurement.vue
  59. +200
    -0
      montier/src/pages/ProjectCase.vue
  60. +133
    -53
      montier/src/pages/Service.vue
  61. +159
    -0
      montier/src/pages/contactUs.vue
  62. +112
    -0
      montier/src/pages/projectCases.vue
  63. +18
    -0
      montier/src/router/index.ts
  64. +2
    -2
      montier/src/style.css
  65. +1
    -0
      montier/src/vite-env.d.ts
  66. +773
    -0
      montier/yarn.lock

+ 2
- 2
montier/index.html View File

@ -2,9 +2,9 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<!-- <link rel="icon" type="image/svg+xml" /> -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue + TS</title>
<title>montieri</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>


+ 0
- 1
montier/public/vite.svg View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

BIN
montier/src/assets/img/01.jpg View File

Before After
Width: 299  |  Height: 643  |  Size: 2.1 KiB

BIN
montier/src/assets/img/01.png View File

Before After
Width: 299  |  Height: 643  |  Size: 5.9 KiB

BIN
montier/src/assets/img/Banner/Banner1.jpg View File

Before After
Width: 3760  |  Height: 2508  |  Size: 886 KiB Width: 3760  |  Height: 2508  |  Size: 320 KiB

BIN
montier/src/assets/img/Banner/Banner3.jpg View File

Before After
Width: 1700  |  Height: 1133  |  Size: 1.2 MiB Width: 1700  |  Height: 1133  |  Size: 43 KiB

BIN
montier/src/assets/img/Banner/banner2.jpg View File

Before After
Width: 1700  |  Height: 1275  |  Size: 1.2 MiB Width: 1700  |  Height: 1275  |  Size: 140 KiB

BIN
montier/src/assets/img/Installationofplasticwindows.jpg View File

Before After
Width: 1700  |  Height: 1138  |  Size: 48 KiB

BIN
montier/src/assets/img/Installwoodenflooring.jpg View File

Before After
Width: 2048  |  Height: 1365  |  Size: 43 KiB

BIN
montier/src/assets/img/Quality icon/ASTM.jpg View File

Before After
Width: 380  |  Height: 322  |  Size: 13 KiB Width: 380  |  Height: 322  |  Size: 6.3 KiB

BIN
montier/src/assets/img/Quality icon/ISO 9001.jpg View File

Before After
Width: 500  |  Height: 492  |  Size: 21 KiB

BIN
montier/src/assets/img/Quality icon/Intertek.jpg View File

Before After
Width: 167  |  Height: 209  |  Size: 3.4 KiB

BIN
montier/src/assets/img/Quality icon/NFRC.jpg View File

Before After
Width: 224  |  Height: 225  |  Size: 5.7 KiB

BIN
montier/src/assets/img/Quality icon/UL1.jpg View File

Before After
Width: 441  |  Height: 114  |  Size: 6.6 KiB

BIN
montier/src/assets/img/Quality icon/ce标志符号.jpg View File

Before After
Width: 1700  |  Height: 1700  |  Size: 75 KiB Width: 1700  |  Height: 1700  |  Size: 26 KiB

BIN
montier/src/assets/img/Quality icon/intertek-ETL.jpg View File

Before After
Width: 785  |  Height: 827  |  Size: 155 KiB Width: 785  |  Height: 827  |  Size: 25 KiB

BIN
montier/src/assets/img/Quality icon/sgs.jpg View File

Before After
Width: 1500  |  Height: 698  |  Size: 44 KiB

BIN
montier/src/assets/img/Quality icon/门:FM.jpg View File

Before After

BIN
montier/src/assets/img/ShoppingCartonLaptop.jpg View File

Before After
Width: 1700  |  Height: 1133  |  Size: 47 KiB

BIN
montier/src/assets/img/about.jpg View File

Before After
Width: 1700  |  Height: 1192  |  Size: 1.3 MiB Width: 1700  |  Height: 1192  |  Size: 68 KiB

BIN
montier/src/assets/img/center01.jpg View File

Before After
Width: 538  |  Height: 767  |  Size: 15 KiB

BIN
montier/src/assets/img/center01.png View File

Before After
Width: 538  |  Height: 767  |  Size: 310 KiB

BIN
montier/src/assets/img/center02.jpg View File

Before After
Width: 640  |  Height: 640  |  Size: 16 KiB

BIN
montier/src/assets/img/center02.png View File

Before After
Width: 640  |  Height: 640  |  Size: 433 KiB

BIN
montier/src/assets/img/center03.jpg View File

Before After
Width: 541  |  Height: 769  |  Size: 23 KiB

BIN
montier/src/assets/img/center03.png View File

Before After
Width: 541  |  Height: 769  |  Size: 651 KiB

BIN
montier/src/assets/img/center04.jpg View File

Before After
Width: 538  |  Height: 768  |  Size: 24 KiB

BIN
montier/src/assets/img/center04.png View File

Before After
Width: 538  |  Height: 768  |  Size: 554 KiB

BIN
montier/src/assets/img/center05.jpg View File

Before After
Width: 538  |  Height: 768  |  Size: 18 KiB

BIN
montier/src/assets/img/center05.png View File

Before After
Width: 538  |  Height: 768  |  Size: 460 KiB

BIN
montier/src/assets/img/center06.jpg View File

Before After
Width: 860  |  Height: 1167  |  Size: 47 KiB

BIN
montier/src/assets/img/center06.png View File

Before After
Width: 860  |  Height: 1167  |  Size: 1000 KiB

BIN
montier/src/assets/img/center07.jpg View File

Before After
Width: 800  |  Height: 800  |  Size: 27 KiB

BIN
montier/src/assets/img/center07.png View File

Before After
Width: 800  |  Height: 800  |  Size: 538 KiB

BIN
montier/src/assets/img/i20.png View File

Before After
Width: 20  |  Height: 20  |  Size: 1.3 KiB

BIN
montier/src/assets/img/i21.png View File

Before After
Width: 20  |  Height: 20  |  Size: 1.1 KiB

BIN
montier/src/assets/img/information.jpg View File

Before After
Width: 1700  |  Height: 1133  |  Size: 38 KiB

BIN
montier/src/assets/img/logo.jpg View File

Before After
Width: 274  |  Height: 80  |  Size: 433 B

BIN
montier/src/assets/img/logo1.jpg View File

Before After
Width: 274  |  Height: 80  |  Size: 1.9 KiB

BIN
montier/src/assets/img/projectCase.png View File

Before After
Width: 945  |  Height: 493  |  Size: 51 KiB

BIN
montier/src/assets/img/projectCase1.png View File

Before After
Width: 1636  |  Height: 429  |  Size: 166 KiB

BIN
montier/src/assets/img/塑胶窗的安装.jpg View File

Before After
Width: 1700  |  Height: 1138  |  Size: 911 KiB

BIN
montier/src/assets/img/安装木地板.jpg View File

Before After
Width: 2048  |  Height: 1365  |  Size: 240 KiB

BIN
montier/src/assets/img/实验室的高级男性研究员.jpg View File

Before After
Width: 1700  |  Height: 1133  |  Size: 1.5 MiB Width: 1700  |  Height: 1133  |  Size: 58 KiB

BIN
montier/src/assets/img/木匠在车间用砂弯木栏杆.jpg View File

Before After
Width: 1133  |  Height: 1700  |  Size: 788 KiB Width: 1133  |  Height: 1700  |  Size: 76 KiB

BIN
montier/src/assets/img/检查员正在用量规检查钢板的厚度。.jpg View File

Before After
Width: 1700  |  Height: 1133  |  Size: 1.6 MiB Width: 1700  |  Height: 1133  |  Size: 30 KiB

BIN
montier/src/assets/img/混凝土建筑.jpg View File

Before After
Width: 1700  |  Height: 1063  |  Size: 1.0 MiB Width: 1700  |  Height: 1063  |  Size: 34 KiB

BIN
montier/src/assets/img/用焊接量规检查焊件.jpg View File

Before After
Width: 1700  |  Height: 1133  |  Size: 254 KiB Width: 1700  |  Height: 1133  |  Size: 36 KiB

BIN
montier/src/assets/img/社交网络的象征。社交网络符号与人的形象.jpg View File

Before After
Width: 1700  |  Height: 1188  |  Size: 1.4 MiB Width: 1700  |  Height: 1188  |  Size: 65 KiB

BIN
montier/src/assets/img/笔记本电脑上的购物车.jpg View File

Before After
Width: 1700  |  Height: 1133  |  Size: 1.3 MiB

+ 18
- 82
montier/src/components/FooterPage.vue View File

@ -4,90 +4,39 @@
<div class="box"> <div class="box">
<div class="navs"> <div class="navs">
<div class="nav-item"> <div class="nav-item">
<div class="title">Service</div>
<div class="items">
<div class="item" v-for="(item, index) in Home.$state.headerlist[2].children" :key="index">{{ item.title }}
</div>
</div>
<router-link to="/" class="title">Home</router-link>
</div> </div>
<div class="nav-item"> <div class="nav-item">
<div class="title">Product Center</div>
<div class="items">
<div class="item" v-for="(item, index) in Home.$state.headerlist[1].children" :key="index">{{ item.title }}
</div>
</div>
<div class="title" @click="goto('productCenter')">Product Center</div>
</div>
<div class="nav-item">
<div class="title" @click="goto('service')">Service</div>
</div>
<div class="nav-item">
<div class="title" @click="goto('projectCases')">Project Cases</div>
</div>
<div class="nav-item">
<div class="title" @click="goto('informationCenter')">News</div>
</div>
<div class="nav-item">
<router-link to="/contactUs" class="title">Contact Us</router-link>
</div> </div>
</div> </div>
</div> </div>
<div class="nav-email">
<div class="email">
Email: bill@i-montieri.com
</div>
<div class="emial">
WhatsApp:
</div>
</div>
<div class="nav-email">
Location:
</div>
<div class="copyright">
<span>Copyright © 2022 深圳市小之物联科技有限公司 版权所有</span>
<span class="ml-1"> <a href="https://beian.miit.gov.cn/#/Integrated/index" class="color-8c8fa4"
target="_blank">粤ICP备2022149958号</a> <a
href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=44030502009678" class="color-8c8fa4"><img
src="../assets/img/police1.png" alt="粤公网安备 44030502009678号" style="height: 12px;margin-right: 2px;"
class="ml-1">粤公网安备 44030502009678</a></span>
</div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onMounted } from "vue"; import { onMounted } from "vue";
import useHomeStore from "../store/modules/homepage";
let Home = useHomeStore()
const goto = (idname: any) => {
document.getElementById(idname)?.scrollIntoView()
}
onMounted(async () => { onMounted(async () => {
}) })
// const getProduct = async () => {
// let data={
// groupId: 3,
// pageSize: 8,
// language:userStore.language,
// pageNum: 1
// }
// let res = await getDataApi(data)
// if(res){
// let productList = <any>[]
// res.map((li:any,index:any) => {
// li.detail = JSON.parse(li.detail);
// li.detail['id'] = li.id
// li.detail['index']=li.id+''+index
// productList.push(li.detail)
// });
// let sameType = [];
// sameType = classify(productList, "type")
// productListArr.value = sameType
// }
// }
//
// const classify = (arr:any, key:any) => {
// let kind = <any>[]; //
// let newArr = <any>[]; //
// arr.map((item:any) => {
// // key
// if (!kind.includes(item[key])) {
// kind.push(item[key]); //kind
// newArr.push([]); //
// }
// let index = kind.indexOf(item[key]); //kind
// newArr[index].push(item); //
// });
// return newArr;
// }
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@ -106,20 +55,6 @@ onMounted(async () => {
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
.nav-email {
margin-top: 1rem;
color: #ffffff;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
vertical-align: baseline;
font-weight: bold;
.email {
margin-right: 1.5rem;
}
}
.address { .address {
display: -webkit-box; display: -webkit-box;
@ -227,6 +162,7 @@ onMounted(async () => {
vertical-align: baseline; vertical-align: baseline;
.nav-item { .nav-item {
cursor: pointer;
margin-right: 3.125rem; margin-right: 3.125rem;
.title { .title {


+ 186
- 29
montier/src/components/HeaderPage.vue View File

@ -1,17 +1,84 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import useHomeStore from '../store/modules/homepage'
let Home = useHomeStore()
let caselist = ref<any>([
{
detail: {
title: 'door', position: 'door'
}
},
{
detail: {
title: 'window', position: 'window'
}
},
{
detail: {
title: 'railing and stair', position: 'rs'
}
},
{
detail: {
title: 'Building Materials', position: 'BM',
children: [{
detail: { title: 'Floor', position: 'Floor' }
},
{
detail: { title: 'Wall', position: 'Wall' }
},
{ detail: { title: 'roof', position: 'roof' } }]
}
},
{
detail: {
title: 'Kitchen Cabinets with Customization', position: 'KCwC'
}
},
{
detail: {
title: 'Kitchen faucet and sink', position: 'Kfs'
}
},
{
detail: {
title: 'Sanitary Ware', position: 'SW',
children: [{
detail: { title: 'Mirror', position: 'Mirror' }
},
{ detail: { title: 'Toilet', position: 'Toilet' } },
{ detail: { title: 'Bathtub ', position: 'Bathtub' } },
{ detail: { title: 'Jacuzzi ', position: 'Jacuzzi' } },
{ detail: { title: 'Faucet ', position: 'Faucet' } },
{ detail: { title: 'Sink ', position: 'Sink' } },
{ detail: { title: 'Accessories ', position: 'Accessories' } },
{ detail: { title: 'Shower Glass ', position: 'Shower Glass' } },
{ detail: { title: 'Bathroom ', position: 'Bathroom' } },
{ detail: { title: 'Shower system ', position: 'Shower system' } },
]
}
}
])
let productListArr = ref<any>([])
let projectlist = ref<any>([])
let screenWidth = ref<any>(0) let screenWidth = ref<any>(0)
let clickStatus = ref<any>(false) let clickStatus = ref<any>(false)
let scrollTopShow = ref<any>(true) let scrollTopShow = ref<any>(true)
const router = useRouter() const router = useRouter()
onMounted(async () => { onMounted(async () => {
// let data={
// groupId:4
// }
// let res = await getDataApi(data)
// if(res){
// res.map((li:any) => {
// li.detail = JSON.parse(li.detail);
// li.detail.pptsrc = userStore.globalUrl + "/" + li.detail.pptsrc;
// caselist.value.push(li)
// });
// }
screenWidth.value = document.body.offsetWidth; screenWidth.value = document.body.offsetWidth;
await getProduct()
window.addEventListener('resize', function () { window.addEventListener('resize', function () {
screenWidth.value = document.body.offsetWidth; screenWidth.value = document.body.offsetWidth;
}) })
@ -26,6 +93,16 @@ const windowScrollListener = () => {
scrollTopShow.value = false scrollTopShow.value = false
} }
} }
const goPage1 = (url: any, index: any) => {
document.documentElement.scrollTop = 0
clickStatus.value = false
router.push({
path: url,
query: {
index: index
}
})
}
// //
const goPage = (url: any) => { const goPage = (url: any) => {
document.documentElement.scrollTop = 0 document.documentElement.scrollTop = 0
@ -35,41 +112,116 @@ const goPage = (url: any) => {
const mobheadFun = async () => { const mobheadFun = async () => {
clickStatus.value = !clickStatus.value clickStatus.value = !clickStatus.value
} }
const getProduct = async () => {
productListArr.value = [
[{ type: 'Design', position: 'Design' }],
[{ type: 'Procurement & Manufacture', position: 'PM' }],
[{ type: 'Logistic and warehouseing', position: 'Lw' }],
[{ type: 'Installaion', position: 'Installaion' }],
[{ type: 'quality control', position: 'qc' }],
]
projectlist.value = [
{ title: 'State Street, Carlsbad, CA', position: 'SSCC' },
{ title: 'Lofts on Laurel, San Diego', position: 'LLSD' },
{ title: 'Virgin Hotel,SFO', position: 'VHS' },
{ title: 'GOA, India Wyndham', position: 'GIW' },
{ title: 'METROPICA, MIAMI', position: 'MM' },
{ title: '989 Johnson Street, Victoria,Canada', position: 'JSVC' },
]
}
</script> </script>
<template> <template>
<div class="position-relative ">
<div class="position-relative headerpage">
<div class="navbar pb-4-px" :class="scrollTopShow ? 'bg-white' : 'bg-white'" v-if="screenWidth > 1200"> <div class="navbar pb-4-px" :class="scrollTopShow ? 'bg-white' : 'bg-white'" v-if="screenWidth > 1200">
<div class="navbar-container"> <div class="navbar-container">
<div class="navbar-header"> <div class="navbar-header">
<div class="navbar-brand"> <div class="navbar-brand">
<router-link to="/" class="text-center"> <router-link to="/" class="text-center">
<div class="navbar-brand-logo" :class="scrollTopShow ? 'white-img' : 'black-img'"></div> <div class="navbar-brand-logo" :class="scrollTopShow ? 'white-img' : 'black-img'"></div>
<!-- <p :class="scrollTopShow?'color-fff':'color-0167b1'" class="font-size-20">锁到之处 即小见大</p> -->
<!-- <p :class="scrollTopShow?'color-000':'color-0167b1'" class="font-size-20">锁到之处 即小见大</p>-->
</router-link> </router-link>
</div> </div>
</div> </div>
<div class="site-header-navbar d-flex justify-content-between"> <div class="site-header-navbar d-flex justify-content-between">
<div class="navbar-left width-5"></div> <div class="navbar-left width-5"></div>
<div class="navbar-category"> <div class="navbar-category">
<div class="category-item ml-3 font-size-14 position-relative" v-for="item, index in Home.$state.headerlist"
:key="index">
<div class="category-item font-size-14 position-relative">
<div class="nav-item-title px-1 d-flex align-items-center"
:class="scrollTopShow ? 'color-000' : 'color-000'" @click="goPage('/')">Home</div>
<div class="dui-dropdown-men position-absolute">
<div class="menu-container mt-1">
</div>
</div>
</div>
<div class="category-item ml-3 font-size-14 position-relative">
<div class="nav-item-title d-flex px-1 align-items-center"
:class="scrollTopShow ? 'color-000' : 'color-000'">Product Center</div>
<div class="dui-dropdown-men position-absolute">
<div class="menu-container mt-1">
<ul>
<li class="nav-item text-center" v-for="(item, index) in caselist" :key="index">
<div>
<div class="nav-item-link px-16-px text-overflow-ellipsis" :title="item.detail.title">{{
item.detail.title }}</div>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="category-item ml-3 font-size-14 position-relative">
<div class="nav-item-title d-flex px-1 align-items-center" <div class="nav-item-title d-flex px-1 align-items-center"
:class="scrollTopShow ? 'color-000' : 'color-000'">
{{ item.title }}</div>
<div class="dui-dropdown-men position-absolute" v-if="item.children.length > 0">
:class="scrollTopShow ? 'color-000' : 'color-000'" @click="goPage('/service')">Service</div>
<div class="dui-dropdown-men position-absolute">
<div class="menu-container mt-1">
<ul>
<li class="nav-item text-center" v-for="(item, index) in productListArr" :key="index">
<div @click="goPage1('/service', index)">
<div class="nav-item-link px-16-px text-overflow-ellipsis" :title="item[0].type">{{ item[0].type
}}</div>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="category-item ml-3 font-size-14 position-relative">
<div class="nav-item-title px-1 d-flex align-items-center"
:class="scrollTopShow ? 'color-000' : 'color-000'">Project Cases</div>
<div class="dui-dropdown-men position-absolute">
<div class="menu-container mt-1"> <div class="menu-container mt-1">
<ul> <ul>
<li class="nav-item text-center" v-for="(item2, index2) in item.children" :key="index2">
<li class="nav-item text-center" v-for="(item, index) in projectlist" :key="index">
<div> <div>
<div class="nav-item-link px-16-px text-overflow-ellipsis" :title="item2.title">{{
item2.title }}</div>
<div class="nav-item-link px-16-px text-overflow-ellipsis">{{ item.title }}</div>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
<div class="category-item ml-3 font-size-14 position-relative">
<div class="nav-item-title px-1 d-flex align-items-center"
:class="scrollTopShow ? 'color-000' : 'color-000'">News</div>
<div class="dui-dropdown-men position-absolute">
<div class="menu-container mt-1">
</div>
</div>
</div>
<div class="category-item ml-3 font-size-14 position-relative">
<router-link to="/contactUs" class="nav-item-title px-1 d-flex align-items-center"
:class="scrollTopShow ? 'color-000' : 'color-000'">Contact Us</router-link>
<div class="dui-dropdown-men position-absolute">
<div class="menu-container mt-1">
</div>
</div>
</div>
</div> </div>
<div class="navbar-right width-10"></div> <div class="navbar-right width-10"></div>
</div> </div>
@ -77,13 +229,11 @@ const mobheadFun = async () => {
</div> </div>
<div v-else> <div v-else>
<div class="MobileHead"> <div class="MobileHead">
<div class="logoimg text-center position-absolute">
<img src="../assets/img/logo.png" alt="montieri" class="width-100">
</div>
<div class="position-absolute menuIcon color-8c8fa4">
<img src="../assets/img/menu.svg" alt="菜单栏" class="width-15" @click="mobheadFun" v-if="!clickStatus" />
<img src="../assets/img/close.svg" class="width-15" alt="关闭菜单栏" @click="mobheadFun" v-else>
</div>
<div class="logoimg text-center position-absolute" @click="goPage('/')"><img src="../assets/img/logo.png"
alt="深圳市小之物联科技有限公司" class="width-100"></div>
<div class="position-absolute menuIcon color-8c8fa4"><img src="../assets/img/menu.svg" alt="菜单栏" class="width-15"
@click="mobheadFun" v-if="!clickStatus" /><img src="../assets/img/close.svg" class="width-15" alt="关闭菜单栏"
@click="mobheadFun" v-else></div>
<div class="mobmenu" :class="clickStatus ? 'mobmenu1' : ''"> <div class="mobmenu" :class="clickStatus ? 'mobmenu1' : ''">
<el-menu default-active="0" class="el-menu-vertical-demo"> <el-menu default-active="0" class="el-menu-vertical-demo">
<el-menu-item index="0" @click="goPage('/')"> <el-menu-item index="0" @click="goPage('/')">
@ -93,21 +243,24 @@ const mobheadFun = async () => {
<template #title> <template #title>
<span>Product Center</span> <span>Product Center</span>
</template> </template>
<el-menu-item :index="'1-' + index" v-for="(item, index) in Home.$state.headerlist[1].children" :key="index">
{{ item.title }}
<el-menu-item :index="'1-' + index" v-for="(item, index) in caselist" :key="index">
{{ item.detail.title }}
</el-menu-item> </el-menu-item>
</el-sub-menu> </el-sub-menu>
<el-sub-menu index="2"> <el-sub-menu index="2">
<template #title> <template #title>
<span>Service</span> <span>Service</span>
</template> </template>
<el-menu-item :index="'2-' + index" v-for="(item, index) in Home.$state.headerlist[2].children" :key="index">{{ item.title }}</el-menu-item>
<el-menu-item :index="'2-' + index" v-for="(item, index) in productListArr"
@click="goPage1('/service', index)" :key="index">{{ item[0].type }}</el-menu-item>
</el-sub-menu> </el-sub-menu>
<el-sub-menu index="3"> <el-sub-menu index="3">
<template #title> <template #title>
<span>Project Cases</span>
<span>Project Case</span>
</template> </template>
<el-menu-item :index="'3-' + index" v-for="(item, index) in Home.$state.headerlist[3].children" :key="index">{{ item.title }}</el-menu-item>
<el-menu-item :index="'3-' + index + 1" v-for="item, index in projectlist" :key="index">
<span>{{ item.title }}</span>
</el-menu-item>
</el-sub-menu> </el-sub-menu>
<el-menu-item index="4"> <el-menu-item index="4">
<template #title> <template #title>
@ -116,7 +269,7 @@ const mobheadFun = async () => {
</el-menu-item> </el-menu-item>
<el-menu-item index="5"> <el-menu-item index="5">
<template #title> <template #title>
<span>Contact Us</span>
<span @click="goPage('/contactUs')">Contact Us</span>
</template> </template>
</el-menu-item> </el-menu-item>
</el-menu> </el-menu>
@ -127,6 +280,9 @@ const mobheadFun = async () => {
</template> </template>
<style scoped lang="less"> <style scoped lang="less">
.headerpage{
margin-bottom: 3vw;
}
.navbar { .navbar {
position: fixed; position: fixed;
top: 0; top: 0;
@ -139,7 +295,7 @@ const mobheadFun = async () => {
font-smoothing: antialiased; font-smoothing: antialiased;
z-index: 1001; z-index: 1001;
box-sizing: border-box; box-sizing: border-box;
// box-shadow: 0 0 12px rgba(0,0,0,0.12);
//box-shadow: 0 0 12px rgba(0,0,0,0.12);
} }
.navbar-container { .navbar-container {
@ -364,4 +520,5 @@ const mobheadFun = async () => {
.navbar-brand-logo { .navbar-brand-logo {
width: 360px; width: 360px;
} }
}</style>
}
</style>

+ 0
- 29
montier/src/pages/AboutMontieri.vue View File

@ -1,29 +0,0 @@
<template>
<div class="aboutmontieri">
<!-- 左边图片 -->
<div class="aboutpic">
<img src="../assets/img/about.jpg" alt="About" class="about-img">
</div>
</div>
</template>
<script setup lang="ts">
</script>
<style scoped lang="less">
.aboutmontieri{
width: 90vw;
margin: 0 auto;
padding: 10px;
background-color: #d0cece;
.aboutpic{
width: 50vw;
height: 35vw;
.about-img{
width: 100%;
height: 100%;
}
}
}
</style>

+ 109
- 0
montier/src/pages/AboutUs.vue View File

@ -0,0 +1,109 @@
<template>
<div class="procurement m-auto align-items-center bg-F4F4F4 pa-2 border-box" :class="mobileShow?'width-90':'d-flex width-80'">
<div class="border-box" :class="mobileShow?'width-100':'width-40 ml-2'">
<div class="bg-white" :class="mobileShow?'fixed-width-height-mobile':'fixed-width-height'">
<h3 class="font-size-18 color-343434 line-height-2 mb-2 text-align-justify"><strong>About MONTIERI</strong></h3>
<p class="font-size-16 color-343434 line-height-2 text-align-justify">MONTIERI is committed to providing you with one-stop building materials, Hotel FF&E services, and making your work more convenient.
</p>
<button class="small-button font-size-14" v-show="mobileShow">Read more</button>
</div>
</div>
<div class="" :class="mobileShow?'width-100':'width-60'">
<div class="content-img">
<div class="fixed-width position-relative">
<img src="../assets/img/about.jpg" class="procurement-max-width" alt="Procurement & Manufacture">
<span class="font-size-20 read-more pa-2 text-center position-absolute" :class="mobileShow?'read-more-mobile':'read-more-pc'" v-show="!mobileShow">Read more</span>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import {onMounted, ref} from "vue";
let screenWidth = ref<any>('')
let mobileShow = ref<any>(false)
onMounted(async ()=>{
screenWidth.value = document.body.offsetWidth;
if(screenWidth.value<1000){
mobileShow.value = true
}else{
mobileShow.value = false
}
window.addEventListener('resize',function(){
screenWidth.value = document.body.offsetWidth;
if(screenWidth.value<1000){
mobileShow.value = true
}else{
mobileShow.value = false
}
})
})
</script>
<style scoped>
.fixed-width{
width:100%;
height: 400px;
}
.fixed-width-height{
width: 100%;
padding: 15px;
box-sizing: border-box;
transform: translateX(4%);
z-index: 99;
position: relative;
}
.fixed-width-height-mobile{
width: 100%;
padding: 15px;
box-sizing: border-box;
z-index: 99;
position: relative;
}
.procurement-max-width{
width: 100%;
height: 100%;
}
.second-img{
top: 50%;
right: -70%;
transform: translateX(-50%) translateY(-50%);
background: #fff;
width: 50%;
height: 300px;
}
.read-more{
background: rgba(255,192,0);
color: #fff;
width: 60px;
display: inline-block;
top: 80%;
transform: translateX(-50%) translateY(-50%);
cursor: pointer;
box-shadow: 0 4px 10px #333;
z-index: 999;
}
.read-more-pc{
left: -1%;
}
.read-more-mobile{
right: 0%;
}
.small-button{
color: #fff;
background: #ffc000;
border: 1px solid #ffc000;
padding: 10px;
}
.text-align-justify{
/* text-align: justify; */
/*text-indent: 20px;*/
}
@media (max-width: 1000px) {
}
</style>

+ 31
- 0
montier/src/pages/Breadcrumbs.vue View File

@ -0,0 +1,31 @@
<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>

+ 83
- 0
montier/src/pages/CaseDetails.vue View File

@ -0,0 +1,83 @@
<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>

+ 100
- 56
montier/src/pages/HomePage.vue View File

@ -1,29 +1,33 @@
<template> <template>
<!-- 轮播图 -->
<div class="width-100 bannerImg">
<swiper
:modules="modules"
:slides-per-view="1"
:loop="true"
:space-between="50"
navigation
:pagination="{ clickable: true }"
@swiper="onSwiper"
@slideChange="onSlideChange"
>
<swiper-slide v-for="(item,index) in bannerList" :key="index">
<img :src="item.detail" :alt="item.title" class="width-100 d-block" />
<span class="img-title">{{ item.title }}</span>
</swiper-slide>
</swiper>
</div>
<!-- About montier -->
<Title :value="titleOne"></Title>
<Aboutmontieri/>
<!-- Service分类 -->
<Title :value="title"></Title>
<servicePage/>
<!-- 轮播图 -->
<div class="width-100 bannerImg">
<swiper :modules="modules" :slides-per-view="1" :loop="true" :space-between="50" navigation
:pagination="{ clickable: true }" @swiper="onSwiper" @slideChange="onSlideChange">
<swiper-slide v-for="(item, index) in bannerList" :key="index">
<img :src="item.detail" :alt="item.title" class="width-100 d-block" />
<span :class="[index == bannerList.length - 1 ? 'img-title' : 'img-title title-img']">{{ item.title }}</span>
</swiper-slide>
</swiper>
</div>
<!-- About montier -->
<Title :value="titleOne"></Title>
<AboutUs/>
<!-- Service分类 -->
<Title :value="title" id="service"></Title>
<servicePage :index="1"/>
<!-- PRODUCT CENTER -->
<Title :value="titleTwo" id="productCenter"></Title>
<projectCase :index="3" />
<!-- PROJECT CASES -->
<Title :value="titleThree" id="projectCases"></Title>
<projectCase :index="2" />
<!-- INFORMATION CENTER -->
<Title :value="titleFour" id="informationCenter"></Title>
<servicePage :index="2" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -35,27 +39,40 @@ import 'swiper/css/pagination';
import 'swiper/css/scrollbar'; import 'swiper/css/scrollbar';
import Title from '../components/Title.vue'; import Title from '../components/Title.vue';
import Aboutmontieri from './AboutMontieri.vue'
import servicePage from './Service.vue' import servicePage from './Service.vue'
import AboutUs from './AboutUs.vue'
import projectCase from './ProjectCase.vue'
import { ref } from 'vue' import { ref } from 'vue'
let title = ref<any>({ let title = ref<any>({
title:"Service",
desc:""
title: "Service",
desc: ""
}) })
let titleOne = ref<any>({ let titleOne = ref<any>({
title:"About montieri",
desc:""
title: "About MONTIERI",
desc: ""
})
let titleTwo = ref<any>({
title: "Product Center",
desc: ""
})
let titleThree = ref<any>({
title: "Project Cases",
desc: ""
})
let titleFour = ref<any>({
title: "Information Center",
desc: ""
}) })
let modules = [ Navigation, Pagination, Scrollbar, A11y ]
let modules = [Navigation, Pagination, Scrollbar, A11y]
let bannerList = ref<any>([ let bannerList = ref<any>([
{detail:new URL("../assets/img/Banner/Banner1.jpg",import.meta.url).href,title:'Becoming your best Building materials, Hotel FF&E Supplier is our goal'},
{detail:new URL("../assets/img/Banner/Banner2.jpg",import.meta.url).href,title:'Customizable Product and Best service for best you and your most beautiful Building'},
{detail:new URL("../assets/img/Banner/Banner3.jpg",import.meta.url).href,title:'Quality Always Matters'},
{ detail: new URL("../assets/img/Banner/Banner1.jpg", import.meta.url).href, title: 'Becoming your best Building materials, Hotel FF&E Supplier is our goal' },
{ detail: new URL("../assets/img/Banner/Banner2.jpg", import.meta.url).href, title: 'Customizable Product and Best service for best you and your most beautiful Building' },
{ detail: new URL("../assets/img/Banner/Banner3.jpg", import.meta.url).href, title: 'Quality Always Matters' },
]) ])
const onSwiper = (swiper:any) => {
const onSwiper = () => {
}; };
const onSlideChange = () => { const onSlideChange = () => {
@ -64,43 +81,70 @@ const onSlideChange = () => {
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
.d-block{
.d-block {
width: 100vw; width: 100vw;
height: 49.5vw; height: 49.5vw;
position: relative; position: relative;
} }
.img-title{
.img-title {
// position: absolute;
// bottom: 3%;
// left: 7%;
// right: 11%;
// color: #fff;
// font-weight: bold;
// font-size: 54px;
box-sizing: border-box;
position: absolute; position: absolute;
bottom: 5%;
left: 7%;
right: 11%;
color: #fff; color: #fff;
font-weight: bold;
bottom: 0;
left: 0;
// height: 50px;
// line-height: 50px;
// text-align: center;
background: rgba(0, 0, 0, .5);
width: 100%;
padding: 20px;
font-size: 54px; font-size: 54px;
} }
.bannerImg {
:deep(.swiper-button-prev:after){
.title-img {
font-size: 50px;
}
.bannerImg {
:deep(.swiper-button-prev:after) {
color: #fff; color: #fff;
font-size: 30px; font-size: 30px;
} }
:deep(.swiper-button-next:after){
:deep(.swiper-button-next:after) {
color: #fff; color: #fff;
font-size: 30px; font-size: 30px;
} }
} }
@media (max-width: 800px) {
.img-title{
@media (max-width: 800px) {
.img-title {
box-sizing: border-box;
font-size: 18px; font-size: 18px;
padding: 5px;
} }
.bannerImg {
margin-top:50px;
:deep(.swiper-button-prev:after){
font-size: 30px;
}
:deep(.swiper-button-next:after){
font-size: 30px;
}
}
}
.bannerImg {
margin: 0;
padding: 0;
margin-top: 50px;
:deep(.swiper-button-prev:after) {
font-size: 30px;
}
:deep(.swiper-button-next:after) {
font-size: 30px;
}
}
}
</style> </style>

+ 242
- 0
montier/src/pages/Procurement.vue View File

@ -0,0 +1,242 @@
<template>
<div class="procurement m-auto align-items-center" :class="mobileShow ? 'width-90' : 'd-flex width-80'"
v-if="selectIndex == 0">
<div class="bg-F4F4F4 pa-2 border-box" :class="mobileShow ? 'width-100' : 'width-100'">
<div class="content-img">
<div class="fixed-width position-relative">
<img src="../assets/img/Installationofplasticwindows.jpg" class="procurement-max-width"
alt="Installation of plasticwindows">
<img src="../assets/img/ShoppingCartonLaptop.jpg" class="position-absolute second-img" alt="Shopping Cart on Laptop">
<span class="font-size-20 read-more pa-2 text-center position-absolute"
:class="mobileShow ? 'read-more-mobile' : 'read-more-pc'">Read more</span>
</div>
</div>
<div class="titledesign">
<div class="designtitle">
<div class="juxing"></div>
<h2><strong>Design</strong></h2>
</div>
<p class="font-size-14 line-height-4 ml-3">Solving all problems from design, and work out apractical scheme.They
ere preoject
planning,
archi-tectural design, interior design, product design.These four parts trom a closed loop.
</p>
</div>
</div>
</div>
<div class="procurement m-auto align-items-center" :class="mobileShow ? 'width-90' : 'd-flex width-80'"
v-else-if="selectIndex == 1">
<div class="bg-F4F4F4 pa-2 border-box" :class="mobileShow ? 'width-100' : 'width-100'">
<div class="content-img">
<div class="fixed-width position-relative">
<img src="../assets/img/Installationofplasticwindows.jpg" class="procurement-max-width"
alt="Installation of plasticwindows">
<img src="../assets/img/ShoppingCartonLaptop.jpg" class="position-absolute second-img" alt="Shopping Cart on Laptop">
<span class="font-size-20 read-more pa-2 text-center position-absolute"
:class="mobileShow ? 'read-more-mobile' : 'read-more-pc'">Read more</span>
</div>
</div>
<!-- <p class="mt-2 font-size-18 color-343434">Procurement & Manufacture</p> -->
<div class="titledesign">
<div class="designtitle">
<div class="juxing"></div>
<h2><strong>Procurement & Manufacture</strong></h2>
</div>
</div>
</div>
</div>
<div class="procurement m-auto align-items-center" :class="mobileShow ? 'width-90' : 'd-flex width-80'"
v-else-if="selectIndex == 2">
<div class="bg-F4F4F4 pa-2 border-box" :class="mobileShow ? 'width-100' : 'width-100'">
<div class="content-img">
<div class="fixed-width position-relative">
<img src="../assets/img/Installationofplasticwindows.jpg" class="procurement-max-width"
alt="Installation of plasticwindows">
<img src="../assets/img/ShoppingCartonLaptop.jpg" class="position-absolute second-img" alt="Shopping Cart on Laptop">
<span class="font-size-20 read-more pa-2 text-center position-absolute"
:class="mobileShow ? 'read-more-mobile' : 'read-more-pc'">Read more</span>
</div>
</div>
<div class="titledesign">
<div class="designtitle">
<div class="juxing"></div>
<h2><strong>Logistic and warehouseing</strong></h2>
</div>
</div>
</div>
</div>
<div class="procurement m-auto align-items-center" :class="mobileShow ? 'width-90' : 'd-flex width-80'"
v-else-if="selectIndex == 3">
<div class="bg-F4F4F4 pa-2 border-box" :class="mobileShow ? 'width-100' : 'width-100'">
<div class="content-img">
<div class="fixed-width position-relative">
<img src="../assets/img/Installationofplasticwindows.jpg" class="procurement-max-width"
alt="Installation of plasticwindows">
<img src="../assets/img/ShoppingCartonLaptop.jpg" class="position-absolute second-img" alt="Shopping Cart on Laptop">
<span class="font-size-20 read-more pa-2 text-center position-absolute"
:class="mobileShow ? 'read-more-mobile' : 'read-more-pc'">Read more</span>
</div>
</div>
<div class="titledesign">
<div class="designtitle">
<div class="juxing"></div>
<h2><strong>Installation</strong></h2>
</div>
</div>
</div>
</div>
<div class="procurement m-auto align-items-center" :class="mobileShow ? 'width-90' : 'd-flex width-80'"
v-else-if="selectIndex == 4">
<div class="bg-F4F4F4 pa-2 border-box" :class="mobileShow ? 'width-100' : 'width-100'">
<div class="content-img">
<div class="fixed-width position-relative">
<img src="../assets/img/Installationofplasticwindows.jpg" class="procurement-max-width"
alt="Procurement & Manufacture">
<img src="../assets/img/ShoppingCartonLaptop.jpg" class="position-absolute second-img" alt="Shopping Cart on Laptop">
<span class="font-size-20 read-more pa-2 text-center position-absolute"
:class="mobileShow ? 'read-more-mobile' : 'read-more-pc'">Read more</span>
</div>
</div>
<div class="titledesign">
<div class="designtitle">
<div class="juxing"></div>
<h2><strong>quality control</strong></h2>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref } from "vue";
import router from "../router";
let screenWidth = ref<any>('')
let mobileShow = ref<any>(false)
let selectIndex = ref<any>('')
selectIndex.value = router.currentRoute.value.query.index
onMounted(async () => {
screenWidth.value = document.body.offsetWidth;
if (screenWidth.value < 1000) {
mobileShow.value = true
} else {
mobileShow.value = false
}
window.addEventListener('resize', function () {
screenWidth.value = document.body.offsetWidth;
if (screenWidth.value < 1000) {
mobileShow.value = true
} else {
mobileShow.value = false
}
})
})
</script>
<style scoped>
.procurement{
margin: 3vw auto 2vw;
}
.fixed-width {
width: 50%;
height: 20vw;
}
.procurement-max-width {
width: 100%;
height: 100%;
}
.second-img {
top: 50%;
right: -70%;
transform: translateX(-50%) translateY(-50%);
background: #fff;
width: 50%;
height: 16vw;
}
.read-more {
background: rgba(255, 192, 0);
color: #fff;
width: 60px;
display: inline-block;
top: 85%;
left: 95%;
transform: translateX(-50%) translateY(-50%);
cursor: pointer;
box-shadow: 0 4px 10px #333;
}
.read-more-pc {
right: -22%;
}
.read-more-mobile1 {
right: -10%;
top: 100%;
}
.read-more-pc1 {
top: 100%;
right: -3%;
}
.read-more-mobile {
right: -50%;
font-size: 14px;
width: 30px;
}
.text-align-justify {
/* text-align: justify; */
/* text-indent: 20px; */
}
@media (max-width: 1000px) {
.procurement {
margin-top: 15vw;
}
.fixed-width {
width: 50vw;
height: 40vw;
}
.second-img {
height: 25vw;
}
.font-size-14 {
/* display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden; */
font-size: 12px;
line-clamp: 4;
}
}
.titledesign {
width: 100%;
margin-top: 2rem;
display: flex;
justify-content: space-between;
align-items: center;
.designtitle {
.juxing {
width: 30%;
height: 1vw;
background-color: rgba(0, 0, 0, 0.5);
margin-bottom: 0.5rem;
}
}
}</style>

+ 200
- 0
montier/src/pages/ProjectCase.vue View File

@ -0,0 +1,200 @@
<template>
<div class="m-auto project-case" :class="mobileShow?'width-90':'width-80'">
<swiper
:modules="modules"
:slides-per-view="slidesPerView"
:loop="true"
:space-between="50"
navigation
:pagination="{ clickable: true }"
@swiper="onSwiper"
@slideChange="onSlideChange"
>
<swiper-slide v-for="(item,index) in bannerList" class="hover-scale cursor-pointer" :key="index" v-if="selectIndex === 1">
<div>
<div class="case-img overflow-hidden img-after" @click="changeindex">
<img :src="item.detail" :alt="item.title" class="width-100 d-block position-relative imgcase1" />
</div>
<div>
<h3 class="color-343434 font-size-18 line-height-2 border-bottom mb-1">North Sydney Landmark Project AURA Apartment</h3>
<p class="mb-1 align-items-center d-flex"><img src="../assets/img/i20.png" alt="address"><span class="ml-1 font-size-14 color-666">China</span></p>
<p class="align-items-center d-flex"><img src="../assets/img/i21.png" alt="units"><span class="ml-1 font-size-14 color-666">387 Units</span></p>
</div>
</div>
</swiper-slide>
<swiper-slide v-for="(item,index2) in bannerList" class="hover-scale cursor-pointer" :key="index2" v-else-if="selectIndex === 2">
<div>
<div class="case-img overflow-hidden position-relative" @click="goPage(`/projectcase/${item.name}`)">
<img :src="item.detail" :alt="item.title" class="width-100 d-block position-relative imgcase1" />
<h3 class="position-absolute color-fff project-center-title">Door</h3>
</div>
</div>
</swiper-slide>
<swiper-slide v-for="(item,index3) in bannerList2" class="hover-scale cursor-pointer" :key="index3" v-else-if="selectIndex === 3">
<div>
<div class="case-img overflow-hidden position-relative">
<img :src="item.detail" :alt="item.title" class="width-100 d-block position-relative imgcase" />
<h3 class="position-absolute color-fff project-center-title">{{ item.name }}</h3>
</div>
</div>
</swiper-slide>
<!-- <div v-if="selectIndex == 2" class="projectall">
<p class="allproject" @click="goPage('/projectcase/allproject')">EXPLORE ALL PROJECTS >></p>
</div> -->
</swiper>
</div>
</template>
<script setup lang="ts">
import {onMounted, ref} from "vue";
import 'swiper/css';
import 'swiper/css/navigation';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import {A11y, Navigation, Scrollbar} from "swiper";
import { Swiper, SwiperSlide } from 'swiper/vue';
import router from "../router";
let modules = [Navigation,Scrollbar, A11y];
let bannerList = ref<any>([
{detail:new URL("../assets/img/Banner/Banner1.jpg",import.meta.url).href,title:'轮播', name: 'Door'},
{detail:new URL("../assets/img/Banner/Banner2.jpg",import.meta.url).href,title:'轮播', name: 'Door'},
{detail:new URL("../assets/img/Banner/Banner3.jpg",import.meta.url).href,title:'轮播', name: 'Door'}
])
let bannerList2 = ref<any>([
{detail:new URL("../assets/img/center01.png",import.meta.url).href,title:'轮播', name: 'Door'},
{detail:new URL("../assets/img/center02.png",import.meta.url).href,title:'轮播', name: 'Window'},
{detail:new URL("../assets/img/center03.png",import.meta.url).href,title:'轮播', name: 'Railing'},
{detail:new URL("../assets/img/center04.png",import.meta.url).href,title:'轮播', name: 'Building Material'},
{detail:new URL("../assets/img/center05.png",import.meta.url).href,title:'轮播', name: 'Kitchen Cabinets with Customization'},
{detail:new URL("../assets/img/center06.png",import.meta.url).href,title:'轮播', name: 'Kitchen faucet and sink'},
{detail:new URL("../assets/img/center07.png",import.meta.url).href,title:'轮播', name: 'Sanitary Ware'},
])
let screenWidth = ref<any>('')
let mobileShow = ref<any>(false)
let selectIndex = ref<any>(1)
const props = defineProps(['index'])
if(props.index){
selectIndex.value = props.index
}
let slidesPerView = ref<number>(3)
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 onSwiper = () => {
};
const onSlideChange = () => {
};
const goPage = (url: any) => {
router.push({
path: url
})
}
const changeindex = () => {
selectIndex.value = 2
}
</script>
<style scoped lang="less">
.projectall{
width: 100%;
text-align: center;
}
.allproject{
cursor: pointer;
display: inline-block;
text-align: center;
font-size: 18px;
margin-top: 20px;
font-weight: bold;
padding: 10px;
border: 1px solid #333;
color: #333;
}
.project-case {
.cursor-pointer{
cursor: pointer;
}
:deep(.swiper-button-prev:after){
color: #fff;
font-size: 30px;
}
:deep(.swiper-button-next:after){
color: #fff;
font-size: 30px;
}
.img-after{
border-bottom: solid .4em #fa8106;
}
.border-bottom{
border-bottom: 1px solid #eee;
}
.hover-scale{
.case-img{
img{
transition: all 3s;
}
.imgcase{
height: 600px;
}
.imgcase1{
height: 350px;
}
}
}
.hover-scale:hover .case-img img{
transform: scale(1.1);
}
.hover-scale:hover h3{
color: #fa8106;
}
.project-center-title{
bottom: 0;
left: 0;
height: 50px;
line-height: 50px;
text-align: center;
background: rgba(0,0,0,.5);
width: 100%;
}
}
@media (max-width: 800px) {
.bannerImg {
margin-top:50px;
:deep(.swiper-button-prev:after){
font-size: 30px;
}
:deep(.swiper-button-next:after){
font-size: 30px;
}
}
}
</style>

+ 133
- 53
montier/src/pages/Service.vue View File

@ -1,10 +1,29 @@
<template> <template>
<div class="width-100 bannerImg"> <div class="width-100 bannerImg">
<swiper :modules="modules" :slides-per-View='per' :space-between="50" :loop="true" :navigation="true">
<swiper-slide v-for="item, index in servicelist" :key="index">
<div class="sw">
<img :src="item.detail" :alt="item.title" class="img">
<span class="img-title">{{ item.title }}</span>
<swiper :modules="modules" :slides-per-View='per' :space-between="50" :loop="true" :navigation="true"
class="service-img" v-if="selectIndex == 1">
<swiper-slide v-for="item, index in servicelist" :key="index" class="hover-scale">
<div>
<div class="case-img overflow-hidden position-relative sww" @click="goPage('/service',index)">
<img :src="item.detail" alt="information"
class="width-100 d-block position-relative">
<h3 class="position-absolute color-fff project-center-title">{{ item.title }}</h3>
</div>
</div>
</swiper-slide>
</swiper>
<swiper :modules="modules" :slides-per-View='per1' :space-between="50" :loop="true" :navigation="true"
class="service-img" v-else>
<swiper-slide v-for="item, index in servicelist" :key="index" class="hover-scale">
<div>
<div class="case-img overflow-hidden position-relative">
<img src="../assets/img/information.jpg" alt="information"
class="width-100 d-block position-relative">
</div>
<div class="project-center-title1">
<div class="font-size-14 newsdate">2023-08-17</div>
<h2 class="newstitle">{{ item.title }}</h2>
</div>
</div> </div>
</swiper-slide> </swiper-slide>
</swiper> </swiper>
@ -16,10 +35,15 @@ import { Pagination, Navigation, Scrollbar, A11y } from 'swiper'
import { Swiper, SwiperSlide } from 'swiper/vue'; import { Swiper, SwiperSlide } from 'swiper/vue';
import 'swiper/css'; import 'swiper/css';
import { ref } from 'vue'
import { ref, onMounted } from 'vue'
import router from '../router';
let modules = [Navigation, Pagination, Scrollbar, A11y] let modules = [Navigation, Pagination, Scrollbar, A11y]
let per = ref<any>(5) let per = ref<any>(5)
let per1 = ref<any>(3)
const props = defineProps(['index'])
let selectIndex = props.index
let servicelist = ref<any>([ let servicelist = ref<any>([
{ detail: new URL("../assets/img/page01.png", import.meta.url).href, title: 'Design' }, { detail: new URL("../assets/img/page01.png", import.meta.url).href, title: 'Design' },
@ -29,15 +53,35 @@ let servicelist = ref<any>([
{ detail: new URL("../assets/img/page05.png", import.meta.url).href, title: 'Quality Control' }, { detail: new URL("../assets/img/page05.png", import.meta.url).href, title: 'Quality Control' },
]) ])
window.onresize = () => {
return (() => {
if (document.body.clientWidth <= 800) {
per.value = 3
const goPage = (url: any, index: any) => {
router.push({
path: url,
query: {
index: index
}
})
}
onMounted(() => {
if (document.body.offsetWidth < 1000) {
per.value = 2
per1.value = 1
} else {
per.value = 5
per1.value = 3
}
window.addEventListener('resize', function () {
if (document.body.offsetWidth < 1000) {
per.value = 2
per1.value = 1
} else { } else {
per.value = 5 per.value = 5
per1.value = 3
} }
})()
}
})
})
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@ -47,37 +91,42 @@ window.onresize = () => {
box-sizing: border-box; box-sizing: border-box;
} }
.sw {
margin: 10px 0;
position: relative;
left: 50%;
transform: translateX(-50%);
text-align: center;
height: 20vw;
width: 8vw;
padding: 10px 0;
background-color: #d0cece;
border-radius: 75px;
.img {
position: absolute;
left: 0;
top: 0;
width: 8vw;
height: 8vw;
z-index: 2;
background-color: #fff;
border-radius: 0 0 72px 72px;
padding-bottom: 5px;
.service-img {
padding: 0 20px;
}
.hover-scale {
.case-img {
cursor: pointer;
img {
transition: all 0.5s;
}
} }
.img-title {
position: absolute;
bottom: 20%;
left: 50%;
transform: translateX(-50%);
color: #000;
font-weight: bold;
}
.hover-scale:hover .case-img img {
transform: scale(1.1);
}
.project-center-title {
bottom: 0;
left: 0;
text-align: center;
background: rgba(0, 0, 0, 0.5);
width: 100%;
padding: 10px 5px;
}
.project-center-title1 {
cursor: pointer;
width: 100%;
padding: 10px 5px;
.newsdate{
color: #999;
}
.newstitle{
color: #333333;
} }
} }
@ -93,20 +142,23 @@ window.onresize = () => {
:deep(.swiper-button-prev) { :deep(.swiper-button-prev) {
color: transparent; color: transparent;
background: url('../assets/img/left.png') no-repeat; background: url('../assets/img/left.png') no-repeat;
background-size: cover;
left: 1vw;
width: 2.5vw;
background-size: 100%;
background-position: left;
width: 2vw;
} }
:deep(.swiper-button-next) { :deep(.swiper-button-next) {
color: transparent; color: transparent;
background: url('../assets/img/right.png');
background-size: cover;
right: 1vw;
width: 2.5vw;
background: url('../assets/img/right.png') no-repeat;
background-size: 100%;
background-position: right;
width: 2vw;
} }
.bannerImg { .bannerImg {
width: 80vw;
margin: 0 auto 10px;
:deep(.swiper-button-prev:after) { :deep(.swiper-button-prev:after) {
color: #fff; color: #fff;
font-size: 30px; font-size: 30px;
@ -119,14 +171,43 @@ window.onresize = () => {
} }
@media (max-width: 800px) { @media (max-width: 800px) {
.sw {
.img-title {
font-size: 10px;
.sww {
width: 35vw;
height: 35vw;
img{
width: 35vw;
height: 35vw;
} }
} }
.project-center-title {
font-size: 8px;
white-space: nowrap;
}
:deep(.swiper-button-prev:after) {
display: inline-block;
}
:deep(.swiper-button-next:after) {
display: inline-block;
}
:deep(.swiper-button-prev) {
background: transparent;
background-color: rgba(0, 0, 0, 0.5);
}
:deep(.swiper-button-next) {
background: transparent;
background-color: rgba(0, 0, 0, 0.5);
}
.bannerImg { .bannerImg {
margin-top: 50px; margin-top: 50px;
width: 100vw;
:deep(.swiper-button-prev) { :deep(.swiper-button-prev) {
width: 40px; width: 40px;
@ -136,5 +217,4 @@ window.onresize = () => {
width: 40px; width: 40px;
} }
} }
}
</style>
}</style>

+ 159
- 0
montier/src/pages/contactUs.vue View File

@ -0,0 +1,159 @@
<template>
<div class="contactUs">
<Title :value="title"></Title>
<div class="contactuss">
<!-- 左边 -->
<div class="contact-left">
<div class="item">
<p><strong>USA office:</strong></p>
<p>California</p>
<p>Encinitas, California, USA</p>
</div>
<div class="item">
<p><strong>Canada office:</strong></p>
<p>Victoria, BC, Canada</p>
</div>
<div class="item">
<p><strong>China office:</strong></p>
<p>H910, Huiyun Center, Nanshan, Shenzhen,China</p>
</div>
<div class="item">
<p><strong>website: </strong><br />www.i-montieri.com</p>
<p><strong>Email: </strong><br />bill@i-montieri.com</p>
</div>
</div>
<!-- 右边 -->
<div class="contact-right">
<el-form ref="ruleFormRef" :model="form" class="demo-ruleForm" label-width="150px" :size="'default'"
:inline="true" status-icon>
<el-form-item label="Requirements" prop="desc" style="width: 100%" :rules="[
{
required: true,
message: 'Please enter your requirements',
trigger: 'blur',
}]">
<el-input v-model="form.Requirements" placeholder="Requirements" type="textarea"/>
</el-form-item>
<el-form-item label="Name" style="width: 45%" :rules="[
{
required: true,
message: 'Please enter your name',
trigger: 'blur',
}]">
<el-input v-model="form.name" placeholder="Name" clearable />
</el-form-item>
<el-form-item label="Email" style="width: 45%" :rules="[
{
required: true,
message: 'Please enter your email',
trigger: 'blur',
}]">
<el-input v-model="form.email" placeholder="Email" clearable />
</el-form-item>
<el-form-item label="Phone Number" style="width: 45%" :rules="[
{
required: true,
message: 'Please enter your phone number',
trigger: 'blur',
}]">
<el-input v-model="form.phone" placeholder="Phone Number" clearable />
</el-form-item>
<el-form-item label="Country" style="width: 45%" :rules="[
{
required: true,
message: 'Please enter your country',
trigger: 'blur',
}]">
<el-input v-model="form.country" placeholder="Country" clearable />
</el-form-item>
<el-form-item label="Address" style="width: 45%" :rules="[
{
required: true,
message: 'Please enter your address',
trigger: 'blur',
}]">
<el-input v-model="form.address" placeholder="Address" clearable />
</el-form-item>
<el-form-item label="Title" style="width: 45%" :rules="[
{
required: true,
message: 'Please enter your title',
trigger: 'blur',
}]">
<el-input v-model="form.title" placeholder="Title" clearable />
</el-form-item>
<el-form-item label="Company" style="width: 100%" :rules="[
{
required: true,
message: 'Please enter your company',
trigger: 'blur',
}]">
<el-input v-model="form.company" placeholder="Company" clearable />
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import Title from '../components/Title.vue';
import { ref, reactive } from 'vue'
let title = ref<any>({
title: "Contact Us",
desc: ""
})
let form = reactive<any>({
Requirements: '',
name: '',
email: '',
phone: '',
country: '',
address: '',
title: '',
company: ''
})
</script>
<style scoped lang="less">
.contactUs {
margin-top: 4.5vw;
}
.contactuss {
width: 80%;
height: 30vw;
margin: 0 auto;
padding: 10px;
display: flex;
justify-content: space-between;
.contact-left {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.contact-right {
width: 60%;
}
}
@media (max-width: 960px) {
.contactUs {
margin-top: 15vw;
.contactuss {
height: 90vw;
.contact-left {
width: 30%;
font-size: 12px;
}
}
}
}
</style>

+ 112
- 0
montier/src/pages/projectCases.vue View File

@ -0,0 +1,112 @@
<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">
<h3>Fairmont Empress Hotel</h3>
<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,FixturesEquipment, lights fixture</p>
</div>
<p class="button-left">Get Aa Free Quote ></p>
</div>
<div class="casemessage-right">
<img src="../assets/img/Installwoodenflooring.jpg" alt="Installwoodenflooring"
class="width-100 height-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">
.casemessage {
padding: 15px;
display: flex;
justify-content: space-between;
// align-items: center;
overflow: hidden;
.casemessage-left {
width: 40%;
font-size: 26px;
.message {
margin-top: 5vw;
font-size: 16px;
.item {
margin: 10px 0;
color: #888;
}
}
.button-left {
cursor: pointer;
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-left {
background-color: pink;
font-size: 14px;
}
.casemessage-right {
width: 50vw;
height: 50vw;
.imgcase {
width: 50vw;
height: 50vw;
}
}
}</style>

+ 18
- 0
montier/src/router/index.ts View File

@ -4,6 +4,24 @@ const routes = [
{ {
path: '/', path: '/',
component: ()=>import('../pages/HomePage.vue') component: ()=>import('../pages/HomePage.vue')
},
{
path: '/service',
component: () => import('../pages/Procurement.vue')
},
// {
// path: '/projectcase/allproject',
// component: () => import('../pages/ProjectCase.vue')
// },
{
path: '/projectcase/:name',
component: () => import('../pages/projectCases.vue')
},{
path: '/casedetail',
component: () => import('../pages/CaseDetails.vue')
},{
path: '/contactUs',
component: () => import('../pages/contactUs.vue')
} }
] ]


+ 2
- 2
montier/src/style.css View File

@ -1,9 +1,9 @@
body,html,ul,li,span,p,h1,h2,h5{
body,html,ul,li,span,p,h1,h2,h3,h4,h5{
padding: 0; padding: 0;
margin: 0; margin: 0;
} }
h1,h2,h3,h4,h5,h6{ h1,h2,h3,h4,h5,h6{
margin-bottom: 0.5rem;
/* margin-bottom: 0.5rem; */
font-weight: 500; font-weight: 500;
line-height: 1.2; line-height: 1.2;
} }


+ 1
- 0
montier/src/vite-env.d.ts View File

@ -4,6 +4,7 @@ declare module 'axios'
declare module 'pinia' declare module 'pinia'
declare module 'element-plus' declare module 'element-plus'
declare module 'wowjs' declare module 'wowjs'
declare module 'swiper'
declare module "*.vue" { declare module "*.vue" {
import { DefineComponent } from "vue" import { DefineComponent } from "vue"
const component: DefineComponent<{}, {}, any> const component: DefineComponent<{}, {}, any>


+ 773
- 0
montier/yarn.lock View File

@ -0,0 +1,773 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@babel/parser@^7.20.15", "@babel/parser@^7.21.3":
version "7.22.10"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55"
integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==
"@ctrl/tinycolor@^3.4.1":
version "3.6.0"
resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz#53fa5fe9c34faee89469e48f91d51a3766108bc8"
integrity sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==
"@element-plus/icons-vue@^2.0.6":
version "2.1.0"
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz#7ad90d08a8c0d5fd3af31c4f73264ca89614397a"
integrity sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==
"@esbuild/android-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
"@esbuild/android-arm@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
"@esbuild/android-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
"@esbuild/darwin-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
"@esbuild/darwin-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
"@esbuild/freebsd-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
"@esbuild/freebsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
"@esbuild/linux-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
"@esbuild/linux-arm@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
"@esbuild/linux-ia32@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
"@esbuild/linux-loong64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
"@esbuild/linux-mips64el@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
"@esbuild/linux-ppc64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
"@esbuild/linux-riscv64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
"@esbuild/linux-s390x@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
"@esbuild/linux-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
"@esbuild/netbsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
"@esbuild/openbsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
"@esbuild/sunos-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
"@esbuild/win32-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
"@esbuild/win32-ia32@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
"@esbuild/win32-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
"@floating-ui/core@^1.4.1":
version "1.4.1"
resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17"
integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==
dependencies:
"@floating-ui/utils" "^0.1.1"
"@floating-ui/dom@^1.0.1":
version "1.5.1"
resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.5.1.tgz#88b70defd002fe851f17b4a25efb2d3c04d7a8d7"
integrity sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==
dependencies:
"@floating-ui/core" "^1.4.1"
"@floating-ui/utils" "^0.1.1"
"@floating-ui/utils@^0.1.1":
version "0.1.1"
resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.1.1.tgz#1a5b1959a528e374e8037c4396c3e825d6cf4a83"
integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==
"@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
version "2.11.7"
resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671"
integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
"@types/lodash-es@^4.17.6":
version "4.17.8"
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.8.tgz#cfffd0969507830c22da18dbb20d2ca126fdaa8b"
integrity sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==
dependencies:
"@types/lodash" "*"
"@types/lodash@*", "@types/lodash@^4.14.182":
version "4.14.197"
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b"
integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==
"@types/node@^20.4.9":
version "20.5.0"
resolved "https://registry.npmmirror.com/@types/node/-/node-20.5.0.tgz#7fc8636d5f1aaa3b21e6245e97d56b7f56702313"
integrity sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==
"@types/web-bluetooth@^0.0.16":
version "0.0.16"
resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8"
integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
"@vitejs/plugin-vue@^4.2.3":
version "4.2.3"
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6"
integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==
"@volar/language-core@1.10.0", "@volar/language-core@~1.10.0":
version "1.10.0"
resolved "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.10.0.tgz#fb6b3ad22e75c53a1ae4d644c4a788b47d411b9d"
integrity sha512-ddyWwSYqcbEZNFHm+Z3NZd6M7Ihjcwl/9B5cZd8kECdimVXUFdFi60XHWD27nrWtUQIsUYIG7Ca1WBwV2u2LSQ==
dependencies:
"@volar/source-map" "1.10.0"
"@volar/source-map@1.10.0", "@volar/source-map@~1.10.0":
version "1.10.0"
resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.10.0.tgz#2413eb190ce69fc1a382f58524a3f82306668024"
integrity sha512-/ibWdcOzDGiq/GM1JU2eX8fH1bvAhl66hfe8yEgLEzg9txgr6qb5sQ/DEz5PcDL75tF5H5sCRRwn8Eu8ezi9mw==
dependencies:
muggle-string "^0.3.1"
"@volar/typescript@~1.10.0":
version "1.10.0"
resolved "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.10.0.tgz#3b16cf7c4c1802eac023ba4e57fe52bdb6d3016f"
integrity sha512-OtqGtFbUKYC0pLNIk3mHQp5xWnvL1CJIUc9VE39VdZ/oqpoBh5jKfb9uJ45Y4/oP/WYTrif/Uxl1k8VTPz66Gg==
dependencies:
"@volar/language-core" "1.10.0"
"@vue/compiler-core@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128"
integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==
dependencies:
"@babel/parser" "^7.21.3"
"@vue/shared" "3.3.4"
estree-walker "^2.0.2"
source-map-js "^1.0.2"
"@vue/compiler-dom@3.3.4", "@vue/compiler-dom@^3.3.0":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151"
integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==
dependencies:
"@vue/compiler-core" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/compiler-sfc@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df"
integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==
dependencies:
"@babel/parser" "^7.20.15"
"@vue/compiler-core" "3.3.4"
"@vue/compiler-dom" "3.3.4"
"@vue/compiler-ssr" "3.3.4"
"@vue/reactivity-transform" "3.3.4"
"@vue/shared" "3.3.4"
estree-walker "^2.0.2"
magic-string "^0.30.0"
postcss "^8.1.10"
source-map-js "^1.0.2"
"@vue/compiler-ssr@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777"
integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==
dependencies:
"@vue/compiler-dom" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/devtools-api@^6.5.0":
version "6.5.0"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07"
integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
"@vue/language-core@1.8.8":
version "1.8.8"
resolved "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.8.tgz#5a8aa8363f4dfacdfcd7808a9926744d7c310ae6"
integrity sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw==
dependencies:
"@volar/language-core" "~1.10.0"
"@volar/source-map" "~1.10.0"
"@vue/compiler-dom" "^3.3.0"
"@vue/reactivity" "^3.3.0"
"@vue/shared" "^3.3.0"
minimatch "^9.0.0"
muggle-string "^0.3.1"
vue-template-compiler "^2.7.14"
"@vue/reactivity-transform@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929"
integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==
dependencies:
"@babel/parser" "^7.20.15"
"@vue/compiler-core" "3.3.4"
"@vue/shared" "3.3.4"
estree-walker "^2.0.2"
magic-string "^0.30.0"
"@vue/reactivity@3.3.4", "@vue/reactivity@^3.3.0":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253"
integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==
dependencies:
"@vue/shared" "3.3.4"
"@vue/runtime-core@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1"
integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==
dependencies:
"@vue/reactivity" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/runtime-dom@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566"
integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==
dependencies:
"@vue/runtime-core" "3.3.4"
"@vue/shared" "3.3.4"
csstype "^3.1.1"
"@vue/server-renderer@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c"
integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==
dependencies:
"@vue/compiler-ssr" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/shared@3.3.4", "@vue/shared@^3.3.0":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780"
integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==
"@vue/typescript@1.8.8":
version "1.8.8"
resolved "https://registry.npmmirror.com/@vue/typescript/-/typescript-1.8.8.tgz#8efb375d448862134492a044f4e96afada547500"
integrity sha512-jUnmMB6egu5wl342eaUH236v8tdcEPXXkPgj+eI/F6JwW/lb+yAU6U07ZbQ3MVabZRlupIlPESB7ajgAGixhow==
dependencies:
"@volar/typescript" "~1.10.0"
"@vue/language-core" "1.8.8"
"@vueuse/core@^9.1.0":
version "9.13.0"
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz#2f69e66d1905c1e4eebc249a01759cf88ea00cf4"
integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==
dependencies:
"@types/web-bluetooth" "^0.0.16"
"@vueuse/metadata" "9.13.0"
"@vueuse/shared" "9.13.0"
vue-demi "*"
"@vueuse/metadata@9.13.0":
version "9.13.0"
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz#bc25a6cdad1b1a93c36ce30191124da6520539ff"
integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==
"@vueuse/shared@9.13.0":
version "9.13.0"
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz#089ff4cc4e2e7a4015e57a8f32e4b39d096353b9"
integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==
dependencies:
vue-demi "*"
animate.css@^4.1.1, animate.css@latest:
version "4.1.1"
resolved "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075"
integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
async-validator@^4.2.5:
version "4.2.5"
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
dependencies:
balanced-match "^1.0.0"
copy-anything@^2.0.1:
version "2.0.6"
resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
dependencies:
is-what "^3.14.1"
csstype@^3.1.1:
version "3.1.2"
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
dayjs@^1.11.3:
version "1.11.9"
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a"
integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==
de-indent@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==
debug@^3.2.6:
version "3.2.7"
resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
dom7@^4.0.2:
version "4.0.6"
resolved "https://registry.npmmirror.com/dom7/-/dom7-4.0.6.tgz#091a51621d7a19ce0fb86045cafb3c10035e97ed"
integrity sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==
dependencies:
ssr-window "^4.0.0"
element-plus@^2.3.9:
version "2.3.9"
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.9.tgz#4a3363c62e6cc9b0a2f40f4df5aaa7b6feb4e6e4"
integrity sha512-TIOLnPl4cnoCPXqK3QYh+jpkthUBQnAM21O7o3Lhbse8v9pfrRXRTaBJtoEKnYNa8GZ4lZptUfH0PeZgDCNLUg==
dependencies:
"@ctrl/tinycolor" "^3.4.1"
"@element-plus/icons-vue" "^2.0.6"
"@floating-ui/dom" "^1.0.1"
"@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7"
"@types/lodash" "^4.14.182"
"@types/lodash-es" "^4.17.6"
"@vueuse/core" "^9.1.0"
async-validator "^4.2.5"
dayjs "^1.11.3"
escape-html "^1.0.3"
lodash "^4.17.21"
lodash-es "^4.17.21"
lodash-unified "^1.0.2"
memoize-one "^6.0.0"
normalize-wheel-es "^1.2.0"
errno@^0.1.1:
version "0.1.8"
resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
dependencies:
prr "~1.0.1"
esbuild@^0.18.10:
version "0.18.20"
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
optionalDependencies:
"@esbuild/android-arm" "0.18.20"
"@esbuild/android-arm64" "0.18.20"
"@esbuild/android-x64" "0.18.20"
"@esbuild/darwin-arm64" "0.18.20"
"@esbuild/darwin-x64" "0.18.20"
"@esbuild/freebsd-arm64" "0.18.20"
"@esbuild/freebsd-x64" "0.18.20"
"@esbuild/linux-arm" "0.18.20"
"@esbuild/linux-arm64" "0.18.20"
"@esbuild/linux-ia32" "0.18.20"
"@esbuild/linux-loong64" "0.18.20"
"@esbuild/linux-mips64el" "0.18.20"
"@esbuild/linux-ppc64" "0.18.20"
"@esbuild/linux-riscv64" "0.18.20"
"@esbuild/linux-s390x" "0.18.20"
"@esbuild/linux-x64" "0.18.20"
"@esbuild/netbsd-x64" "0.18.20"
"@esbuild/openbsd-x64" "0.18.20"
"@esbuild/sunos-x64" "0.18.20"
"@esbuild/win32-arm64" "0.18.20"
"@esbuild/win32-ia32" "0.18.20"
"@esbuild/win32-x64" "0.18.20"
escape-html@^1.0.3:
version "1.0.3"
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
graceful-fs@^4.1.2:
version "4.2.11"
resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
he@^1.2.0:
version "1.2.0"
resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
image-size@~0.5.0:
version "0.5.5"
resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
is-what@^3.14.1:
version "3.14.1"
resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
less-loader@^11.1.3:
version "11.1.3"
resolved "https://registry.npmmirror.com/less-loader/-/less-loader-11.1.3.tgz#1bb62d6ca9bf00a177c02793b54baac40f9be694"
integrity sha512-A5b7O8dH9xpxvkosNrP0dFp2i/dISOJa9WwGF3WJflfqIERE2ybxh1BFDj5CovC2+jCE4M354mk90hN6ziXlVw==
less@^4.2.0:
version "4.2.0"
resolved "https://registry.npmmirror.com/less/-/less-4.2.0.tgz#cbefbfaa14a4cd388e2099b2b51f956e1465c450"
integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==
dependencies:
copy-anything "^2.0.1"
parse-node-version "^1.0.1"
tslib "^2.3.0"
optionalDependencies:
errno "^0.1.1"
graceful-fs "^4.1.2"
image-size "~0.5.0"
make-dir "^2.1.0"
mime "^1.4.1"
needle "^3.1.0"
source-map "~0.6.0"
lodash-es@^4.17.21:
version "4.17.21"
resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
lodash-unified@^1.0.2:
version "1.0.3"
resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz#80b1eac10ed2eb02ed189f08614a29c27d07c894"
integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==
lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
magic-string@^0.30.0:
version "0.30.2"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.2.tgz#dcf04aad3d0d1314bc743d076c50feb29b3c7aca"
integrity sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.15"
make-dir@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
dependencies:
pify "^4.0.1"
semver "^5.6.0"
memoize-one@^6.0.0:
version "6.0.0"
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
mime@^1.4.1:
version "1.6.0"
resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
minimatch@^9.0.0:
version "9.0.3"
resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
dependencies:
brace-expansion "^2.0.1"
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
muggle-string@^0.3.1:
version "0.3.1"
resolved "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a"
integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==
nanoid@^3.3.6:
version "3.3.6"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
needle@^3.1.0:
version "3.2.0"
resolved "https://registry.npmmirror.com/needle/-/needle-3.2.0.tgz#07d240ebcabfd65c76c03afae7f6defe6469df44"
integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==
dependencies:
debug "^3.2.6"
iconv-lite "^0.6.3"
sax "^1.2.4"
normalize-wheel-es@^1.2.0:
version "1.2.0"
resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz#0fa2593d619f7245a541652619105ab076acf09e"
integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==
parse-node-version@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
pinia@^2.1.6:
version "2.1.6"
resolved "https://registry.npmmirror.com/pinia/-/pinia-2.1.6.tgz#e88959f14b61c4debd9c42d0c9944e2875cbe0fa"
integrity sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==
dependencies:
"@vue/devtools-api" "^6.5.0"
vue-demi ">=0.14.5"
postcss@^8.1.10, postcss@^8.4.27:
version "8.4.28"
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5"
integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==
dependencies:
nanoid "^3.3.6"
picocolors "^1.0.0"
source-map-js "^1.0.2"
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
rollup@^3.27.1:
version "3.28.0"
resolved "https://registry.npmmirror.com/rollup/-/rollup-3.28.0.tgz#a3c70004b01934760c0cb8df717c7a1d932389a2"
integrity sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==
optionalDependencies:
fsevents "~2.3.2"
"safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
semver@^5.6.0:
version "5.7.2"
resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
semver@^7.3.8:
version "7.5.4"
resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies:
lru-cache "^6.0.0"
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
source-map@~0.6.0:
version "0.6.1"
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
ssr-window@^4.0.0, ssr-window@^4.0.2:
version "4.0.2"
resolved "https://registry.npmmirror.com/ssr-window/-/ssr-window-4.0.2.tgz#dc6b3ee37be86ac0e3ddc60030f7b3bc9b8553be"
integrity sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==
swiper@7.4.1:
version "7.4.1"
resolved "https://registry.npmmirror.com/swiper/-/swiper-7.4.1.tgz#99fc586d1335b45250d2c6b3128dc91f8047d3e7"
integrity sha512-dhbL4tpYFvHug1J7GnKElfTi6EYhlZy/vNZRhHkWFyUsWZ1Vovipxj3la5gqllMogygXJMe3zvVv+f6eppvWiA==
dependencies:
dom7 "^4.0.2"
ssr-window "^4.0.2"
tslib@^2.3.0:
version "2.6.1"
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410"
integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==
typescript@^5.0.2:
version "5.1.6"
resolved "https://registry.npmmirror.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274"
integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==
vite@^4.4.5:
version "4.4.9"
resolved "https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d"
integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==
dependencies:
esbuild "^0.18.10"
postcss "^8.4.27"
rollup "^3.27.1"
optionalDependencies:
fsevents "~2.3.2"
vue-demi@*, vue-demi@>=0.14.5:
version "0.14.5"
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz#676d0463d1a1266d5ab5cba932e043d8f5f2fbd9"
integrity sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==
vue-router@^4.2.4:
version "4.2.4"
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.4.tgz#382467a7e2923e6a85f015d081e1508052c191b9"
integrity sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==
dependencies:
"@vue/devtools-api" "^6.5.0"
vue-template-compiler@^2.7.14:
version "2.7.14"
resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1"
integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==
dependencies:
de-indent "^1.0.2"
he "^1.2.0"
vue-tsc@^1.8.5:
version "1.8.8"
resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.8.tgz#67317693eb2ef6747e89e6d834eeb6d2deb8871d"
integrity sha512-bSydNFQsF7AMvwWsRXD7cBIXaNs/KSjvzWLymq/UtKE36697sboX4EccSHFVxvgdBlI1frYPc/VMKJNB7DFeDQ==
dependencies:
"@vue/language-core" "1.8.8"
"@vue/typescript" "1.8.8"
semver "^7.3.8"
vue@^3.3.4:
version "3.3.4"
resolved "https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6"
integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
dependencies:
"@vue/compiler-dom" "3.3.4"
"@vue/compiler-sfc" "3.3.4"
"@vue/runtime-dom" "3.3.4"
"@vue/server-renderer" "3.3.4"
"@vue/shared" "3.3.4"
wow.js@^1.2.2:
version "1.2.2"
resolved "https://registry.npmmirror.com/wow.js/-/wow.js-1.2.2.tgz#247519b0a342319b1a63e22aea9acec1a9ea57f5"
integrity sha512-YTW9eiZimHCJDWofsiz2507txaPteUiQD461I/D8533AiRAn3+Y68/1LDuQ3OTgPjagGZLPYKrpoSgjzeQrO6A==
wowjs@^1.1.3:
version "1.1.3"
resolved "https://registry.npmmirror.com/wowjs/-/wowjs-1.1.3.tgz#440fc1bb4c7e896840ee47972296a2b59075acbd"
integrity sha512-HQp1gi56wYmjOYYOMZ08TnDGpT+AO21RJVa0t1NJ3jU8l3dMyP+sY7TO/lilzVp4JFjW88bBY87RnpxdpSKofA==
dependencies:
animate.css latest
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==

Loading…
Cancel
Save