Procházet zdrojové kódy

Merge branch 'dev' of xiongzhu/raex_front into master

panhui před 4 roky
rodič
revize
9de92bd11c

+ 1 - 1
.env.development

@@ -1,4 +1,4 @@
-VUE_APP_BASE_URL=https://www.raex.vip
+VUE_APP_BASE_URL=https://test.raex.vip
 NODE_ENV=development
 VUE_APP_PUBLIC_PATH=/
 ASSETS_PATH=raex

binární
src/assets/icon-sheweitouxiang.png


+ 38 - 0
src/components/product/ProductBanner.vue

@@ -42,6 +42,11 @@
             </swiper>
 
             <div class="share-content">
+                <div class="setAvatar" @click="setAvatar" v-if="pageType == 'asset' && onlyImg">
+                    <img src="../../assets/icon-sheweitouxiang.png" alt="" />
+                    <span>设为头像</span>
+                </div>
+
                 <like-button v-if="pageType == 'product'" :isLike="info.liked" @click="likeProduct">
                     {{ info.likes }}
                 </like-button>
@@ -117,6 +122,14 @@ export default {
                 this.pageType === 'product' ||
                 (this.info.status === 'NORMAL' && (this.info.publicShow || this.info.consignment))
             );
+        },
+        onlyImg() {
+            if (this.banners.length > 0 && !this.info.model3d) {
+                if (this.banners[0].type.indexOf('image') !== -1) {
+                    return true;
+                }
+            }
+            return false;
         }
     },
     methods: {
@@ -151,6 +164,15 @@ export default {
             this.$nextTick(() => {
                 this.$refs.swiperVideo[0].play();
             });
+        },
+        setAvatar() {
+            this.$toast.loading({
+                message: '加载中...',
+                forbidClick: true
+            });
+            this.updateUser({ avatar: this.banners[0].url, useCollectionPic: true }).then(res => {
+                this.$toast.success('设置成功');
+            });
         }
     }
 };
@@ -243,4 +265,20 @@ export default {
         color: rgba(0, 0, 0, 0.5) !important;
     }
 }
+
+.setAvatar {
+    .flex();
+    img {
+        width: 24px;
+        height: 24px;
+        display: block;
+    }
+
+    span {
+        font-size: 12px;
+        color: #949699;
+        line-height: 24px;
+        margin-left: 3px;
+    }
+}
 </style>

+ 2 - 1
src/main.js

@@ -76,6 +76,7 @@ if (query.code) {
         // document.location.replace(location.origin + '/wx/redirect?redirectUrl=' + location.href);
     }
 }
+store.dispatch('getTime');
 if (query.invitor) {
     store.commit('setInvitor', query.invitor);
 
@@ -128,7 +129,7 @@ const loadSplash = (onload, onerror) =>
         setTimeout(() => {
             hideSplash();
         }, 5000);
-        splash.src = 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/splash.jpg?ts=' + new Date().getTime();
+        splash.src = 'https://cdn.raex.vip/splash.jpg?ts=' + new Date().getTime();
         document.body.append(splash);
     });
 if (navigator.userAgent.includes('#cordova#')) {

+ 20 - 20
src/mixins/level.js

@@ -7,8 +7,8 @@ export default {
                     end: 9,
                     color1: '#717171',
                     color: '#3B445D',
-                    vicon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/v.png',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV0-1-icon.png',
+                    vicon: 'https://cdn.raex.vip/medals/v.png',
+                    icon: 'https://cdn.raex.vip/medals/LV0-1-icon.png',
                     hide: true,
                     textColor: '#ffffff',
                     startColor: '#A5AEC9',
@@ -20,8 +20,8 @@ export default {
                     color: '#557595',
                     startColor: '#AAD4FF',
                     endColor: '#C5E2FF',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV10-19-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V10-19.png'
+                    icon: 'https://cdn.raex.vip/medals/LV10-19-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V10-19.png'
                 },
                 {
                     start: 20,
@@ -29,8 +29,8 @@ export default {
                     color: '#A65F3B',
                     startColor: '#fec391',
                     endColor: '#fde9cb',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV20-29-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V20-29.png'
+                    icon: 'https://cdn.raex.vip/medals/LV20-29-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V20-29.png'
                 },
                 {
                     start: 30,
@@ -38,8 +38,8 @@ export default {
                     color: '#3C62FF',
                     startColor: '#B6C2FF',
                     endColor: '#A8B7FF',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV30-39-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V30-39.png'
+                    icon: 'https://cdn.raex.vip/medals/LV30-39-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V30-39.png'
                 },
                 {
                     start: 40,
@@ -47,8 +47,8 @@ export default {
                     color: '#663FA7',
                     startColor: '#CEAFFF',
                     endColor: '#C19AFF',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV40-49-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V40-49.png'
+                    icon: 'https://cdn.raex.vip/medals/LV40-49-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V40-49.png'
                 },
                 {
                     start: 50,
@@ -56,8 +56,8 @@ export default {
                     color: '#1076E1',
                     startColor: '#B3EAFF',
                     endColor: '#7CDAFF',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV50-59-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V50-59.png'
+                    icon: 'https://cdn.raex.vip/medals/LV50-59-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V50-59.png'
                 },
                 {
                     start: 60,
@@ -65,8 +65,8 @@ export default {
                     color: '#DB31CA',
                     startColor: '#FFBEF8',
                     endColor: '#FF8DF5',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV60-69-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V60-69.png'
+                    icon: 'https://cdn.raex.vip/medals/LV60-69-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V60-69.png'
                 },
                 {
                     start: 70,
@@ -74,8 +74,8 @@ export default {
                     color: '#3D26D2',
                     startColor: '#B6AAFC',
                     endColor: '#9F8EFF',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV70-79-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V70-79.png'
+                    icon: 'https://cdn.raex.vip/medals/LV70-79-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V70-79.png'
                 },
                 {
                     start: 80,
@@ -83,8 +83,8 @@ export default {
                     color: '#DF1637',
                     startColor: '#FFB2B9',
                     endColor: '#F89BA3',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV80-89-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V80-89.png'
+                    icon: 'https://cdn.raex.vip/medals/LV80-89-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V80-89.png'
                 },
                 {
                     start: 90,
@@ -92,8 +92,8 @@ export default {
                     color: '#FA6802',
                     startColor: '#FFE3BB',
                     endColor: '#FFCF8C',
-                    icon: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/LV90-99-icon.png',
-                    bg: 'https://raex-meta.oss-cn-shenzhen.aliyuncs.com/medals/V90-99.png'
+                    icon: 'https://cdn.raex.vip/medals/LV90-99-icon.png',
+                    bg: 'https://cdn.raex.vip/medals/V90-99.png'
                 }
             ],
             levels: [],

+ 26 - 10
src/mixins/product.js

@@ -39,7 +39,9 @@ export default {
                 最HOT收藏品: 'soldOut;likes,desc;sort,desc;createdAt,desc',
                 更多藏品: 'soldOut;source,asc;sale,desc;likes,desc'
             },
-            timer: null
+            startTimetimer: null,
+            saleTimetimer: null,
+            saleTime: ''
         };
     },
     computed: {
@@ -56,6 +58,13 @@ export default {
                 return false;
             }
         },
+        isSale() {
+            if (this.info.saleTime) {
+                return this.dayjs().isBefore(this.dayjs(this.info.saleTime));
+            } else {
+                return false;
+            }
+        },
         isSold() {
             return this.info && this.info.soldOut && this.info.salable;
         },
@@ -85,40 +94,47 @@ export default {
             n = n + '';
             return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
         },
-        getTime(startTime) {
+        getTime(startTime, key = 'startTime') {
             if (!startTime) {
                 return;
             }
-            if (!this.isAppointment) {
+            if (key == 'startTime' && !this.isAppointment) {
                 return;
             }
 
+            if (key == 'saleTime' && !this.isSale) {
+                return;
+            }
+
+            let subTime = parseInt(this.$store.state.netTime / 1000);
+
             let seconds = this.dayjs(startTime, 'YYYY-MM-DD HH:mm:ss').diff(this.dayjs(), 'second');
+            seconds = seconds - subTime;
             let str = '';
             let d = Math.floor(seconds / 24 / 3600);
             if (abs(d) > 0) {
                 str += d + '天 ';
             }
 
-            this.startTime =
+            this[key] =
                 str +
                 this.pad(parseInt(seconds / 3600) % 24, 2) +
                 ':' +
                 this.pad(parseInt(seconds / 60) % 60, 2) +
                 ':' +
                 this.pad(seconds % 60, 2);
-            if (this.timer) {
-                clearTimeout(this.timer);
-                this.timer = null;
+            if (this[key + 'timer']) {
+                clearTimeout(this[key + 'timer']);
+                this[key + 'timer'] = null;
             }
             if (!this.dayjs().isBefore(this.dayjs(startTime, 'YYYY-MM-DD HH:mm:ss'))) {
                 if (this.getProduct) {
                     this.getProduct();
                 }
-                this.startTime = '';
+                this[key] = '';
             } else {
-                this.timer = setTimeout(() => {
-                    this.getTime(startTime);
+                this[key + 'timer'] = setTimeout(() => {
+                    this.getTime(startTime, key);
                 }, 1000);
             }
         },

+ 14 - 3
src/styles/app.less

@@ -202,7 +202,8 @@ input:-webkit-autofill {
 }
 
 .page-detail img {
-    width: 100%;
+    width: 100% !important;
+    height: auto !important;
 }
 
 .filter-bg {
@@ -214,8 +215,8 @@ input:-webkit-autofill {
     bottom: 0;
     filter: blur(20px);
     background-position: center;
-    background-size: cover;
-    background-attachment: fixed;
+    background-size: content;
+    // background-attachment: fixed;
 }
 .van-key--blue {
     background-color: @prim!important;
@@ -234,3 +235,13 @@ input:-webkit-autofill {
     opacity: 1;
     transition: opacity 0.8s ease-in-out;
 }
+
+.activeAvatar {
+    overflow: initial !important;
+    img {
+        border-radius: 100px;
+        border: 1px solid #26f50d;
+        box-sizing: border-box;
+        box-shadow: 0 1px 6px 0 #26f50d50;
+    }
+}

+ 3 - 3
src/styles/font.less

@@ -5,16 +5,16 @@
 
 @font-face {
   font-family: 'OSP';
-  src: url(https://zhirongip.oss-cn-hangzhou.aliyuncs.com/fonts/OSP-DIN.ttf);
+  src: url(https://cdn.raex.vip/font/OSP-DIN.ttf);
 }
 
 @font-face {
   font-family: 'DIN';
-  src: url(https://zhirongip.oss-cn-hangzhou.aliyuncs.com/fonts/OSP-DIN.ttf);
+  src: url(https://cdn.raex.vip/font/OSP-DIN.ttf);
 }
 @font-face {
   font-family: 'SourceHanSans-Medium';
-  src: url(https://raex-meta.oss-cn-shenzhen.aliyuncs.com/font/SourceHanSans-Medium.otf);
+  src: url(https://cdn.raex.vip/font/SourceHanSans-Medium.otf);
 }
 
 

+ 1 - 1
src/views/Discover.vue

@@ -104,7 +104,7 @@
         <div class="box">
             <page-title title="更多藏品" :isLink="false"></page-title>
             <van-list
-                style="padding-bottom: 100px;"
+                style="padding-bottom: 100px"
                 class="box-list"
                 v-model:loading="loading"
                 :finished="finished"

+ 1 - 1
src/views/DiscoverPre.vue

@@ -142,7 +142,7 @@ export default {
                 .post(
                     '/collection/all',
                     {
-                        page: 0,
+                        page: this.page,
                         size: 20,
                         query: {
                             onShelf: true,

+ 105 - 16
src/views/Home.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="home">
-        <div class="filter-bg"></div>
+        <div class="filter-bg" :style="{ backgroundImage: `url(${bgImg})` }"></div>
         <div class="welcom">
             <div class="left">
                 <div class="text1">WELCOME</div>
@@ -10,6 +10,7 @@
                 width="38"
                 height="38"
                 :radius="32"
+                :class="{ activeAvatar: isLogin && userInfo.useCollectionPic }"
                 :src="isLogin ? userInfo.avatar : require('@assets/img_default_photo.png')"
             ></van-image>
         </div>
@@ -27,17 +28,28 @@
             </swiper-slide>
         </swiper>
 
-        <div class="list">
+        <div class="tabs" v-if="!empty">
+            <div class="tab" :class="{ active: active === 0 }" @click="active = 0">数字藏品</div>
+            <div class="tab" :class="{ active: active === 1 }" @click="active = 1">产品新闻端</div>
+        </div>
+
+        <div class="list" v-if="active == 0">
             <product-large
                 v-for="(item, index) in products"
                 :key="index"
                 v-model:info="products[index]"
             ></product-large>
         </div>
+        <template v-else>
+            <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="getNews">
+                <news-info v-for="item in news" :key="item.id" :info="item"></news-info>
+            </van-list>
+        </template>
     </div>
 </template>
 
 <script>
+import product from '../mixins/product';
 import { Swiper, SwiperSlide } from 'swiper/vue';
 
 import 'swiper/swiper.min.css';
@@ -52,24 +64,44 @@ import banner from '../mixins/banner';
 import ProductLarge from '../components/product/productLarge.vue';
 import ProductSmall from '../components/product/productSmall.vue';
 import { mapState } from 'vuex';
+import NewsInfo from '../components/product/NewsInfo';
 
 export default {
     name: 'home',
     inject: ['bar'],
-    mixins: [banner],
+    mixins: [banner, product],
     components: {
         Swiper,
         SwiperSlide,
         ProductLarge,
-        ProductSmall
+        ProductSmall,
+        NewsInfo
     },
     computed: {
-        ...mapState(['userInfo'])
+        ...mapState(['userInfo']),
+        bgImg() {
+            let img = '';
+            if (this.active === 0 && this.products.length > 0) {
+                img = this.getImg(this.changeImgs(this.products[0].pic));
+            }
+
+            if (this.active === 1 && this.news.length > 0) {
+                img = this.getImg(this.news[0].pic);
+            }
+
+            return img;
+        }
     },
     data() {
         return {
             banners: [],
-            products: []
+            products: [],
+            active: 0,
+            news: [],
+            loading: false,
+            finished: false,
+            page: 0,
+            empty: false
         };
     },
     mounted() {
@@ -89,6 +121,7 @@ export default {
             this.getProduct('LIST').then(res => {
                 this.products = res;
             });
+            this.getNews();
         },
         getProduct(type = 'BANNER') {
             return this.$http
@@ -105,7 +138,8 @@ export default {
                     '/banner/all',
                     {
                         query: {
-                            type: 'HOME'
+                            type: 'HOME',
+                            del: false
                         },
                         sort: 'sort,asc;createdAt,desc'
                     },
@@ -120,9 +154,6 @@ export default {
             if (this.page === 0) {
                 this.list = [];
             }
-            this.loading = true;
-            this.finished = false;
-            this.empty = false;
             this.$http
                 .post(
                     '/collection/all',
@@ -139,9 +170,6 @@ export default {
                 )
                 .then(res => {
                     this.list = [...this.list, ...res.content];
-                    this.empty = res.empty;
-                    this.loading = false;
-                    this.finished = res.last;
                     if (!this.finished) {
                         this.page = this.page + 1;
                     }
@@ -163,6 +191,36 @@ export default {
                     this.miners = res.content;
                     // console.log(this.miners);
                 });
+        },
+        getNews() {
+            if (this.page === 0) {
+                this.news = [];
+            }
+            this.loading = true;
+            this.finished = false;
+            this.empty = false;
+            this.$http
+                .post(
+                    '/news/all',
+                    {
+                        page: this.page,
+                        size: 20,
+                        query: {
+                            del: false
+                        },
+                        sort: 'sort,asc;createdAt,desc'
+                    },
+                    { body: 'json' }
+                )
+                .then(res => {
+                    this.news = [...this.news, ...res.content];
+                    this.empty = res.empty;
+                    this.loading = false;
+                    this.finished = res.last;
+                    if (!this.finished) {
+                        this.page = this.page + 1;
+                    }
+                });
         }
     }
 };
@@ -225,7 +283,7 @@ export default {
     }
 
     .swiper-pagination-bullet-active {
-        background: @prim;
+        background: #fff;
     }
 }
 .swiper-slide {
@@ -245,13 +303,13 @@ export default {
         .text1 {
             font-size: 12px;
             font-weight: bold;
-            color: #939599;
+            color: #fff;
             line-height: 24px;
         }
         .text2 {
             font-size: 24px;
             font-weight: bold;
-            color: #0a0a0a;
+            color: #fff;
             line-height: 32px;
             letter-spacing: 2px;
 
@@ -263,4 +321,35 @@ export default {
         }
     }
 }
+
+.tabs {
+    .flex();
+    font-size: 14px;
+    color: rgba(255, 255, 255, 0.6);
+    line-height: 24px;
+    padding: 0 16px;
+
+    .tab + .tab {
+        margin-left: 20px;
+    }
+
+    .tab {
+        position: relative;
+        &.active {
+            font-weight: bold;
+            color: #ffffff;
+
+            &::after {
+                content: '';
+                height: 2px;
+                background-color: #fff;
+                width: 18px;
+                position: absolute;
+                bottom: -2px;
+                left: 50%;
+                transform: translateX(-50%);
+            }
+        }
+    }
+}
 </style>

+ 1 - 0
src/views/Mine.vue

@@ -17,6 +17,7 @@
                         height="78"
                         :src="userInfo.avatar || require('@assets/img_default_photo.png')"
                         fit="cover"
+                        :class="{ activeAvatar: isLogin && userInfo.useCollectionPic }"
                         @click="$router.push('/setting')"
                     />
                     <div class="text">

+ 1 - 1
src/views/Submit.vue

@@ -295,7 +295,7 @@ export default {
                 collectionId: this.$route.query.id,
                 qty: 1,
                 couponId: (this.couponInfo || {}).id || '',
-                invitor: sessionStorage.getItem('invitor'),
+                invitor: this.$store.state.invitor || '',
                 vip: this.$store.state.userInfo.vipPurchase > 0 ? true : false
             };
             params.sign = encryptUtil.encrypt(qs.stringify({ ...params, ts: new Date().getTime() }));

+ 1 - 1
src/views/account/Setting.vue

@@ -85,7 +85,7 @@ export default {
                 forbidClick: true
             });
             this.updateFile(e, 500).then(img => {
-                this.updateUser({ avatar: img }).then(res => {
+                this.updateUser({ avatar: img, useCollectionPic: false }).then(res => {
                     this.$toast.clear();
                 });
             });

+ 1 - 1
src/views/activity/List1.vue

@@ -78,7 +78,7 @@ export default {
     position: relative;
     .filter-bg {
         background-position: top;
-        background-size: 100% 500px;
+        // background-size: 100% 500px;
         background-repeat: no-repeat;
         top: 50px;
     }

+ 28 - 2
src/views/product/Detail.vue

@@ -256,22 +256,44 @@
                             <span>{{ startTime }}</span>
                         </div>
                     </van-button>
+
                     <!-- <van-button class="no-btn" v-else-if="isSold" block round>已售罄</van-button> -->
                     <van-button class="no-btn" v-else-if="isSolded" block round>已售罄</van-button>
                     <van-button class="no-btn" v-else-if="isSold" block round>即将售罄</van-button>
                     <van-button class="no-btn" v-else-if="limit.limit > 0 && limit.count >= limit.limit" block round>
                         限购{{ limit.limit }}件
                     </van-button>
-                    <template v-else-if="assignment && assignments.length < assignment">
+                    <template v-else-if="assignment && ((isLogin && userInfo.vipPoint < 1) || !isLogin)">
                         <div class="btn-assignments" v-if="isLogin && userInfo.vipPurchase">
                             <van-button @click="vipAssignment" class="vip" type="danger" block round>
                                 vip通道
                             </van-button>
-                            <van-button @click="share" type="primary" block round>邀请获取 </van-button>
+                            <van-button style="font-size: 12px" class="no-btn" v-if="info.vipQuota < 1" block round>
+                                名额为空
+                            </van-button>
+                            <van-button @click="share" v-else type="primary" block round>邀请获取 </van-button>
                         </div>
+                        <van-button
+                            style="font-size: 12px"
+                            class="no-btn"
+                            v-if="info.vipQuota < 1 || assignments.length >= assignment"
+                            block
+                            round
+                        >
+                            活动名额已被抢光
+                        </van-button>
                         <van-button @click="share" v-else type="primary" block round>邀请获取白名单 </van-button>
                     </template>
 
+                    <template v-else-if="assignment && isSale && info.timeDelay">
+                        <van-button class="no-btn" block round>
+                            <div class="appoint">
+                                <span style="font-size: 12px">任务完成,即将抢购</span>
+                                <span>{{ saleTime }}</span>
+                            </div>
+                        </van-button>
+                    </template>
+
                     <van-button v-else type="primary" block round @click="buy">
                         {{ info.couponPayment ? '立即兑换' : '立即购买' }}
                     </van-button>
@@ -362,6 +384,7 @@ export default {
     mounted() {
         this.$store.dispatch('getUsedBuy');
         this.$store.dispatch('getTime');
+        this.$store.dispatch('getUserInfo');
         this.getProduct();
         this.$http.get('/order/checkLimit', { collectionId: this.$route.query.id }).then(res => {
             this.limit = res;
@@ -453,6 +476,9 @@ export default {
                         });
                     }
                     this.getTime(res.startTime);
+                    if (res.saleTime) {
+                        this.getTime(res.saleTime, 'saleTime');
+                    }
                     this.$nextTick(() => {
                         if (this.isBuy) {
                             this.btn = this.$refs.btn;

+ 2 - 1
src/views/product/List.vue

@@ -193,7 +193,8 @@ export default {
                     '/banner/all',
                     {
                         query: {
-                            type: 'MARKET'
+                            type: 'MARKET',
+                            del: false
                         },
                         sort: 'sort,asc;createdAt,desc'
                     },

+ 3 - 5
vue.config.js

@@ -7,10 +7,10 @@ switch (process.env.NODE_ENV) {
         publicPath = '/';
         break;
     case 'production':
-        publicPath = `https://raex-meta.oss-cn-shenzhen.aliyuncs.com/www/` + new Date().getTime();
+        publicPath = `https://cdn.raex.vip/www/` + new Date().getTime();
         break;
     case 'test':
-        publicPath = `https://raex-meta.oss-cn-shenzhen.aliyuncs.com/www_test/` + new Date().getTime();
+        publicPath = `https://cdn.raex.vip/www_test/` + new Date().getTime();
         break;
 }
 module.exports = {
@@ -27,9 +27,7 @@ module.exports = {
     },
     chainWebpack: config => {
         if (process.env.NODE_ENV === 'production') {
-            config
-                .plugin('upload')
-                .use(new UploadPlugin(publicPath.replace('https://raex-meta.oss-cn-shenzhen.aliyuncs.com/', '')));
+            config.plugin('upload').use(new UploadPlugin(publicPath.replace('https://cdn.raex.vip/', '')));
         }
         config.output.filename('[name].[hash].js').end();
         config.resolve.alias.set('@assets', path.resolve(__dirname, 'src', 'assets'));