Просмотр исходного кода

Merge branch 'master' of http://git.izouma.com/xiongzhu/raex_front

panhui 4 лет назад
Родитель
Сommit
a4900f5459

+ 3 - 1
src/App.vue

@@ -6,14 +6,16 @@
                 <component :is="Component" class="scroll-content" ref="content" />
             </keep-alive>
         </router-view>
+        <phone-ver></phone-ver>
     </div>
 </template>
 
 <script>
 import AppBar from './components/AppBar.vue';
 import { computed } from 'vue';
+import PhoneVer from './components/PhoneVer.vue';
 export default {
-    components: { AppBar },
+    components: { AppBar, PhoneVer },
     name: 'App',
     provide() {
         return {

BIN
src/assets/icon_yinlian.png


+ 22 - 6
src/components/AppBar.vue

@@ -33,24 +33,38 @@
 </template>
 
 <script>
+import { mapState } from 'vuex';
 export default {
     inject: ['setKeeps'],
     data() {
         return {
             show: false,
             showPopover: false,
-            actions: [
-                { text: '首页', icon: require('@assets/menu1.png'), value: '/home' },
-                { text: '发现', icon: require('@assets/menu2.png'), value: '/discover' },
-                { text: '藏品室', icon: require('@assets/menu3.png'), value: '/store' },
-                { text: '我的', icon: require('@assets/menu4.png'), value: '/mine' }
-            ],
             tabColor: ''
         };
     },
     computed: {
+        ...mapState(['showConsole']),
         fontColor() {
             return this.tabColor ? '#fff' : '';
+        },
+        actions() {
+            if (this.showConsole) {
+                return [
+                    { text: '首页', icon: require('@assets/menu1.png'), value: '/home' },
+                    { text: '发现', icon: require('@assets/menu2.png'), value: '/discover' },
+                    { text: '藏品室', icon: require('@assets/menu3.png'), value: '/store' },
+                    { text: '我的', icon: require('@assets/menu4.png'), value: '/mine' },
+                    { text: '刷新', icon: 'replay', value: 'reload' }
+                ];
+            } else {
+                return [
+                    { text: '首页', icon: require('@assets/menu1.png'), value: '/home' },
+                    { text: '发现', icon: require('@assets/menu2.png'), value: '/discover' },
+                    { text: '藏品室', icon: require('@assets/menu3.png'), value: '/store' },
+                    { text: '我的', icon: require('@assets/menu4.png'), value: '/mine' }
+                ];
+            }
         }
     },
     watch: {
@@ -100,6 +114,8 @@ export default {
         onSelect(val) {
             if (val.value === 'back') {
                 this.$router.go(-1);
+            } else if (val.value === 'reload') {
+                location.reload();
             } else {
                 this.setKeeps([], true, true);
                 this.$router.push(val.value);

+ 13 - 3
src/components/PhoneVer.vue

@@ -1,8 +1,15 @@
 <template>
-    <van-dialog style="width: 300px;" v-model:show="phoneShow" confirm-button-text="提交" @confirm="confirm">
+    <van-dialog
+        style="width: 300px; z-index: 9999"
+        v-model:show="phoneShow"
+        confirm-button-text="提交"
+        @confirm="confirm"
+        teleport="body"
+        :overlayStyle="{ zIndex: 9998 }"
+    >
         <div class="form">
             <van-image @click="getCode" :src="codeImg" width="150" height="80" fit="contain" />
-            <van-field type="text" input-align="center" placeholder="请输入图形验证码" v-model="captcha" />
+            <van-field type="digit" input-align="center" placeholder="请输入图形验证码" v-model="captcha" />
         </div>
     </van-dialog>
 </template>
@@ -25,6 +32,7 @@ export default {
     methods: {
         getCode() {
             this.$http.get('/captcha/get?' + new Date().getTime()).then(res => {
+                this.captcha = '';
                 this.codeImg = res.image;
                 this.captchaKey = res.key;
                 this.phoneShow = true;
@@ -32,9 +40,11 @@ export default {
         },
         confirm() {
             this.emitter.emit('submitCaptcha', {
-                captcha: this.captcha,
+                captcha: this.captcha || ' ',
                 captchaKey: this.captchaKey
             });
+
+            this.captcha = '';
         }
     }
 };

+ 56 - 26
src/components/asset/showInfo.vue

@@ -7,15 +7,17 @@
             }
         }"
         class="showInfo"
+        :class="{ listShow: list }"
     >
-        <div class="bg" :style="{ backgroundImage: `url(${info.headBg}),url(${info.showroomBg})` }"></div>
+        <div class="bg" v-if="!list" :style="{ backgroundImage: `url(${info.headBg}),url(${info.showroomBg})` }"></div>
+        <div class="bg" v-else :style="{ backgroundImage: `url(${info.showroomBg})` }"></div>
         <!-- <van-image radius="6" :src="info.showroomBg" width="100%" height="140" fit="cover" /> -->
         <div class="collecions">
-            <div class="users">
+            <div class="users" v-if="!list">
                 <van-image
                     :src="info.pic || require('../../assets/icon-tianjiacangping.png')"
-                    width="120"
-                    height="120"
+                    width="30vw"
+                    height="30vw"
                     radius="8"
                     fit="cover"
                 />
@@ -30,33 +32,35 @@
                 </div>
             </div>
             <van-image
-                v-for="(item, index) in collections"
+                v-for="(item, index) in showCollections"
                 :src="item.pic"
-                width="120"
-                height="120"
+                width="30vw"
+                height="30vw"
                 fit="coevr"
                 radius="8"
                 :key="index"
             />
         </div>
-        <img src="../../assets/png-zhantai1.png" class="bg-img" alt="" />
-        <div class="text">
-            <div class="text1">{{ info.introduction || '展馆未设置' }}</div>
-            <div class="text2">{{ info.nickname }}</div>
-        </div>
-        <div class="btns" @click.prevent="">
-            <div class="btn">
-                <img src="../../assets/icon-liulanliang.png" alt="" />
-                <span>{{ collections.length }}</span>
-            </div>
-            <div class="btn">
-                <img src="../../assets/icon-fenxiang2.png" alt="" />
-                <span>{{ info.share }}</span>
+        <img v-if="!list" src="../../assets/png-zhantai1.png" class="bg-img" alt="" />
+        <div class="content">
+            <div class="text">
+                <div class="text1 van-ellipsis">{{ info.introduction || '展馆未设置' }}</div>
+                <div class="text2">{{ info.nickname }}</div>
             </div>
-            <div class="btn" @click="like(info)">
-                <img v-if="info.liked" src="../../assets/icon-dianzan3.png" alt="" />
-                <img v-else src="../../assets/icon-dianzan2.png" alt="" />
-                <span>{{ info.likes }}</span>
+            <div class="btns" @click.prevent="">
+                <div class="btn">
+                    <img src="../../assets/icon-liulanliang.png" alt="" />
+                    <span>{{ collections.length }}</span>
+                </div>
+                <div class="btn">
+                    <img src="../../assets/icon-fenxiang2.png" alt="" />
+                    <span>{{ info.share }}</span>
+                </div>
+                <div class="btn" @click="like(info)">
+                    <img v-if="info.liked" src="../../assets/icon-dianzan3.png" alt="" />
+                    <img v-else src="../../assets/icon-dianzan2.png" alt="" />
+                    <span>{{ info.likes }}</span>
+                </div>
             </div>
         </div>
     </router-link>
@@ -75,11 +79,19 @@ export default {
             default: () => {
                 return {};
             }
+        },
+        list: {
+            type: Boolean,
+            default: false
         }
     },
     computed: {
         collections() {
             return this.info.collections || [];
+        },
+        showCollections() {
+            let list = [...this.collections];
+            return list.slice(0, 4);
         }
     },
     methods: {
@@ -99,6 +111,23 @@ export default {
     & > div {
         z-index: 1;
     }
+
+    &.listShow {
+        padding: 0 0;
+        overflow: hidden;
+        .bg {
+            background-size: 100% auto;
+        }
+        .collecions {
+            // padding: 0 25vw;
+            box-sizing: border-box;
+            top: 9vw;
+            left: 9vw;
+        }
+        .content {
+            padding: 0 16px 10px;
+        }
+    }
 }
 
 .bg {
@@ -126,6 +155,7 @@ export default {
         font-size: 12px;
         color: #ffffff;
         line-height: 17px;
+        margin-bottom: 3px;
     }
 
     .text2 {
@@ -198,8 +228,8 @@ export default {
         }
     }
 
-    & > .van-image {
-        margin-right: 60px;
+    & > .van-image + .van-image {
+        margin-left: 20vw;
     }
 }
 </style>

+ 15 - 1
src/components/level/Level.vue

@@ -1,5 +1,5 @@
 <template>
-    <van-overlay :show="show" @click="close" z-index="99">
+    <van-overlay ref="overLay" :show="show" @click="close" z-index="99">
         <div class="box" ref="box">
             <van-image width="260" height="220" :src="levelInfo.bg" fit="contain" />
             <div class="box-top">
@@ -55,12 +55,18 @@ export default {
         };
     },
     mixins: [level],
+    mounted() {
+        this.$nextTick(() => {
+            document.body.appendChild(this.$refs.overLay);
+        });
+    },
     methods: {
         changeLevel(level) {
             if (level >= 10) {
                 this.show = true;
             }
             this.$http.post('/user/update', {
+                ...this.$store.state.userInfo,
                 level: level
             });
         },
@@ -215,4 +221,12 @@ export default {
         }
     }
 }
+.van-overlay {
+    top: -103px;
+    width: 100vw;
+    height: 100vh;
+    left: -16px;
+    width: 100vw;
+    height: 100vh;
+}
 </style>

+ 1 - 0
src/main.js

@@ -43,6 +43,7 @@ dayjs.extend(customParseFormat);
 let showConsole = localStorage.getItem('showConsole');
 if (showConsole && parseInt(showConsole) > new Date().getTime()) {
     eruda.init();
+    store.commit('setShowConsole', true);
 }
 store.commit('setFirstUrl', location.href);
 

+ 4 - 2
src/mixins/common.js

@@ -203,10 +203,12 @@ export default {
         checkWebDriver(e) {
             if (window.navigator.webdriver == true || e.isTrusted == false) {
                 return false;
-            }
-            else{
+            } else {
                 return true;
             }
+        },
+        goWin(next) {
+            window.location.href = next;
         }
     }
 };

+ 1 - 0
src/mixins/orderAct.js

@@ -3,6 +3,7 @@ export default {
         return {
             statusOptions: [
                 { label: '未支付', value: 'NOT_PAID' },
+                { label: '待审核', value: 'PENDING', text: '付款成功!等待平台审核' },
                 { label: '待发货', value: 'DELIVERY', text: '付款成功!等待平台发货' },
                 { label: '待收货', value: 'RECEIVE', text: '订单已发货!' },
                 { label: '待空投', value: 'AIR_DROP', text: '支付成功,等待平台确认交易' },

+ 39 - 3
src/mixins/phone.js

@@ -6,24 +6,60 @@ export default {
             isSend: false,
             msgCode: '',
             sendNum: 60,
-            timer: null
+            timer: null,
+            captchaKey: '',
+            codeImg: '',
+            captcha: '',
+            phone: ''
         };
     },
+    mounted() {
+        this.emitter.on('submitCaptcha', ({ captcha, captchaKey }) => {
+            console.log(captcha);
+            console.log(captchaKey);
+            this.captcha = captcha;
+            this.captchaKey = captchaKey;
+            this.$nextTick(() => {
+                this.sendMsg(this.phone);
+            });
+        });
+    },
+    unmounted() {
+        this.emitter.off('submitCaptcha');
+    },
     methods: {
+        getCode() {
+            return this.$http.get('/captcha/get').then(res => {
+                this.captchaKey = res.key;
+                this.codeImg = res.image;
+                this.emitter.emit('phoneShow');
+            });
+        },
         sendMsg(phone) {
+            this.phone = phone;
+            if (!this.captcha || !this.captchaKey) {
+                this.getCode();
+                return;
+            }
             this.isSend = true;
             this.setTime(60);
             this.$http
-                .get('/sms/sendVerify', {
-                    phone: phone
+                .get('/sms/sendSecureVerify', {
+                    phone: phone,
+                    captcha: this.captcha,
+                    captchaKey: this.captchaKey
                 })
                 .then(res => {
                     this.msgCode = res;
                     this.$toast.success('发送成功');
+                    this.captcha = '';
+                    this.captchaKey = '';
                 })
                 .catch(e => {
                     if (e) {
                         this.$toast(e.error);
+                        this.captcha = '';
+                        this.captchaKey = '';
                     }
                     this.setTime(0);
                 });

+ 4 - 2
src/mixins/room.js

@@ -13,7 +13,8 @@ export default {
                             if (this.getDetail) {
                                 this.getDetail({
                                     ...info,
-                                    liked: true
+                                    liked: true,
+                                    likes: info.likes + 1
                                 });
                             }
                             this.$toast.success('点赞成功');
@@ -28,7 +29,8 @@ export default {
                             if (this.getDetail) {
                                 this.getDetail({
                                     ...info,
-                                    liked: false
+                                    liked: false,
+                                    likes: info.likes - 1
                                 });
                             }
                             this.$toast.success('取消成功');

+ 10 - 0
src/router/index.js

@@ -331,6 +331,16 @@ const routes = [
             title: '第九空间'
         }
     },
+    {
+        path: '/hallList',
+        name: 'hallList',
+        component: () => import('../views/hall/List.vue'),
+        meta: {
+            pageType: Page.Every,
+            title: '第九空间',
+            tabColor: '#222426'
+        }
+    },
     {
         path: '/hopeMarket',
         name: 'hopeMarket',

+ 5 - 1
src/store/index.js

@@ -16,7 +16,8 @@ export default createStore({
         loginBackUrl: '',
         productId: '',
         netTime: 0,
-        usedBuy: true
+        usedBuy: true,
+        showConsole: false
     },
     mutations: {
         setFinished(state, finished) {
@@ -60,6 +61,9 @@ export default createStore({
         },
         setUsedBuy(state, usedBuy) {
             state.usedBuy = usedBuy;
+        },
+        setShowConsole(state, showConsole) {
+            state.showConsole = showConsole;
         }
     },
     actions: {

+ 12 - 0
src/styles/app.less

@@ -266,3 +266,15 @@ input:-webkit-autofill {
         height: 124%;
     }
 }
+
+.darkTabs {
+    background-color: #222426;
+    .van-tab.van-tab--active {
+        color: #43ce00 !important;
+    }
+    .van-tabs__line {
+        background-color: #43ce00 !important;
+        width: 16px;
+        height: 2px;
+    }
+}

+ 1 - 0
src/styles/common/theme.less

@@ -1,5 +1,6 @@
 @divider: #f2f4f5;
 @prim: #3ab200;
+@prim2: #43ce00;
 @success: #67c23a;
 @danger: #f56c6c;
 @warn: #3ab200;

+ 1 - 1
src/styles/font.less

@@ -1,6 +1,6 @@
 @font-face {
   font-family: 'ZhenyanGB';
-  src: url(https://zhirongip.oss-cn-hangzhou.aliyuncs.com/fonts/RuiZiZhenYanTiMianFeiShangYong-2.ttf);
+  src: url(https://cdn.raex.vip/font/RuiZiZhenYanTiMianFeiShangYong-2.ttf);
 }
 
 @font-face {

+ 13 - 4
src/views/Discover.vue

@@ -34,6 +34,7 @@
         </swiper>
 
         <div class="menu">
+            <!-- <router-link class="menu-item" :to="{ path: '/hallList' }"> -->
             <div class="menu-item" @click="wait">
                 <div class="text1">
                     <img src="../assets/info_icon_yishuzhanguan.png" alt="" />
@@ -42,17 +43,21 @@
                 <div class="text2">环球捕猎顶级艺术展览,尽在绿洲宇宙!</div>
                 <img src="../assets/yishuzhanlan-diwen.png" alt="" class="menu-bg" />
             </div>
-            <a
+            <div
                 class="menu-item"
-                href="https://shop103867459.m.youzan.com/v2/showcase/tag?alias=3nqup0zng9n2z&reft=1649311498407_1649311507717&spm=f.100904662_f.100129498_f.100904662"
+                @click="
+                    goWin(
+                        'https://shop103867459.m.youzan.com/v2/showcase/tag?alias=3nqup0zng9n2z&reft=1649311498407_1649311507717&spm=f.100904662_f.100129498_f.100904662'
+                    )
+                "
             >
                 <div class="text1">
                     <img src="../assets/info_icon_yanshengping.png" alt="" />
                     <span>艺术衍生品商城</span>
                 </div>
                 <div class="text2">最酷炫的艺术衍生品集成店,快来pick你的精彩!</div>
-                <img src="../assets/yishuzhanlan-diwen.png" alt="" class="menu-bg" />
-            </a>
+                <img src="../assets/shangcheng-diwen.png" alt="" class="menu-bg" />
+            </div>
         </div>
 
         <van-grid :border="false" :column-num="$store.state.review ? 3 : 4">
@@ -479,6 +484,10 @@ export default {
     padding: 0 8px 2px;
 }
 
+/deep/.van-tabs__nav--line.van-tabs__nav--complete {
+    border-top-width: 0px !important;
+}
+
 /deep/.van-tab {
     color: #fff;
     flex: 0;

+ 5 - 5
src/views/Hall.vue

@@ -29,7 +29,7 @@
         <swiper-slide class="user">
             <div class="icon" data-swiper-parallax="-300">
                 <van-image
-                    src="https://raex-meta.oss-cn-shenzhen.aliyuncs.com/nft/2022-02-07-01-15-56Liekxwjf.jpg"
+                    src="https://cdn.raex.vip/nft/2022-02-07-01-15-56Liekxwjf.jpg"
                     :width="isVertical && windowVertical ? 110 : 120"
                     :height="isVertical && windowVertical ? 110 : 120"
                     fit="coevr"
@@ -49,7 +49,7 @@
         <swiper-slide class="imgs" v-for="i in 10" :key="i">
             <div class="icon" data-swiper-parallax="-20">
                 <van-image
-                    src="https://raex-meta.oss-cn-shenzhen.aliyuncs.com/nft/2022-02-07-01-15-56Liekxwjf.jpg"
+                    src="https://cdn.raex.vip/nft/2022-02-07-01-15-56Liekxwjf.jpg"
                     :width="isVertical && windowVertical ? 110 : 120"
                     :height="isVertical && windowVertical ? 110 : 120"
                     fit="coevr"
@@ -58,7 +58,7 @@
             </div>
             <div class="icon" data-swiper-parallax="-40">
                 <van-image
-                    src="https://raex-meta.oss-cn-shenzhen.aliyuncs.com/nft/2022-02-07-01-15-56Liekxwjf.jpg"
+                    src="https://cdn.raex.vip/nft/2022-02-07-01-15-56Liekxwjf.jpg"
                     :width="isVertical && windowVertical ? 110 : 120"
                     :height="isVertical && windowVertical ? 110 : 120"
                     fit="coevr"
@@ -67,7 +67,7 @@
             </div>
             <div class="icon" data-swiper-parallax="-100">
                 <van-image
-                    src="https://raex-meta.oss-cn-shenzhen.aliyuncs.com/nft/2022-02-07-01-15-56Liekxwjf.jpg"
+                    src="https://cdn.raex.vip/nft/2022-02-07-01-15-56Liekxwjf.jpg"
                     :width="isVertical && windowVertical ? 110 : 120"
                     :height="isVertical && windowVertical ? 110 : 120"
                     fit="coevr"
@@ -76,7 +76,7 @@
             </div>
             <div class="icon" data-swiper-parallax="-200">
                 <van-image
-                    src="https://raex-meta.oss-cn-shenzhen.aliyuncs.com/nft/2022-02-07-01-15-56Liekxwjf.jpg"
+                    src="https://cdn.raex.vip/nft/2022-02-07-01-15-56Liekxwjf.jpg"
                     :width="isVertical && windowVertical ? 110 : 120"
                     :height="isVertical && windowVertical ? 110 : 120"
                     fit="coevr"

+ 2 - 2
src/views/Mine.vue

@@ -33,7 +33,7 @@
                     />
                     <div class="text">
                         <div class="text1">
-                            <span class="van-ellipsis" style="max-width: 120px;">{{ userInfo.nickname }}</span>
+                            <span class="van-ellipsis" style="max-width: 120px">{{ userInfo.nickname }}</span>
                         </div>
                         <div class="text2">
                             <span> 用户ID:{{ userInfo.id }} </span>
@@ -104,7 +104,7 @@
 
                     <div class="text">
                         <div class="text1" @click="$router.push('/login')">点击登录</div>
-                        <div class="text2" style="padding-bottom: 16px;">立即登录获取精彩服务</div>
+                        <div class="text2" style="padding-bottom: 16px">立即登录获取精彩服务</div>
                     </div>
                 </div>
             </div>

+ 11 - 4
src/views/Store.vue

@@ -41,7 +41,14 @@
                 </div>
             </div>
 
-            <van-tabs v-model:active="type" line-width="16" line-height="2" :ellipsis="false" @click="changeTab">
+            <van-tabs
+                class="darkTabs"
+                v-model:active="type"
+                line-width="16"
+                line-height="2"
+                :ellipsis="false"
+                @click="changeTab"
+            >
                 <van-tab
                     :title="item.label"
                     :name="item.value"
@@ -286,10 +293,10 @@ export default {
         if (this.isLogin) {
             this.$http
                 .post(
-                    '/asset/all',
+                    '/showroom/all',
                     {
                         query: {
-                            type: 'SHOWROOM',
+                            del: false,
                             userId: this.$store.state.userInfo.id
                         }
                     },
@@ -458,7 +465,7 @@ export default {
             color: #fff;
 
             &.active {
-                color: @prim;
+                color: @prim2;
                 font-size: @font3;
                 font-weight: bold;
             }

+ 32 - 1
src/views/Submit.vue

@@ -32,7 +32,7 @@
 
                 <div class="pay" v-if="!($store.state.review && inIos)">
                     <div class="pay-item" @click="payType = item.type" v-for="(item, index) in payInfos" :key="index">
-                        <img :src="item.icon" alt="" />
+                        <img class="icon" :src="item.icon" alt="" />
                         <span>{{ item.name }}</span>
                         <img class="choose-icon" :src="payType === item.type ? icons[1] : icons[0]" alt="" />
                     </div>
@@ -172,7 +172,21 @@ export default {
             } else {
                 this.payChannel = 'wx_lite';
             }
+            this.$http.get('/sysConfig/get/enable_sand_quick').then(res => {
+                // eslint-disable-next-line no-extra-boolean-cast
+                if (res.value === 'true' || res.value === true || res.value === '1') {
+                    this.payType = 'H5PAY';
+                    this.payInfos = [
+                        {
+                            icon: require('@assets/icon_yinlian.png'),
+                            name: '银联快捷付',
+                            type: 'H5PAY'
+                        }
+                    ];
+                }
+            });
         });
+
         this.$toast.loading({
             message: '加载中...',
             forbidClick: true
@@ -414,6 +428,11 @@ export default {
                                 });
                                 this.getOrder(true);
                             }
+                        } else if (this.payType === 'H5PAY') {
+                            document.location.href = resolveUrl(
+                                this.$baseUrl,
+                                '/payOrder/sandQuick?id=' + this.orderId
+                            );
                         }
                     });
                 } else {
@@ -508,6 +527,14 @@ export default {
                                         });
                                     reject();
                                 });
+                        } else if (this.payType === 'H5PAY') {
+                            this.$router.replace({
+                                path: '/submit',
+                                query: {
+                                    orderId: this.orderId
+                                }
+                            });
+                            resolve();
                         }
                     });
                 } else {
@@ -653,6 +680,10 @@ export default {
     align-items: center;
     height: 60px;
     border-bottom: 1px solid @tabBorder;
+    .icon {
+        height: 24px;
+        display: block;
+    }
     span {
         font-size: 14px;
         font-weight: bold;

+ 13 - 14
src/views/account/Register.vue

@@ -54,7 +54,7 @@
                         </van-button>
                     </template>
                 </van-field>
-                <van-field
+                <!-- <van-field
                     name="图形验证码"
                     placeholder="请输入图形验证码"
                     v-model="form.captcha"
@@ -67,7 +67,7 @@
                     <template #button>
                         <van-image @click="getCode" :src="codeImg" width="68" height="32" fit="contain" />
                     </template>
-                </van-field>
+                </van-field> -->
                 <van-field
                     type="password"
                     name="密码"
@@ -139,8 +139,9 @@
 import phone from '../../mixins/phone';
 let fromRoute = null;
 export default {
+    name: 'register',
     mixins: [phone],
-    inject: ['bar'],
+    inject: ['bar', 'setKeeps'],
     data() {
         return {
             active: 'phone',
@@ -149,9 +150,7 @@ export default {
                 password: '',
                 password2: '',
                 code: '',
-                inviteCode: this.$store.state.inviteCode || '',
-                captchaKey: '',
-                captcha: ''
+                inviteCode: this.$store.state.inviteCode || ''
             },
             checked: false,
             showInvite: true,
@@ -163,12 +162,6 @@ export default {
         console.log(to, from);
     },
     methods: {
-        getCode() {
-            this.$http.get('/captcha/get').then(res => {
-                this.form.captchaKey = res.key;
-                this.codeImg = res.image;
-            });
-        },
         sendPhone(e) {
             this.$refs.form.validate('手机号码').then(() => {
                 if (!this.checkWebDriver(e)) {
@@ -218,8 +211,14 @@ export default {
         } else {
             this.showInvite = true;
         }
-
-        this.getCode();
+    },
+    beforeRouteLeave(to, from, next) {
+        if (to.path === '/agreement') {
+            this.setKeeps(['register']);
+        } else {
+            this.setKeeps(['register'], false);
+        }
+        next();
     }
 };
 </script>

+ 7 - 12
src/views/account/Setting.vue

@@ -42,9 +42,9 @@
                     <van-uploader class="avatar" :after-read="afterRead2" result-type="file" />
                 </template>
             </van-cell>
-            <van-cell class="not" title="用户id" :value="userInfo.id" @click="showConsole" />
-            <van-cell class="not" v-if="showTest" title="审核版本" is-link @click="goReview" />
-            <van-cell class="not" v-if="showTest" title="测试app" is-link @click="goTest" />
+            <van-cell class="not" title="用户id" :value="userInfo.id" @click="showConsoleEve" />
+            <van-cell class="not" v-if="showConsole" title="审核版本" is-link @click="goReview" />
+            <van-cell class="not" v-if="showConsole" title="测试app" is-link @click="goTest" />
         </van-cell-group>
 
         <van-action-sheet
@@ -63,7 +63,7 @@ import { ref } from 'vue';
 import eruda from 'eruda';
 export default {
     computed: {
-        ...mapState(['userInfo'])
+        ...mapState(['userInfo', 'showConsole'])
     },
     data() {
         return {
@@ -82,12 +82,6 @@ export default {
             timeout: null
         };
     },
-    mounted() {
-        let showConsole = localStorage.getItem('showConsole');
-        if (showConsole && parseInt(showConsole) > new Date().getTime()) {
-            this.showTest = true;
-        }
-    },
     methods: {
         chooseSex(val) {
             this.updateUser({ sex: val.name });
@@ -114,13 +108,14 @@ export default {
                 });
             });
         },
-        showConsole() {
+        showConsoleEve() {
             this.clickNum++;
             if (this.clickNum >= 10) {
                 localStorage.setItem('showConsole', new Date().getTime() + 60 * 60 * 1000);
                 eruda.init();
                 this.clickNum = 0;
-                this.showTest = true;
+
+                this.$store.commit('setShowConsole', true);
                 return;
             } else {
                 if (this.timeout) {

+ 19 - 17
src/views/activity/Detail1.vue

@@ -1,28 +1,29 @@
 <template>
     <div class="activity">
         <div class="detail" v-html="info.detail"></div>
-        <div class="action-btn" v-if="info.onShelf">
+        <template v-if="info.onShelf">
             <van-notice-bar
                 color="#FF4F50"
                 background="#271515"
                 text="商品为定制化产品,定制周期较长,且不允许退货"
                 z-index="99"
             />
+            <div class="action-btn">
+                <div class="info">
+                    <div class="text1">限量</div>
+                    <div>{{ info.total }}份</div>
+                </div>
+                <div class="info">
+                    <div>剩余 {{ info.stock }}</div>
+                </div>
 
-            <div class="info">
-                <div class="text1">限量</div>
-                <div>{{ info.total }}份</div>
+                <div class="flex1"></div>
+                <van-button :disabled="startTime" type="primary" round v-if="startTime">{{ startTime }}</van-button>
+                <van-button v-else :disabled="isSolded" type="primary" round @click="goBuild">{{
+                    isSolded ? '已售罄' : '立即铸造'
+                }}</van-button>
             </div>
-            <div class="info">
-                <div>剩余 {{ info.stock }}</div>
-            </div>
-
-            <div class="flex1"></div>
-            <van-button :disabled="startTime" type="primary" round v-if="startTime">{{ startTime }}</van-button>
-            <van-button v-else :disabled="isSolded" type="primary" round @click="goBuild">{{
-                isSolded ? '已售罄' : '立即铸造'
-            }}</van-button>
-        </div>
+        </template>
     </div>
 </template>
 
@@ -145,7 +146,7 @@ export default {
 
 .action-btn {
     position: fixed;
-    z-index: 20;
+    z-index: 90;
     background: #181818;
     padding: 9px 16px;
     .flex();
@@ -165,8 +166,9 @@ export default {
 }
 
 /deep/.van-notice-bar {
-    position: absolute;
-    bottom: 56px;
+    position: fixed;
+    bottom: calc(56px + constant(safe-area-inset-bottom));
+    bottom: calc(56px + env(safe-area-inset-bottom));
     left: 0;
     right: 0;
     .van-notice-bar__wrap {

+ 2 - 2
src/views/activity/Submit.vue

@@ -192,7 +192,7 @@ export default {
                 if (this.timer) {
                     clearTimeout(this.timer);
                 }
-                if (res.status === 'PROCESSING' || res.status === 'FINISH' || res.status === 'CANCELLED') {
+                if (res.status && res.status !== 'NOT_PAID') {
                     this.$toast.clear();
                     this.$dialog
                         .alert({
@@ -211,7 +211,7 @@ export default {
                 } else if (next) {
                     this.timer = setTimeout(() => {
                         this.getOrder(next);
-                    }, 1000 );
+                    }, 1000);
                 }
             });
         },

+ 97 - 9
src/views/creator/Detail.vue

@@ -41,8 +41,8 @@
                             <img v-if="info.authStatus === 'SUCCESS'" src="@assets/renzheng_icon_pre.png" alt="" />
                         </div>
                         <div class="text2">
-                            <span>用户ID:{{ info.id }}</span>
-                            <img @click="copy" src="@assets/svgs/copy_icon.svg" alt="" />
+                            <!-- <span>用户ID:{{ info.id }}</span>
+                            <img @click="copy" src="@assets/svgs/copy_icon.svg" alt="" /> -->
                         </div>
                     </div>
                 </div>
@@ -95,8 +95,18 @@
                 <div class="menu-item" @click="changeMenu('BLIND_BOX')" :class="{ active: type === 'BLIND_BOX' }">
                     盲盒类目
                 </div>
+                <div
+                    class="menu-item"
+                    v-if="showRoom"
+                    @click="changeMenu('SHOWROOM')"
+                    :class="{ active: type === 'SHOWROOM' }"
+                >
+                    展厅
+                </div>
                 <div class="flex1"></div>
-                <van-checkbox @change="getData(true)" class="sala" v-model="salable">仅看在售</van-checkbox>
+                <van-checkbox v-if="type !== 'SHOWROOM'" @change="getData(true)" class="sala" v-model="salable"
+                    >仅看在售</van-checkbox
+                >
                 <div
                     class="search"
                     @click="
@@ -120,11 +130,13 @@
                 <van-tab title="全部" name=""></van-tab>
                 <van-tab title="寄售" :name="true"></van-tab>
                 <van-tab title="仅展示" :name="false"></van-tab>
+                <van-tab title="展厅" v-if="showRoom" name="showRoom"></van-tab>
             </van-tabs>
         </van-sticky>
         <van-list
             style="padding-bottom: 100px"
             class="list"
+            :class="{ hallList: isShowType }"
             v-model:loading="loading"
             :finished="finished"
             :immediate-check="false"
@@ -132,7 +144,8 @@
             @load="getData"
         >
             <template v-for="(item, index) in list" :key="item.id">
-                <product-info v-model:info="list[index]"></product-info>
+                <show-info v-if="isShowType" v-model:info="list[index]" list></show-info>
+                <product-info v-else v-model:info="list[index]"></product-info>
             </template>
             <van-empty
                 v-if="empty"
@@ -145,10 +158,11 @@
 
 <script>
 import { mapState } from 'vuex';
+import ShowInfo from '../../components/asset/showInfo.vue';
 import productInfo from '../../components/product/productInfo.vue';
 import list from '../../mixins/list';
 export default {
-    components: { productInfo },
+    components: { productInfo, ShowInfo },
     computed: {
         ...mapState(['userInfo']),
         rankInfo() {
@@ -172,9 +186,22 @@ export default {
             } else {
                 return 'TRANSFER';
             }
+        },
+        isShowType() {
+            if (this.type == 'SHOWROOM' || this.salable === 'showRoom') {
+                return true;
+            }
+            return false;
+        },
+        url() {
+            if (this.isShowType) {
+                return '/showroom/all';
+            }
+            return '/collection/all';
         }
     },
-    inject: ['bar'],
+    name: 'creatorDetail',
+    inject: ['bar', 'setKeeps', 'scrollWrapper', 'changeScroll'],
     mixins: [list],
     data() {
         return {
@@ -185,9 +212,10 @@ export default {
             list: [],
             empty: false,
             hots: [],
-            url: '/collection/all',
             isMinter: true,
-            showMore: false
+            showMore: false,
+            scrollTop: 0,
+            showRoom: false
         };
     },
     mounted() {
@@ -198,10 +226,37 @@ export default {
         }
         this.getInfo();
         this.getHot();
+        this.$http
+            .post(
+                '/showroom/all',
+                {
+                    query: {
+                        del: false,
+                        publish: true,
+                        userId: this.$route.query.id
+                    }
+                },
+                { body: 'json' }
+            )
+            .then(res => {
+                if (!res.empty) {
+                    this.showRoom = true;
+                }
+            });
     },
     methods: {
         beforeData() {
-            if (this.isMinter) {
+            if (this.isShowType) {
+                return {
+                    query: {
+                        userId: this.info.id || this.$route.query.id,
+                        del: false,
+                        status: 'SUCCESS',
+                        publish: true
+                    },
+                    sort: 'id,desc'
+                };
+            } else if (this.isMinter) {
                 return {
                     query: {
                         type: this.type,
@@ -289,6 +344,21 @@ export default {
                 this.isLoading = false;
             });
         }
+    },
+    activated() {
+        this.$nextTick(() => {
+            this.changeScroll(this.scrollTop);
+        });
+    },
+    beforeRouteLeave(to, from, next) {
+        if (to.name === 'productDetail' || to.name === 'hall') {
+            this.scrollTop = this.scrollWrapper.value.scrollTop;
+            this.setKeeps(['creatorDetail']);
+        } else {
+            this.scrollTop = 0;
+            this.setKeeps(['creatorDetail'], false);
+        }
+        next();
     }
 };
 </script>
@@ -454,6 +524,7 @@ export default {
             display: flex;
             align-items: center;
             margin-bottom: 12px;
+            min-height: 24px;
             img {
                 display: block;
                 margin-left: 6px;
@@ -525,4 +596,21 @@ export default {
         font-size: @font1;
     }
 }
+
+.hallList {
+    // background: #272b2e;
+    padding: 16px;
+}
+.showInfo {
+    background-color: #fff;
+    border-radius: 12px;
+    /deep/.text {
+        .text1 {
+            color: #000;
+        }
+    }
+}
+.showInfo + .showInfo {
+    margin-top: 16px;
+}
 </style>

+ 30 - 10
src/views/hall/Detail.vue

@@ -83,7 +83,7 @@
                     </div>
                     <div class="sub-box">
                         <div class="sub" @click="goEdit">
-                            <span>{{ info.introduction || '介绍一下展馆主题吧' }}</span>
+                            <span class="van-multi-ellipsis--l3">{{ info.introduction || '介绍一下展馆主题吧' }}</span>
                             <img src="../../assets/icon-jieshaozhanguan.png" v-if="isMine" alt="" />
                         </div>
                     </div>
@@ -198,6 +198,10 @@ export default {
         }
     },
     mounted() {
+        if (window.cordova && StatusBar && StatusBar.isVisible) {
+            StatusBar.backgroundColorByHexString('#222426');
+            StatusBar.styleLightContent();
+        }
         if (this.$route.query.id) {
             this.roomId = this.$route.query.id;
             this.getDetail();
@@ -271,6 +275,18 @@ export default {
             return this.$http.get('/showroom/get/' + this.roomId).then(res => {
                 this.$toast.clear();
                 this.info = res;
+                this.$nextTick(() => {
+                    if (!this.isMine && res.type === 'COMPANY' && res.status !== 'SUCCESS') {
+                        this.$dialog
+                            .alert({
+                                title: '提示',
+                                message: '当前展厅正在审核中'
+                            })
+                            .then(() => {
+                                this.backPage();
+                            });
+                    }
+                });
                 this.assets =
                     res.collections.map(item => {
                         return {
@@ -283,15 +299,19 @@ export default {
             });
         },
         back() {
-            let _this = this;
-            this.$dialog.confirm({ title: '提示', message: '确定要退出展馆吗?' }).then(() => {
-                this.isEdit = false;
-                if (_this.isMine) {
-                    _this.backPage();
-                } else {
-                    _this.$router.push('/home');
-                }
-            });
+            if (this.isMine && this.isEdit) {
+                let _this = this;
+                this.$dialog.confirm({ title: '提示', message: '确定要退出展馆吗?' }).then(() => {
+                    this.isEdit = false;
+                    if (_this.isMine) {
+                        _this.backPage();
+                    } else {
+                        _this.$router.push('/home');
+                    }
+                });
+            } else {
+                this.backPage();
+            }
         },
         backPage() {
             if (this.$store.state.loginBackUrl) {

+ 95 - 0
src/views/hall/List.vue

@@ -0,0 +1,95 @@
+<template>
+    <van-pull-refresh
+        success-text="加载成功"
+        success-duration="1000"
+        class="list"
+        v-model="isLoading"
+        @refresh="onRefresh"
+    >
+        <div class="list-top">艺术展览</div>
+        <van-sticky offset-top="46">
+            <van-tabs class="darkTabs" @change="changeType" v-model:active="type" shrink>
+                <van-tab title="企业展馆" name="COMPANY"></van-tab>
+                <van-tab title="个人展馆" name="USER"></van-tab>
+            </van-tabs>
+        </van-sticky>
+
+        <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="getData">
+            <template v-for="(item, index) in list" :key="index">
+                <show-info v-model:info="list[index]" list></show-info>
+            </template>
+
+            <van-empty
+                :image="require('@assets/kong_png_yongyoude hei.png')"
+                v-if="empty"
+                description="没有任何藏品哦~"
+            />
+        </van-list>
+    </van-pull-refresh>
+</template>
+
+<script>
+import list from '../../mixins/list';
+import ShowInfo from '../../components/asset/showInfo.vue';
+export default {
+    mixins: [list],
+    components: { ShowInfo },
+    data() {
+        return {
+            list: [],
+            empty: false,
+            url: '/showroom/all',
+            type: 'COMPANY'
+        };
+    },
+    methods: {
+        beforeData() {
+            return {
+                query: {
+                    del: false,
+                    status: 'SUCCESS',
+                    publish: true,
+                    type: this.type
+                },
+                sort: 'sort,desc;id,desc'
+            };
+        },
+        onRefresh() {
+            this.getData(true).then(() => {
+                this.isLoading = false;
+            });
+        },
+        changeType() {
+            this.$nextTick(() => {
+                this.getData(true);
+            });
+        }
+    }
+};
+</script>
+
+<style lang="less" scoped>
+.van-list {
+    padding: 16px;
+}
+.list {
+    background: #272b2e;
+}
+.showInfo {
+    background-color: #373b3e;
+    border-radius: 12px;
+}
+.showInfo + .showInfo {
+    margin-top: 16px;
+}
+
+.list-top {
+    background: #222426;
+    font-size: 16px;
+    font-weight: bold;
+    color: #ffffff;
+    line-height: 24px;
+    padding: 13px 16px;
+    border-bottom: 2px solid #272b2e;
+}
+</style>

+ 5 - 1
src/views/order/ActivityOrders.vue

@@ -55,9 +55,13 @@ export default {
             list: [],
             tabs: [
                 {
-                    status: 'DELIVERY,RECEIVE,AIR_DROP,FINISH',
+                    status: 'DELIVERY,PENDING,RECEIVE,AIR_DROP,FINISH',
                     name: '全部'
                 },
+                {
+                    status: 'PENDING',
+                    name: '待审核'
+                },
                 {
                     status: 'DELIVERY,',
                     name: '待发货'

+ 20 - 1
src/views/product/Detail.vue

@@ -365,6 +365,7 @@ export default {
         Post,
         Tasks
     },
+    inject: ['setKeeps'],
     mixins: [product, coupon],
     name: 'productDetail',
     data() {
@@ -383,7 +384,8 @@ export default {
             couponList: [],
             assignments: [],
             noPay: false,
-            collectionId: 0
+            collectionId: 0,
+            createrId: 0
         };
     },
     computed: {
@@ -668,6 +670,23 @@ export default {
                 this.isLoading = false;
             });
         }
+    },
+    beforeRouteEnter(to, from, next) {
+        console.log(from);
+        if (from.path === '/creatorDetail') {
+            next(vm => {
+                vm.createrId = from.query.id;
+            });
+        } else {
+            next();
+        }
+    },
+    beforeRouteLeave(to, from, next) {
+        console.log(to);
+        if (to.path === '/creatorDetail' && Number(to.query.id) !== Number(this.createrId)) {
+            this.setKeeps(['creatorDetail'], false);
+        }
+        next();
     }
 };
 </script>

+ 18 - 1
src/views/user/BanksAdd.vue

@@ -41,6 +41,7 @@
                 <div class="cancel" @click="show = false">取消</div>
                 <div class="title">输入验证码</div>
                 <div class="phone">已发送到您{{ phoneText }}手机</div>
+                <div class="send" @click="onSubmit">未收到验证码?</div>
                 <van-password-input :value="form.code" :length="4" />
                 <!-- 数字键盘 -->
                 <van-number-keyboard
@@ -80,7 +81,10 @@ export default {
         }
     },
     methods: {
-        onSubmit() {
+        onSubmit(e) {
+            if (!this.checkWebDriver(e)) {
+                return;
+            }
             this.sendMsg(this.form.phone);
             this.form.code = '';
             this.show = true;
@@ -180,6 +184,19 @@ export default {
         top: 0;
     }
 
+    .send {
+        position: absolute;
+        font-size: @font1;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #939599;
+        line-height: 22px;
+        padding: 21px 20px;
+        right: 0;
+        top: 0;
+        text-decoration: underline;
+    }
+
     .phone {
         padding: 12px 0 20px;
         text-align: center;