tangning 1 年之前
父節點
當前提交
4d63cacc00

+ 1 - 0
package.json

@@ -8,6 +8,7 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "axios": "^1.6.8",
     "core-js": "^3.8.3",
     "html2canvas": "^1.4.1",
     "less": "^4.2.0",

File diff suppressed because it is too large
+ 223 - 133
public/staticData/data.js


二進制
public/staticData/home/bg2.png


二進制
public/staticData/home/map1.png


二進制
public/staticData/home/map2.png


二進制
public/staticData/home/map3.png


二進制
src/assets/images/banner/1.png


二進制
src/assets/images/banner/2.png


二進制
src/assets/images/banner/3.png


二進制
src/assets/images/banner/4.png


二進制
src/assets/images/banner/5.png


+ 0 - 642
src/assets/images/home/LeftButtons.vue

@@ -1,642 +0,0 @@
-<template>
-    <div class="controls-left-buttons">
-        <div class="play-control" v-if="tours.length > 0" :class="{ disabled: flying && !isPlay }">
-            <div class="play-btn tour-btn" @click="playTour">
-                <div class="animation-icon" :class="{ action: isPlay }" :style="`background-image: url(${resource.getStaticURL('static/images/walk_animation.png')});`">
-                    <p class="tip">{{ isPlay ? $t('common.pauseTour') : $t('common.playTour') }}</p>
-                </div>
-            </div>
-
-            <div class="tour-btn bor">
-                <ui-icon type="pull-down" @click="openTours" :class="{ active: showTours }"></ui-icon>
-            </div>
-            <!-- <teleport :to="editorMain"> -->
-            <div class="tour-list" :class="{ ban: flying || isSelect }" :style="`height:${showTours ? '120px' : '0px'};`">
-                <div class="part-content" ref="tourScroll">
-                    <!-- 多个片段 -->
-                    <div class="part-list" v-if="tours.length > 1">
-                        <div
-                            @click="changeFrame(1, index)"
-                            class="part-item"
-                            :name="index"
-                            v-for="(i, index) in tours"
-                            :style="`background-image:url(${i.frameId && i.list[i.frameId] ? common.changeUrl(i.list[i.frameId].enter.cover) : common.changeUrl(i.list[0].enter.cover)});`"
-                        >
-                            <div class="part-title">{{ i.name }}</div>
-                            <div v-if="partId == index && progressNum > 0" class="precent" :style="`width:${progressNum}%;`"></div>
-                        </div>
-                    </div>
-                    <!-- 只有一个片段 -->
-                    <div class="part-list frame-list" v-else>
-                        <div @click="changeFrame(2, index)" class="part-item" v-for="(i, index) in tours[0].list" :name="index" :style="`background-image:url(${common.changeUrl(i.enter.cover)});`">
-                            <div class="part-title"></div>
-                            <div v-if="frameId == index && progressNum > 0" class="precent" :style="`width:${progressNum}%;`"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <!-- </teleport> -->
-        </div>
-        <div class="buttons mode" :class="{ disabled: isPlay || flying }">
-            <div v-if="controls.showPanorama" :class="{ active: viewmode == 'panorama' }" @click="onModeChange('panorama')">
-                <ui-icon :tip="$t('mode.panorama')" tipV="top" :type="viewmode == 'panorama' ? 'show_roaming_s' : 'show_roaming_n'"></ui-icon>
-            </div>
-            <div v-if="controls.showFloorplan" :class="{ active: viewmode == 'floorplan' }" @click="onModeChange('floorplan')">
-                <ui-icon :tip="$t('mode.floorplan')" tipV="top" :type="viewmode == 'floorplan' ? 'show_plane_s' : 'show_plane_n'"></ui-icon>
-            </div>
-            <div v-if="controls.showDollhouse" :class="{ active: viewmode == 'dollhouse' }" @click="onModeChange('dollhouse')">
-                <ui-icon :tip="$t('mode.dollhouse')" tipV="top" :type="viewmode == 'dollhouse' ? 'show_3d_s' : 'show_3d_n'"></ui-icon>
-            </div>
-        </div>
-
-        <!-- 导览字幕 -->
-        <!-- <teleport to=".kankan-app" > -->
-        <div class="tours-captions" :class="{ active: showTours }" v-if="tours.length > 0 && isPlay">
-            <div class="captions-title" v-if="tours[partId] && tours[partId].title">{{ tours[partId].title || '' }}</div>
-            <div class="captions-desc" v-if="tours[partId] && tours[partId].description">{{ tours[partId].description || '' }}</div>
-        </div>
-        <!-- </teleport> -->
-    </div>
-</template>
-<script setup>
-import { computed, defineProps, onMounted, ref, nextTick, watch } from 'vue'
-import { Scrollbar, Dialog } from '@kankan/components'
-import { useApp, getApp } from '@/app'
-import { useStore } from 'vuex'
-import browser from '@/utils/browser'
-import common from '@/utils/common'
-import resource from '@/utils/resource'
-import { useMusicPlayer } from '@/utils/sound'
-import { Track, startTrack, endTrack } from '@/utils/track.js'
-// import test from './test.vue'
-const musicPlayer = useMusicPlayer()
-const props = defineProps({
-    isEdit: Boolean,
-})
-let timer = null
-const isSelect = ref(false)
-const store = useStore()
-const tourScroll = ref(null)
-const viewmode = computed(() => store.getters.mode)
-const flying = computed(() => store.getters['flying'])
-const controls = computed(() => store.getters['scene/metadata'].controls || {})
-const showTours = computed(() => store.getters['tour/showTours'])
-const sceneUI = computed(() => store.getters.sceneUI)
-const partId = computed(() => {
-    let id = store.getters['tour/partId']
-    if (isPlay.value) {
-        slideScroll()
-    }
-    return id
-})
-
-const frameId = computed(() => {
-    let id = store.getters['tour/frameId']
-    if (isPlay.value) {
-        slideScroll()
-    }
-    return id
-})
-const progressNum = ref(0)
-const isPlay = computed(() => {
-    let status = store.getters['tour/isPlay']
-    let map = document.querySelector('.kankan-app div[xui_min_map]')
-    if (map) {
-        if (status) {
-            map.classList.add('disabled')
-        } else {
-            map.classList.remove('disabled')
-        }
-    }
-    return status
-})
-const isInit = ref(false)
-const tours = computed(() => {
-    let tours = store.getters['tour/tours']
-    if (tours.length > 0) {
-        if (tourScroll.value && !isInit.value) {
-            isInit.value = true
-            new Scrollbar(tourScroll.value, { onlyHorizontal: true })
-        }
-    }
-    return tours
-})
-
-watch(
-    () => sceneUI.value,
-    (val, old) => {
-        if (showTours.value) {
-            if (val) {
-                store.commit('setControlsBottom', '120px')
-            } else {
-                store.commit('setControlsBottom', '0')
-            }
-        }
-    }
-)
-
-const onModeChange = name => {
-    store.commit('setMode', name)
-    Track('view-button', {
-        eventType: 'click',
-        click: name,
-    })
-}
-const playTour = async () => {
-    let player = await getApp().TourManager.player
-    if (isPlay.value) {
-        store.commit('tour/setData', { isPlay: true })
-        player.pause()
-    } else {
-        store.commit('tour/setData', { isPlay: true })
-        player.play(partId.value, frameId.value)
-    }
-    store.commit('tag/setData', { isFixed: false, isClick: false, flyClose: false })
-    store.commit('tag/closeTag')
-
-    //自动打开导览
-    if (isPlay.value) {
-        store.commit('tour/setData', { showTours: true })
-        let bot = '0px'
-        if (showTours.value) {
-            bot = '120px'
-        } else {
-            bot = '0px'
-        }
-        store.commit('setControlsBottom', bot)
-        nextTick(() => {
-            if (isPlay.value) {
-                slideScroll()
-            }
-        })
-    }
-}
-
-const hanlderTourPartPlay = time => {
-    if (!timer) {
-        timer = KanKan.Animate.transitions.start(progress => {
-            progressNum.value = progress * 100
-        }, time)
-    }
-}
-const cancelTimer = () => {
-    if (timer) {
-        KanKan.Animate.transitions.cancel(timer)
-        timer = null
-    }
-}
-const slideScroll = () => {
-    nextTick(() => {
-        let t = setTimeout(() => {
-            clearTimeout(t)
-            let id = tours.value.length > 1 ? partId.value : frameId.value
-            let item = document.querySelector(`.part-item[name="${id}"]`)
-            item.scrollIntoView({ block: 'nearest', behavior: 'smooth', inline: 'center' })
-        }, 100)
-    })
-}
-let tour_finish = false
-const hanlderTour = async () => {
-    let player = await getApp().TourManager.player
-    player.on('play', data => {
-        tour_finish = false
-        musicPlayer.pause(true)
-        Track('view-tour', {
-            eventType: 'click',
-            click: 'play',
-        })
-    })
-    player.on('pause', tours => {
-        console.log('pause')
-        musicPlayer.resume()
-        currProgress = 0
-        currFrameProgress = 0
-        progressNum.value = 0
-        cancelTimer()
-        store.commit('tour/setData', { isPlay: false })
-    })
-    player.on('end', () => {
-        tour_finish = true
-        musicPlayer.resume()
-        currProgress = 0
-        currFrameProgress = 0
-        progressNum.value = 100
-        slideScroll()
-        store.commit('tour/setData', { isPlay: false })
-        cancelTimer()
-
-        // 循环播放导览
-        if (browser.hasURLParam('tour_loop')) {
-            setTimeout(() => {
-                playTour()
-            }, 1000)
-        }
-        //当最后一个有热点时候,需要展开
-        if (tours.value[partId.value].list[frameId.value].tagId) {
-            getApp().TagManager.open(tours.value[partId.value].list[frameId.value].tagId)
-        }
-    })
-
-    let currPartId = null
-    let currFrameId = null
-    let currProgress = 0
-    let FrameLength = 0
-    let currFrameProgress = 0
-
-    player.on('progress', data => {
-        if (tour_finish) {
-            return
-        }
-        if (currPartId != data.partId || currFrameId != data.frameId) {
-            if (!tours.value[data.partId].list[data.frameId].tagId) {
-                store.commit('tag/closeTag')
-            }
-        }
-        if (tours.value.length == 1) {
-            progressNum.value = data.progress * 100
-            currPartId = data.partId
-            currFrameId = data.frameId
-        } else {
-            // let time = getPartTime(data.partId)
-
-            // hanlderTourPartPlay(time)
-
-            if (currPartId != data.partId) {
-                currProgress = 0
-                currFrameProgress = 0
-                progressNum.value = 0
-                currPartId = data.partId
-                FrameLength = tours.value[data.partId].list.length
-            } else {
-                FrameLength = tours.value[data.partId].list.length
-
-                if (currFrameId != data.frameId) {
-                    currFrameId = data.frameId
-                    currFrameProgress = currProgress
-                } else {
-                    currProgress = (data.progress / FrameLength) * 100 + currFrameProgress
-                }
-                if (currProgress >= 100) {
-                    currProgress = 100
-                }
-
-                progressNum.value = currProgress
-            }
-        }
-        store.commit('tour/setData', { partId: data.partId, frameId: data.frameId })
-    })
-
-    // 导览自动播放
-    getApp().TourManager.on('loaded', () => {
-        if (browser.hasURLParam('autoplay')) {
-            setTimeout(() => {
-                if (tours.value.length) {
-                    let hasMusic = false
-                    for (let i = 0; i < tours.value.length; i++) {
-                        if (tours.value[i].music) {
-                            hasMusic = true
-                            continue
-                        }
-                    }
-                    if (!hasMusic) {
-                        //当所有片段没有背景音乐时,才能自动播放
-                        playTour()
-                    }
-                }
-            }, 500)
-        }
-    })
-}
-const getPartTime = partId => {
-    cancelTimer()
-    let time = 0
-    for (let i = 0; i < tours.value[partId].list.length; i++) {
-        if (!tours.value[partId].list[i]._end) {
-            time += tours.value[partId].list[i].time - 0
-            if (!tours.value[partId].list[i]._notrans) {
-                time += 1000
-            }
-        }
-    }
-    return time
-}
-
-const openTours = () => {
-    // showTours.value = !showTours.value
-    store.commit('tour/setData', { showTours: !showTours.value })
-    let bot = '0px'
-    if (showTours.value) {
-        bot = '120px'
-    } else {
-        bot = '0px'
-    }
-    store.commit('setControlsBottom', bot)
-    nextTick(() => {
-        if (isPlay.value) {
-            slideScroll()
-        }
-    })
-}
-const changeFrame = async (type, id) => {
-    store.commit('tag/closeTag')
-    progressNum.value = 0
-    let player = await getApp().TourManager.player
-    if (type == 1) {
-        Track('view-tour', {
-            eventType: 'click',
-            click: 'part',
-        })
-        store.commit('tour/setData', {
-            frameId: 0,
-            partId: id,
-        })
-        progressNum.value = 0
-
-        player.selectPart(id).then(() => {
-            if (!isPlay.value) {
-                return
-            }
-            store.commit('tour/setData', {
-                isPlay: true,
-            })
-            player.play(id, frameId.value)
-        })
-    } else {
-        Track('view-tour', {
-            eventType: 'click',
-            click: 'frame',
-        })
-
-        store.commit('tour/setData', {
-            frameId: id,
-        })
-        progressNum.value = 0
-        player.selectFrame(id).then(() => {
-            if (!isPlay.value) {
-                return
-            }
-            store.commit('tour/setData', {
-                isPlay: true,
-            })
-            player.play(0, id)
-        })
-    }
-
-    slideScroll()
-}
-const onClickHandler = async () => {
-    if (isPlay.value) {
-        let player = await getApp().TourManager.player
-        player.pause()
-        musicPlayer.resume()
-    }
-}
-onMounted(() => {
-    useApp().then(app => {
-        hanlderTour()
-    })
-
-    nextTick(() => {
-        let player = document.querySelector('.player[name="main"]')
-        player.addEventListener('pointerdown', onClickHandler)
-    })
-})
-</script>
-
-<style lang="scss" scoped>
-.tours-captions {
-    position: absolute;
-    bottom: 64px;
-    left: 20px;
-    width: 480px;
-    word-break: break-all;
-    text-shadow: 0px 2px 4px rgba(0, 0, 0, 0.25);
-    text-align: justify;
-    color: #fff;
-    pointer-events: none;
-    z-index: 1;
-    transition: all 0.3s;
-    &.active {
-        // bottom: 184px;
-    }
-    .captions-title {
-        font-size: 28px;
-        margin-bottom: 10px;
-        font-weight: bold;
-    }
-    .captions-desc {
-        font-size: 16px;
-        line-height: 24px;
-    }
-}
-.controls-left-buttons {
-    // margin-left: 20px;
-    // margin-bottom: 20px;
-    display: flex;
-    // justify-content: center;
-    align-items: flex-end;
-    padding: 0 0 20px 20px;
-}
-.buttons.tour {
-    margin-right: 10px;
-    > div {
-        margin-left: 0px;
-        margin-right: 0px;
-        padding: 0 10px;
-        &.show-list {
-            border-left: solid 1px var(--editor-font-color);
-        }
-        .icon-pull-down {
-            font-size: 12px;
-        }
-        span {
-            right: -10px;
-        }
-    }
-}
-.tour-list {
-    width: 100%;
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    flex: 1;
-    // height: var(--editor-toolbar-height);
-    height: 120px;
-    background-color: var(--editor-menu-back);
-    pointer-events: all;
-    left: var(--editor-toolbox-left);
-    z-index: 1;
-    transition: all 0.3s ease;
-    &::after {
-        width: 100%;
-        position: absolute;
-        content: '';
-        top: 0;
-        left: 0;
-        border-bottom: solid 1px rgba(255, 255, 255, 0.16);
-        border-top: solid 1px #000;
-    }
-    &.ban {
-        pointer-events: none;
-    }
-    .part-content {
-        display: flex;
-        flex-direction: row;
-        overflow: hidden;
-        width: 100%;
-        height: 100%;
-        .part-list {
-            width: 100%;
-            height: 120px;
-            display: flex;
-            align-items: center;
-            justify-content: flex-start;
-            padding: 0 10px;
-            box-sizing: border-box;
-            .part-item {
-                width: 120px;
-                height: 80px;
-                position: relative;
-                cursor: pointer;
-                margin-right: 10px;
-                background-repeat: no-repeat;
-                background-size: 100%;
-                background-position: center;
-                &:last-of-type {
-                    margin-right: 0px;
-                }
-                &:hover {
-                    opacity: 0.6;
-                }
-                .precent {
-                    width: 0%;
-                    height: 3px;
-                    position: absolute;
-                    bottom: 0;
-                    left: 0;
-                    background: var(--editor-main-color);
-                    // opacity: 0.4;
-                    z-index: 100;
-                    // transition: width 0.1s;
-                }
-                .part-title {
-                    width: 100%;
-                    height: 24px;
-                    background: linear-gradient(180deg, rgba(0, 0, 0, 0.25) 0%, rgba(0, 0, 0, 0.5) 100%);
-                    position: absolute;
-                    bottom: 0;
-                    left: 0;
-                    display: flex;
-                    align-items: center;
-                    justify-content: center;
-                    font-size: 14px;
-                    z-index: 10;
-                }
-            }
-        }
-    }
-}
-.play-control {
-    pointer-events: all;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    height: 34px;
-    border-radius: 17px;
-    // background-color: rgba(0, 0, 0, 0.3);
-    min-width: 34px;
-    border-radius: 17px;
-    position: relative;
-    z-index: 2;
-    // margin-left: 10px;
-
-    .tour-btn {
-        width: 34px;
-        height: 22px;
-        cursor: pointer;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-
-        > .iconfont {
-            font-size: 14px;
-        }
-        &.play-btn {
-            // border-right: 1px solid rgba(255, 255, 255, 0.2);
-            // > .iconfont {
-            //     font-size: 20px;
-            //     transition: rotate 0.3s;
-            // }
-            position: relative;
-            .animation-icon {
-                width: 24px;
-                height: 24px;
-                // background: red;
-                position: absolute;
-                top: 50%;
-                left: 50%;
-                transform: translate(-50%, -50%);
-                background-repeat: no-repeat;
-                background-position: 0% 0%;
-                background-size: auto 24px;
-                &:hover {
-                    .tip {
-                        opacity: 0.8;
-                    }
-                }
-                .tip {
-                    color: white;
-                    position: absolute;
-                    transform-origin: top center;
-                    background: #000000;
-                    border-radius: 4px;
-                    opacity: 0;
-                    padding: 10px;
-                    margin: 10px;
-                    font-size: 12px;
-                    transition: opacity 0.3s ease;
-                    pointer-events: none;
-                    white-space: nowrap;
-                    left: 50%;
-                    transform: translateX(-50%);
-                    margin-left: 0;
-                    margin-right: 0;
-                    z-index: 10;
-                    bottom: 100%;
-                }
-
-                &.action {
-                    animation: humanAction 1s steps(25) infinite;
-                }
-                @keyframes humanAction {
-                    0% {
-                        background-position: 0% 0%;
-                    }
-                    100% {
-                        background-position: 100% 0%;
-                    }
-                }
-            }
-        }
-        &.bor {
-            height: 16px;
-            border-right: 1px solid;
-            border-image: linear-gradient(to bottom, rgba(194, 194, 194, 0.3), rgba(255, 255, 255, 0.3)) 1;
-
-            padding: 0 34px;
-            cursor: default;
-            > .iconfont {
-                font-size: 18px;
-                transform: rotate(180deg);
-                cursor: pointer;
-                &.active {
-                    transform: rotate(0deg);
-                }
-            }
-        }
-    }
-}
-</style>

二進制
src/assets/images/new/Group 289922@2x.png


二進制
src/assets/images/new/Group 289958@2x.png


二進制
src/assets/images/new/bg2.png


二進制
src/assets/images/new/chaochang1.png


二進制
src/assets/images/new/chaochang2.png


二進制
src/assets/images/new/fys.png


二進制
src/assets/images/new/fysa.png


二進制
src/assets/images/new/lable3.png


二進制
src/assets/images/new/lable3a.png


二進制
src/assets/images/new/map1.png


二進制
src/assets/images/new/map2.png


二進制
src/assets/images/new/map3.png


二進制
src/assets/images/new/qjbg.png


二進制
src/assets/images/new/zgbg.png


二進制
src/assets/images/new/标识@2x.png


+ 3 - 1
src/main.js

@@ -5,9 +5,11 @@ import router from './router'
 import VueAwesomeSwiper from 'vue-awesome-swiper'
 import messageCom from './components/msg/index'
 import messagePage from './components/msg/messagePage.vue'
-
 Vue.config.productionTip = false
 
+import request  from './utils/request'
+Vue.prototype.$request=request
+
 // 引入Swiper CSS样式
 import 'swiper/swiper-bundle.css'
 // import 'swiper/dist/css/swiper.css'

+ 42 - 0
src/utils/request.js

@@ -0,0 +1,42 @@
+import axios from 'axios'
+
+const request = axios.create({
+    baseURL: 'https://sit-shibadong.4dage.com/api',  // 注意!! 这里是全局统一加上了 '/api' 前缀,也就是说所有接口都会加上'/api'前缀在,页面里面写接口的时候就不要加 '/api'了,否则会出现2个'/api',类似 '/api/api/user'这样的报错,切记!!!
+    timeout: 5000
+})
+
+// request 拦截器
+// 可以自请求发送前对请求做一些处理
+// 比如统一加token,对请求参数统一加密
+request.interceptors.request.use(config => {
+    config.headers['Content-Type'] = 'application/json;charset=utf-8';
+
+    // config.headers['token'] = user.token;  // 设置请求头
+    return config
+}, error => {
+    return Promise.reject(error)
+});
+
+// response 拦截器
+// 可以在接口响应后统一处理结果
+request.interceptors.response.use(
+    response => {
+        let res = response.data;
+        // 如果是返回的文件
+        if (response.config.responseType === 'blob') {
+            return res
+        }
+        // 兼容服务端返回的字符串数据
+        if (typeof res === 'string') {
+            res = res ? JSON.parse(res) : res
+        }
+        return res;
+    },
+    error => {
+        console.log('err' + error) // for debug
+        return Promise.reject(error)
+    }
+)
+
+
+export default request

+ 38 - 0
src/views/Home/bannerPage.vue

@@ -0,0 +1,38 @@
+<template>
+  <div class="banner-home">
+    <swiper class="swiper" :options="swiperOptions">
+      <swiper-slide class="slide-item" v-for="index in imgList" :key="index">
+        <img style="height: 100vh;width: 100%; object-fit: cover;" :src="index" alt="" />
+      </swiper-slide>
+    </swiper>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      swiperOptions: {
+        loop: true,
+        autoplay: {
+          delay: 2000,
+          stopOnLastSlide: false,
+          /* 触摸滑动后是否继续轮播 */
+          disableOnInteraction: false,
+        },
+      },
+      imgList: [
+        require("@/assets/images/banner/1.png"),
+        require("@/assets/images/banner/2.png"),
+        require("@/assets/images/banner/3.png"),
+        require("@/assets/images/banner/4.png"),
+        require("@/assets/images/banner/5.png"),
+      ],
+    };
+  },
+};
+</script>
+<style lang="less" scoped>
+.banner-home {
+  overflow: hidden;
+}
+</style>

File diff suppressed because it is too large
+ 620 - 166
src/views/Home/homePage.vue


+ 42 - 2
yarn.lock

@@ -2015,6 +2015,11 @@ async@^2.6.4:
   dependencies:
     lodash "^4.17.14"
 
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://mirrors.cloud.tencent.com/npm/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
 at-least-node@^1.0.0:
   version "1.0.0"
   resolved "https://mirrors.cloud.tencent.com/npm/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
@@ -2032,6 +2037,15 @@ autoprefixer@^10.2.4:
     picocolors "^1.0.0"
     postcss-value-parser "^4.2.0"
 
+axios@^1.6.8:
+  version "1.6.8"
+  resolved "https://mirrors.cloud.tencent.com/npm/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66"
+  integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
+  dependencies:
+    follow-redirects "^1.15.6"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
+
 babel-loader@^8.2.2:
   version "8.3.0"
   resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8"
@@ -2411,6 +2425,13 @@ colorette@^2.0.10:
   resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
   integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
 
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://mirrors.cloud.tencent.com/npm/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
 commander@^2.20.0:
   version "2.20.3"
   resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -2784,6 +2805,11 @@ define-properties@^1.2.1:
     has-property-descriptors "^1.0.0"
     object-keys "^1.1.1"
 
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://mirrors.cloud.tencent.com/npm/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
 depd@2.0.0:
   version "2.0.0"
   resolved "https://mirrors.cloud.tencent.com/npm/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@@ -3392,11 +3418,20 @@ flatted@^3.2.9:
   resolved "https://mirrors.cloud.tencent.com/npm/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
   integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
 
-follow-redirects@^1.0.0:
+follow-redirects@^1.0.0, follow-redirects@^1.15.6:
   version "1.15.6"
   resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
   integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
 
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://mirrors.cloud.tencent.com/npm/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
 forwarded@0.2.0:
   version "0.2.0"
   resolved "https://mirrors.cloud.tencent.com/npm/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -4361,7 +4396,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
   resolved "https://mirrors.cloud.tencent.com/npm/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
   integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
 
-mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
   version "2.1.35"
   resolved "https://mirrors.cloud.tencent.com/npm/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
   integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -5171,6 +5206,11 @@ proxy-addr@~2.0.7:
     forwarded "0.2.0"
     ipaddr.js "1.9.1"
 
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://mirrors.cloud.tencent.com/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
 prr@~1.0.1:
   version "1.0.1"
   resolved "https://mirrors.cloud.tencent.com/npm/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"