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

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

panhui 4 лет назад
Родитель
Сommit
0602306e7f
59 измененных файлов с 1371 добавлено и 616 удалено
  1. 1 1
      .env.development
  2. 7 2
      src/App.vue
  3. BIN
      src/assets/close2.png
  4. BIN
      src/assets/icon-huachuyikouji.png
  5. BIN
      src/assets/icon_jiagebai1.png
  6. BIN
      src/assets/icon_yinlian.png
  7. BIN
      src/assets/png-jinzhanshi.png
  8. BIN
      src/assets/png-jishouzhong.png
  9. BIN
      src/assets/png-kaiqi.png
  10. 24 6
      src/components/AppBar.vue
  11. 13 3
      src/components/PhoneVer.vue
  12. 47 0
      src/components/asset/assetInfo.vue
  13. 5 2
      src/components/asset/showInfo.vue
  14. 15 1
      src/components/level/Level.vue
  15. 1 0
      src/components/product/ProductBanner.vue
  16. 1 0
      src/main.js
  17. 43 24
      src/mixins/common.js
  18. 1 0
      src/mixins/orderAct.js
  19. 39 3
      src/mixins/phone.js
  20. 13 4
      src/router/index.js
  21. 7 3
      src/store/index.js
  22. 12 0
      src/styles/app.less
  23. 1 0
      src/styles/common/theme.less
  24. 1 1
      src/styles/font.less
  25. 17 8
      src/views/Discover.vue
  26. 28 14
      src/views/Givesubmit.vue
  27. 0 342
      src/views/Hall.vue
  28. 2 2
      src/views/Home.vue
  29. 14 7
      src/views/Mine.vue
  30. 23 4
      src/views/Store.vue
  31. 37 6
      src/views/Submit.vue
  32. 13 14
      src/views/account/Register.vue
  33. 1 1
      src/views/account/Security.vue
  34. 20 5
      src/views/account/Setting.vue
  35. 1 1
      src/views/account/Verified.vue
  36. 1 1
      src/views/account/VerifiedSucs.vue
  37. 60 48
      src/views/activity/ChooseProduct.vue
  38. 22 18
      src/views/activity/Detail1.vue
  39. 1 1
      src/views/activity/List1.vue
  40. 29 9
      src/views/activity/Submit.vue
  41. 37 12
      src/views/asset/Detail.vue
  42. 5 4
      src/views/creator/Detail.vue
  43. 1 1
      src/views/creator/List.vue
  44. 452 15
      src/views/hall/Detail.vue
  45. 13 5
      src/views/hall/Edit.vue
  46. 21 5
      src/views/hall/List.vue
  47. 36 20
      src/views/hall/Post.vue
  48. 3 1
      src/views/hall/ProductAdd.vue
  49. 229 0
      src/views/hall/ProductChoose.vue
  50. 1 1
      src/views/order/ActivityDetail.vue
  51. 6 2
      src/views/order/ActivityOrders.vue
  52. 1 1
      src/views/order/Detail.vue
  53. 1 1
      src/views/order/Orders.vue
  54. 43 12
      src/views/product/Detail.vue
  55. 1 1
      src/views/product/HopeMarket.vue
  56. 1 1
      src/views/product/List.vue
  57. 1 1
      src/views/product/Search.vue
  58. 18 1
      src/views/user/BanksAdd.vue
  59. 1 1
      src/views/user/Exchange.vue

+ 1 - 1
.env.development

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

+ 7 - 2
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 {
@@ -46,7 +48,7 @@ export default {
         }
     },
     methods: {
-        setKeeps(keep = [], isAdd = true) {
+        setKeeps(keep = [], isAdd = true, isClear = false) {
             let keeps = [...this.keeps];
             if (isAdd) {
                 keeps = [...keeps, ...keep];
@@ -55,6 +57,9 @@ export default {
                     return !keep.includes(item);
                 });
             }
+            if (isClear) {
+                keeps = [];
+            }
             this.keeps = keeps;
         },
         changeScroll(scrollTop, isAnimate = false) {

BIN
src/assets/close2.png


BIN
src/assets/icon-huachuyikouji.png


BIN
src/assets/icon_jiagebai1.png


BIN
src/assets/icon_yinlian.png


BIN
src/assets/png-jinzhanshi.png


BIN
src/assets/png-jishouzhong.png


BIN
src/assets/png-kaiqi.png


+ 24 - 6
src/components/AppBar.vue

@@ -33,23 +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: {
@@ -99,7 +114,10 @@ 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 = '';
         }
     }
 };

+ 47 - 0
src/components/asset/assetInfo.vue

@@ -20,6 +20,25 @@
         <van-image v-else radius="8" width="21.3vw" height="21.3vw" :src="getImg(changeImgs(info.pic))" fit="cover" />
         <div class="number" v-if="info.number && opened">编号:{{ info.number }}</div>
         <img src="../../assets/png-touxing.png" class="touying" alt="" />
+        <template v-if="opened">
+            <!-- <div class="status status1" v-if="info.consignment">寄售中</div> -->
+            <img v-if="info.consignment" class="status-img" src="../../assets/png-jishouzhong.png" alt="" />
+            <img
+                v-else-if="info.status === 'NORMAL' && info.publicShow"
+                class="status-img"
+                src="../../assets/png-jinzhanshi.png"
+                alt=""
+            />
+            <!-- <img v-if="info.consignment" class="status-img" src="../../assets/png-jishouzhong.png" alt="" />
+            <div class="status" v-else-if="info.status === 'NORMAL'">
+                {{ info.publicShow ? '仅展示' : '未展示' }}
+            </div>
+            <div class="status" v-else>
+                {{ getLabelName(info.status, assetStatusOptions) }}
+            </div> -->
+        </template>
+        <img v-else class="status-img" src="../../assets/png-kaiqi.png" alt="" />
+        <!-- <div class="status status2" v-else>待开启</div> -->
         <div class="content">
             <div class="name van-ellipsis">
                 {{ !opened ? '盲盒待开启' : info.name }}
@@ -228,4 +247,32 @@ export default {
     top: 16vw;
     z-index: 0;
 }
+.status-img {
+    width: 22px;
+    height: 14px;
+    position: absolute;
+    left: 0;
+    top: 0;
+    z-index: 3;
+}
+.status {
+    background-color: #fff;
+    font-size: 12px;
+    font-weight: bold;
+    color: #939599;
+    position: absolute;
+    top: 4px;
+    left: 3px;
+    line-height: 14px;
+    border-radius: 9px;
+    z-index: 3;
+    padding: 0 10px;
+    transform: scaleX(0.8);
+    &.status1 {
+        color: #3ab200;
+    }
+    &.status2 {
+        color: #ff4f50;
+    }
+}
 </style>

+ 5 - 2
src/components/asset/showInfo.vue

@@ -22,12 +22,15 @@
                     fit="cover"
                 />
                 <div class="users-text">
-                    <div class="name">
+                    <div class="name" v-if="info.name">
+                        <div>{{ info.name }}</div>
+                    </div>
+                    <div class="name" v-else>
                         <div>{{ info.nickname }}</div>
                         <div>的展馆</div>
                     </div>
                     <div class="sub">
-                        <span>{{ info.introduction }}</span>
+                        <span class="van-multi-ellipsis--l3">{{ info.introduction }}</span>
                     </div>
                 </div>
             </div>

+ 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/components/product/ProductBanner.vue

@@ -27,6 +27,7 @@
                         playsinline="true"
                         webkit-playsinline="true"
                         autoplay
+                        loop
                     >
                         您的浏览器不支持 video 标签。
                     </video>

+ 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);
 

+ 43 - 24
src/mixins/common.js

@@ -46,13 +46,14 @@ export default {
                     });
             }
         },
-        updateFile(e, size = 2000) {
+        updateFile(e, type, size = 1000) {
             const formData = new FormData();
             formData.append('file', e.file, e.file.name);
-            formData.append('compress', true);
+            formData.append('type', type);
             formData.append('width', size);
             formData.append('height', size);
-            return http.axios.post('/upload/file', formData).then(res => {
+            formData.append('size', size);
+            return http.axios.post('/upload/user', formData).then(res => {
                 return Promise.resolve(res.data);
             });
         },
@@ -103,27 +104,42 @@ export default {
             return (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) / Math.pow(10, m);
         },
         checkBank() {
-            return this.$http
-                .get('/user/myBankCard')
-                .then(res => {
-                    if (res.length > 0) {
-                        return Promise.resolve();
-                    } else {
-                        return Promise.reject();
-                    }
-                })
-                .catch(() => {
-                    return this.$dialog
-                        .confirm({
-                            title: '银行卡未绑定',
-                            message: '您的账户还未绑定银行卡',
-                            confirmButtonText: '前往绑定'
-                        })
-                        .then(() => {
-                            this.$router.push('/mineBanks');
-                            return Promise.reject();
-                        });
-                });
+            // return this.$http
+            //     .get('/user/myBankCard')
+            //     .then(res => {
+            //         if (res.length > 0) {
+            //             return Promise.resolve();
+            //         } else {
+            //             return Promise.reject();
+            //         }
+            //     })
+            //     .catch(() => {
+            //         return this.$dialog
+            //             .confirm({
+            //                 title: '银行卡未绑定',
+            //                 message: '您的账户还未绑定银行卡',
+            //                 confirmButtonText: '前往绑定'
+            //             })
+            //             .then(() => {
+            //                 this.$router.push('/mineBanks');
+            //                 return Promise.reject();
+            //             });
+            //     });
+            return (this.$store.state.userInfo || {}).settleAccountId != undefined
+                ? Promise.resolve()
+                : this.$dialog
+                      .confirm({
+                          title: '银行卡未绑定',
+                          message: '您的账户还未绑定银行卡',
+                          confirmButtonText: '前往绑定'
+                      })
+                      .then(() => {
+                          this.$router.push('/mineBanks');
+                          return Promise.reject();
+                      })
+                      .catch(() => {
+                          return Promise.reject();
+                      });
         },
         checkAuth() {
             if (this.authStatus === '已认证') {
@@ -206,6 +222,9 @@ export default {
             } 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);
                 });

+ 13 - 4
src/router/index.js

@@ -40,14 +40,12 @@ function jsapiSign() {
                             title: '第九空间',
                             desc: '全球首个基于区块链的游戏资产集换中心',
                             link: location.origin + '/9th',
-                            imgUrl:
-                                'https://9space-2021.oss-cn-shenzhen.aliyuncs.com/nft/2021-11-05-15-58-30YwqLzMjy.jpg'
+                            imgUrl: 'https://9space-2021.oss-cn-shenzhen.aliyuncs.com/nft/2021-11-05-15-58-30YwqLzMjy.jpg'
                         });
                         wx.updateTimelineShareData({
                             title: '第九空间-全球首个基于区块链的游戏资产集换中心',
                             link: location.origin + '/9th',
-                            imgUrl:
-                                'https://9space-2021.oss-cn-shenzhen.aliyuncs.com/nft/2021-11-05-15-58-30YwqLzMjy.jpg'
+                            imgUrl: 'https://9space-2021.oss-cn-shenzhen.aliyuncs.com/nft/2021-11-05-15-58-30YwqLzMjy.jpg'
                         });
                     });
                 })
@@ -152,6 +150,17 @@ const routes = [
             tabColor: '#181818'
         }
     },
+    {
+        path: '/productChoose',
+        name: 'productChoose',
+        component: () => import('../views/hall/ProductChoose.vue'),
+        meta: {
+            pageType: Page.Every,
+            title: '第九空间',
+            isHall: true,
+            tabColor: '#181818'
+        }
+    },
     {
         path: '/login',
         name: 'userLogin',

+ 7 - 3
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,12 +61,15 @@ export default createStore({
         },
         setUsedBuy(state, usedBuy) {
             state.usedBuy = usedBuy;
+        },
+        setShowConsole(state, showConsole) {
+            state.showConsole = showConsole;
         }
     },
     actions: {
-        getUserInfo(context) {
+        getUserInfo(context, refresh) {
             return http.http
-                .get('/user/my')
+                .get('/user/my', { refresh })
                 .then(res => {
                     http.axios.defaults.headers.common['X-Username'] = res.id;
                     context.commit('setUserInfo', res);

+ 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 {

+ 17 - 8
src/views/Discover.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="discover"
         v-model="isLoading"
         @refresh="onRefresh"
@@ -34,25 +34,30 @@
         </swiper>
 
         <div class="menu">
-            <router-link class="menu-item" :to="{ path: '/hallList' }">
+            <!-- <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="" />
                     <span>艺术展览</span>
                 </div>
                 <div class="text2">环球捕猎顶级艺术展览,尽在绿洲宇宙!</div>
                 <img src="../assets/yishuzhanlan-diwen.png" alt="" class="menu-bg" />
-            </router-link>
-            <a
+            </div>
+            <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">
@@ -102,7 +107,7 @@
                 ></van-tab>
             </van-tabs>
             <van-list
-                style="padding-bottom: 100px;"
+                style="padding-bottom: 100px"
                 class="box-list"
                 v-model:loading="loading"
                 :finished="finished"
@@ -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;

+ 28 - 14
src/views/Givesubmit.vue

@@ -48,7 +48,7 @@
 
             <div class="pay">
                 <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" :src="payType === item.type ? icons[1] : icons[0]" alt="" />
                 </div>
@@ -164,6 +164,20 @@ export default {
                 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.passFn();
         });
     },
@@ -231,26 +245,17 @@ export default {
                                 this.$nextTick(() => {
                                     if (this.payType === 'ALIPAY') {
                                         // document.location.replace(
-                                        //     resolveUrl(this.$baseUrl, 'payOrder/gift/alipay?id=' + res.id)
+                                        //     resolveUrl(this.$baseUrl, 'payOrder/v2/gift/alipay?id=' + res.id)
                                         // );
                                         if (this.inWeixin) {
                                             document.location.replace(
-                                                resolveUrl(this.$baseUrl, '/payOrder/gift/alipay_wx?id=' + res.id)
+                                                resolveUrl(this.$baseUrl, '/payOrder/v2/gift/alipay_wx?id=' + res.id)
                                             );
                                         } else {
                                             this.$http
-                                                .get(
-                                                    `/payOrder/gift/${this.inApp ? 'alipay_app' : 'alipay_h5'}?id=${
-                                                        res.id
-                                                    }`
-                                                )
+                                                .get(`/payOrder/v2/gift/alipay?id=${res.id}`)
                                                 .then(res => {
-                                                    this.hrefUrl =
-                                                        'alipays://platformapi/startapp?saId=10000007&qrcode=' + res;
-                                                    // window.open(
-                                                    //     'alipays://platformapi/startapp?saId=10000007&qrcode=' + res,
-                                                    //     '_blank'
-                                                    // );
+                                                    this.hrefUrl = res;
                                                     this.$nextTick(() => {
                                                         document.getElementById('pay').click();
                                                     });
@@ -303,6 +308,11 @@ export default {
                                                 resolveUrl(this.$baseUrl, 'payOrder/gift/weixin_h5?id=' + res.id)
                                             );
                                         }
+                                    } else if (this.payType === 'H5PAY') {
+                                        document.location.href = resolveUrl(
+                                            this.$baseUrl,
+                                            '/payOrder/v2/gift/sandQuick?id=' + this.orderId
+                                        );
                                     }
                                 });
                             })
@@ -525,6 +535,10 @@ export default {
     align-items: center;
     height: 60px;
     // border-top: 1px solid #202122;
+    .icon {
+        height: 24px;
+        display: block;
+    }
     span {
         font-size: 14px;
         font-weight: bold;

+ 0 - 342
src/views/Hall.vue

@@ -1,342 +0,0 @@
-<template>
-    <swiper
-        :style="{
-            '--swiper-navigation-color': '#fff',
-            '--swiper-pagination-color': '#fff'
-        }"
-        :speed="600"
-        :parallax="true"
-        :slidesPerView="'auto'"
-        class="mySwiper"
-        :class="{ horizontal: !isVertical, windowHorizontal: !windowVertical }"
-        :direction="isVertical ? 'horizontal' : 'vertical'"
-    >
-        <div class="top"></div>
-        <div class="bottom" @click="isVertical = !isVertical">
-            <div class="btn">
-                <img src="../assets/icon-qiehuanhengping.png" alt="" />
-                <span>切换{{ isVertical || windowVertical ? '横屏' : '竖屏' }}</span>
-            </div>
-        </div>
-        <div class="parallax-bg" data-swiper-parallax="-50%">
-            <div
-                class="parallax-bg-img"
-                :style="{
-                    'background-image': `url(${require('../assets/zhanguan-shu.jpg')})`
-                }"
-            ></div>
-        </div>
-        <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"
-                    :width="isVertical && windowVertical ? 110 : 120"
-                    :height="isVertical && windowVertical ? 110 : 120"
-                    fit="coevr"
-                    radius="8"
-                />
-            </div>
-            <div data-swiper-parallax="-200">
-                <div class="name">
-                    <div>奶盖</div>
-                    <div>的展馆</div>
-                </div>
-            </div>
-            <div class="sub-box" data-swiper-parallax="-100">
-                <div class="sub">介绍一下展馆主题吧</div>
-            </div>
-        </swiper-slide>
-        <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"
-                    :width="isVertical && windowVertical ? 110 : 120"
-                    :height="isVertical && windowVertical ? 110 : 120"
-                    fit="coevr"
-                    radius="8"
-                />
-            </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"
-                    :width="isVertical && windowVertical ? 110 : 120"
-                    :height="isVertical && windowVertical ? 110 : 120"
-                    fit="coevr"
-                    radius="8"
-                />
-            </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"
-                    :width="isVertical && windowVertical ? 110 : 120"
-                    :height="isVertical && windowVertical ? 110 : 120"
-                    fit="coevr"
-                    radius="8"
-                />
-            </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"
-                    :width="isVertical && windowVertical ? 110 : 120"
-                    :height="isVertical && windowVertical ? 110 : 120"
-                    fit="coevr"
-                    radius="8"
-                />
-            </div>
-        </swiper-slide>
-    </swiper>
-</template>
-
-<script>
-import { Swiper, SwiperSlide } from 'swiper/vue';
-
-import 'swiper/swiper.min.css';
-import 'swiper/swiper-bundle.min.css';
-// import required modules
-import SwiperCore, { Pagination, Parallax, Navigation } from 'swiper';
-SwiperCore.use([Pagination, Parallax, Navigation]);
-import { watch, ref, computed } from 'vue';
-import { useWindowSize } from '@vant/use';
-export default {
-    components: {
-        Swiper,
-        SwiperSlide
-    },
-    setup() {
-        const { width, height } = useWindowSize();
-
-        console.log(width.value); // -> 窗口宽度
-        console.log(height.value); // -> 窗口高度
-
-        const windowVertical = computed(() => {
-            if (width.value > height.value) {
-                return false;
-            } else {
-                return true;
-            }
-        });
-
-        return { windowVertical };
-    },
-    data() {
-        return {
-            isVertical: true
-        };
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.user {
-    width: 128px;
-    padding: 6.3vh 100px 0 30px;
-    .icon {
-        .van-image {
-            transition: transform ease-in-out 0.3s;
-        }
-    }
-
-    .name {
-        font-size: 24px;
-        font-weight: bold;
-        color: #ffffff;
-        line-height: 30px;
-        padding-top: 6px;
-    }
-    .sub {
-        padding-top: 20px;
-        font-size: 12px;
-        color: rgba(255, 255, 255, 0.6);
-        line-height: 17px;
-    }
-}
-
-.swiper {
-    width: 100%;
-    height: 100%;
-    background: #000;
-}
-
-.parallax-bg {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 500%;
-    height: 100%;
-    .parallax-bg-img {
-        width: 100%;
-        height: 100%;
-        -webkit-background-size: contain;
-        background-size: contain;
-        transition: transform ease-in-out 0.3s;
-    }
-}
-
-.imgs {
-    width: 100vw;
-    height: calc(25.2vh + 230px);
-    box-sizing: border-box;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    flex-wrap: wrap;
-    .icon {
-        padding: 6.3vh 0;
-        img {
-            width: 110px;
-            height: 110px;
-            display: block;
-        }
-        .van-image {
-            transition: transform ease-in-out 0.3s;
-        }
-    }
-}
-
-.bottom {
-    position: absolute;
-    bottom: 120px;
-    left: 30px;
-    z-index: 20;
-    .btn {
-        transition: transform ease-in-out 0.3s;
-    }
-    img {
-        width: 48px;
-        height: 48px;
-        display: block;
-    }
-    span {
-        font-size: 12px;
-        color: #ffffff;
-        line-height: 17px;
-        margin-top: 4px;
-    }
-}
-
-.mySwiper {
-    padding-top: 7.72vh;
-}
-/deep/.swiper-wrapper {
-    height: calc(100vh - 7.72vh);
-}
-
-.windowHorizontal {
-    padding-top: 7.72vw;
-    .user {
-        width: 298px;
-        height: 120px;
-        display: flex;
-        flex-direction: row;
-        position: relative;
-        padding: 6.3vh 60px;
-
-        .sub-box {
-            position: absolute;
-            bottom: 60px;
-            left: 190px;
-            .sub {
-                padding-top: 0;
-            }
-        }
-        .name {
-            margin-left: 10px;
-            padding-top: 0;
-        }
-    }
-    .imgs {
-        box-sizing: border-box;
-        height: calc(12.6vh + 120px);
-        .icon {
-            padding: 6.3vh;
-        }
-    }
-
-    /deep/.swiper-wrapper {
-        height: calc(100vh - 7.72vw);
-    }
-
-    .bottom {
-        bottom: 60px;
-        left: 60px;
-    }
-}
-
-.horizontal {
-    padding-top: 0;
-    padding-right: 7.72vh;
-    .parallax-bg {
-        width: 100%;
-        height: 600%;
-    }
-    .parallax-bg-img {
-        width: 600vh;
-        height: 100vw;
-        transform: rotate(90deg) translateX(-100vw);
-        transform-origin: left bottom;
-    }
-
-    .imgs {
-        width: calc(12.6vw + 120px);
-        height: 100vh;
-        box-sizing: border-box;
-        .icon {
-            padding: 6.3vw;
-        }
-    }
-
-    .user {
-        padding: 60px 6.3vw 0 30px;
-        height: 298px;
-        width: 120px;
-        .van-image {
-            transform: rotate(90deg);
-        }
-        .name {
-            width: 168px;
-            padding-top: 0;
-            transform: rotate(90deg) translate(-50px, -50px);
-            transform-origin: left bottom;
-        }
-        .sub {
-            width: 168px;
-            padding-top: 0;
-            transform-origin: left bottom;
-            transform: rotate(90deg) translate(-65px, 0px);
-        }
-    }
-
-    .imgs {
-        justify-content: space-around;
-        .van-image {
-            transform: rotate(90deg);
-        }
-    }
-
-    /deep/.swiper-wrapper {
-        height: 100vh;
-        align-items: flex-end;
-    }
-
-    .bottom {
-        top: 60px;
-        left: 49px;
-        .btn {
-            transform: rotate(90deg) translateX(-10px);
-        }
-    }
-    // .user {
-    //     padding: calc(21vw - 110px) 100px 0 30px;
-    // }
-    // /deep/.swiper-wrapper {
-    //     height: calc(100vw - 20vw);
-    // }
-    // &.mySwiper {
-    //     padding-top: 20vw;
-    // }
-    // .imgs {
-    //     height: 50vw;
-    // }
-}
-</style>

+ 2 - 2
src/views/Home.vue

@@ -2,7 +2,7 @@
     <van-pull-refresh
         class="home"
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         v-model="isLoading"
         :head-height="80"
         @refresh="onRefresh"
@@ -342,7 +342,7 @@ export default {
         this.$el.parentNode.childNodes[1].className =
             this.$el.parentNode.childNodes[1].className.replace(/ bgBack/, '') + ' bgBack';
         console.log(to);
-        if (!to.meta.menuPage) {
+        if (!to.meta.menuPage && to.path !== '/agreement') {
             this.scrollTop = this.scrollWrapper.value.scrollTop;
             this.setKeeps(['index', 'home']);
         } else {

+ 14 - 7
src/views/Mine.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="mine"
         v-model="isLoading"
         @refresh="onRefresh"
@@ -10,7 +10,7 @@
             <van-image
                 width="100%"
                 height="52vw"
-                :src="userInfo.bg || require('@assets/creatorBg.png')"
+                :src="userInfo.bg ? userInfo.bg + '?r=' + refreshFlag : require('@assets/creatorBg.png')"
                 loading-icon=""
                 fit="cover"
                 class="top-img"
@@ -26,7 +26,11 @@
                         round
                         width="150"
                         height="150"
-                        :src="userInfo.avatar || require('@assets/img_default_photo.png')"
+                        :src="
+                            userInfo.avatar
+                                ? userInfo.avatar + '?r=' + refreshFlag
+                                : require('@assets/img_default_photo.png')
+                        "
                         fit="cover"
                         :class="{ activeAvatar: isLogin && userInfo.useCollectionPic }"
                         @click="$router.push('/setting')"
@@ -206,7 +210,8 @@ export default {
             shareProduct: {
                 openQuota: false
             },
-            shareMoney: 0
+            shareMoney: 0,
+            refreshFlag: Number(localStorage.getItem('refreshFlag') || '0')
         };
     },
     components: { Level, Post },
@@ -217,7 +222,7 @@ export default {
         this.getInit();
     },
     methods: {
-        getInit() {
+        getInit(refresh) {
             if (this.isLogin) {
                 this.$http
                     .post(
@@ -249,7 +254,7 @@ export default {
                 StatusBar.styleLightContent();
             }
 
-            return this.$store.dispatch('getUserInfo');
+            return this.$store.dispatch('getUserInfo', refresh);
         },
         copy() {
             this.$copyText(this.userInfo.id).then(
@@ -315,7 +320,9 @@ export default {
                 });
         },
         onRefresh() {
-            return this.getInit()
+            this.refreshFlag++;
+            localStorage.setItem('refreshFlag', this.refreshFlag);
+            return this.getInit(true)
                 .then(() => {
                     this.isLoading = false;
                 })

+ 23 - 4
src/views/Store.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="discover"
         v-model="isLoading"
         @refresh="onRefresh"
@@ -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"
@@ -170,6 +177,11 @@ export default {
                             label: '仅展示',
                             value: 'NORMAL',
                             type: ''
+                        },
+                        {
+                            label: '未展示',
+                            value: 'NOT_NORMAL',
+                            type: ''
                         }
                     ];
                 } else {
@@ -290,7 +302,7 @@ export default {
                     {
                         query: {
                             del: false,
-                            userId: this.$route.query.id
+                            userId: this.$store.state.userInfo.id
                         }
                     },
                     { body: 'json' }
@@ -386,6 +398,13 @@ export default {
                         consignment: false
                     };
                 }
+                if (this.type === 'NOT_NORMAL') {
+                    form = {
+                        ...form,
+                        publicShow: false,
+                        consignment: false
+                    };
+                }
                 if (this.type === 'ON_SALE') {
                     form = {
                         ...form,
@@ -458,7 +477,7 @@ export default {
             color: #fff;
 
             &.active {
-                color: @prim;
+                color: @prim2;
                 font-size: @font3;
                 font-weight: bold;
             }

+ 37 - 6
src/views/Submit.vue

@@ -18,7 +18,7 @@
                     <div class="text1">作品费用</div>
                     <div class="text2">¥{{ info.price }}</div>
                 </div>
-                <div class="info" v-if="!$store.state.review">
+                <div class="info" v-if="!($store.state.review && inIos)">
                     <div class="text1">GAS费用</div>
                     <div class="text2">¥{{ gas }}</div>
                 </div>
@@ -30,9 +30,9 @@
 
                 <!-- <van-field type="text" label="订单留言" placeholder="选填" v-model="message" /> -->
 
-                <div class="pay" v-if="!$store.state.review">
+                <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
@@ -373,7 +387,7 @@ export default {
                         } else if (this.payType === 'ALIPAY') {
                             if (this.inWeixin) {
                                 document.location.replace(
-                                    resolveUrl(this.$baseUrl, '/payOrder/alipay_wx?id=' + this.orderId)
+                                    resolveUrl(this.$baseUrl, '/payOrder/v2/alipay_wx?id=' + this.orderId)
                                 );
                             } else {
                                 this.$nextTick(() => {
@@ -414,6 +428,11 @@ export default {
                                 });
                                 this.getOrder(true);
                             }
+                        } else if (this.payType === 'H5PAY') {
+                            document.location.href = resolveUrl(
+                                this.$baseUrl,
+                                '/payOrder/v2/sandQuick?id=' + this.orderId
+                            );
                         }
                     });
                 } else {
@@ -437,10 +456,10 @@ export default {
                                 resolve();
                             } else {
                                 this.$http
-                                    .get(`/payOrder/${this.inApp ? 'alipay_app' : 'alipay_h5'}?id=${this.orderId}`)
+                                    .get(`/payOrder/v2/alipay?id=${this.orderId}`)
                                     .then(res => {
                                         this.$toast.clear();
-                                        this.hrefUrl = 'alipays://platformapi/startapp?saId=10000007&qrcode=' + res;
+                                        this.hrefUrl = res;
                                         resolve();
                                     })
                                     .catch(e => {
@@ -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>

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

@@ -4,7 +4,7 @@
         <van-cell-group :border="false">
             <van-cell title="修改登录密码" :to="{ path: '/forget' }" is-link />
             <van-cell title="修改支付密码" :to="{ path: '/tradingPassword' }" is-link />
-            <van-cell title="修改手机号" :to="{ path: '/changePhone' }" is-link />
+            <!-- <van-cell title="修改手机号" :to="{ path: '/changePhone' }" is-link /> -->
             <van-cell title="注销账号" @click="cancel" is-link />
         </van-cell-group>
         <div class="logout">

+ 20 - 5
src/views/account/Setting.vue

@@ -42,7 +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" 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
@@ -61,7 +63,12 @@ import { ref } from 'vue';
 import eruda from 'eruda';
 export default {
     computed: {
-        ...mapState(['userInfo'])
+        ...mapState(['userInfo', 'showConsole'])
+    },
+    data() {
+        return {
+            showTest: false
+        };
     },
     setup() {
         //性别
@@ -84,7 +91,7 @@ export default {
                 message: '加载中...',
                 forbidClick: true
             });
-            this.updateFile(e, 500).then(img => {
+            this.updateFile(e, 'avatar', 300).then(img => {
                 this.updateUser({ avatar: img, useCollectionPic: false }).then(res => {
                     this.$toast.clear();
                 });
@@ -95,18 +102,20 @@ export default {
                 message: '加载中...',
                 forbidClick: true
             });
-            this.updateFile(e, 2000).then(img => {
+            this.updateFile(e, 'bg', 1200).then(img => {
                 this.updateUser({ bg: img }).then(res => {
                     this.$toast.clear();
                 });
             });
         },
-        showConsole() {
+        showConsoleEve() {
             this.clickNum++;
             if (this.clickNum >= 10) {
                 localStorage.setItem('showConsole', new Date().getTime() + 60 * 60 * 1000);
                 eruda.init();
                 this.clickNum = 0;
+
+                this.$store.commit('setShowConsole', true);
                 return;
             } else {
                 if (this.timeout) {
@@ -116,6 +125,12 @@ export default {
                     this.clickNum = 0;
                 }, 1000);
             }
+        },
+        goReview() {
+            window.location.href = 'https://www.raex.vip/9th/home?review=true';
+        },
+        goTest() {
+            window.location.href = 'https://test.raex.vip/9th/home';
         }
     }
 };

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

@@ -182,7 +182,7 @@ export default {
                 });
         },
         afterRead(file, e) {
-            this.updateFile(file).then(img => {
+            this.updateFile(file, 'id', 1000).then(img => {
                 this.form[e.name] = img;
             });
         },

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

@@ -263,7 +263,7 @@ export default {
                 });
         },
         afterRead(file, e) {
-            this.updateFile(file).then(img => {
+            this.updateFile(file, 'id', 1000).then(img => {
                 this.form[e.name] = img;
             });
         },

+ 60 - 48
src/views/activity/ChooseProduct.vue

@@ -16,47 +16,54 @@
                 </div>
             </div>
         </van-sticky>
+        <van-pull-refresh
+            success-text="刷新成功"
+            success-duration="500"
+            class="discover"
+            v-model="refreshing"
+            @refresh="onRefresh"
+        >
+            <van-empty
+                v-if="empty"
+                description="没有符合兑换的藏品哦~"
+                :image="require('../../assets/kong_png_yongyoude  (1).png')"
+            />
 
-        <van-empty
-            v-if="empty"
-            description="没有符合兑换的藏品哦~"
-            :image="require('../../assets/kong_png_yongyoude  (1).png')"
-        />
-
-        <div class="list">
-            <div
-                class="product"
-                :class="{ active: chooseIds.includes(item.id) }"
-                v-for="item in list"
-                :key="item.id"
-                @click="choose(item.id)"
-            >
-                <img
-                    class="icon"
-                    :src="
-                        chooseIds.includes(item.id)
-                            ? require('../../assets/icon_gouxuan_pre.png')
-                            : require('../../assets/icon_gouxuan_huise.png')
-                    "
-                    alt=""
-                />
-                <div class="product-content">
-                    <van-image
-                        width="60"
-                        height="60"
-                        radius="6"
-                        :src="getImg(changeImgs(item.pic, 600))"
-                        fit="contain"
+            <div class="list">
+                <div
+                    class="product"
+                    :class="{ active: chooseIds.includes(item.id) }"
+                    v-for="item in list"
+                    :key="item.id"
+                    @click="choose(item.id)"
+                >
+                    <img
+                        class="icon"
+                        :src="
+                            chooseIds.includes(item.id)
+                                ? require('../../assets/icon_gouxuan_pre.png')
+                                : require('../../assets/icon_gouxuan_huise.png')
+                        "
+                        alt=""
                     />
-                    <div class="product-info">
-                        <div class="text1 van-ellipsis">{{ item.name }}</div>
-                        <div class="flex1"></div>
-                        <div class="text2" v-if="item.category">{{ item.category }}</div>
-                        <div class="text2" v-if="item.number">编号:{{ item.number }}</div>
+                    <div class="product-content">
+                        <van-image
+                            width="60"
+                            height="60"
+                            radius="6"
+                            :src="getImg(changeImgs(item.pic, 600))"
+                            fit="contain"
+                        />
+                        <div class="product-info">
+                            <div class="text1 van-ellipsis">{{ item.name }}</div>
+                            <div class="flex1"></div>
+                            <div class="text2" v-if="item.category">{{ item.category }}</div>
+                            <div class="text2" v-if="item.number">编号:{{ item.number }}</div>
+                        </div>
                     </div>
                 </div>
             </div>
-        </div>
+        </van-pull-refresh>
 
         <div class="tips" v-if="showTips">当前可兑换藏品不足</div>
 
@@ -80,7 +87,8 @@ export default {
             needChoose: 3,
             search: '',
             activityId: 0,
-            info: {}
+            info: {},
+            refreshing: false
         };
     },
     computed: {
@@ -113,24 +121,22 @@ export default {
         }
     },
     methods: {
-        getList() {
+        getList(refresh, done) {
             this.$http
-                .post(
-                    '/asset/all',
-                    {
-                        page: 0,
-                        size: 999,
-                        query: { status: 'NORMAL,TRADING,GIFTING', userId: this.$store.state.userInfo.id },
-                        search: this.search
-                    },
-                    { body: 'json' }
-                )
+                .get('/asset/assetsForMint', {
+                    page: 0,
+                    size: 999,
+                    mintActivityId: this.activityId,
+                    refresh
+                })
                 .then(res => {
                     this.list = res.content;
                     this.empty = res.empty;
+                    done && done();
                 })
                 .then(() => {
                     this.$toast.clear();
+                    done && done();
                 });
         },
         choose(id) {
@@ -180,6 +186,12 @@ export default {
                     }
                 });
             });
+        },
+        onRefresh() {
+            this.refreshing = true;
+            this.getList(true, () => {
+                this.refreshing = false;
+            });
         }
     }
 };

+ 22 - 18
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>
 
@@ -46,7 +47,9 @@ export default {
     },
     methods: {
         goBuild() {
-            this.$router.push('/chooseProduct?name=' + this.info.collectionName + '&activityId=' + this.info.id);
+            this.$router.push(
+                '/chooseProduct?name=' + encodeURIComponent(this.info.collectionName) + '&activityId=' + this.info.id
+            );
         },
         getProduct(init = false) {
             this.$http.get('/mintActivity/get/' + this.$route.query.id).then(res => {
@@ -143,7 +146,7 @@ export default {
 
 .action-btn {
     position: fixed;
-    z-index: 20;
+    z-index: 90;
     background: #181818;
     padding: 9px 16px;
     .flex();
@@ -163,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 {

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

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="search"
         v-model="isLoading"
         :head-height="80"

+ 29 - 9
src/views/activity/Submit.vue

@@ -35,7 +35,7 @@
 
         <div class="pay" v-if="!$store.state.review">
             <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>
@@ -130,6 +130,7 @@ export default {
             // console.log(id);
             this.addressInfo = info;
         });
+
         if (this.$route.query.assets) {
             this.assets = this.$route.query.assets;
             this.activityId = this.$route.query.activityId;
@@ -180,6 +181,20 @@ 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'
+                        }
+                    ];
+                }
+            });
         });
     },
     methods: {
@@ -192,7 +207,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({
@@ -268,18 +283,14 @@ export default {
                             } else if (this.payType === 'ALIPAY') {
                                 if (this.inWeixin) {
                                     document.location.replace(
-                                        resolveUrl(this.$baseUrl, '/payOrder/mint/alipay_wx?id=' + res.id)
+                                        resolveUrl(this.$baseUrl, '/payOrder/v2/mint/alipay_wx?id=' + res.id)
                                     );
                                 } else {
                                     this.$http
-                                        .get(`/payOrder/mint/${this.inApp ? 'alipay_app' : 'alipay_h5'}?id=${res.id}`)
+                                        .get(`/payOrder/v2/mint/alipay?id=${res.id}`)
                                         .then(res => {
                                             this.$toast.clear();
-                                            this.hrefUrl = 'alipays://platformapi/startapp?saId=10000007&qrcode=' + res;
-                                            // window.open(
-                                            //     'alipays://platformapi/startapp?saId=10000007&qrcode=' + res,
-                                            //     '_blank'
-                                            // );
+                                            this.hrefUrl = res;
                                             this.$nextTick(() => {
                                                 document.getElementById('pay').click();
                                             });
@@ -357,6 +368,11 @@ export default {
                                     .catch(e => {
                                         this.$toast(e.error || '支付失败请稍后再试');
                                     });
+                            } else if (this.payType === 'H5PAY') {
+                                document.location.href = resolveUrl(
+                                    this.$baseUrl,
+                                    '/payOrder/v2/mint/sandQuick?id=' + this.orderId
+                                );
                             }
                         });
                     } else {
@@ -465,6 +481,10 @@ export default {
     align-items: center;
     height: 48px;
     border-bottom: 1px solid @tabBorder;
+    .icon {
+        height: 24px;
+        display: block;
+    }
     span {
         font-size: 14px;
         font-weight: bold;

+ 37 - 12
src/views/asset/Detail.vue

@@ -2,7 +2,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="detail"
         v-model="isLoading"
         :head-height="80"
@@ -605,6 +605,7 @@ export default {
                 if (res.status == 'GIFTED' || res.status === 'TRANSFERRED') {
                     this.emitter.emit('refreash');
                 }
+                // res.source = 'GIFT';
                 this.info = res;
 
                 if (res.orderId) {
@@ -646,21 +647,43 @@ export default {
                 });
                 console.log(init);
                 if (init && !this.$store.state.reviewPay) {
-                    if (this.info.holdDays) {
-                        this.holdDays = Number(this.info.holdDays);
-                        this.getTime();
-                    } else {
-                        this.$http.get('/sysConfig/get/hold_days').then(res => {
-                            this.holdDays = Number(res.value);
-                            // this.holdDays = 10;
-                            this.getTime();
-                        });
-                    }
+                    this.setHolds();
                 } else {
                     this.$toast.clear();
                 }
             });
         },
+        setHolds() {
+            let holdDays = 0;
+            let _this = this;
+
+            function getHolds() {
+                if (_this.info.holdDays) {
+                    holdDays = Number(_this.info.holdDays);
+                    return Promise.resolve();
+                } else {
+                    return _this.$http.get('/sysConfig/get/hold_days').then(res => {
+                        holdDays = Number(res.value);
+                        return Promise.resolve();
+                    });
+                }
+            }
+            getHolds()
+                .then(() => {
+                    if (this.info.source === 'GIFT') {
+                        return this.$http.get('/sysConfig/get/gift_days').then(res => {
+                            holdDays = Number(res.value);
+                            return Promise.resolve();
+                        });
+                    } else {
+                        return Promise.resolve();
+                    }
+                })
+                .then(() => {
+                    this.holdDays = holdDays;
+                    this.getTime();
+                });
+        },
         openBlindBox() {
             this.$refs.box.show = true;
         },
@@ -731,7 +754,9 @@ export default {
         }
     },
     beforeRouteLeave(from, to, next) {
-        this.emitter.emit('updateList', this.info);
+        if (this && this.emitter) {
+            this.emitter.emit('updateList', this.info);
+        }
         next();
     }
 };

+ 5 - 4
src/views/creator/Detail.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="mine"
         v-model="isLoading"
         :head-height="80"
@@ -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>
@@ -134,7 +134,7 @@
             </van-tabs>
         </van-sticky>
         <van-list
-            style="padding-bottom: 100px;"
+            style="padding-bottom: 100px"
             class="list"
             :class="{ hallList: isShowType }"
             v-model:loading="loading"
@@ -524,6 +524,7 @@ export default {
             display: flex;
             align-items: center;
             margin-bottom: 12px;
+            min-height: 24px;
             img {
                 display: block;
                 margin-left: 6px;

+ 1 - 1
src/views/creator/List.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="follow"
         v-model="isLoading"
         :head-height="80"

+ 452 - 15
src/views/hall/Detail.vue

@@ -39,6 +39,10 @@
                     <img src="../../assets/icon-qiehuanhengping.png" alt="" />
                     <span>切换{{ isVertical || windowVertical ? '横屏' : '竖屏' }}</span>
                 </div>
+                <!-- <div class="btn" @click="isVertical = !isVertical">
+                    <img src="../../assets/icon-qiehuanhengping.png" alt="" />
+                    <span>切换{{ isVertical || windowVertical ? '横屏' : '竖屏' }}</span>
+                </div> -->
             </div>
             <div class="btns" v-if="isVertical && windowVertical && info.publish">
                 <div class="btn">
@@ -72,19 +76,30 @@
                             :height="picWidth"
                             fit="cover"
                             radius="8"
+                            @click="show = true"
+                        />
+                        <van-uploader
+                            ref="upload"
+                            v-if="isMine"
+                            class="avatar"
+                            :after-read="afterRead"
+                            result-type="file"
                         />
-                        <van-uploader v-if="isMine" class="avatar" :after-read="afterRead" result-type="file" />
                     </div>
                     <div class="user-content">
-                        <div class="name">
-                            <div>{{ info.nickname }}</div>
-                            <div>的展馆</div>
+                        <div class="name" @click="goName">
+                            <div v-if="info.name" class="nameOnly">{{ info.name }}</div>
+                            <template v-else>
+                                <div>{{ info.nickname }}</div>
+                                <div>的展馆</div>
+                            </template>
                         </div>
                     </div>
                     <div class="sub-box">
                         <div class="sub" @click="goEdit">
                             <span class="van-multi-ellipsis--l3">{{ info.introduction || '介绍一下展馆主题吧' }}</span>
                             <img src="../../assets/icon-jieshaozhanguan.png" v-if="isMine" alt="" />
+                            <span v-else-if="showMore" @click.stop="showIntro = true" class="more">展开</span>
                         </div>
                     </div>
                 </div>
@@ -105,11 +120,106 @@
                 </div>
                 <div class="imgs" v-for="(item, index) in showList" :key="index" :style="getStyle(item.length)">
                     <div class="icon" v-for="(img, imgIndex) in item" :key="imgIndex" @click="goCollection(img)">
-                        <van-image :src="img.pic" :width="picWidth" :height="picWidth" fit="coevr" radius="8" />
+                        <div class="img-box">
+                            <van-image :src="img.pic" :width="picWidth" :height="picWidth" fit="coevr" radius="8" />
+                            <div class="icon-status" :class="{ status1: img.status === '仅展示' }">
+                                <span>{{ img.status }}</span>
+                                <span v-if="img.status === '寄售中'">¥{{ img.price }}</span>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </div>
         </div>
+        <van-action-sheet
+            v-model:show="show"
+            :actions="actions"
+            cancel-text="取消"
+            close-on-click-action
+            @select="actionSelect"
+        />
+        <van-popup v-model:show="showIntro" closeable>
+            <div class="intro">
+                <div class="text1">展馆主题</div>
+                <div class="text2">{{ info.introduction }}</div>
+            </div>
+        </van-popup>
+        <van-popup
+            class="collection-popup"
+            :class="{ windowHorizontalPopup: !windowVertical || !isVertical, isHorizontalPopup: !isVertical }"
+            v-model:show="collectionShow"
+            @click="collectionShow = false"
+        >
+            <div class="collection-box">
+                <div class="collection" @click.stop="goCollectionDetail(collectionInfo.id)">
+                    <van-image
+                        :width="!windowVertical || !isVertical ? 154 : 198"
+                        :height="!windowVertical || !isVertical ? 154 : 198"
+                        radius="8"
+                        :src="getImg(changeImgs(collectionInfo.pic))"
+                        fit="cover"
+                    />
+                    <div class="collection-info">
+                        <img
+                            @click.stop="collectionShow = false"
+                            src="../../assets/close2.png"
+                            v-if="!windowVertical || !isVertical"
+                            class="collection-close"
+                            alt=""
+                        />
+                        <div class="name van-multi-ellipsis--l2">
+                            {{ collectionInfo.name }}
+                        </div>
+                        <div class="code">编号&nbsp;&nbsp; {{ collectionInfo.number }}</div>
+                        <div class="flex1"></div>
+                        <div class="collection-user">
+                            <div class="collection-user-item">
+                                <div class="text1">铸造者</div>
+                                <div class="text2">
+                                    <van-image
+                                        width="18"
+                                        height="18"
+                                        radius="18"
+                                        :src="collectionInfo.minterAvatar"
+                                        fit="cover"
+                                    />
+                                    <span>{{ collectionInfo.minter }}</span>
+                                </div>
+                            </div>
+                            <div class="collection-user-item">
+                                <div class="text1">持有者</div>
+                                <div class="text2">
+                                    <van-image
+                                        width="18"
+                                        height="18"
+                                        radius="18"
+                                        :src="collectionInfo.ownerAvatar"
+                                        fit="cover"
+                                    />
+                                    <span>{{ collectionInfo.owner }}</span>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="collection-price">
+                            <template v-if="collectionInfo.salable">
+                                <img src="../../assets/icon_jiagebai1.png" alt="" />
+                                <span>{{ collectionInfo.price }}</span>
+                            </template>
+                            <div class="status" v-else>仅展示</div>
+                            <div class="btn">查看详情</div>
+                        </div>
+                    </div>
+                </div>
+
+                <img
+                    v-if="windowVertical && isVertical"
+                    src="../../assets/icon_fenxiang_close.png"
+                    alt=""
+                    class="close"
+                />
+            </div>
+        </van-popup>
     </div>
 </template>
 
@@ -154,12 +264,20 @@ export default {
             distances: [0, 0, 0, 0],
             swiperRef: null,
             inApp,
-            isEdit: false
+            isEdit: false,
+            show: false,
+            showIntro: false,
+            actions: [{ name: '本地上传' }, { name: '藏品室上传' }],
+            collectionShow: false,
+            collectionInfo: {}
         };
     },
     computed: {
         showList() {
-            let assets = [...this.assets];
+            let status = ['仅展示'];
+            let assets = [...this.assets].sort((a, b) => {
+                return status.indexOf(a.status) - status.indexOf(b.status);
+            });
             let list = [];
             for (let i = 0; i <= Math.floor(assets.length / this.groupNum); i++) {
                 list.push(assets.slice(i * this.groupNum, (i + 1) * this.groupNum));
@@ -195,17 +313,46 @@ export default {
             } else {
                 return '15vh';
             }
+        },
+        showMore() {
+            if (
+                this.isVertical &&
+                this.windowVertical &&
+                this.info.introduction &&
+                this.info.introduction.length > 27
+            ) {
+                return true;
+            } else if (
+                (!this.isVertical || !this.windowVertical) &&
+                this.info.introduction &&
+                this.info.introduction.length > 39
+            ) {
+                return true;
+            }
+            return false;
         }
     },
     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();
         }
+        this.emitter.on('setName', e => {
+            this.info.name = e;
+            this.isEdit = true;
+        });
         this.emitter.on('setIntroduction', e => {
             this.info.introduction = e;
             this.isEdit = true;
         });
+        this.emitter.on('setPic', e => {
+            this.info.pic = e;
+            this.isEdit = true;
+        });
         this.emitter.on('setAssets', assets => {
             this.assets = assets;
             this.isEdit = true;
@@ -270,7 +417,7 @@ export default {
             });
             return this.$http.get('/showroom/get/' + this.roomId).then(res => {
                 this.$toast.clear();
-                this.info = res;
+                this.info = { name: '', ...res };
                 this.$nextTick(() => {
                     if (!this.isMine && res.type === 'COMPANY' && res.status !== 'SUCCESS') {
                         this.$dialog
@@ -328,9 +475,9 @@ export default {
                 message: '加载中...',
                 forbidClick: true
             });
-            this.updateFile(e, 500).then(img => {
+            this.updateFile(e, 'hall', 500).then(img => {
                 this.$toast.clear();
-                this.info.pic = img;
+                this.emitter.emit('setPic', img);
             });
         },
         addCollections() {
@@ -383,12 +530,32 @@ export default {
         },
         goEdit() {
             if (this.isMine) {
-                this.$router.push('/hallEdit?message=' + (this.info.introduction || ''));
+                this.$router.push('/hallEdit?message=' + encodeURIComponent(this.info.introduction || ''));
+            }
+        },
+        goName() {
+            if (this.isMine) {
+                this.$router.push('/hallEdit?message=' + encodeURIComponent(this.info.name || '') + '&type=name');
             }
         },
         goCollection(info) {
-            if (!this.isMine) {
-                this.$router.push('/productDetail/' + info.collectionId);
+            this.$http.get('/collection/get/' + info.collectionId).then(res => {
+                this.collectionInfo = res;
+                this.collectionShow = true;
+            });
+            // if (!this.isMine) {
+            //     this.$router.push('/productDetail/' + info.collectionId);
+            // }
+        },
+        goCollectionDetail(id) {
+            this.$router.push('/productDetail/' + id);
+        },
+        actionSelect(action) {
+            console.log(action);
+            if (action.name === '本地上传') {
+                this.$refs.upload.chooseFile();
+            } else {
+                this.$router.push('/productChoose');
             }
         }
     },
@@ -448,6 +615,8 @@ export default {
         position: relative;
         .van-image {
             transition: transform ease-in-out 0.3s;
+            position: relative;
+            z-index: 1;
         }
         .avatar {
             position: absolute;
@@ -456,6 +625,7 @@ export default {
             right: 0;
             bottom: 0;
             opacity: 0;
+            z-index: 0;
         }
     }
 
@@ -465,25 +635,47 @@ export default {
         color: #ffffff;
         line-height: 30px;
         padding-top: 6px;
+        position: relative;
         & > div {
             display: -webkit-box;
             -webkit-box-orient: vertical;
             -webkit-line-clamp: 2;
             overflow: hidden;
         }
+
+        img {
+            width: 16px;
+            height: 16px;
+            display: block;
+            position: absolute;
+            right: 0;
+            top: 0;
+        }
     }
     .sub {
         padding-top: 20px;
         font-size: 12px;
         color: rgba(255, 255, 255, 0.6);
         line-height: 17px;
+        position: relative;
+        word-break: break-all;
 
         .flex();
+        align-items: flex-start;
         img {
             width: 16px;
             height: 16px;
             display: block;
             margin-left: 6px;
+            position: absolute;
+            bottom: -25px;
+            left: 0px;
+        }
+        .more {
+            position: absolute;
+            bottom: -25px;
+            left: 0px;
+            text-decoration: underline;
         }
     }
     .user-content {
@@ -535,14 +727,40 @@ export default {
         justify-content: center;
         width: 22vh;
         box-sizing: border-box;
+        position: relative;
         img {
             width: 110px;
             height: 110px;
             display: block;
         }
         .van-image {
+            position: relative;
             transition: transform ease-in-out 0.3s;
         }
+        .img-box {
+            position: relative;
+        }
+        .icon-status {
+            position: absolute;
+            left: 6px;
+            top: 6px;
+            background: #ffffff;
+            border-radius: 9px;
+            z-index: 3;
+            padding: 0 8px;
+            line-height: 18px;
+            white-space: nowrap;
+            font-size: 10px;
+            font-weight: bold;
+            color: #000000;
+            span + span {
+                margin-left: 3px;
+            }
+
+            &.status1 {
+                color: #939599;
+            }
+        }
     }
 }
 
@@ -662,11 +880,22 @@ export default {
             padding-top: 0;
             font-size: 6.4vh;
             line-height: 8vh;
+            display: block;
+            overflow: hidden;
             & > div {
+                display: block;
                 overflow: hidden;
                 text-overflow: ellipsis;
                 white-space: nowrap;
             }
+            .nameOnly {
+                display: -webkit-box;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                -webkit-line-clamp: 2;
+                -webkit-box-orient: vertical;
+                white-space: normal;
+            }
         }
     }
     .imgs {
@@ -755,23 +984,25 @@ export default {
             padding-top: 0;
             transform: rotate(90deg) translate(-13vw, -13vw);
             transform-origin: left bottom;
+            min-height: 68px;
         }
         .sub {
             width: 168px;
             padding-top: 0;
             transform-origin: left bottom;
-            transform: rotate(90deg) translate(-17.3vw, 0px);
+            min-height: 52px;
+            transform: rotate(90deg) translate(-105px, 12px);
         }
     }
     .img-bg {
         flex-direction: column;
         align-items: flex-end;
-        padding-right: 18vw;
     }
     .imgs {
         width: 44.6vw;
         padding: 23vw 0;
         margin-top: 0;
+        padding-right: 18vw;
         .icon {
             height: 49vw;
             width: auto;
@@ -779,6 +1010,12 @@ export default {
         .van-image {
             transform: rotate(90deg);
         }
+        .icon-status {
+            transform: rotate(90deg);
+            left: calc(35vw - 24px);
+            transform-origin: bottom left;
+            top: -12px;
+        }
     }
 
     .bottom {
@@ -831,4 +1068,204 @@ export default {
     //     height: 50vw;
     // }
 }
+/deep/.van-popup {
+    border-radius: 8px;
+    .van-icon {
+        font-size: 16px;
+    }
+}
+.intro {
+    padding: 12px 0;
+    width: 260px;
+    .text1 {
+        font-size: 14px;
+        color: #000000;
+        font-weight: bold;
+        line-height: 24px;
+        padding: 0 16px 12px;
+        border-bottom: 1px solid #f2f3f5;
+    }
+
+    .text2 {
+        font-size: 12px;
+        color: #939599;
+        line-height: 18px;
+        padding-top: 6px;
+        margin-top: 10px;
+        text-indent: 24px;
+        background: #f5f7fa;
+        border-radius: 4px;
+        padding: 10px;
+        margin: 10px 16px 0;
+    }
+}
+/deep/.collection-popup {
+    background-color: transparent;
+}
+.collection-box {
+    .flex-col();
+    align-items: center;
+    overflow: hidden;
+
+    .collection {
+        background: rgba(15, 15, 15, 0.8);
+        padding: 12px;
+        border: 1px solid rgba(255, 255, 255, 0.5);
+        border-radius: 8px;
+        box-sizing: border-box;
+        width: 222px;
+
+        .name {
+            font-size: 14px;
+            font-weight: bold;
+            color: #ffffff;
+            line-height: 20px;
+            margin-top: 8px;
+        }
+
+        .code {
+            font-size: 12px;
+            color: #c8c9cc;
+            line-height: 22px;
+            background: rgba(255, 255, 255, 0.08);
+            border-radius: 4px;
+            display: inline-block;
+            align-self: flex-start;
+            padding: 0 6px;
+            margin-top: 6px;
+        }
+
+        .collection-price {
+            height: 24px;
+            background: #3ab200;
+            border-radius: 4px;
+            overflow: hidden;
+            margin-top: 15px;
+            .flex();
+            img {
+                width: 8px;
+                height: 8px;
+                margin-left: 4px;
+                margin-top: 4px;
+            }
+
+            span {
+                font-size: 20px;
+                font-family: OSP-DIN, OSP;
+                font-weight: normal;
+                color: #ffffff;
+                line-height: 14px;
+                flex-grow: 1;
+                margin-left: 1px;
+            }
+
+            .status {
+                font-size: 12px;
+                font-weight: bold;
+                color: #ffffff;
+                line-height: 24px;
+                flex-grow: 1;
+                padding: 0 6px;
+            }
+
+            .btn {
+                font-size: 12px;
+                font-weight: bold;
+                color: #3ab200;
+                line-height: 24px;
+                padding: 0 6px;
+                background-color: #fff;
+                border-radius: 4px;
+            }
+        }
+    }
+
+    .close {
+        width: 40px;
+        height: 40px;
+        display: block;
+        margin-top: 66px;
+    }
+
+    .van-image {
+        flex-shrink: 0;
+    }
+}
+
+.windowHorizontalPopup {
+    .collection {
+        .flex();
+        width: 386px;
+        align-items: stretch;
+        overflow: hidden;
+        .collection-info {
+            flex-grow: 1;
+            margin-left: 12px;
+            overflow: hidden;
+            .flex-col();
+            position: relative;
+
+            .name {
+                padding-right: 30px;
+            }
+        }
+
+        .code {
+            margin-top: 3px;
+        }
+        .name {
+            margin-top: 3px;
+        }
+        .collection-price {
+            margin-top: 10px;
+        }
+    }
+    .collection-close {
+        position: absolute;
+        right: 0;
+        top: 0;
+        width: 24px;
+        height: 24px;
+    }
+}
+/deep/.isHorizontalPopup {
+    overflow: initial;
+    .collection-box {
+        transform: rotate(90deg);
+    }
+}
+
+.collection-user {
+    .flex();
+    margin-top: 10px;
+    .collection-user-item {
+        flex-grow: 1;
+        overflow: hidden;
+        .text1 {
+            font-size: 12px;
+            color: #c8c9cc;
+            line-height: 17px;
+        }
+
+        .text2 {
+            margin-top: 4px;
+            .flex();
+            overflow: hidden;
+            span {
+                font-size: 12px;
+                color: #ffffff;
+                line-height: 17px;
+                margin-left: 2px;
+                overflow: hidden; //溢出隐藏
+                white-space: nowrap; //禁止换行
+                text-overflow: ellipsis;
+            }
+        }
+    }
+
+    .collection-user-item + .collection-user-item {
+        min-width: 50%;
+        margin-left: 6px;
+    }
+}
 </style>

+ 13 - 5
src/views/hall/Edit.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="edit">
-        <div class="edit-title">展馆主题</div>
+        <div class="edit-title">{{ type === 'name' ? '展馆标题' : '展馆主题' }}</div>
         <van-field
             label=" "
             label-width="0"
@@ -8,8 +8,8 @@
             rows="4"
             autosize
             type="textarea"
-            maxlength="20"
-            placeholder="介绍一下展馆主题吧"
+            :maxlength="type === 'name' ? 10 : 200"
+            :placeholder="type === 'name' ? '给展馆起个响亮的名字吧' : '介绍一下展馆主题吧'"
             show-word-limit
             :border="false"
         />
@@ -24,17 +24,25 @@
 export default {
     data() {
         return {
-            message: ''
+            message: '',
+            type: 'intr'
         };
     },
     mounted() {
         if (this.$route.query.message) {
             this.message = this.$route.query.message;
         }
+        if (this.$route.query.type) {
+            this.type = this.$route.query.type;
+        }
     },
     methods: {
         save() {
-            this.emitter.emit('setIntroduction', this.message);
+            if (this.type === 'name') {
+                this.emitter.emit('setName', this.message);
+            } else {
+                this.emitter.emit('setIntroduction', this.message);
+            }
             this.$router.back();
         }
     }

+ 21 - 5
src/views/hall/List.vue

@@ -1,19 +1,26 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         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  (1).png')"
+                :image="require('@assets/kong_png_yongyoude hei.png')"
                 v-if="empty"
                 description="没有任何藏品哦~"
             />
@@ -31,7 +38,8 @@ export default {
         return {
             list: [],
             empty: false,
-            url: '/showroom/all'
+            url: '/showroom/all',
+            type: 'COMPANY'
         };
     },
     methods: {
@@ -40,14 +48,21 @@ export default {
                 query: {
                     del: false,
                     status: 'SUCCESS',
-                    publish: true
-                }
+                    publish: true,
+                    type: this.type
+                },
+                sort: 'sort,desc;id,desc'
             };
         },
         onRefresh() {
             this.getData(true).then(() => {
                 this.isLoading = false;
             });
+        },
+        changeType() {
+            this.$nextTick(() => {
+                this.getData(true);
+            });
         }
     }
 };
@@ -75,5 +90,6 @@ export default {
     color: #ffffff;
     line-height: 24px;
     padding: 13px 16px;
+    border-bottom: 2px solid #272b2e;
 }
 </style>

+ 36 - 20
src/views/hall/Post.vue

@@ -14,24 +14,28 @@
                             <div class="users">
                                 <van-image :src="userImg || info.pic" width="120" height="120" radius="8" fit="cover" />
                                 <div class="users-text">
-                                    <div class="name">
+                                    <div class="name" v-if="info.name">
+                                        <div>{{ info.name }}</div>
+                                    </div>
+                                    <div class="name" v-else>
                                         <div>{{ info.nickname }}</div>
                                         <div>的展馆</div>
                                     </div>
                                     <div class="sub">
-                                        <span>{{ info.introduction }}</span>
+                                        <span class="van-multi-ellipsis--l3">{{ info.introduction }}</span>
                                     </div>
                                 </div>
                             </div>
                         </div>
+                        <div class="name van-multi-ellipsis--l2">
+                            {{ info.introduction }}
+                        </div>
                         <div class="info">
                             <div class="left">
-                                <div class="name van-multi-ellipsis--l2">
-                                    {{ info.introduction }}
-                                </div>
                                 <div class="minter-content">
                                     <van-image width="18" height="18" round :src="userImg || info.pic" fit="cover" />
-                                    <div class="text1">{{ info.nickname }}</div>
+                                    <div class="text1">我是 {{ info.nickname }}</div>
+                                    <div class="text2">在绿洲宇宙的数字艺术展厅现已全面开放,扫码来看看吖!</div>
                                 </div>
                             </div>
                             <div class="right">
@@ -42,7 +46,7 @@
                                         class="code"
                                     ></vue-qrcode>
                                 </div>
-                                <div class="text1">扫码查看展厅</div>
+                                <!-- <div class="text1">扫码查看展厅</div> -->
                             </div>
                         </div>
                     </div>
@@ -220,26 +224,38 @@ export default {
     }
 }
 
+.name {
+    font-size: 14px;
+    color: #000000;
+    line-height: 20px;
+    padding: 0 10px;
+    margin: 8px 0 0;
+    font-weight: bold;
+}
 .info {
-    padding: 10px;
+    padding: 6px 10px 10px;
 
     .flex();
     align-items: stretch;
     .left {
         flex-grow: 1;
-        .name {
-            font-size: 14px;
-            color: #000000;
-            line-height: 20px;
-            min-height: 40px;
-        }
         .minter-content {
-            margin-top: 8px;
-            .flex();
-            font-size: 12px;
-            color: #939599;
+            .flex-col();
+            position: relative;
             .text1 {
-                margin-left: 5px;
+                font-size: 12px;
+                color: #000000;
+                line-height: 17px;
+                margin-top: 6px;
+            }
+            .text2 {
+                font-size: 12px;
+                color: #939599;
+                transform: scale(0.8);
+                width: 200px;
+                position: absolute;
+                left: -20px;
+                bottom: -32px;
             }
         }
     }
@@ -384,7 +400,7 @@ export default {
 
 .collecions {
     position: absolute;
-    top: 50px;
+    top: 75px;
     left: 0;
     right: 0;
     z-index: 3;

+ 3 - 1
src/views/hall/ProductAdd.vue

@@ -86,7 +86,9 @@ export default {
                 .map(item => {
                     return {
                         ...item,
-                        pic: this.getImg(this.changeImgs(item.pic))
+                        pic: this.getImg(this.changeImgs(item.pic)),
+                        status: item.salable ? '寄售中' : '仅展示',
+                        price: item.price
                     };
                 });
         }

+ 229 - 0
src/views/hall/ProductChoose.vue

@@ -0,0 +1,229 @@
+<template>
+    <div class="page">
+        <div class="page-top">
+            <div class="title">
+                <div class="text1">选择头像</div>
+                <div class="text2">展示的藏品需为展示/正在寄售的状态</div>
+            </div>
+
+            <div class="sub">
+                <div class="text1">符合条件</div>
+                <div class="text2">{{ totalElements }}个</div>
+            </div>
+        </div>
+
+        <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="getData">
+            <van-empty
+                v-if="empty"
+                description=" 你还没有藏品哦~"
+                :image="require(`../../assets/kong_png_yongyoude hei.png`)"
+            />
+            <div class="list">
+                <div class="box" v-for="(item, index) in list" :key="index" @click="choose(item)">
+                    <div class="box-img">
+                        <van-image
+                            :src="getImg(changeImgs(item.pic))"
+                            :width="80"
+                            :height="80"
+                            fit="coevr"
+                            radius="8"
+                        />
+                    </div>
+                </div>
+            </div>
+        </van-list>
+
+        <div class="btns">
+            <van-button color="#939599" @click="$router.back()" plain round>取消</van-button>
+        </div>
+    </div>
+</template>
+
+<script>
+import list from '../../mixins/list';
+import product from '../../mixins/product';
+export default {
+    data() {
+        return {
+            info: {},
+            url: '/collection/all',
+            list: [],
+            chooseIds: [],
+            maxCollection: 20
+        };
+    },
+    mixins: [list, product],
+    computed: {
+        chooseList() {
+            let list = [...this.list];
+            let chooseIds = [...this.chooseIds];
+            return chooseIds
+                .map(item => {
+                    return (
+                        list.find(child => {
+                            return child.id === item;
+                        }) || item
+                    );
+                })
+                .filter(item => {
+                    return !!item.pic;
+                })
+                .map(item => {
+                    return {
+                        ...item,
+                        pic: this.getImg(this.changeImgs(item.pic))
+                    };
+                });
+        }
+    },
+    mounted() {
+        if (this.$route.query.ids) {
+            this.chooseIds = this.$route.query.ids.split(',');
+        }
+        if (this.$route.query.maxCollection) {
+            this.maxCollection = Number(this.$route.query.maxCollection);
+        }
+    },
+    methods: {
+        beforeData() {
+            return {
+                query: {
+                    ownerId: this.$store.state.userInfo.id
+                },
+                size: 99
+            };
+        },
+        sure() {
+            if (this.chooseIds.length > 0) {
+                this.emitter.emit('setAssets', this.chooseList);
+                this.$router.back();
+            } else {
+                this.$toast('请选择藏品');
+            }
+        },
+        choose(info) {
+            this.emitter.emit('setPic', this.getImg(this.changeImgs(info.pic)));
+            this.$router.back();
+        }
+    }
+};
+</script>
+
+<style lang="less" scoped>
+.page {
+    background-color: #1c1c1c;
+}
+
+.page-top {
+    background-color: #222426;
+    padding: 10px 16px 12px;
+    .flex();
+    align-items: flex-end;
+    .title {
+        flex-grow: 1;
+        .text1 {
+            font-size: 16px;
+            font-weight: bold;
+            color: #ffffff;
+            line-height: 24px;
+        }
+        .text2 {
+            font-size: 12px;
+            color: #939599;
+            line-height: 22px;
+        }
+    }
+
+    .sub {
+        .flex();
+        .text1 {
+            font-size: 12px;
+            color: #939599;
+            line-height: 22px;
+        }
+
+        .text2 {
+            font-size: 12px;
+            color: #ffffff;
+            line-height: 17px;
+            background: #f5f7fa22;
+            border-radius: 10px;
+            padding: 0 18px;
+            margin-left: 3px;
+        }
+    }
+}
+
+.list {
+    .flex();
+    flex-wrap: wrap;
+    padding-bottom: 80px;
+    .box {
+        padding: 10px 16px;
+        width: 33%;
+        box-sizing: border-box;
+        position: relative;
+
+        .choose-img {
+            width: 24px;
+            height: 24px;
+            position: absolute;
+            right: 0px;
+            top: 0px;
+            z-index: 2;
+        }
+
+        .box-img {
+            position: relative;
+            width: 80px;
+            height: 80px;
+            margin: auto;
+        }
+
+        &.active {
+            .box-img {
+                &::after {
+                    content: '';
+                    position: absolute;
+                    left: 0;
+                    top: 0;
+                    right: 0;
+                    bottom: 0;
+                    z-index: 1;
+                    background-color: rgba(0, 0, 0, 0.3);
+                }
+            }
+        }
+
+        .num {
+            font-size: 12px;
+            font-weight: bold;
+            color: #ffffff;
+            line-height: 17px;
+            position: absolute;
+            left: 5px;
+            top: 0px;
+            z-index: 2;
+        }
+    }
+}
+
+.btns {
+    position: fixed;
+    bottom: 0;
+    right: 0;
+    left: 0;
+    .flex();
+    padding: 9px 16px;
+    background-color: #222426;
+    z-index: 20;
+    .bottom(9px);
+    .van-button {
+        flex-grow: 1;
+        box-sizing: border-box;
+    }
+    .van-button + .van-button {
+        margin-left: 20px;
+    }
+}
+</style>

+ 1 - 1
src/views/order/ActivityDetail.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="order"
         v-model="isLoading"
         :head-height="80"

+ 6 - 2
src/views/order/ActivityOrders.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="discover"
         v-model="isLoading"
         :head-height="80"
@@ -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: '待发货'

+ 1 - 1
src/views/order/Detail.vue

@@ -2,7 +2,7 @@
     <van-pull-refresh
         class="order"
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         v-model="isLoading"
         :head-height="80"
         @refresh="onRefresh"

+ 1 - 1
src/views/order/Orders.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="discover"
         v-model="isLoading"
         :head-height="80"

+ 43 - 12
src/views/product/Detail.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="detail"
         v-model="isLoading"
         @refresh="onRefresh"
@@ -227,8 +227,14 @@
                         {{ info.price }}
                     </div>
                     <div class="price-sub" v-if="info.originalPrice">¥{{ info.originalPrice || 0 }}</div>
-                    <div class="sub" v-if="info.royalties">
-                        含 <span>{{ info.royalties }}%</span> 版税
+                    <div class="price-text">
+                        <div class="text1">
+                            <img src="../../assets/icon-huachuyikouji.png" alt="" />
+                            <span>华储拍卖一口价</span>
+                        </div>
+                        <div class="sub" v-if="info.royalties">
+                            (含 <span>{{ info.royalties }}%</span> 版税)
+                        </div>
                     </div>
                 </div>
                 <div class="flex1"></div>
@@ -250,8 +256,14 @@
                         {{ info.price }}
                     </div>
                     <div class="price-sub" v-if="info.originalPrice">¥{{ info.originalPrice || 0 }}</div>
-                    <div class="sub" v-if="info.royalties">
-                        含 <span>{{ info.royalties }}%</span> 版税
+                    <div class="price-text">
+                        <div class="text1">
+                            <img src="../../assets/icon-huachuyikouji.png" alt="" />
+                            <span>华储拍卖一口价</span>
+                        </div>
+                        <div class="sub" v-if="info.royalties">
+                            (含 <span>{{ info.royalties }}%</span> 版税)
+                        </div>
                     </div>
                 </div>
                 <div class="flex1"></div>
@@ -274,7 +286,7 @@
                             <van-button @click="vipAssignment" class="vip" type="danger" block round>
                                 vip通道
                             </van-button>
-                            <van-button style="font-size: 12px;" class="no-btn" v-if="!info.openQuota" block round>
+                            <van-button style="font-size: 12px" class="no-btn" v-if="!info.openQuota" block round>
                                 名额为空
                             </van-button>
                             <van-button @click="share" v-else-if="info.totalQuota" type="primary" block round
@@ -282,7 +294,7 @@
                             </van-button>
                         </div>
                         <van-button
-                            style="font-size: 12px;"
+                            style="font-size: 12px"
                             @click="showReason"
                             class="no-btn"
                             v-else-if="!info.openQuota"
@@ -292,7 +304,7 @@
                             活动名额已被抢光
                         </van-button>
                         <van-button
-                            style="font-size: 12px;"
+                            style="font-size: 12px"
                             @click="showReason"
                             class="no-btn"
                             v-else-if="noPay"
@@ -309,7 +321,7 @@
                     <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 style="font-size: 12px">任务完成,即将开卖</span>
                                 <span>{{ saleTime }}</span>
                             </div>
                         </van-button>
@@ -585,7 +597,8 @@ export default {
                 .post(
                     '/userCoupon/all',
                     {
-                        query: { userId: this.$store.state.userInfo.id, used: false }
+                        query: { userId: this.$store.state.userInfo.id, used: false },
+                        size: 999
                     },
                     { body: 'json' }
                 )
@@ -1293,7 +1306,7 @@ export default {
 
 .price-content {
     display: flex;
-    align-items: flex-end;
+    align-items: center;
     .price {
         font-size: 32px;
         font-family: OSP-DIN, OSP;
@@ -1316,14 +1329,32 @@ export default {
         color: @text3;
         text-decoration: line-through;
         margin-left: 3px;
-        margin-bottom: 2px;
+        margin-top: 8px;
     }
 
     .sub {
         font-size: @font1;
         color: #949699;
         line-height: 22px;
+        //
+    }
+
+    .price-text {
         margin-left: 6px;
+        .flex-col();
+        .text1 {
+            .flex();
+            img {
+                width: 18px;
+                height: 18px;
+            }
+            span {
+                font-size: 12px;
+                color: #ffffff;
+                line-height: 17px;
+                margin-left: 2px;
+            }
+        }
     }
 }
 .category {

+ 1 - 1
src/views/product/HopeMarket.vue

@@ -98,7 +98,7 @@
 
         <van-pull-refresh
             success-text="加载成功"
-            success-duration="1000"
+            success-duration="500"
             v-model="isLoading"
             :head-height="80"
             @refresh="onRefresh"

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

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="follow"
         v-model="isLoading"
         @refresh="onRefresh"

+ 1 - 1
src/views/product/Search.vue

@@ -2,7 +2,7 @@
     <van-pull-refresh
         class="search"
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         :style="{ backgroundColor: isSearch ? $colors.bg3 : $colors.bg }"
         v-model="isLoading"
         @refresh="onRefresh"

+ 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;

+ 1 - 1
src/views/user/Exchange.vue

@@ -1,7 +1,7 @@
 <template>
     <van-pull-refresh
         success-text="加载成功"
-        success-duration="1000"
+        success-duration="500"
         class="search"
         v-model="isLoading"
         :head-height="80"