官网开发提交

main
guodingfang 2 years ago
parent 017c39bfe3
commit cc0574e72a

@ -15,10 +15,12 @@
VITE_API_URL=/index.php/api
##
##后台接口全路径地址(必填)
VITE_DOMAIN_URL=https://foresightventures.com/index.php/api
VITE_DOMAIN_URL=http://fv.choobest.com/index.php/api
#VITE_DOMAIN_URL=https://foresightventures.com/index.php/api
#
##图片父地址(必填)
VITE_IMG_API_URL=/uploads
#
##图片全路径(必填)
VITE_IMG_DOMAIN_URL=http://foresightventures.com/uploads
VITE_IMG_DOMAIN_URL=http://fv.choobest.com/uploads
#VITE_IMG_DOMAIN_URL=https://foresightventures.com/uploads

@ -0,0 +1,26 @@
###后台接口父地址(必填)
#VITE_API_URL=/api
###
####后台接口全路径地址(必填)
#VITE_DOMAIN_URL=http://foresightventures.wncwb.com/index.php/api
###
####图片父地址(必填)
#VITE_IMG_API_URL=/uploads
###
####图片全路径(必填)
#VITE_IMG_DOMAIN_URL=http://foresightventures.wncwb.com/uploads
#后台接口父地址(必填)
VITE_API_URL=/index.php/api
##
##后台接口全路径地址(必填)
VITE_DOMAIN_URL=http://fv.choobest.com/index.php/api
#VITE_DOMAIN_URL=https://foresightventures.com/index.php/api
#
##图片父地址(必填)
VITE_IMG_API_URL=/uploads
#
##图片全路径(必填)
VITE_IMG_DOMAIN_URL=http://fv.choobest.com/uploads
#VITE_IMG_DOMAIN_URL=https://foresightventures.com/uploads

@ -1,6 +0,0 @@
{
"ExpandedNodes": [
""
],
"PreviewInSolutionExplorer": false
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

1573
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -5,7 +5,8 @@
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build --mode=production",
"build:prod": "vite build --mode=production",
"build:test": "vite build --mode=test",
"preview": "vite preview"
},
"dependencies": {

@ -0,0 +1,4 @@
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 1L10.8246 10.8245" stroke="#B8B8B8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11 1.1748L1.17544 10.9993" stroke="#B8B8B8" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 303 B

@ -0,0 +1,3 @@
<svg width="8" height="4" viewBox="0 0 8 4" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4 4L0 0H8L4 4Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 140 B

@ -0,0 +1,3 @@
<svg width="15" height="12" viewBox="0 0 15 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.6664 5.61062L8.46243 0.678767C8.31061 0.534874 8.29835 0.288662 8.43505 0.128857C8.57176 -0.0309662 8.80565 -0.0438866 8.95748 0.100007L14.8776 5.71062C15.0408 5.86529 15.0408 6.13469 14.8776 6.28938L8.95748 11.9C8.80565 12.0439 8.57176 12.031 8.43505 11.8711C8.29835 11.7113 8.31063 11.4651 8.46244 11.3212L13.6664 6.38938H0.36992C0.165623 6.38938 0 6.21504 0 6C0 5.78496 0.165623 5.61062 0.36992 5.61062H13.6664Z" fill="#7B7B7B"/>
</svg>

After

Width:  |  Height:  |  Size: 549 B

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.40767 18.7699C11.7756 18.7699 14.0103 17.9027 15.7482 16.32L23.3371 23.8866C23.413 23.9622 23.5123 24 23.6117 24C23.711 24 23.8104 23.9622 23.8862 23.8866C24.0379 23.7353 24.0379 23.4903 23.8862 23.3391L16.2927 15.7678C19.7211 12.0925 19.6511 6.32656 16.0631 2.74883C14.2847 0.976281 11.921 0 9.40767 0C6.89389 0 4.53029 0.976252 2.75219 2.74883C-0.917397 6.40794 -0.917397 12.362 2.75219 16.0211C4.53029 17.7936 6.89389 18.7699 9.40767 18.7699ZM3.30127 3.29632C4.93263 1.67008 7.10131 0.774353 9.40767 0.774353C11.7136 0.774353 13.8823 1.67008 15.5141 3.29632C18.8807 6.6535 18.8807 12.1164 15.5141 15.4736C13.8823 17.0998 11.7136 17.9955 9.40767 17.9955C7.10131 17.9955 4.93263 17.0998 3.30127 15.4736C-0.0653455 12.1164 -0.0653455 6.6535 3.30127 3.29632Z" fill="black" fill-opacity="0.25"/>
</svg>

After

Width:  |  Height:  |  Size: 909 B

@ -1,10 +1,10 @@
<template>
<div>
<div class="top-title">
<div class="top-title" :style="{'text-align': textAlign}">
<div class="big-title">
{{ bigTitle }}
</div>
<div class="sub-title" v-if="subTitle">
<div class="sub-title" v-if="subTitle" :style="{'text-align': textAlign}">
{{ subTitle }}
</div>
</div>
@ -14,7 +14,8 @@
<script setup>
const props = defineProps({
bigTitle: { typs: String, default: '' },
subTitle: { typs: String, default: '' }
subTitle: { typs: String, default: '' },
textAlign: { typs: String, default: 'right' }
})
</script>
@ -35,7 +36,7 @@ const props = defineProps({
font-size: 22px;
line-height: 22px;
margin-top: 48px;
text-align: right;
// text-align: right;
color: #000000;
@media screen and (min-width: 1440Px) and (max-width: 100vw) {
@ -55,12 +56,11 @@ const props = defineProps({
font-family: 'Cinzel';
font-style: normal;
font-weight: 400;
font-size: 14Px;
font-size: 12px;
height: 12px;
line-height: 12px;
text-align: right;
margin-top: 20px;
color: rgba(0, 0, 0, 0.5);
margin-top: 14px;
color: #000000;
@media screen and (min-width: 1440Px) and (max-width: 100vw) {
font-size: 14px;

@ -39,19 +39,24 @@
<div class="footer-item footer-menus">
<!-- <div class="small-font">Contact us</div>-->
<!-- <div class="small-font line">|</div>-->
<div class="small-font">
<router-link to="/about">About</router-link></div>
<div class="small-font skip-a">
<span @click="onSkip('/about')">Team</span>
</div>
<div class="small-font line">|</div>
<div class="small-font skip-a">
<span @click="onSkip('http://jobs.foresightventures.com/')">Jobs</span>
</div>
<div class="small-font line">|</div>
<!-- <div class="small-font">
<a target="_blank" href="https://www.zhipin.com/beijing/?sid=sem_pz_bdpc_dasou_title">Jobs</a>
</div>
<div class="small-font line">|</div>-->
<div class="small-font">
<router-link to="/terms">Terms of Use</router-link>
<div class="small-font skip-a">
<span @click="onSkip('/terms')">Terms of Use</span>
</div>
<div class="small-font line">|</div>
<div class="small-font">
<router-link to="/privacy">Privacy Policy</router-link>
<div class="small-font skip-a">
<span @click="onSkip('/privacy')">Privacy Policy</span>
</div>
</div>
@ -65,8 +70,12 @@
</template>
<script setup>
import LineComVue from './LineCom.vue';
import { useRouter } from 'vue-router'
import {onMounted, ref} from 'vue';
import {getAction, getConfigApi, getPageApi, subscribedApi} from "../api/manage.js";
const router = useRouter()
// email reg
const emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
@ -92,6 +101,16 @@ const eBlur = () => {
}
const shareList = ref([])
const onSkip = (url) => {
const reg = /^(http|https)/
if (reg.test(url)) {
window.open(url)
return
}
router.push(url)
}
//
const enter = () => {
if (emailVal.value) {
@ -111,13 +130,12 @@ const enter = () => {
}
isInput.value = false;
emailVal.value = ''
}
const getData = ()=>{
getPageApi({title:"Footer"}).then(res=>{
footerText.value = res.data;
})
getAction({url: '/index/getShare'}).then(res=>{
getAction({url: '/index/getShare', params: { type: 'pc' }}).then(res=>{
shareList.value = res.data;
})
}
@ -302,4 +320,7 @@ onMounted(()=>{
font-size: 15Px;
}
}
.skip-a {
cursor: pointer;
}
</style>

@ -6,48 +6,111 @@
<div class="logo-text">
<img src="/images/ForesightLogo.png" alt="The image cannot be displayed properly" @click="refresh" />
</div>
<div class="icon search" @click="showPopup('search')">
<img src="/images/search.svg" alt="The image cannot be displayed properly" />
<ul class="nav-list">
<li class="nav-item" :class="{'active-link': item.link === currentLink}" v-for="item in routerList" :key="item.id" @mouseenter="onNavEnter($event, item)" @mouseleave="onNavLeave($event)">
<span @click="onNavSkip(item)">{{ item.title }}</span>
<img v-if="item.children && item.children.length > 0" class="icon-down" src="@/assets/icon/down.svg" alt="">
</li>
</ul>
<ul class="nav-children-list" ref="navChildren" @mouseenter="onNavChildrenEnter()" @mouseleave="onNavChildrenLeave">
<li class="nav-item" :class="{'active-link': item.link === currentLink}" v-for="item in navChildrenContent" :key="item.id">
<span @click="onNavSkip(item)">{{ item.title }}</span>
</li>
</ul>
<div class="search max-show">
<img src="/images/search.svg" alt="The image cannot be displayed properly" @click="isSearch = true" />
<div class="search-com" v-if="isSearch">
<search-com show-type="min" @close="isSearch = false"></search-com>
</div>
</div>
<div class="search min-show">
<img src="/images/search.svg" alt="The image cannot be displayed properly" @click="showSearch = true" />
</div>
<div class="icon menu" @click="showPopup('menu')">
<div class="menu" @click="showPopup">
<img src="/images/menu.svg" alt="The image cannot be displayed properly" />
</div>
</header>
<!-- popup menu -->
<van-popup class="popup" v-model:show="show" position="top" overlay-class="header-overlay" @closed="hidePopup"
safe-area-inset-top>
<van-popup
class="popup"
v-model:show="show"
position="right"
overlay-class="header-overlay"
@closed="hidePopup"
safe-area-inset-top
:style="{ width: '50%', height: '100%' }"
>
<div class="nav-close" @click="isInput = false">
<div class="popup-logo" @click="refresh"></div>
<span class="close" @click="hidePopup">
<img src="/images/nav/close.svg" alt="The image cannot be displayed properly">
</span>
<div class="popup-logo" @click="refresh"></div>
</div>
<!-- input -->
<div class="nav-search">
<div class="search-input">
<img class="ipt-search" src="/images/search.svg" alt="The image cannot be displayed properly"
@click="toSearch(search, 'search')">
<input class="search-ipt" maxlength="100" type="text" placeholder="Search" v-model="search"
@focus="isInput = true" @input="onInput()" @keydown.enter="toSearch(search, 'search')" />
<img class="close" @click="handleClose" style="cursor:pointer;" src="/images/search_close.svg" alt="The image cannot be displayed properly">
</div>
</div>
<!-- tipMsg -->
<div class="tip-msg" v-show="isInput" @click="isInput = false">
<ul v-show="tipList.length">
<li class="search-result tip-active" v-for="msg in tipList" @click="toSearch(msg, 'detail')">
<span v-html="msg.title"></span>
<div class="popup-nav">
<ul class="popup-nav-list">
<li v-for="item in routerList" class="popup-nav-item" :key="item.id">
<div class="popup-nav-item-title" :class="{'active-link': item.link === currentLink}" @click="onPopupNavItem(item)">
<span>{{ item.title }}</span>
<img
v-if="item.children && item.children.length > 0"
class="icon-down"
:class="{'icon-up': havChildId === item.id}"
src="@/assets/icon/down.svg"
alt=""
>
</div>
<div class="popup-nav-children-list" v-if="havChildId === item.id">
<div v-for="cItem in item.children" :key="cItem.id" class="popup-nav-children-item-title" @click="onPopupNavItem(item)">{{ cItem.title }}</div>
</div>
</li>
</ul>
<div class="no-result" v-show="isInput && !tipList.length && search">
{{ noResult }}
</div>
<!-- <menu-comp v-show="!isInput" /> -->
<div class="popup-footer enter-email">
<div class="subscribe">
Subscribe
</div>
<div class="email">
<input class="email-input" placeholder="Enter email" type="email" name="email" ref="emailInput" v-model="emailVal">
<div class="email-submit" @click="onEnter">
<img src="@/assets/icon/enter.svg" alt="The image cannot be displayed properly">
</div>
</div>
<div class="share-list">
<img style="cursor:pointer;" :src="item.image" v-for="(item, index) in shareList" @click="handleShare(item)" alt="The image cannot be displayed properly">
</div>
<div class="footer-menus">
<div class="small-font skip-a">
<span @click="onSkip('/about')">Team</span>
</div>
<div class="small-font skip-a">
<span @click="onSkip('http://jobs.foresightventures.com/')">Jobs</span>
</div>
<div class="small-font skip-a">
<span @click="onSkip('/terms')">Terms of Use</span>
</div>
<div class="small-font skip-a">
<span @click="onSkip('/privacy')">Privacy Policy</span>
</div>
</div>
<!-- 备案号 Internet Content Provider -->
<div class="footer-provider">
© 2000-{{ new Date().getFullYear() }}, Foresight Ventures Investments
</div>
</div>
<menu-comp v-show="!isInput" />
</van-popup>
<van-popup
class="search-popup"
v-model:show="showSearch"
position="right"
overlay-class="header-overlay"
@closed="hideSearchPopup"
safe-area-inset-top
:style="{ width: '100%', height: '100%' }"
>
<search-com show-type="max" @close="showSearch = false"></search-com>
</van-popup>
</div>
</template>
<script setup>
@ -55,7 +118,7 @@ import {onMounted, ref, watch, watchEffect} from 'vue';
import { useRoute, useRouter } from "vue-router";
// import { searchResult } from '../assets/datas/searchResultData'
import { useStore } from 'vuex';
import {getNavData} from "../api/manage.js";
import {getAction, subscribedApi, getNavData} from "../api/manage.js";
import {searchTitleApi} from "../api/research.js";
import MenuComp from "./MenuComp.vue";
@ -68,6 +131,7 @@ const search = ref('');
const searchResult = ref([])
// popup is show
const show = ref(false);
const showSearch = ref(false);
// is oninput
const isInput = ref(false);
//
@ -77,16 +141,87 @@ const tipList = ref([]);
// No information about the search result is displayed
const noResult = ref('');
const navChildren = ref(null)
const navChildrenContent = ref([])
const timer = ref(null)
const havChildId = ref('')
const shareList = ref([])
const emailVal = ref('')
const emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
const isSearch = ref(false)
const currentLink = ref('')
//
// Check whether the route is changed
watch(
() => route,
() => {
(val) => {
currentLink.value = val.path
show.value = false
},
{ deep: true, immediate: true }
)
const onSkip = (url) => {
const reg = /^(http|https)/
if (reg.test(url)) {
window.open(url)
return
}
router.push(url)
}
const onNavSkip = (item) => {
const reg = /^(http|https)/
if (reg.test(item.link)) {
window.open(item.link)
return
}
router.push(item.link)
}
const handleShare = (item)=> {
window.open(item.link)
}
const onNavEnter = (event, item) => {
if (item && item.children.length > 0) {
const header = document.getElementById('header')
const left = header.getBoundingClientRect().left
const nav = event.path[0]
const navLeft = nav.getBoundingClientRect().left
navChildren.value.style.display = 'flex'
navChildren.value.style.left = `${navLeft - left - 40}px`
navChildrenContent.value = item.children
} else {
navChildren.value.style.display = 'none'
}
}
const onNavLeave = (event) => {
timer.value = setTimeout(() => {
navChildren.value.style.display = 'none'
}, 1250)
}
const onNavChildrenEnter = () => {
clearInterval(timer.value)
}
const onNavChildrenLeave = () => {
navChildren.value.style.display = 'none'
}
const onPopupNavItem = (item) => {
if (item.children && item.children.length > 0) {
havChildId.value = havChildId.value ? '' : item.id
return
}
router.push(item.link)
}
//
const hidePopup = () => {
// reset
@ -96,14 +231,37 @@ const hidePopup = () => {
tipList.value = [];
}
const hideSearchPopup = () => {
showSearch.value = false
}
// show popup
const showPopup = (type) => {
show.value = true;
if (type == 'search') {
isInput.value = true;
// if (type == 'search') {
// isInput.value = true;
// } else {
// isInput.value = false;
// }
}
//
const onEnter = () => {
if (emailVal.value) {
if (emailReg.test(emailVal.value)) {
console.log(emailVal.value)
subscribedApi({email: emailVal.value}).then((res)=>{
if (res.code === 1) {
alert('subscribe success!');
}
})
} else {
alert('format error!')
}
} else {
isInput.value = false;
alert('value is null!')
}
emailVal.value = ''
}
// oninput
@ -114,24 +272,12 @@ const onInput = () => {
// issue a request
//
// The regular expression matches the search character
const searchReg = new RegExp(search.value, 'gi');
//
// Clear the search results and start again
tipList.value = [];
if (search.value) {
// searchResult.forEach((item) => {
// const result = searchReg.exec(item.title);
// if (result) {
// const resultMsg = result.input.replace(searchReg, `<span style="color:#ff6d00">${result[0]}</span>`)
// tipList.value.push({ t: item.title, title: resultMsg, id: item.id });
// }
// })
getSearchTitle()
// if (!tipList.value.length) {
// noResult.value = `There are no results for the search term "${search.value}"`;
// }
}
}
@ -192,47 +338,22 @@ const toSearch = (msg, type) => {
}
}
/*
*
// oninput
const onInput = () => {
isInput.value = true;
store.commit('changeSearchVal', search.value)
//
// issue a request
//
// The regular expression matches the search character
const searchReg = new RegExp(search.value, 'gi');
//
// Clear the search results and start again
tipList.value = [];
if (search.value) {
searchResult.forEach((item) => {
const result = searchReg.exec(item.title);
if (result) {
const resultMsg = result.input.replace(searchReg, `<span style="color:#ff6d00">${result[0]}</span>`)
tipList.value.push({ t: item.title, title: resultMsg, id: item.id });
}
})
if (!tipList.value.length) {
noResult.value = `There are no results for the search term "${search.value}"`;
}
}
}
* */
const getNav = ()=>{
getNavData().then(({data})=>{
if (data) {
routerList.value = data;
routerList.value = data.sort((a, b) => a.sort - b.sort);
}
})
}
const getShare = ()=>{
getAction({url: '/index/getShare', params: { type: 'mobile' }}).then(res=>{
shareList.value = res.data;
})
}
onMounted(()=>{
getNav()
getShare()
window.addEventListener('keydown', (e)=>{
if (e.keyCode === 27) {
show.value = false;
@ -258,9 +379,6 @@ const getSearchTitle = ()=>{
})
}
const handleClose = ()=>{
search.value = ''
}
</script>
<style lang="scss" scoped>
::v-deep .van-popup {
@ -269,26 +387,30 @@ const handleClose = ()=>{
.nav {
max-width: 1000px;
padding: 0 46px;
height: 80Px;
position: relative;
margin: 0 auto;
padding: 24px 36px;
z-index: 99;
.menu {
cursor: pointer;
// @media screen and (min-width: 1440Px) and (max-width: 100vw) {
// padding: 0 48px;
// }
@media (max-width: 1280Px) {
padding: 0 40px;
}
@media screen and (min-width: 1440Px) and (max-width: 100vw) {
padding: 24px 48px;
@media (max-width: 767Px) {
padding: 0 18px;
}
#header {
height: 80Px;
position: relative;
display: flex;
justify-content: space-between;
align-items: center;
.logo-text {
width: 200px;
height: 100%;
border-radius: 0px;
margin-right: auto;
cursor: pointer;
//display: flex;
//align-items: center;
@ -296,46 +418,115 @@ const handleClose = ()=>{
width: 100%;
height: auto;
background-color: #f5f5f5;
margin-top: 8Px;
}
}
.icon {
.nav-list {
margin-right: auto;
display: flex;
.nav-item {
display: flex;
align-items: center;
font-family: Cinzel;
font-size: 12px;
color: #000000;
margin-right: 16px;
cursor: pointer;
.icon-down {
margin-left: 10px;
width: 8px;
}
}
}
.nav-children-list {
display: none;
position: absolute;
top: 4px;
top: 40px;
z-index: 9;
width: 90px;
padding: 6px 10px;
background: #f5f5f5;
flex-direction: column;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.15);
.nav-item {
display: flex;
align-items: center;
font-family: Cinzel;
font-size: 12px;
height: 36px;
cursor: pointer;
}
}
.icon {
img {
width: 100%;
}
}
.search {
position: relative;
height: 21px;
width: 21px;
right: 45px;
cursor: pointer;
.search-com {
position: absolute;
top: 25px;
right: 0;
width: 430px;
}
&.max-show {
display: inline-flex;
}
&.min-show {
display: none;
}
}
@media (max-width: 1280Px) {
.search {
&.max-show {
display: none;
}
&.min-show {
display: inline-flex;
}
}
}
.menu {
margin-left: 22px;
display: none;
cursor: pointer;
width: 21px;
height: 18px;
right: 0px;
}
@media (max-width: 1280Px) {
.nav-list {
display: none;
}
.nav-children-list {
display: none;
}
.menu {
display: inline-flex;
}
}
}
.popup {
.nav-close {
max-width: 1000px;
width: 100%;
margin: 0 auto;
height: 60px;
position: relative;
padding: 24px 36px;
padding: 0 24px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: space-between;
.close {
font-size: 18px;
position: absolute;
right:36px;
img {
width: 18px;
@ -344,20 +535,46 @@ const handleClose = ()=>{
.popup-logo {
width: 200px;
height: 24px;
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
height: 18px;
background-image: url(/images/ForesightLogo.png);
background-size: 100% ;
background-position:bottom ;
background-position: center;
background-repeat: no-repeat;
}
}
.popup-nav {
.popup-nav-list {
padding: 0 32px;
.popup-nav-item {
font-family: Cinzel;
font-size: 12px;
color: #000000;
border-bottom: 1px solid #EFEFEF;
cursor: pointer;
.icon-up {
transform: rotate(180deg);
}
.popup-nav-item-title {
height: 36px;
display: flex;
align-items: center;
justify-content: space-between;
}
.popup-nav-children-list {
display: flex;
margin-left: 14px;
flex-direction: column;
.popup-nav-children-item-title {
height: 36px;
display: flex;
align-items: center;
}
}
}
}
}
.nav-search {
max-width: 1000px;
margin: 12px auto;
@ -492,10 +709,75 @@ const handleClose = ()=>{
//margin-top: 32px;
}
}
.popup-footer {
margin-top: 50px;
margin-left: 36px;
.subscribe {
font-weight: 400;
color: rgba(0, 0, 0, 0.5);
font-family: Libre Bodoni;
font-size: 16px;
}
.email {
margin-top: 4px;
height: 24px;
display: flex;
.email-input {
height: 100%;
border: 1px solid #999;
padding-left: 10px;
font-family: Raleway;
font-size: 12px;
}
.email-submit {
width: 32px;
border: 1px solid #999;
border-left: none;
display: flex;
align-items: center;
justify-content: center;
}
}
.share-list {
margin-top: 15px;
img {
width: 20px;
height: 20px;
margin-right: 16px;
}
}
.footer-provider {
margin-top: 16px;
font-family: Raleway;
font-size: 10px;
color: rgba(0, 0, 0, 0.25);
}
}
}
@media (max-width: 767Px) {
:deep(.van-popup) {
width: 100% !important;
}
}
}
.margin-top {
margin-top: 32px;
}
.footer-menus {
display: flex;
margin-top: 24px;
margin-bottom: 18px;
.small-font {
font-size: 12px;
color: #000;
margin-right: 18px;
&.skip-a {
cursor: pointer;
}
}
}
.active-link {
color: rgba(255, 109, 0, 1) !important;
}
</style>

@ -20,16 +20,16 @@
<div class="research-nav" v-if="!isSma">
<div class="wrap flex">
<div class="research-author" v-html="data.author && data.author.replace(/\\n/g, '<br />')"></div>
<div class="topics" v-if="!isMid && !isSma">
<div class="topics" v-if="!isSma">
<span class="topic_item" v-for="item in data.topic_names.split(',')">{{ item }}</span>
</div>
</div>
<div class="research-date">{{ transformDate(data.publishedtime) }}</div>
</div>
<div class="topics" v-if="isMid">
<!-- <div class="topics" v-if="isMid">
<span class="topic_item" v-for="item in data.topic_names.split(',')">{{ item }}</span>
</div>
</div> -->
<div class="research-title" v-html="data.title">
</div>
<div class="topics" v-if="isSma">

@ -0,0 +1,237 @@
<template>
<div class="research-search">
<div class="topics nav-item">
<div class="title" @mouseenter="onNavEnter('topics')" @mouseleave="onNavLeave('topics')">
<span class="title-val">TOPICS</span>
<img class="icon-down" src="@/assets/icon/down.svg" alt="">
</div>
<div
class="select-list"
:class="{'show-select-list': isSelectType === 'topics'}"
@mouseenter="onSelectEnter('topics')"
@mouseleave="onSelectLeave('topics')"
>
<div class="select-search">
<img class="icon-search" src="@/assets/icon/search.svg" alt="">
<input class="select-search" type="text" placeholder="Search" v-model="searchTopics">
</div>
<div class="select-content">
<div v-for="(item, index) in topicsList" :key="item.id" class="select-item" :class="{ 'selected-item': item.id == topicId }" @click="onSelectItem('topics', item, index)">
<p v-html="item.title"></p>
</div>
</div>
</div>
</div>
<div class="authors nav-item">
<div class="title" @mouseenter="onNavEnter('authors')" @mouseleave="onNavLeave('authors')">
<span class="title-val">AUTHORS</span>
<img class="icon-down" src="@/assets/icon/down.svg" alt="">
</div>
<div
class="select-list"
:class="{'show-select-list': isSelectType === 'authors'}"
@mouseenter="onSelectEnter('authors')"
@mouseleave="onSelectLeave('authors')"
>
<div class="select-search">
<img class="icon-search" src="@/assets/icon/search.svg" alt="">
<input class="select-search" type="text" placeholder="Search" v-model="searchAuthors">
</div>
<div class="select-content">
<div v-for="(item, index) in authorsList" :key="item.id" class="select-item" :class="{ 'selected-item': item.id == authorId }" @click="onSelectItem('authors', item, index)">
<p v-html="item.name"></p>
</div>
</div>
</div>
</div>
<div class="search">
<img class="icon-search" src="@/assets/icon/search.svg" alt="">
<input class="search-input" type="text" placeholder="Search" v-model="searchText" @keydown.enter="toSearch">
</div>
</div>
</template>
<script setup>
import { ref, computed } from 'vue'
import { useRouter } from 'vue-router';
import { useStore } from 'vuex';
const router = useRouter()
const store = useStore()
const props = defineProps({
selectNav: {
type: Object,
default: () => {}
},
topicId: {
type: String,
default: ''
},
authorId: {
type: String,
default: ''
}
})
const searchTopics = ref('')
const searchAuthors = ref('')
const searchText = ref('')
const isSelectType = ref('')
const timer = ref('')
const topicsList = computed(() => {
return (props.selectNav.topic || []).filter(item => item.title.includes(searchTopics.value)).map(item => ({
...item,
title: htmlRegroup(item.title, searchTopics.value)
}))
})
const authorsList = computed(() => {
return (props.selectNav.authors || []).filter(item => item.name.includes(searchAuthors.value)).map(item => ({
...item,
name: htmlRegroup(item.name, searchAuthors.value)
}))
})
const htmlRegroup = (str, val) => {
if (!str ||!val) return str;
const reg = new RegExp(val, 'gi');
return str.replace(reg, `<span style="color: #f00">${val}</span>`)
}
const onNavEnter = (type) => {
isSelectType.value = type
}
const onNavLeave = () => {
timer.value = setTimeout(() => {
isSelectType.value = false
}, 750)
}
const onSelectEnter = () => {
clearInterval(timer.value)
}
const onSelectLeave = () => {
isSelectType.value = false
}
const emit = defineEmits(['select'])
const onSelectItem = (type, item, index) => {
emit('select', { type, item, index })
}
const toSearch = () => {
store.commit('changeSearchVal', searchText.value)
router.push('/search/result')
}
</script>
<style lang="scss" scoped>
.research-search {
display: flex;
align-items: center;
flex-wrap: wrap;
.nav-item {
position: relative;
.title {
display: flex;
align-items: center;
justify-content: center;
margin-right: 30px;
cursor: pointer;
.title-val {
font-family: Raleway;
font-size: 16px;
font-weight: 500;
color: #000;
}
.icon-down {
margin-left: 8px;
width: 8px;
height: 6px;
}
}
.select-list {
display: none;
position: absolute;
z-index: 99;
left: 0;
&.show-select-list {
display: flex;
flex-direction: column;
width: 180px;
background: #F5F5F5;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.15);
.select-search {
height: 36px;
margin: 10px;
padding: 8px;
box-sizing: border-box;
background: #EFEFEF;
display: flex;
align-items: center;
.icon-search {
width: 12px;
height: 12px;
}
.select-search {
border: none;
background: transparent;
font-size: 12px;
font-family: Raleway;
font-weight: 500;
}
}
.select-content {
max-height: 400px;
overflow-x: hidden;
overflow-y: auto;
.select-item {
padding-left: 18px;
min-height: 40px;
display: flex;
align-items: center;
font-size: 12px;
font-family: Raleway;
cursor: pointer;
&.selected-item {
color: #fd6911;
}
}
}
}
}
}
.search {
margin-left: auto;
background: #EFEFEF;
width: 260px;
height: 42px;
padding: 0 20px;
box-sizing: border-box;
display: flex;
align-items: center;
.search-input {
flex: 1;
margin-left: 12px;
background: transparent;
border: none;
font-size: 14px;
font-family: Raleway;
}
}
@media (max-width: 767Px) {
.search {
margin-top: 18px;
width: 100%;
}
}
}
</style>

@ -0,0 +1,225 @@
<template>
<div class="search-mask" @click="onClose"></div>
<div class="search-container" :class="{'max-search-container': showType === 'max'}">
<div class="search">
<img class="icon-search" src="@/assets/icon/search.svg" alt="">
<input
class="search-input"
type="text"
v-model="searchText"
@keydown.enter="toSearch"
placeholder="Search research titles, authors & description"
>
<img class="icon-close" src="@/assets/icon/close.svg" @click="onClear" alt="">
<div v-if="showType === 'max'" class="cancel-btn" @click="onClose">Cancel</div>
</div>
<div class="result" v-if="result.research.length > 0 || result.author.length > 0">
<div class="result-content" v-if="result.research.length > 0">
<div class="result-title">Research</div>
<ul class="result-list">
<li v-for="item in result.research" class="result-item" @click="toDetails(item, 'research')">
<p v-html="item.title"></p>
</li>
</ul>
</div>
<div class="result-content" v-if="result.author.length > 0">
<div class="result-title">Author</div>
<ul class="result-list">
<li v-for="item in result.author" class="result-item" @click="toDetails(item, 'author')">
<p v-html="item.name"></p>
</li>
</ul>
</div>
</div>
<div class="result-empty" v-if="isSearchEnter && result.research.length == 0 && result.author.length === 0">
<img class="icon-search" src="@/assets/icon/search.svg" alt="">
<div class="not-search">No results for '{{ searchText }}'</div>
<div class="not-tips">We couldn't find anything matching your search.<br />Try again with a different term.</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import {searchTitleApi} from "@/api/research.js";
const router = useRouter()
const props = defineProps({
showType: {
type: String,
default: 'min'
}
})
const result = reactive({
research: [],
author: []
})
const isSearchEnter = ref(false)
const searchText = ref('')
const toSearch = async () => {
const { code, data } = await searchTitleApi({
keyword: searchText.value,
page: 1,
limit: 10000,
})
if (code === 1) {
result.research = data.research.data.map(item => ({ ...item, title: htmlRegroup(item.title) }))
result.author = data.author.data.map(item => ({ ...item, name: htmlRegroup(item.name) }))
isSearchEnter.value = true
}
}
const htmlRegroup = (str) => {
const reg = new RegExp(searchText.value, 'gi');
return str.replace(reg, `<span style="color: #f00">${searchText.value}</span>`)
}
const onClear = () => {
searchText.value = ''
isSearchEnter.value = false
result.research = []
result.author = []
}
const toDetails = (item, type) => {
if (type === 'research') {
router.push({ path: '/ContentPages', query: { contentId: item.id } })
} else {
router.push({ path: '/research', query: { authorId: item.id } })
}
emit('close')
}
const emit = defineEmits(['close'])
const onClose = () => {
emit('close')
}
</script>
<style lang="scss" scoped>
.search-container {
position: relative;
z-index: 9999;
width: 100%;
padding: 18px 20px;
background: #fff;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.15);
box-sizing: border-box;
.search {
height: 28px;
display: flex;
align-items: center;
justify-content: space-between;
.icon-search {
width: 20px;
height: 20px;
}
.search-input {
flex: 1;
margin-left: 16px;
border: none;
background-color: transparent;
font-size: 13px;
font-family: Raleway;
}
.icon-close {
width: 22px;
height: 22px;
cursor: pointer;
padding: 10px;
}
.cancel-btn {
margin-left: 16px;
width: 96px;
height: 38px;
background: #EFEFEF;
color: #000;
font-family: Raleway;
display: flex;
align-items: center;
justify-content: center;
font-size: 13px;
cursor: pointer;
}
}
.result {
margin-top: 18px;
display: flex;
flex-direction: column;
max-height: calc(100vh - 128px);
overflow-y: auto;
overflow-x: hidden;
.result-title {
font-family: Raleway;
font-size: 12px;
color: rgba(0, 0, 0, .25);
margin-bottom: 16px;
}
.result-list {
display: flex;
flex-direction: column;
margin-bottom: 20px;
.result-item {
height: 36px;
padding: 0 20px;
box-sizing: border-box;
display: flex;
align-items: center;
font-family: Libre Bodoni;
font-size: 12px;
color: #000;
cursor: pointer;
&:hover {
background-color: #EFEFEF;
}
}
}
}
@media (max-width: 1280Px) {
.result {
max-height: calc(100vh - 82px);
}
}
.result-empty {
display: flex;
flex-direction: column;
align-items: center;
.icon-search {
width: 32px;
height: 32px;
}
.not-search {
color: #000;
font-family: Raleway;
font-size: 16px;
margin-top: 13px;
margin-bottom: 13px;
}
.not-tips {
color: rgba(0, 0, 0, .5);
font-family: Raleway;
font-size: 14px;
text-align: center;
}
}
}
.search-container.max-search-container {
min-height: 100%;
}
.search-mask {
position: fixed;
top: 0;
left: 0;
height: 100vh;
width: 100vw;
z-index: 999;
}
</style>

@ -60,7 +60,8 @@ const routes = [
const router = createRouter({
history: createWebHistory(),
routes
routes,
linkActiveClass: 'active',
})
export default router

@ -8,8 +8,8 @@
<div class="about-foresight-content" v-html="aboutDesc.content" />
</div>
<!-- 分类标题 sideTitle -->
<LineTitleComVue />
<div class="s_title">Team</div>
<LineTitleComVue :msg="'Team'" />
<!-- <div class="s_title">Team</div> -->
<!-- 团队成员 team members -->
<div class="members">
<template v-for="item in teamData" :key="item">
@ -219,6 +219,7 @@ onMounted(()=>{
}
.about-foresight {
margin-bottom: 40px !important;
.block {
height: 44px;
}

@ -9,7 +9,7 @@
<div class="banner container" v-html="bannerText.content" style="padding-left:0 !important;margin-left: 0 !important; padding-bottom: 0 !important;padding-top: 0 !important;">
</div>
<menu-comp style="padding-right: 0 !important;margin-right: 0 !important;" />
<!-- <menu-comp style="padding-right: 0 !important;margin-right: 0 !important;" /> -->
</div>
<div class="banner container" v-else v-html="bannerText.content">
@ -172,7 +172,7 @@ const getNewsData = ()=>{
.banner {
max-width: 1000px;
// height: 442px;
margin: 0 auto;
margin: 0 auto 24px auto;
position: relative;
padding-top: 72px;

@ -3,12 +3,20 @@
<div class="center clear">
<div class="container">
<!-- 标题 -->
<BigTitleComVue :bigTitle="titleInfo.title" :subTitle="titleInfo.subTitle">
<BigTitleComVue :bigTitle="titleInfo.title" :subTitle="titleInfo.subTitle" text-align="left">
</BigTitleComVue>
<!-- 分割线 -->
<LineComVue></LineComVue>
</div>
<div class="btns container">
<div class="container" style="padding-bottom: 20px">
<research-search-com
:select-nav="BtnText"
:topic-id="topicId"
:author-id="authorId"
@select="onChangeActive"
></research-search-com>
</div>
<!-- 分割线 -->
<LineComVue></LineComVue>
<!-- <div class="btns container">
<div class="btn-topic">
<div class="search_type">Topics</div>
<div class="btn_list">
@ -40,7 +48,7 @@
<change-next style="cursor:pointer;" color="black" :opacity="isClickChangeAuthor?'0.5':'0.1'" @click="changeAuthor(1)" />
</div>
</div>
</div>
</div> -->
<!-- 卡片 -->
<div class="container">
<template v-for="item in dataList" :key="item.id">
@ -61,8 +69,8 @@ import BigTitleComVue from "../components/BigTitleCom.vue";
import ResearchComVue from "../components/ResearchCom.vue";
import PaginationComVue from "../components/PaginationCom.vue";
import LineComVue from "../components/LineCom.vue";
import {ref, onMounted, reactive} from "vue";
import { useRouter } from "vue-router";
import {ref, watch, onMounted, reactive} from "vue";
import { useRoute, useRouter } from "vue-router";
import {getResearch, getResearchAuthorApi, getResearchType} from "../api/research.js";
import {transformDate} from "../utils/tools.js";
import useTitleInfo from "../utils/useTitleInfo.js";
@ -84,49 +92,72 @@ const BtnText = reactive({
]
});
//
const changeActive = (flag,id, index) => {
console.log(flag, 'index>>>>>', index)
// if (flag === 'topic_id') {
// if (params[flag].length) {
// params[flag] = params[flag].filter(it=> it === -1 ? undefined : it)
// }
// }
params[flag][index] = params[flag][index] ? undefined : id;
if (flag === 'topic_id' && params[flag].length > 1) {
params[flag][params[flag].findIndex(it=> it === -1)] = undefined
}
if (flag === 'topic_id' && id === -1) {
params[flag] = [id]
// const changeActive = (flag,id, index) => {
// console.log(flag, 'index>>>>>', index)
// // if (flag === 'topic_id') {
// // if (params[flag].length) {
// // params[flag] = params[flag].filter(it=> it === -1 ? undefined : it)
// // }
// // }
// params[flag][index] = params[flag][index] ? undefined : id;
// if (flag === 'topic_id' && params[flag].length > 1) {
// params[flag][params[flag].findIndex(it=> it === -1)] = undefined
// }
// if (flag === 'topic_id' && id === -1) {
// params[flag] = [id]
// }
// page.value = 1;
// getData()
// };
const onChangeActive = ({ type, item, index }) => {
// const flag = type === 'topics' ? 'topic_id' : 'author_id'
if (type === 'topics') {
topicId.value = topicId.value === item.id ? '' : item.id
} else {
authorId.value = authorId.value === item.id ? '' : item.id
}
// params[flag][index] = params[flag][index] ? undefined : item.id;
// if (flag === 'topic_id' && params[flag].length > 1) {
// params[flag][params[flag].findIndex(it=> it === -1)] = undefined
// }
// if (flag === 'topic_id' && item.id === -1) {
// params[flag] = [item.id]
// }
// console.log('params', params)
page.value = 1;
getData()
};
}
const router = useRouter();
const route = useRoute();
const changeTopic = (flag)=>{
const left = topicList.value.parentElement.scrollLeft
if (isClickChangeTopic.value) {
if (flag === 1) {
topicList.value.parentElement.scrollTo({top:0, left: left + 100, behavior: 'smooth'})
} else {
topicList.value.parentElement.scrollTo({top:0, left: left - 100, behavior: 'smooth'})
}
}
// const changeTopic = (flag)=>{
// const left = topicList.value.parentElement.scrollLeft
// if (isClickChangeTopic.value) {
// if (flag === 1) {
// topicList.value.parentElement.scrollTo({top:0, left: left + 100, behavior: 'smooth'})
// } else {
// topicList.value.parentElement.scrollTo({top:0, left: left - 100, behavior: 'smooth'})
// }
// }
}
// }
const changeAuthor = (flag)=>{
const left = authorList.value.parentElement.scrollLeft
if (isClickChangeAuthor.value) {
if (flag === 1) {
authorList.value.parentElement.scrollTo({top:0, left: left + 100, behavior: 'smooth'})
} else {
authorList.value.parentElement.scrollTo({top:0, left: left - 100, behavior: 'smooth'})
}
}
// const changeAuthor = (flag)=>{
// const left = authorList.value.parentElement.scrollLeft
// if (isClickChangeAuthor.value) {
// if (flag === 1) {
// authorList.value.parentElement.scrollTo({top:0, left: left + 100, behavior: 'smooth'})
// } else {
// authorList.value.parentElement.scrollTo({top:0, left: left - 100, behavior: 'smooth'})
// }
// }
}
// }
//
@ -136,10 +167,13 @@ const isSma = ref(false);
//
const active = ref(-1);
const params = reactive({
topic_id: [-1],
author_id: [],
})
const topicId = ref('')
const authorId = ref('')
// const params = reactive({
// topic_id: [-1],
// author_id: [],
// })
// Total databases count
let total = ref(0);
@ -149,23 +183,39 @@ let page = ref(1);
let per = ref(10);
//
let dataList = ref([]);
//
const getData = () => {
dataList.value = [];
const p = {
...params
// const p = {
// ...params
// }
// if (p.author_id.length === 0) {
// delete p.author_id
// } else {
// p.author_id = p.author_id.filter(it=> it !== undefined).join()
// }
// if (p.topic_id.length === 1 && p.topic_id[0] === -1) {
// delete p.topic_id
// } else {
// p.topic_id = p.topic_id.filter(it=> it !== undefined && it !== -1).join()
// }
let params = {
page: page.value,
limit: per.value
}
if (p.author_id.length === 0) {
delete p.author_id
} else {
p.author_id = p.author_id.filter(it=> it !== undefined).join()
if (topicId.value && topicId.value !== -1) {
params.topic_id = topicId.value
}
if (p.topic_id.length === 1 && p.topic_id[0] === -1) {
delete p.topic_id
} else {
p.topic_id = p.topic_id.filter(it=> it !== undefined && it !== -1).join()
if (authorId.value) {
params.author_id = authorId.value
}
getResearch({...p,page: page.value, limit: per.value}).then(({data})=>{
getResearch(params).then(({data})=>{
if (data) {
total.value = data.total;
per.value = data.per_page;
@ -197,8 +247,6 @@ const changePage = (data) => {
};
const getBtnList = async ()=>{
const [{data:topic}, {data: authors}] = await Promise.all([getResearchType(),getResearchAuthorApi()]);
if (topic && authors) {
@ -236,6 +284,19 @@ onMounted(() => {
getBtnList()
getData();
});
watch(
() => route.query,
(newVal, oldVal) => {
if (newVal.authorId) {
authorId.value = newVal.authorId
getData();
}
}, {
immediate: true,
deep: true
}
);
</script>
<style lang="scss" scoped>
$margub: 24px;

@ -3,9 +3,14 @@
<div class="nav-search">
<div class="bread-crumbs">
<router-link to="/research" class="link">Research ></router-link>
<span >{{ store.state.searchVal }}</span>
<div class="search-header">
<div class="bread-crumbs">
<router-link to="/research" class="link">Research ></router-link>
<span >{{ store.state.searchVal }}</span>
</div>
<div>
<img class="close" @click="router.go(-1)" style="cursor:pointer;" src="/images/search_close.svg" alt="The image cannot be displayed properly">
</div>
</div>
<div class="search-input">
<img class="ipt-search" src="/images/search.svg" alt="The image cannot be displayed properly"
@ -63,12 +68,14 @@
import ResearchComVue from '../components/ResearchCom.vue';
import PaginationComVue from '../components/PaginationCom.vue';
import { onMounted, ref } from 'vue';
import { useRouter } from 'vue-router';
import { useStore } from 'vuex';
// import { searchResult } from '../assets/datas/searchResultData';
import { isTrue } from '../utils/tools'
import {searchTitleApi} from "../api/research.js";
const router = useRouter()
const searchResult = ref([])
const emit = defineEmits(['backTop'])
// vuex store
@ -155,9 +162,13 @@ const onSearch = (reg) => {
resultList.value = []
const resultReg = new RegExp(reg, 'gi');
if (search.value) {
searchTitleApi({keyword: search.value}).then(res=>{
searchTitleApi({
keyword: search.value,
page: 1,
limit: 100000,
}).then(res=>{
if (res.data) {
searchResult.value = res.data;
searchResult.value = res.data.research.data;
searchResult.value.forEach((item) => {
const result = resultReg.exec(item.title);
if (result) {
@ -177,21 +188,21 @@ const onSearch = (reg) => {
//
const onInput = () => {
isInput.value = true;
store.commit('changeSearchVal', search.value)
// store.commit('changeSearchVal', search.value)
//
// issue a request
//
// The regular expression matches the search character
const searchReg = new RegExp(search.value, 'gi');
// const searchReg = new RegExp(search.value, 'gi');
//
// Clear the search results and start again
if (search.value) {
tipList.value = [];
page.value = 1;
per.value = 10
getSearchTitle()
}
// if (search.value) {
// tipList.value = [];
// page.value = 1;
// per.value = 10
// getSearchTitle()
// }
}
//
@ -225,9 +236,13 @@ const handleClose= ()=>{
const getSearchTitle = ()=>{
const searchReg = new RegExp(search.value, 'gi');
searchTitleApi({keyword: search.value}).then(res=>{
searchTitleApi({
keyword: search.value,
page: 1,
limit: 100000,
}).then(res=>{
total.value = 0
res.data.forEach(item=>{
res.data.research.data.forEach(item=>{
const result = searchReg.exec(item.title);
console.log(result)
if (result) {
@ -371,6 +386,13 @@ const getSearchTitle = ()=>{
}
.nav-search {
.search-header {
display: flex;
justify-content: space-between;
.close {
width: 14px;
}
}
.bread-crumbs {
margin-bottom: 30px;
font-size: 18px;

@ -1,4 +1,4 @@
import { defineConfig,loadEnv } from 'vite'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'
@ -8,8 +8,9 @@ import { VantResolver } from 'unplugin-vue-components/resolvers'
/**
* @type {import('vite').UserConfig}
*/
export default defineConfig(({mode})=>{
const {VITE_API_URL, VITE_DOMAIN_URL, VITE_IMG_API_URL, VITE_IMG_DOMAIN_URL} = loadEnv(mode, process.cwd())
export default defineConfig(({ mode }) => {
const { VITE_API_URL, VITE_DOMAIN_URL, VITE_IMG_API_URL, VITE_IMG_DOMAIN_URL } = loadEnv(mode, process.cwd())
console.log("VITE_IMG_API_URL>>>>", VITE_IMG_DOMAIN_URL);
return {
plugins: [
vue(),
@ -17,21 +18,30 @@ export default defineConfig(({mode})=>{
resolvers: [VantResolver()]
})
],
server:{
resolve: {
// 配置路径别名
alias: {
'@': '/src',
},
},
server: {
host: true,
proxy: {
[VITE_API_URL]: {
target: VITE_DOMAIN_URL,
changeOrigin: true,
ws: true,
rewrite: path=> path.replace(new RegExp(`^${VITE_API_URL}`), ''),
rewrite: path => path.replace(new RegExp(`^${VITE_API_URL}`), ''),
},
[VITE_IMG_API_URL]: {
target: VITE_IMG_DOMAIN_URL,
changeOrigin: true,
ws: true,
rewrite: path=> path.replace(new RegExp(`^${VITE_IMG_API_URL}`), ''),
rewrite: path => path.replace(new RegExp(`^${VITE_IMG_API_URL}`), ''),
}
},
hmr: {
overlay: false
}
},
build: {

@ -0,0 +1,773 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@antfu/utils@^0.6.0":
"integrity" "sha512-Qdwda+qE1KOKXuM8Gnn09zIJSA293J5putdHBx4J9sdbHzqp5QY4OmH77KgwJoi0PuY+kbddkVVdkSoZ9ruiug=="
"resolved" "https://registry.npmjs.org/@antfu/utils/-/utils-0.6.2.tgz"
"version" "0.6.2"
"@babel/parser@^7.15.8", "@babel/parser@^7.16.4":
"integrity" "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg=="
"resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz"
"version" "7.20.0"
"@nodelib/fs.scandir@2.1.5":
"integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
"resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
"version" "2.1.5"
dependencies:
"@nodelib/fs.stat" "2.0.5"
"run-parallel" "^1.1.9"
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
"integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
"resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
"version" "2.0.5"
"@nodelib/fs.walk@^1.2.3":
"integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
"resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
"version" "1.2.8"
dependencies:
"@nodelib/fs.scandir" "2.1.5"
"fastq" "^1.6.0"
"@rollup/pluginutils@^5.0.2":
"integrity" "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA=="
"resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz"
"version" "5.0.2"
dependencies:
"@types/estree" "^1.0.0"
"estree-walker" "^2.0.2"
"picomatch" "^2.3.1"
"@types/estree@^1.0.0":
"integrity" "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ=="
"resolved" "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz"
"version" "1.0.0"
"@vant/icons@^1.8.0":
"integrity" "sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg=="
"resolved" "https://registry.npmjs.org/@vant/icons/-/icons-1.8.0.tgz"
"version" "1.8.0"
"@vant/popperjs@^1.2.1":
"integrity" "sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw=="
"resolved" "https://registry.npmjs.org/@vant/popperjs/-/popperjs-1.3.0.tgz"
"version" "1.3.0"
"@vant/use@^1.4.2":
"integrity" "sha512-rSnETN7P9qT1WbItMpQxBqe3cHeK2ZFYp1sCxWUXaTeI71TqA8sOdzC36ledZ36NQgFNTch9fsRPYOkrCgZfQA=="
"resolved" "https://registry.npmjs.org/@vant/use/-/use-1.4.3.tgz"
"version" "1.4.3"
"@vitejs/plugin-vue@^3.2.0":
"integrity" "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw=="
"resolved" "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz"
"version" "3.2.0"
"@vue/compiler-core@3.2.41":
"integrity" "sha512-oA4mH6SA78DT+96/nsi4p9DX97PHcNROxs51lYk7gb9Z4BPKQ3Mh+BLn6CQZBw857Iuhu28BfMSRHAlPvD4vlw=="
"resolved" "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@babel/parser" "^7.16.4"
"@vue/shared" "3.2.41"
"estree-walker" "^2.0.2"
"source-map" "^0.6.1"
"@vue/compiler-dom@3.2.41":
"integrity" "sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw=="
"resolved" "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@vue/compiler-core" "3.2.41"
"@vue/shared" "3.2.41"
"@vue/compiler-sfc@3.2.41":
"integrity" "sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w=="
"resolved" "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.41"
"@vue/compiler-dom" "3.2.41"
"@vue/compiler-ssr" "3.2.41"
"@vue/reactivity-transform" "3.2.41"
"@vue/shared" "3.2.41"
"estree-walker" "^2.0.2"
"magic-string" "^0.25.7"
"postcss" "^8.1.10"
"source-map" "^0.6.1"
"@vue/compiler-ssr@3.2.41":
"integrity" "sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ=="
"resolved" "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@vue/compiler-dom" "3.2.41"
"@vue/shared" "3.2.41"
"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.4.5":
"integrity" "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ=="
"resolved" "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz"
"version" "6.4.5"
"@vue/reactivity-transform@3.2.41":
"integrity" "sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A=="
"resolved" "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.41"
"@vue/shared" "3.2.41"
"estree-walker" "^2.0.2"
"magic-string" "^0.25.7"
"@vue/reactivity@3.2.41":
"integrity" "sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g=="
"resolved" "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@vue/shared" "3.2.41"
"@vue/runtime-core@3.2.41":
"integrity" "sha512-0LBBRwqnI0p4FgIkO9q2aJBBTKDSjzhnxrxHYengkAF6dMOjeAIZFDADAlcf2h3GDALWnblbeprYYpItiulSVQ=="
"resolved" "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@vue/reactivity" "3.2.41"
"@vue/shared" "3.2.41"
"@vue/runtime-dom@3.2.41":
"integrity" "sha512-U7zYuR1NVIP8BL6jmOqmapRAHovEFp7CSw4pR2FacqewXNGqZaRfHoNLQsqQvVQ8yuZNZtxSZy0FFyC70YXPpA=="
"resolved" "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@vue/runtime-core" "3.2.41"
"@vue/shared" "3.2.41"
"csstype" "^2.6.8"
"@vue/server-renderer@3.2.41":
"integrity" "sha512-7YHLkfJdTlsZTV0ae5sPwl9Gn/EGr2hrlbcS/8naXm2CDpnKUwC68i1wGlrYAfIgYWL7vUZwk2GkYLQH5CvFig=="
"resolved" "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@vue/compiler-ssr" "3.2.41"
"@vue/shared" "3.2.41"
"@vue/shared@3.2.41":
"integrity" "sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw=="
"resolved" "https://registry.npmjs.org/@vue/shared/-/shared-3.2.41.tgz"
"version" "3.2.41"
"acorn@^8.8.0":
"integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA=="
"resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz"
"version" "8.8.1"
"anymatch@~3.1.2":
"integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg=="
"resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz"
"version" "3.1.2"
dependencies:
"normalize-path" "^3.0.0"
"picomatch" "^2.0.4"
"asynckit@^0.4.0":
"integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
"resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
"version" "0.4.0"
"autoprefixer@^10.4.13":
"integrity" "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg=="
"resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz"
"version" "10.4.13"
dependencies:
"browserslist" "^4.21.4"
"caniuse-lite" "^1.0.30001426"
"fraction.js" "^4.2.0"
"normalize-range" "^0.1.2"
"picocolors" "^1.0.0"
"postcss-value-parser" "^4.2.0"
"axios@^1.1.3":
"integrity" "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA=="
"resolved" "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz"
"version" "1.1.3"
dependencies:
"follow-redirects" "^1.15.0"
"form-data" "^4.0.0"
"proxy-from-env" "^1.1.0"
"balanced-match@^1.0.0":
"integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
"resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
"version" "1.0.2"
"binary-extensions@^2.0.0":
"integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
"resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
"version" "2.2.0"
"brace-expansion@^2.0.1":
"integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="
"resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
"version" "2.0.1"
dependencies:
"balanced-match" "^1.0.0"
"braces@^3.0.2", "braces@~3.0.2":
"integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
"resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
"version" "3.0.2"
dependencies:
"fill-range" "^7.0.1"
"browserslist@^4.21.4", "browserslist@>= 4.21.0":
"integrity" "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw=="
"resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz"
"version" "4.21.4"
dependencies:
"caniuse-lite" "^1.0.30001400"
"electron-to-chromium" "^1.4.251"
"node-releases" "^2.0.6"
"update-browserslist-db" "^1.0.9"
"caniuse-lite@^1.0.30001400", "caniuse-lite@^1.0.30001426":
"integrity" "sha512-lfXQ73oB9c8DP5Suxaszm+Ta2sr/4tf8+381GkIm1MLj/YdLf+rEDyDSRCzeltuyTVGm+/s18gdZ0q+Wmp8VsQ=="
"resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001427.tgz"
"version" "1.0.30001427"
"chokidar@^3.5.3", "chokidar@>=3.0.0 <4.0.0":
"integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="
"resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
"version" "3.5.3"
dependencies:
"anymatch" "~3.1.2"
"braces" "~3.0.2"
"glob-parent" "~5.1.2"
"is-binary-path" "~2.1.0"
"is-glob" "~4.0.1"
"normalize-path" "~3.0.0"
"readdirp" "~3.6.0"
optionalDependencies:
"fsevents" "~2.3.2"
"combined-stream@^1.0.8":
"integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
"resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
"version" "1.0.8"
dependencies:
"delayed-stream" "~1.0.0"
"csstype@^2.6.8":
"integrity" "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
"resolved" "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz"
"version" "2.6.21"
"debug@^4.3.4":
"integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
"resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
"version" "4.3.4"
dependencies:
"ms" "2.1.2"
"deepmerge@^4.2.2":
"integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
"resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz"
"version" "4.2.2"
"delayed-stream@~1.0.0":
"integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
"resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
"version" "1.0.0"
"electron-to-chromium@^1.4.251":
"integrity" "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
"resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz"
"version" "1.4.284"
"esbuild-windows-64@0.15.12":
"integrity" "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA=="
"resolved" "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz"
"version" "0.15.12"
"esbuild@^0.15.9":
"integrity" "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng=="
"resolved" "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz"
"version" "0.15.12"
optionalDependencies:
"@esbuild/android-arm" "0.15.12"
"@esbuild/linux-loong64" "0.15.12"
"esbuild-android-64" "0.15.12"
"esbuild-android-arm64" "0.15.12"
"esbuild-darwin-64" "0.15.12"
"esbuild-darwin-arm64" "0.15.12"
"esbuild-freebsd-64" "0.15.12"
"esbuild-freebsd-arm64" "0.15.12"
"esbuild-linux-32" "0.15.12"
"esbuild-linux-64" "0.15.12"
"esbuild-linux-arm" "0.15.12"
"esbuild-linux-arm64" "0.15.12"
"esbuild-linux-mips64le" "0.15.12"
"esbuild-linux-ppc64le" "0.15.12"
"esbuild-linux-riscv64" "0.15.12"
"esbuild-linux-s390x" "0.15.12"
"esbuild-netbsd-64" "0.15.12"
"esbuild-openbsd-64" "0.15.12"
"esbuild-sunos-64" "0.15.12"
"esbuild-windows-32" "0.15.12"
"esbuild-windows-64" "0.15.12"
"esbuild-windows-arm64" "0.15.12"
"escalade@^3.1.1":
"integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
"resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
"version" "3.1.1"
"estree-walker@^2.0.2":
"integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
"resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
"version" "2.0.2"
"fast-glob@^3.2.12":
"integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w=="
"resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz"
"version" "3.2.12"
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
"glob-parent" "^5.1.2"
"merge2" "^1.3.0"
"micromatch" "^4.0.4"
"fastq@^1.6.0":
"integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw=="
"resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz"
"version" "1.13.0"
dependencies:
"reusify" "^1.0.4"
"fill-range@^7.0.1":
"integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="
"resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
"version" "7.0.1"
dependencies:
"to-regex-range" "^5.0.1"
"follow-redirects@^1.15.0":
"integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
"resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz"
"version" "1.15.2"
"form-data@^4.0.0":
"integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="
"resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
"version" "4.0.0"
dependencies:
"asynckit" "^0.4.0"
"combined-stream" "^1.0.8"
"mime-types" "^2.1.12"
"fraction.js@^4.2.0":
"integrity" "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
"resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz"
"version" "4.2.0"
"function-bind@^1.1.1":
"integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
"resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
"version" "1.1.1"
"glob-parent@^5.1.2", "glob-parent@~5.1.2":
"integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
"resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
"version" "5.1.2"
dependencies:
"is-glob" "^4.0.1"
"has@^1.0.3":
"integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="
"resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
"version" "1.0.3"
dependencies:
"function-bind" "^1.1.1"
"immutable@^4.0.0":
"integrity" "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ=="
"resolved" "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz"
"version" "4.1.0"
"is-binary-path@~2.1.0":
"integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="
"resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
"version" "2.1.0"
dependencies:
"binary-extensions" "^2.0.0"
"is-core-module@^2.9.0":
"integrity" "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw=="
"resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz"
"version" "2.11.0"
dependencies:
"has" "^1.0.3"
"is-extglob@^2.1.1":
"integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
"resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
"version" "2.1.1"
"is-glob@^4.0.1", "is-glob@~4.0.1":
"integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="
"resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
"version" "4.0.3"
dependencies:
"is-extglob" "^2.1.1"
"is-number@^7.0.0":
"integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
"resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
"version" "7.0.0"
"klona@^2.0.4":
"integrity" "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ=="
"resolved" "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz"
"version" "2.0.5"
"less-loader@^11.1.0":
"integrity" "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug=="
"resolved" "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz"
"version" "11.1.0"
dependencies:
"klona" "^2.0.4"
"lib-flexible@^0.3.2":
"integrity" "sha512-9yowMWA70tKhKdCJDaltY0mNQG4OWo7pWKScnTp9aiSxS7s20ZYlwBRE3335nweOf5qKXVC7sDxJwMPM8/MFZg=="
"resolved" "https://registry.npmjs.org/lib-flexible/-/lib-flexible-0.3.2.tgz"
"version" "0.3.2"
"local-pkg@^0.4.2":
"integrity" "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg=="
"resolved" "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz"
"version" "0.4.2"
"magic-string@^0.25.7":
"integrity" "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="
"resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz"
"version" "0.25.9"
dependencies:
"sourcemap-codec" "^1.4.8"
"magic-string@^0.26.7":
"integrity" "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow=="
"resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz"
"version" "0.26.7"
dependencies:
"sourcemap-codec" "^1.4.8"
"merge2@^1.3.0":
"integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
"resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
"version" "1.4.1"
"micromatch@^4.0.4":
"integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="
"resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz"
"version" "4.0.5"
dependencies:
"braces" "^3.0.2"
"picomatch" "^2.3.1"
"mime-db@1.52.0":
"integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
"resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
"version" "1.52.0"
"mime-types@^2.1.12":
"integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="
"resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
"version" "2.1.35"
dependencies:
"mime-db" "1.52.0"
"minimatch@^5.1.0":
"integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg=="
"resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz"
"version" "5.1.0"
dependencies:
"brace-expansion" "^2.0.1"
"ms@2.1.2":
"integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
"resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
"version" "2.1.2"
"nanoid@^3.3.4":
"integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
"resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz"
"version" "3.3.4"
"neo-async@^2.6.2":
"integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
"resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"
"version" "2.6.2"
"node-releases@^2.0.6":
"integrity" "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
"resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz"
"version" "2.0.6"
"normalize-path@^3.0.0", "normalize-path@~3.0.0":
"integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
"resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
"version" "3.0.0"
"normalize-range@^0.1.2":
"integrity" "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
"resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"
"version" "0.1.2"
"ometa@0.2.2":
"integrity" "sha512-LZuoK/yjU3FvrxPjUXUlZ1bavCfBPqauA7fsNdwi+AVhRdyk2IzgP3JRnevvjzQ6fKHdUw8YISshf53FmpHrng=="
"resolved" "https://registry.npmjs.org/ometa/-/ometa-0.2.2.tgz"
"version" "0.2.2"
"path-parse@^1.0.7":
"integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
"resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
"version" "1.0.7"
"picocolors@^1.0.0":
"integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
"resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
"version" "1.0.0"
"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.3.1":
"integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
"resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
"version" "2.3.1"
"postcss-pxtorem@^6.0.0":
"integrity" "sha512-ZRXrD7MLLjLk2RNGV6UA4f5Y7gy+a/j1EqjAfp9NdcNYVjUMvg5HTYduTjSkKBkRkfqbg/iKrjMO70V4g1LZeg=="
"resolved" "https://registry.npmjs.org/postcss-pxtorem/-/postcss-pxtorem-6.0.0.tgz"
"version" "6.0.0"
"postcss-value-parser@^4.2.0":
"integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
"resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
"version" "4.2.0"
"postcss@^8.0.0", "postcss@^8.1.0", "postcss@^8.1.10", "postcss@^8.4.18":
"integrity" "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA=="
"resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz"
"version" "8.4.18"
dependencies:
"nanoid" "^3.3.4"
"picocolors" "^1.0.0"
"source-map-js" "^1.0.2"
"proxy-from-env@^1.1.0":
"integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
"resolved" "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
"version" "1.1.0"
"queue-microtask@^1.2.2":
"integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
"resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
"version" "1.2.3"
"readdirp@~3.6.0":
"integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="
"resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
"version" "3.6.0"
dependencies:
"picomatch" "^2.2.1"
"resolve@^1.22.1":
"integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw=="
"resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz"
"version" "1.22.1"
dependencies:
"is-core-module" "^2.9.0"
"path-parse" "^1.0.7"
"supports-preserve-symlinks-flag" "^1.0.0"
"reusify@^1.0.4":
"integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
"resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
"version" "1.0.4"
"rollup@^1.20.0||^2.0.0||^3.0.0", "rollup@^2.79.1":
"integrity" "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw=="
"resolved" "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz"
"version" "2.79.1"
optionalDependencies:
"fsevents" "~2.3.2"
"run-parallel@^1.1.9":
"integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
"resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
"version" "1.2.0"
dependencies:
"queue-microtask" "^1.2.2"
"sass-loader@^13.1.0":
"integrity" "sha512-tZS1RJQ2n2+QNyf3CCAo1H562WjL/5AM6Gi8YcPVVoNxQX8d19mx8E+8fRrMWsyc93ZL6Q8vZDSM0FHVTJaVnQ=="
"resolved" "https://registry.npmjs.org/sass-loader/-/sass-loader-13.1.0.tgz"
"version" "13.1.0"
dependencies:
"klona" "^2.0.4"
"neo-async" "^2.6.2"
"sass@*", "sass@^1.3.0", "sass@^1.55.0":
"integrity" "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A=="
"resolved" "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz"
"version" "1.55.0"
dependencies:
"chokidar" ">=3.0.0 <4.0.0"
"immutable" "^4.0.0"
"source-map-js" ">=0.6.2 <2.0.0"
"scss-loader@^0.0.1":
"integrity" "sha512-SbT/smRJjkvvdHSEdAYAplosVkrtaSwwgUlnQCOuDS5sOKNjrS/eYCMvKeV6+YxK5cCOCsOJZd3vltrXatFp+g=="
"resolved" "https://registry.npmjs.org/scss-loader/-/scss-loader-0.0.1.tgz"
"version" "0.0.1"
"scss@^0.2.4":
"integrity" "sha512-4u8V87F+Q/upVhUmhPnB4C1R11xojkRkWjExL2v0CX2EXTg18VrKd+9JWoeyCp2VEMdSpJsyAvVU+rVjogh51A=="
"resolved" "https://registry.npmjs.org/scss/-/scss-0.2.4.tgz"
"version" "0.2.4"
dependencies:
"ometa" "0.2.2"
"shvl@^2.0.3":
"integrity" "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
"resolved" "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz"
"version" "2.0.3"
"source-map-js@^1.0.2", "source-map-js@>=0.6.2 <2.0.0":
"integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
"resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
"version" "1.0.2"
"source-map@^0.6.1":
"integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
"resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
"version" "0.6.1"
"sourcemap-codec@^1.4.8":
"integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
"resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
"version" "1.4.8"
"supports-preserve-symlinks-flag@^1.0.0":
"integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
"resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
"version" "1.0.0"
"to-regex-range@^5.0.1":
"integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
"resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
"version" "5.0.1"
dependencies:
"is-number" "^7.0.0"
"unplugin-vue-components@^0.22.9":
"integrity" "sha512-qBvooq3EgpjtYicxeccRUGUBBQCCw9rJ0kHPZPOSJd8TBZViSv86vuKLTRDHPyjWtclwOIkVStZJfPdJFhYUMw=="
"resolved" "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.22.9.tgz"
"version" "0.22.9"
dependencies:
"@antfu/utils" "^0.6.0"
"@rollup/pluginutils" "^5.0.2"
"chokidar" "^3.5.3"
"debug" "^4.3.4"
"fast-glob" "^3.2.12"
"local-pkg" "^0.4.2"
"magic-string" "^0.26.7"
"minimatch" "^5.1.0"
"resolve" "^1.22.1"
"unplugin" "^0.10.1"
"unplugin@^0.10.1":
"integrity" "sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA=="
"resolved" "https://registry.npmjs.org/unplugin/-/unplugin-0.10.2.tgz"
"version" "0.10.2"
dependencies:
"acorn" "^8.8.0"
"chokidar" "^3.5.3"
"webpack-sources" "^3.2.3"
"webpack-virtual-modules" "^0.4.5"
"update-browserslist-db@^1.0.9":
"integrity" "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ=="
"resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz"
"version" "1.0.10"
dependencies:
"escalade" "^3.1.1"
"picocolors" "^1.0.0"
"vant@^3.6.4":
"integrity" "sha512-IgPzekX7YGoqf7h/jx75F087lsBEWA/cQfRqPVgiR6cyqrmi8+dfpfFTz2OcPZ755avTzKk3L0WaclXIbHnVeQ=="
"resolved" "https://registry.npmjs.org/vant/-/vant-3.6.4.tgz"
"version" "3.6.4"
dependencies:
"@vant/icons" "^1.8.0"
"@vant/popperjs" "^1.2.1"
"@vant/use" "^1.4.2"
"vite@^3.0.0", "vite@^3.2.0":
"integrity" "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw=="
"resolved" "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz"
"version" "3.2.2"
dependencies:
"esbuild" "^0.15.9"
"postcss" "^8.4.18"
"resolve" "^1.22.1"
"rollup" "^2.79.1"
optionalDependencies:
"fsevents" "~2.3.2"
"vue-router@^4.1.6":
"integrity" "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ=="
"resolved" "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz"
"version" "4.1.6"
dependencies:
"@vue/devtools-api" "^6.4.5"
"vue@^3.0.0", "vue@^3.2.0", "vue@^3.2.25", "vue@^3.2.41", "vue@2 || 3", "vue@3.2.41":
"integrity" "sha512-uuuvnrDXEeZ9VUPljgHkqB5IaVO8SxhPpqF2eWOukVrBnRBx2THPSGQBnVRt0GrIG1gvCmFXMGbd7FqcT1ixNQ=="
"resolved" "https://registry.npmjs.org/vue/-/vue-3.2.41.tgz"
"version" "3.2.41"
dependencies:
"@vue/compiler-dom" "3.2.41"
"@vue/compiler-sfc" "3.2.41"
"@vue/runtime-dom" "3.2.41"
"@vue/server-renderer" "3.2.41"
"@vue/shared" "3.2.41"
"vuex-persistedstate@^4.1.0":
"integrity" "sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ=="
"resolved" "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz"
"version" "4.1.0"
dependencies:
"deepmerge" "^4.2.2"
"shvl" "^2.0.3"
"vuex@^3.0 || ^4.0.0-rc", "vuex@^4.1.0":
"integrity" "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ=="
"resolved" "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz"
"version" "4.1.0"
dependencies:
"@vue/devtools-api" "^6.0.0-beta.11"
"webpack-sources@^3.2.3":
"integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="
"resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz"
"version" "3.2.3"
"webpack-virtual-modules@^0.4.5":
"integrity" "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA=="
"resolved" "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz"
"version" "0.4.6"
Loading…
Cancel
Save