瀏覽代碼

Merge branch 'master' of http://git.izouma.com/xiongzhu/raex_front into 2d展厅

panhui 4 年之前
父節點
當前提交
0e83ca2740
共有 73 個文件被更改,包括 745 次插入344 次删除
  1. 1 1
      .env.app
  2. 1 1
      .env.app_test
  3. 1 1
      .env.development
  4. 1 1
      .env.production
  5. 10 1
      public/index.html
  6. 二進制
      src/assets/copy_icon.png
  7. 二進制
      src/assets/creatorBg.png
  8. 二進制
      src/assets/icon-anquan.png
  9. 二進制
      src/assets/icon-bianji.png
  10. 二進制
      src/assets/icon-bianji1.png
  11. 二進制
      src/assets/icon-guanyuwomen.png
  12. 二進制
      src/assets/icon-jifen.png
  13. 二進制
      src/assets/icon-woxihuande.png
  14. 二進制
      src/assets/icon-xialajiantou.png
  15. 二進制
      src/assets/icon_dizhi.png
  16. 二進制
      src/assets/icon_liaojiegengduo.png
  17. 二進制
      src/assets/icon_tongzhi.png
  18. 二進制
      src/assets/icon_yinhangka.png
  19. 二進制
      src/assets/info_icon_jiaoyijilu.png
  20. 二進制
      src/assets/info_icon_no1.png
  21. 二進制
      src/assets/info_icon_no2.png
  22. 二進制
      src/assets/info_icon_no3.png
  23. 二進制
      src/assets/info_icon_top50.png
  24. 二進制
      src/assets/info_icon_yaoqing.png
  25. 二進制
      src/assets/info_icon_yishuping.png
  26. 二進制
      src/assets/info_icon_zhuzaodingdan.png
  27. 二進制
      src/assets/png-touxiangkuang.png
  28. 二進制
      src/assets/png-zhantai.png
  29. 二進制
      src/assets/renzheng_icon.png
  30. 二進制
      src/assets/tabbar_icon_04_pre.png
  31. 二進制
      src/assets/top50.jpg
  32. 二進制
      src/assets/yirenzhng-geren-icon.png
  33. 9 6
      src/components/asset/assetInfo.vue
  34. 12 24
      src/components/level/Level.vue
  35. 1 1
      src/components/level/LevelCard.vue
  36. 47 25
      src/components/product/productLarge.vue
  37. 3 30
      src/main.js
  38. 7 0
      src/mixins/common.js
  39. 1 1
      src/plugins/colors.js
  40. 9 2
      src/router/index.js
  41. 3 3
      src/styles/app.less
  42. 1 1
      src/views/Creator.vue
  43. 1 1
      src/views/Discover.vue
  44. 1 1
      src/views/DiscoverPre.vue
  45. 39 13
      src/views/Home.vue
  46. 2 2
      src/views/Index.vue
  47. 296 162
      src/views/Mine.vue
  48. 13 7
      src/views/Store.vue
  49. 4 4
      src/views/Submit.vue
  50. 1 0
      src/views/account/About.vue
  51. 1 1
      src/views/account/Agreement.vue
  52. 7 6
      src/views/account/Introduction.vue
  53. 3 3
      src/views/account/Login.vue
  54. 1 1
      src/views/account/Question.vue
  55. 2 2
      src/views/account/Register.vue
  56. 2 2
      src/views/account/Verified.vue
  57. 7 9
      src/views/asset/Agreement.vue
  58. 2 2
      src/views/asset/Detail.vue
  59. 1 1
      src/views/asset/GiveSearch.vue
  60. 1 1
      src/views/asset/Search.vue
  61. 1 1
      src/views/creator/List.vue
  62. 1 1
      src/views/creator/Search.vue
  63. 1 1
      src/views/order/ActivityOrders.vue
  64. 1 1
      src/views/order/Orders.vue
  65. 24 3
      src/views/product/Detail.vue
  66. 1 1
      src/views/product/List.vue
  67. 18 14
      src/views/product/NewsDetail.vue
  68. 1 1
      src/views/product/Search.vue
  69. 1 1
      src/views/user/Followers.vue
  70. 1 1
      src/views/user/Follows.vue
  71. 2 2
      src/views/user/Level.vue
  72. 1 1
      src/views/user/Likes.vue
  73. 201 0
      src/views/user/Rank.vue

+ 1 - 1
.env.app

@@ -2,6 +2,6 @@ VUE_APP_BASE_URL=https://www.raex.vip
 NODE_ENV=production
 VUE_APP_PUBLIC_PATH=./
 ASSETS_PATH=raex
-TITLE=绿洲宇宙
+TITLE=RAEX宇宙
 VUE_APP_CORDOVA=true
 VUE_APP_PAGE_TYPE=raex

+ 1 - 1
.env.app_test

@@ -2,6 +2,6 @@ VUE_APP_BASE_URL=https://www.raex.vip
 NODE_ENV=production
 VUE_APP_PUBLIC_PATH=./
 ASSETS_PATH=raex
-TITLE=绿洲宇宙
+TITLE=RAEX宇宙
 VUE_APP_CORDOVA=true
 VUE_APP_PAGE_TYPE=raex

+ 1 - 1
.env.development

@@ -2,5 +2,5 @@ VUE_APP_BASE_URL=https://test.raex.vip
 NODE_ENV=development
 VUE_APP_PUBLIC_PATH=/
 ASSETS_PATH=raex
-TITLE=绿洲宇宙
+TITLE=RAEX宇宙
 VUE_APP_PAGE_TYPE=raex

+ 1 - 1
.env.production

@@ -2,5 +2,5 @@ VUE_APP_BASE_URL=/
 NODE_ENV=production
 VUE_APP_PUBLIC_PATH=/9th/
 ASSETS_PATH=raex
-TITLE=绿洲宇宙
+TITLE=RAEX宇宙
 VUE_APP_PAGE_TYPE=raex

+ 10 - 1
public/index.html

@@ -4,7 +4,10 @@
         <meta charset="utf-8" />
         <meta http-equiv="X-UA-Compatible" content="IE=edge" />
         <link rel="icon" href="<%= BASE_URL %>favicon.png" />
-        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, viewport-fit=cover" />
+        <meta
+            name="viewport"
+            content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, viewport-fit=cover"
+        />
         <meta name="msapplication-tap-highlight" content="no" />
         <meta name="format-detection" content="telphone=no" />
         <meta name="format-detection" content="email=no" />
@@ -29,4 +32,10 @@
         <div id="app"></div>
         <!-- built files will be auto injected -->
     </body>
+    <script>
+        function goFetch(path) {
+            window.$vm.$dialog.close();
+            window.$vm.$router.push(path);
+        }
+    </script>
 </html>

二進制
src/assets/copy_icon.png


二進制
src/assets/creatorBg.png


二進制
src/assets/icon-anquan.png


二進制
src/assets/icon-bianji.png


二進制
src/assets/icon-bianji1.png


二進制
src/assets/icon-guanyuwomen.png


二進制
src/assets/icon-jifen.png


二進制
src/assets/icon-woxihuande.png


二進制
src/assets/icon-xialajiantou.png


二進制
src/assets/icon_dizhi.png


二進制
src/assets/icon_liaojiegengduo.png


二進制
src/assets/icon_tongzhi.png


二進制
src/assets/icon_yinhangka.png


二進制
src/assets/info_icon_jiaoyijilu.png


二進制
src/assets/info_icon_no1.png


二進制
src/assets/info_icon_no2.png


二進制
src/assets/info_icon_no3.png


二進制
src/assets/info_icon_top50.png


二進制
src/assets/info_icon_yaoqing.png


二進制
src/assets/info_icon_yishuping.png


二進制
src/assets/info_icon_zhuzaodingdan.png


二進制
src/assets/png-touxiangkuang.png


二進制
src/assets/png-zhantai.png


二進制
src/assets/renzheng_icon.png


二進制
src/assets/tabbar_icon_04_pre.png


二進制
src/assets/top50.jpg


二進制
src/assets/yirenzhng-geren-icon.png


+ 9 - 6
src/components/asset/assetInfo.vue

@@ -116,18 +116,19 @@ export default {
     border-radius: 8px;
     overflow: hidden;
     position: relative;
-    min-height: 35.73vw;
+    min-height: 35.8vw;
 
     &:nth-child(3n + 1) {
-        margin-right: 6.9vw;
+        margin-right: 7.5vw;
     }
     &:nth-child(3n + 2) {
-        margin-right: 6.9vw;
+        margin-right: 7.5vw;
     }
 
     .van-image {
         overflow: hidden;
         display: block;
+        z-index: 1;
     }
     .content {
         // padding: 6px 10px 8px;
@@ -204,7 +205,7 @@ export default {
 
 .number {
     position: absolute;
-    top: calc(21.3vw - 16px);
+    top: calc(21.3vw - 17px);
     left: 0;
     width: 21.3vw;
     font-size: 10px;
@@ -217,12 +218,14 @@ export default {
     overflow: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
+    z-index: 2;
 }
 .touying {
     position: absolute;
     width: 100%;
-    height: 24px;
+    height: 6.4vw;
     left: 0;
-    top: calc(21.3vw - 16px);
+    top: 16vw;
+    z-index: 0;
 }
 </style>

+ 12 - 24
src/components/level/Level.vue

@@ -19,7 +19,7 @@
             <div class="box-content">
                 <div class="text1">
                     您已升级至<span :style="{ color: levelInfo.color }">V{{ levelInfo.level }}</span
-                    >,感谢您对绿洲的信任。愿绿洲的荣光普照河山!!
+                    >,感谢您对RAEX宇宙的信任。愿RAEX宇宙的荣光普照河山!!
                 </div>
                 <div class="btn">
                     <van-button :color="levelInfo.color" block round>领取</van-button>
@@ -29,7 +29,7 @@
     </van-overlay>
     <div v-if="isLogin && !show && levelInfo.icon" ref="medal" class="medal-info" @click="$router.push('/mineLevel')">
         <div class="medal-icon">
-            <van-image :src="levelInfo.icon" width="32" height="32" />
+            <van-image :src="levelInfo.icon" width="28" height="28" />
             <div class="text1" :style="{ color: levelInfo.color1 || levelInfo.color }">{{ levelInfo.level }}</div>
         </div>
         <div class="medal-text">
@@ -42,9 +42,6 @@
             >
                 {{ levelInfo.title }}
             </div>
-            <div class="text2" :style="{ color: levelInfo.color1 || levelInfo.color }">
-                {{ levelInfo.realm }}
-            </div>
         </div>
     </div>
 </template>
@@ -167,17 +164,12 @@ export default {
     }
 }
 .medal-info {
-    position: absolute;
-    right: 0;
-    top: 150px;
     .flex();
-    padding: 2px 0 2px 10px;
-    border-radius: 100px 0px 0px 100px;
-    z-index: 20;
-    background-color: #f5f7fa;
     .medal-icon {
         flex-shrink: 0;
         position: relative;
+        z-index: 1;
+        transform: translateY(2px);
 
         .van-image {
             display: block;
@@ -185,8 +177,8 @@ export default {
 
         .text1 {
             position: absolute;
-            left: 14px;
-            top: 10.6px;
+            left: 10px;
+            top: 8px;
             font-size: 12px;
             transform: scale(0.8);
             line-height: 12px;
@@ -195,7 +187,6 @@ export default {
             display: block;
             min-width: 14px;
             // min-height: 12px;
-            text-align: center;
             font-weight: bold;
             letter-spacing: -1px;
         }
@@ -204,15 +195,18 @@ export default {
         .flex-col();
         align-items: center;
         justify-content: center;
-        transform: scale(0.83) translateX(-2px);
+        transform: scale(0.8) translateX(-18px);
+        z-index: 0;
         .text1 {
             font-size: 12px;
+            border-radius: 2px;
             line-height: 16px;
-            padding: 0 6px;
+            padding: 0 4px 0 6px;
             border-radius: 2px;
-            min-width: 50px;
             text-align: center;
             position: relative;
+            display: block;
+            overflow: hidden;
             &::after {
                 content: '';
                 position: absolute;
@@ -224,12 +218,6 @@ export default {
                 background-color: #fff;
             }
         }
-
-        .text2 {
-            font-size: 12px;
-            margin-top: 2px;
-            line-height: 10px;
-        }
     }
 }
 </style>

+ 1 - 1
src/components/level/LevelCard.vue

@@ -80,7 +80,7 @@
                 <div class="text1" :style="{ color: levelInfo.textColor || levelInfo.color }">
                     距离等级Lv{{ levelInfo.level ? levelInfo.level + 1 : 1 }}还差
                 </div>
-                <div class="text2" :style="{ backgroundColor: levelInfo.color + 'DD' }">{{ need }}个绿洲石</div>
+                <div class="text2" :style="{ backgroundColor: levelInfo.color + 'DD' }">{{ need }}个RAEX宇宙石</div>
             </div>
         </div>
     </div>

+ 47 - 25
src/components/product/productLarge.vue

@@ -1,7 +1,7 @@
 <template>
     <router-link
         :to="{
-            path: '/productDetail',
+            path: type === 'collection' ? '/productDetail' : '/newsDetail',
             query: {
                 id: info.id
             }
@@ -12,44 +12,62 @@
             :radius="30"
             width="100%"
             height="calc(100vw - 32px)"
+            v-if="type === 'collection'"
             :src="getImg(changeImgs(info.pic))"
             fit="cover"
         />
+        <van-image :radius="30" width="100%" height="calc(100vw - 32px)" v-else :src="getImg(info.pic)" fit="cover" />
 
-        <div class="content">
-            <div class="name van-ellipsis">{{ info.name }}</div>
-            <div class="sales-list">
-                <div class="sales">
-                    <span class="sales-fir">限量</span>
-                    <span>{{ info.total }}份</span>
+        <template v-if="type === 'collection'">
+            <div class="content">
+                <div class="name van-ellipsis">{{ info.name }}</div>
+                <div class="sales-list">
+                    <div class="sales" v-if="info.category">
+                        <span>{{ info.category }}</span>
+                    </div>
+                    <div class="sales">
+                        <span class="sales-fir">限量</span>
+                        <span>{{ info.total }}份</span>
+                    </div>
                 </div>
-                <div class="sales" v-if="info.category">
-                    <span>{{ info.category }}</span>
+
+                <div class="bottom">
+                    <div class="miner">
+                        <van-image width="18" height="18" radius="18" :src="getImg(info.minterAvatar)" fit="cover" />
+                        <span>{{ info.minter }}</span>
+                    </div>
+                    <div class="flex1"></div>
+                    <div class="price" v-if="info.salable">
+                        <img src="@assets/icon_jiage.png" alt="" />
+                        <span> {{ info.price }}</span>
+                    </div>
+                    <div v-else class="status">仅展示</div>
                 </div>
             </div>
 
+            <div class="sold xianliang" v-if="time && info.scheduleSale">
+                <img src="@assets/shizhong.png" alt="" />
+                <span>即将开售:{{ startTime || time }}</span>
+            </div>
+
+            <div class="sold" v-if="isSolded">已售罄</div>
+            <div class="sold" v-else-if="isSold" style="color: #ff4f50">即将售罄</div>
+        </template>
+
+        <div class="content" v-else>
+            <div class="name van-ellipsis">{{ info.title }}</div>
+            <div class="sales-list">
+                <div class="sales">
+                    <span>绿洲头条新闻</span>
+                </div>
+            </div>
             <div class="bottom">
                 <div class="miner">
-                    <van-image width="18" height="18" radius="18" :src="getImg(info.minterAvatar)" fit="cover" />
-                    <span>{{ info.minter }}</span>
-                </div>
-                <div class="flex1"></div>
-                <div class="price" v-if="info.salable">
-                    <img src="@assets/icon_jiage.png" alt="" />
-                    <span> {{ info.price }}</span>
+                    <span style="margin-left: 0">{{ info.subtitle }}</span>
                 </div>
-                <div v-else class="status">仅展示</div>
             </div>
         </div>
 
-        <div class="sold xianliang" v-if="time && info.scheduleSale">
-            <img src="@assets/shizhong.png" alt="" />
-            <span>即将开售:{{ startTime || time }}</span>
-        </div>
-
-        <div class="sold" v-if="isSolded">已售罄</div>
-        <div class="sold" v-else-if="isSold" style="color: #ff4f50">即将售罄</div>
-
         <img class="bg" src="@assets/png-diwen.png" alt="" />
         <!-- <img class="top-bg" v-if="time" src="@assets/collecbg.png" alt="" /> -->
     </router-link>
@@ -65,6 +83,10 @@ export default {
             default: () => {
                 return {};
             }
+        },
+        type: {
+            type: String,
+            default: 'collection'
         }
     },
     computed: {

+ 3 - 30
src/main.js

@@ -110,7 +110,6 @@ const loadSplash = (onload, onerror) =>
             splash.style.opacity = 0;
             setTimeout(() => {
                 document.body.removeChild(splash);
-                showTips();
             }, 800);
             resolve();
         }
@@ -134,33 +133,6 @@ const loadSplash = (onload, onerror) =>
         document.body.append(splash);
     });
 
-function showTips() {
-    let inApp = /#cordova#/i.test(navigator.userAgent);
-    let inIos = /iPhone|iPad|iPod/i.test(navigator.userAgent);
-    if (!window.localStorage.getItem('AppTips') && !inIos && inApp) {
-        Dialog.confirm({
-            title: '绿洲服务协议和隐私政策',
-            message:
-                '在您使用我的各项服务之前,请务必审慎阅读、充分理解<a href="/agreement?page=service">《用户隐私协议》</a>、<a href="/agreement">《隐私政策》</a>的条款。并且我们会申请获取您的设备信息,以向您提供安全风控服务。同时您应特别注意前述协议中免除或者限制我们责任的条款、对您权利进行限制的条款。如您已详细阅读并同意绿洲用户协议、隐私政策,请点击【同意并继续】开始使用我们的服务。',
-            confirmButtonText: '同意并继续',
-            cancelButtonText: '不同意',
-            allowHtml: true
-        })
-            .then(() => {
-                return Dialog.confirm({
-                    title: '温馨提示',
-                    message:
-                        '收集个人信息为我们向您提供服务所必须哦。我们仅会将您的个人信息用于为您提供服务,若不同意此协议,我们将无法为您提供服务并退出应用。',
-                    confirmButtonText: '同意',
-                    cancelButtonText: '不同意'
-                });
-            })
-            .then(() => {
-                window.localStorage.setItem('AppTips', '1');
-            });
-    }
-}
-
 if (navigator.userAgent.includes('#cordova#')) {
     document.addEventListener(
         'deviceready',
@@ -296,6 +268,7 @@ if (navigator.userAgent.includes('#cordova#')) {
         false
     );
 } else {
-    loadSplash().then(res => {});
-    window.$vm = app.mount('#app');
+    loadSplash().then(res => {
+        window.$vm = app.mount('#app');
+    });
 }

+ 7 - 0
src/mixins/common.js

@@ -180,6 +180,13 @@ export default {
                     resolve();
                 }, time);
             });
+        },
+        backReson(error) {
+            if (error && error.indexOf('超过商户单日额度') !== -1) {
+                return '绿洲宇宙冷却系统已启动,请稍后支付。';
+            } else {
+                return error;
+            }
         }
     }
 };

+ 1 - 1
src/plugins/colors.js

@@ -18,7 +18,7 @@ export default {
             };
         }
         if (process.env.NODE_ENV == 'development') {
-            app.config.globalProperties.$rating = 1;
+            app.config.globalProperties.$rating = 1000;
         } else {
             app.config.globalProperties.$rating = 1000;
         }

+ 9 - 2
src/router/index.js

@@ -288,8 +288,7 @@ const routes = [
         component: () => import('../views/product/NewsDetail.vue'),
         meta: {
             pageType: Page.Every,
-            title: '第九空间',
-            tabColor: '#181818'
+            title: '第九空间'
         }
     },
     {
@@ -590,6 +589,14 @@ const routes = [
         meta: {
             title: '第九空间'
         }
+    },
+    {
+        path: '/rank',
+        name: 'rank',
+        component: () => import('../views/user/Rank.vue'),
+        meta: {
+            title: '第九空间'
+        }
     }
 ];
 

+ 3 - 3
src/styles/app.less

@@ -260,9 +260,9 @@ input:-webkit-autofill {
         background-size: 100% 100%;
         position: absolute;
         left: 50%;
-        top: 47%;
+        top: 50%;
         transform: translate(-50%, -50%);
-        width: 126%;
-        height: 126%;
+        width: 124%;
+        height: 124%;
     }
 }

+ 1 - 1
src/views/Creator.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="discover">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <div class="top-btn">
                     <div class="btn" @click="$router.replace('/discover')">收藏探索</div>

+ 1 - 1
src/views/Discover.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="discover">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <img src="@assets/nav_logo.png" class="logo" alt="" />
 

+ 1 - 1
src/views/DiscoverPre.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="discover">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <div class="top-btn">
                     <div class="btn active">收藏探索</div>

+ 39 - 13
src/views/Home.vue

@@ -28,16 +28,17 @@
             </swiper-slide>
         </swiper>
 
-        <div class="tabs" v-if="!empty">
+        <!-- <div class="tabs" v-if="!empty">
             <div class="tab" :class="{ active: active === 0 }" @click="active = 0">数字藏品</div>
             <div class="tab" :class="{ active: active === 1 }" @click="active = 1">产品新闻端</div>
-        </div>
+        </div> -->
 
         <div class="list" v-if="active == 0">
             <product-large
                 v-for="(item, index) in products"
                 :key="index"
-                v-model:info="products[index]"
+                v-model:info="products[index].obj"
+                :type="item.type"
             ></product-large>
         </div>
         <template v-else>
@@ -99,30 +100,54 @@ export default {
             StatusBar.styleDefault();
         }
         this.getInit();
+        this.showTips();
         // this.$http.get('sysConfig/get/home_bg').then(res => {
         //     this.bgImg = res.value || '';
         // });
     },
     methods: {
+        showTips() {
+            let inApp = /#cordova#/i.test(navigator.userAgent);
+            let inIos = /iPhone|iPad|iPod/i.test(navigator.userAgent);
+
+            if (!window.localStorage.getItem('AppTips') && !inIos && inApp) {
+                this.$dialog
+                    .confirm({
+                        title: 'RAEX宇宙服务协议和隐私政策',
+                        message: `在您使用我的各项服务之前,请务必审慎阅读、充分理解<a href="javascript:void(0)" onclick="goFetch('/agreement?page=service')" >《用户隐私协议》</a>、<a href="javascript:void(0)" onclick="goFetch('/agreement')" >《隐私政策》</a>的条款。并且我们会申请获取您的设备信息,以向您提供安全风控服务。同时您应特别注意前述协议中免除或者限制我们责任的条款、对您权利进行限制的条款。如您已详细阅读并同意RAEX宇宙用户协议、隐私政策,请点击【同意并继续】开始使用我们的服务。`,
+                        confirmButtonText: '同意并继续',
+                        cancelButtonText: '不同意',
+                        allowHtml: true
+                    })
+                    .then(() => {
+                        return this.$dialog.confirm({
+                            title: '温馨提示',
+                            message:
+                                '收集个人信息为我们向您提供服务所必须哦。我们仅会将您的个人信息用于为您提供服务,若不同意此协议,我们将无法为您提供服务并退出应用。',
+                            confirmButtonText: '同意',
+                            cancelButtonText: '不同意'
+                        });
+                    })
+                    .then(() => {
+                        window.localStorage.setItem('AppTips', '1');
+                    });
+            }
+        },
         getInit() {
             this.$toast.loading({
                 message: '加载中...',
                 forbidClick: true
             });
             this.getBanner();
-            this.getProduct('LIST').then(res => {
+            this.getProduct().then(res => {
                 this.products = res;
             });
-            this.getNews();
+            // this.getNews();
         },
-        getProduct(type = 'BANNER') {
-            return this.$http
-                .get('/collection/recommend', {
-                    type: type
-                })
-                .then(res => {
-                    return Promise.resolve(res);
-                });
+        getProduct() {
+            return this.$http.get('/collection/recommend').then(res => {
+                return Promise.resolve(res);
+            });
         },
         getBanner() {
             this.$http
@@ -256,6 +281,7 @@ export default {
     // background-color: @bg3;
     position: relative;
     z-index: 1;
+    background-color: #f5f7fa;
 }
 
 ::v-deep(.mySwiper) {

+ 2 - 2
src/views/Index.vue

@@ -84,9 +84,9 @@ export default {
         border: 1px solid @bg3;
     }
     &.bgBack {
-        background-color: #181818;
+        background-color: #222426;
         &::after {
-            border: 1px solid #181818;
+            border: 1px solid #222426;
         }
     }
 }

+ 296 - 162
src/views/Mine.vue

@@ -3,18 +3,23 @@
         <div class="userInfo" v-if="isLogin">
             <van-image
                 width="100%"
-                height="35vw"
+                height="52vw"
                 :src="userInfo.bg || require('@assets/creatorBg.png')"
                 loading-icon=""
                 fit="cover"
                 class="top-img"
             />
+
+            <div class="edit-btn" @click="$router.push('/setting')">
+                <img src="../assets/icon-bianji1.png" alt="" />
+                <span>编辑资料</span>
+            </div>
             <div class="userInfo-content">
                 <div class="userInfo-top">
                     <van-image
                         round
-                        width="78"
-                        height="78"
+                        width="150"
+                        height="150"
                         :src="userInfo.avatar || require('@assets/img_default_photo.png')"
                         fit="cover"
                         :class="{ activeAvatar: isLogin && userInfo.useCollectionPic }"
@@ -23,19 +28,23 @@
                     <div class="text">
                         <div class="text1">
                             <span class="van-ellipsis" style="max-width: 120px">{{ userInfo.nickname }}</span>
-
-                            <img
-                                @click="$router.push('/verifiedSuc')"
-                                v-if="authStatus === '已认证'"
-                                src="@assets/yirenzhng-geren-icon.png"
-                                alt=""
-                                class="renzhen-img"
-                            />
                         </div>
                         <div class="text2">
                             <span> 用户ID:{{ userInfo.id }} </span>
                             <img @click="copy" src="@assets/svgs/copy_icon.svg" alt="" />
                         </div>
+                        <div class="icons" @click="goAuth">
+                            <div class="auth-imgs" v-if="authStatus !== '已认证'">
+                                <img src="../assets/renzheng_icon.png" alt="" />
+                                <span>未实名认证</span>
+                            </div>
+                            <div class="auth-imgs authed" @click="goAuth" v-else>
+                                <img src="../assets/yirenzhng-geren-icon.png" alt="" />
+                                <span>个人已认证</span>
+                            </div>
+
+                            <level></level>
+                        </div>
                     </div>
                 </div>
 
@@ -43,52 +52,45 @@
                     {{ userInfo.intro }}
                 </div>
                 <div class="sub-right" v-if="userInfo && userInfo.intro && userInfo.intro.length > 50">
-                    <div @click="showMore = !showMore">{{ showMore ? '收起' : '展开' }}</div>
+                    <img
+                        @click="showMore = !showMore"
+                        :class="{ subAll: showMore }"
+                        src="../assets/icon-xialajiantou.png"
+                        alt=""
+                    />
                 </div>
 
                 <div class="btns">
+                    <div class="collect" @click="$router.push('/store')">
+                        <div class="text1">{{ assetNum }}</div>
+                        <div class="text2">藏品数</div>
+                    </div>
                     <div class="collect" @click="$router.push('/mineFollows')">
-                        <div class="text2">关注</div>
                         <div class="text1">{{ userInfo.follows }}</div>
+                        <div class="text2">关注</div>
                     </div>
                     <div class="collect" @click="$router.push('/mineFollowers')">
-                        <div class="text2">粉丝</div>
                         <div class="text1">{{ userInfo.followers }}</div>
+                        <div class="text2">粉丝</div>
                     </div>
-
-                    <van-button
-                        color="#F5F7FA"
-                        size="mini"
-                        :icon="require('@assets/renzheng_icon.png')"
-                        round
-                        class="auth"
-                        @click="goAuth"
-                        v-if="authStatus !== '已认证'"
-                    >
-                        {{ authStatus === '未认证' ? '去认证' : authStatus }}
-                    </van-button>
-
-                    <van-button class="edit" @click="$router.push('/setting')" color="#F5F7FA" size="mini" round
-                        >编辑资料</van-button
-                    >
                 </div>
             </div>
         </div>
         <div class="userInfo" v-else>
             <van-image
                 width="100%"
-                height="35vw"
+                height="52vw"
                 :src="require('@assets/creatorBg.png')"
                 loading-icon=""
                 fit="cover"
                 class="top-img"
             />
             <div class="userInfo-content">
-                <div class="userInfo-top">
+                <div class="userInfo-top" @click="$router.push('/login')">
                     <van-image
                         round
-                        width="78"
-                        height="78"
+                        width="150"
+                        height="150"
                         :src="require('@assets/img_default_photo.png')"
                         fit="cover"
                         @click="$router.push('/login')"
@@ -96,86 +98,97 @@
 
                     <div class="text">
                         <div class="text1" @click="$router.push('/login')">点击登录</div>
-                        <div class="text2">立即登录获取精彩服务</div>
+                        <div class="text2" style="padding-bottom: 16px">立即登录获取精彩服务</div>
                     </div>
                 </div>
             </div>
         </div>
-        <div class="card">
-            <van-cell class="title" title="我的订单" :border="false" />
-
-            <div class="orderList">
-                <div class="order-info" @click="$router.push('/orders?type=DEFAULT')">
-                    <img src="@assets/info_icon_shangpindingdan.png" alt="" />
-                    <span>作品订单</span>
-                </div>
-                <div class="order-info" @click="$router.push('/activityOrders')" v-if="!$store.state.review">
-                    <img src="@assets/info_icon_zhuzaodingdan.png" alt="" />
-                    <span>铸造订单</span>
+        <driver />
+        <div class="orderList">
+            <div class="order-info" @click="$router.push('/orders?type=DEFAULT')">
+                <div class="order-info-box">
+                    <img src="@assets/info_icon_yishuping.png" alt="" />
+                    <span>艺术品订单</span>
                 </div>
             </div>
+            <div class="order-info" @click="$router.push('/activityOrders')" v-if="!$store.state.review">
+                <img src="@assets/info_icon_zhuzaodingdan.png" alt="" />
+                <span>铸造订单</span>
+            </div>
         </div>
-        <div class="card">
-            <van-cell class="title" title="我的服务" :border="false" />
-
-            <van-grid class="menus" :border="false">
-                <van-grid-item text="我的银行卡" :to="{ path: '/mineBanks' }">
-                    <template #icon>
-                        <van-icon :name="require('@assets/icon_yinhangka.png')" class="search-icon" />
-                    </template>
-                </van-grid-item>
-                <van-grid-item text="我的积分" @click="wait" v-if="!$store.state.review">
-                    <template #icon>
-                        <van-icon :name="require('@assets/icon-jifen.png')" class="search-icon" />
-                    </template>
-                </van-grid-item>
-                <van-grid-item text="我赞过的" :to="{ path: '/mineLikes' }">
-                    <template #icon>
-                        <van-icon :name="require('@assets/icon-dianzan1.png')" class="search-icon" />
-                    </template>
-                </van-grid-item>
-                <van-grid-item text="地址管理" :to="{ path: '/mineAddress' }" v-if="!$store.state.review">
-                    <template #icon>
-                        <van-icon :name="require('@assets/icon_dizhi.png')" class="search-icon" />
-                    </template>
-                </van-grid-item>
-                <van-grid-item text="交易历史" :to="{ path: '/mineExchange' }">
-                    <template #icon>
-                        <van-icon :name="require('@assets/info_icon_jiaoyijilu.png')" class="search-icon" />
-                    </template>
-                </van-grid-item>
-                <van-grid-item text="了解更多" :to="{ path: '/question' }">
-                    <template #icon>
-                        <van-icon :name="require('@assets/icon_liaojiegengduo.png')" class="search-icon" />
-                    </template>
-                </van-grid-item>
-                <van-grid-item text="关于我们" :to="{ path: '/about' }">
-                    <template #icon>
-                        <van-icon :name="require('@assets/icon-guanyuwomen.png')" class="search-icon" />
-                    </template>
-                </van-grid-item>
-                <van-grid-item text="账号与安全" :to="{ path: '/security' }">
-                    <template #icon>
-                        <van-icon :name="require('@assets/icon-anquan.png')" class="search-icon" />
-                    </template>
-                </van-grid-item>
-            </van-grid>
+        <driver />
+        <div class="orderList prim">
+            <div class="order-info" @click="$router.push('/rank')">
+                <img src="@assets/info_icon_top50.png" alt="" />
+                <span>TOP50&nbsp;探索官</span>
+            </div>
+            <div class="order-info" @click="wait">
+                <img src="@assets/info_icon_yaoqing.png" alt="" />
+                <span>立即邀请</span>
+            </div>
         </div>
+        <van-grid class="menus">
+            <van-grid-item text="我的银行卡" :to="{ path: '/mineBanks' }">
+                <template #icon>
+                    <van-icon :name="require('@assets/icon_yinhangka.png')" class="search-icon" />
+                </template>
+            </van-grid-item>
+            <van-grid-item text="我的积分" @click="wait" v-if="!$store.state.review">
+                <template #icon>
+                    <van-icon :name="require('@assets/icon-jifen.png')" class="search-icon" />
+                </template>
+            </van-grid-item>
+            <van-grid-item text="我喜欢的" :to="{ path: '/mineLikes' }">
+                <template #icon>
+                    <van-icon :name="require('@assets/icon-dianzan1.png')" class="search-icon" />
+                </template>
+            </van-grid-item>
+            <van-grid-item text="通知广播" @click="wait" v-if="!$store.state.review">
+                <template #icon>
+                    <van-icon :name="require('@assets/icon_tongzhi.png')" class="search-icon" />
+                </template>
+            </van-grid-item>
+            <van-grid-item text="交易历史" :to="{ path: '/mineExchange' }">
+                <template #icon>
+                    <van-icon :name="require('@assets/info_icon_jiaoyijilu.png')" class="search-icon" />
+                </template>
+            </van-grid-item>
+            <!-- <van-grid-item text="了解更多" :to="{ path: '/question' }">
+                <template #icon>
+                    <van-icon :name="require('@assets/icon_liaojiegengduo.png')" class="search-icon" />
+                </template>
+            </van-grid-item> -->
+
+            <van-grid-item text="地址管理" :to="{ path: '/mineAddress' }" v-if="!$store.state.review">
+                <template #icon>
+                    <van-icon :name="require('@assets/icon_dizhi.png')" class="search-icon" />
+                </template>
+            </van-grid-item>
+            <van-grid-item text="关于我们" :to="{ path: '/about' }">
+                <template #icon>
+                    <van-icon :name="require('@assets/icon-guanyuwomen.png')" class="search-icon" />
+                </template>
+            </van-grid-item>
+            <van-grid-item text="账号与安全" :to="{ path: '/security' }">
+                <template #icon>
+                    <van-icon :name="require('@assets/icon-anquan.png')" class="search-icon" />
+                </template>
+            </van-grid-item>
+        </van-grid>
 
         <div class="tabbar-placeholder"></div>
-
-        <level></level>
     </div>
 </template>
 
 <script>
 import { mapState } from 'vuex';
-import Level from '../components/level/Level';
+import Level from '../components/level/Level.vue';
 export default {
     data() {
         return {
             org: false,
-            showMore: false
+            showMore: false,
+            assetNum: 0
         };
     },
     components: { Level },
@@ -201,7 +214,33 @@ export default {
                         this.org = this.form.org;
                     }
                 });
+
+            this.$http
+                .post(
+                    '/asset/all',
+                    {
+                        query: {
+                            page: 0,
+                            size: 1,
+                            userId: this.$store.state.userInfo.id,
+                            status: 'NORMAL,TRADING,GIFTING,MINTING'
+                        }
+                    },
+                    { body: 'json' }
+                )
+                .then(res => {
+                    this.assetNum = Number(res.totalElements);
+                });
         }
+
+        if (window.cordova && StatusBar && StatusBar.isVisible) {
+            StatusBar.backgroundColorByHexString('#222426');
+            StatusBar.styleLightContent();
+        }
+        this.$nextTick(() => {
+            this.$el.parentNode.childNodes[1].className =
+                this.$el.parentNode.childNodes[1].className.replace(/ bgBack/, '') + ' bgBack';
+        });
     },
     methods: {
         copy() {
@@ -223,6 +262,13 @@ export default {
                 this.$router.push('/Authentication');
             }
         }
+    },
+    beforeRouteLeave(to, from, next) {
+        this.$el.parentNode.childNodes[1].className = this.$el.parentNode.childNodes[1].className.replace(
+            / bgBack/,
+            ''
+        );
+        next();
     }
 };
 </script>
@@ -230,7 +276,7 @@ export default {
 <style lang="less" scoped>
 .mine {
     padding-bottom: 100px;
-    background-color: @bg;
+    background-color: #272b2e;
     padding-top: 0 !important;
     position: relative;
 }
@@ -308,41 +354,53 @@ export default {
 }
 .orderList {
     .flex();
-    padding: 0 12px;
+    // padding: 0 12px;
     .order-info {
-        padding: 20px 0;
+        padding: 16px 0;
         position: relative;
+        width: 50%;
+        box-sizing: border-box;
         .flex();
-        background-color: @bg;
-        flex-grow: 1;
         justify-content: center;
-        border-radius: 8px;
+
+        .order-info-box {
+            .flex();
+            width: 132px;
+        }
         img {
             width: 32px;
             height: 32px;
-            margin-right: 12px;
+            margin-right: 8px;
         }
         span {
-            font-size: @font2;
-            color: @text0;
+            font-size: 14px;
+            font-weight: bold;
+            color: #ffffff;
             line-height: 24px;
         }
 
         &:active {
-            background-color: @bg2;
+            // background-color: @bg2;
         }
     }
     .order-info + .order-info {
-        margin-left: 20px;
+        // margin-left: 20px;
         &::before {
             content: '';
             width: 1px;
-            height: 32px;
-            background-color: @bg3;
+            background-color: #373b3e;
             position: absolute;
-            left: -10px;
-            top: 50%;
-            transform: translateY(-50%);
+            left: -0.5px;
+            top: 0;
+            bottom: 0;
+        }
+    }
+
+    &.prim {
+        span {
+            font-weight: normal;
+            color: #43ce00;
+            font-family: 'ZhenyanGB';
         }
     }
 }
@@ -350,6 +408,10 @@ export default {
     display: block;
 }
 
+.driver {
+    background-color: #373b3e;
+}
+
 /deep/ .van-grid-item {
     .van-grid-item__text {
         font-size: @font1;
@@ -392,32 +454,55 @@ export default {
     }
 }
 .userInfo {
-    padding-top: 35vw;
-    border-bottom: 1px solid @bg2;
+    padding-top: 52vw;
+    // border-bottom: 1px solid @bg2;
     position: relative;
+    margin-bottom: -103px;
 
     .top-img {
         position: absolute;
         top: 0;
         left: 0;
         z-index: 1;
+        &::after {
+            content: '';
+            position: absolute;
+            left: 0;
+            bottom: 0;
+            height: 90px;
+            right: 0;
+            z-index: 1;
+            background: linear-gradient(180deg, rgba(39, 43, 46, 0) 0%, #272b2e 100%);
+        }
     }
 }
 .userInfo-content {
     padding: 0 16px;
     z-index: 2;
     position: relative;
-    transform: translateY(-16px);
+    transform: translateY(-103px);
     .sub {
         font-size: 12px;
         color: @text3;
-        line-height: 22px;
-        padding: 9px 0 0;
+        line-height: 17px;
+        padding: 2px 0 0;
+        text-align: center;
     }
 
     .sub-right {
         .flex();
-        justify-content: flex-end;
+        margin-top: 4px;
+        justify-content: center;
+        img {
+            width: 18px;
+            height: 18px;
+            display: block;
+            transition: transform ease-in-out 0.3s;
+
+            &.subAll {
+                transform: rotate(180deg);
+            }
+        }
     }
 
     .sub-right > div {
@@ -431,47 +516,23 @@ export default {
         display: flex;
         // padding-bottom: 16px;
         align-items: center;
-        margin-top: 10px;
+
         .collect {
-            .flex();
+            width: 33%;
+            .flex-col();
+            align-items: center;
+            padding: 16px 0;
             .text1 {
-                font-size: @font2;
-                color: @text0;
+                font-size: 18px;
+                color: #fff;
                 line-height: 24px;
-                margin-left: 6px;
+                font-weight: bold;
             }
             .text2 {
-                font-size: @font2;
+                font-size: 12px;
                 color: @text3;
-                line-height: 24px;
-            }
-            &:nth-child(2) {
-                flex-grow: 1;
-                margin: 0 22px;
-            }
-        }
-
-        /deep/.van-button {
-            width: 90px;
-            .van-icon__image {
-                display: block;
-                width: 18px;
-                height: 18px;
-            }
-            color: @text3 !important;
-        }
-        .van-button + .van-button {
-            margin-left: 10px;
-        }
-
-        .verid {
-            /deep/ span {
-                color: #d8d8d8;
-                line-height: 24px;
-                background: linear-gradient(45deg, #fdfb60 0%, #ff8f3e 100%);
-                background-clip: text;
-                -webkit-background-clip: text;
-                -webkit-text-fill-color: transparent;
+                line-height: 17px;
+                margin-top: 2px;
             }
         }
     }
@@ -481,25 +542,30 @@ export default {
     align-items: center;
     transform: translateX(-5px);
     position: relative;
+    flex-direction: column;
     .van-image {
-        border: 5px solid @bg;
+        // border: 5px solid @bg;
         flex-shrink: 0;
     }
 
     /deep/.van-image {
         img {
-            transform: translateY(-2px);
+            // transform: translateY(-2px);
         }
     }
 
     .text {
         margin: 0 10px 0 12px;
         overflow: hidden;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
         .text1 {
-            font-size: @font3;
+            font-size: 24px;
             font-weight: bold;
-            color: @text0;
+            color: @bg;
             line-height: 24px;
+            margin-top: 10px;
             .flex();
             // img {
             //     width: 18px;
@@ -510,16 +576,50 @@ export default {
             // }
         }
         .text2 {
-            font-size: @font2;
-            color: @text3;
+            font-size: 14px;
+            color: #949699;
             line-height: 24px;
             display: flex;
             align-items: center;
+            margin-top: 2px;
             img {
                 display: block;
                 margin-left: 6px;
             }
         }
+
+        .icons {
+            .flex();
+            .auth-imgs {
+                .flex();
+                transform: translateX(15px);
+                img {
+                    width: 28px;
+                    height: 28px;
+                    position: relative;
+                    z-index: 1;
+                }
+                span {
+                    font-size: 12px;
+                    color: #939599;
+                    line-height: 18px;
+                    background: #373b3e;
+                    border-radius: 2px;
+                    padding: 0 4px 0 10px;
+                    transform: scale(0.8) translateX(-24px);
+                    position: relative;
+                    z-index: 0;
+                }
+
+                &.authed {
+                    span {
+                        color: #ff8f3e;
+                        background-color: #ffefe8;
+                        position: relative;
+                    }
+                }
+            }
+        }
     }
 
     .renzhen-img {
@@ -531,13 +631,25 @@ export default {
     }
 }
 .menus {
-    margin: 0 16px;
-    background-color: @bg;
-    border-radius: 8px;
-    overflow: hidden;
+    // margin: 0 16px;
+    // background-color: @bg;
+    // border-radius: 8px;
+    // overflow: hidden;
     &.van-grid {
         margin: 0;
     }
+
+    /deep/.van-grid-item__text {
+        color: #fff;
+    }
+
+    /deep/.van-grid-item__content:after {
+        border-color: #373b3e;
+    }
+
+    /deep/&.van-hairline--top:after {
+        border-color: #373b3e;
+    }
 }
 
 /deep/.auth {
@@ -563,4 +675,26 @@ export default {
     border-radius: 12px;
     margin: 16px;
 }
+
+.edit-btn {
+    position: absolute;
+    right: 16px;
+    top: 16px;
+    .flex();
+    z-index: 20;
+    img {
+        width: 18px;
+        height: 18px;
+    }
+    span {
+        font-size: 10px;
+        color: #ffffff;
+        line-height: 10px;
+    }
+    width: 82px;
+    height: 24px;
+    background: #272b2e;
+    border-radius: 4px;
+    justify-content: center;
+}
 </style>

+ 13 - 7
src/views/Store.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="discover">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <div class="top-btn">
                     <div class="btn" :class="{ active: active === 'explore' }" @click="changeActive('explore')">
@@ -206,7 +206,7 @@ export default {
     },
     mounted() {
         if (window.cordova && StatusBar && StatusBar.isVisible) {
-            StatusBar.backgroundColorByHexString('#181818');
+            StatusBar.backgroundColorByHexString('#222426');
             StatusBar.styleLightContent();
         }
         this.$nextTick(() => {
@@ -245,7 +245,7 @@ export default {
         this.$nextTick(() => {
             this.changeScroll(this.scrollTop);
             if (window.cordova && StatusBar && StatusBar.isVisible) {
-                StatusBar.backgroundColorByHexString('#181818');
+                StatusBar.backgroundColorByHexString('#222426');
                 StatusBar.styleLightContent();
             }
 
@@ -352,7 +352,7 @@ export default {
 .top {
     display: flex;
     padding: 10px 16px;
-    background-color: #181818;
+    background-color: #222426;
     .top-btn {
         flex-grow: 1;
         .btn {
@@ -380,9 +380,11 @@ export default {
         }
     }
 }
-
+/deep/.van-sticky--fixed {
+    background-color: #222426;
+}
 .van-tabs {
-    background-color: #181818;
+    background-color: #222426;
 }
 .select {
     position: absolute;
@@ -406,6 +408,10 @@ export default {
 .van-grid {
     margin-top: 12px;
 }
+/deep/.van-tabs__nav--line.van-tabs__nav--complete {
+    border-top-color: #303133;
+}
+
 /deep/ .van-grid-item__content {
     padding: 14px 20px 16px;
 }
@@ -427,7 +433,7 @@ export default {
     // display: flex;
     // flex-wrap: wrap;
     // padding: 8px 8px 100px;
-    padding: 0 0 0 5.3vw;
+    padding: 0 0 0 4.2vw;
     background-size: 100vw 42vw;
     background-position: 0 -10vw;
     box-sizing: border-box;

+ 4 - 4
src/views/Submit.vue

@@ -352,7 +352,7 @@ export default {
                         this.$dialog
                             .alert({
                                 title: '提示',
-                                message: e.error
+                                message: this.backReson(e.error)
                             })
                             .then(res => {
                                 this.$router.back();
@@ -441,12 +441,12 @@ export default {
                                         resolve();
                                     })
                                     .catch(e => {
-                                        if (e.error) {
+                                        if (e && e.error) {
                                             this.$toast.clear();
                                             this.$dialog
                                                 .alert({
                                                     title: '提示',
-                                                    message: e.error
+                                                    message: this.backReson(e.error)
                                                 })
                                                 .then(res => {
                                                     this.$router.back();
@@ -498,7 +498,7 @@ export default {
                                     this.$dialog
                                         .alert({
                                             title: '提示',
-                                            message: e.error || '支付失败请稍后再试'
+                                            message: this.backReson(e.error || '支付失败请稍后再试')
                                         })
                                         .then(res => {
                                             this.$router.back();

+ 1 - 0
src/views/account/About.vue

@@ -3,6 +3,7 @@
         <div class="title">关于我们</div>
         <van-cell-group :border="false">
             <van-cell title="平台简介" is-link :to="{ path: '/introduction' }" />
+            <van-cell title="了解更多" is-link :to="{ path: '/question' }" />
             <van-cell title="联系客服" @click="show = true" is-link />
         </van-cell-group>
 

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

@@ -18,7 +18,7 @@ export default {
         let page = this.$route.query.page || 'privacy';
         this.$http.get(`/${page}.html`).then(res => {
             let contents = res.split('<body>')[1].split('</body>');
-            this.detail = contents[0];
+            this.detail = contents[0].replace(/绿洲/g, 'RAEX');
         });
     },
     methods: {}

+ 7 - 6
src/views/account/Introduction.vue

@@ -4,18 +4,19 @@
             <div>
                 <div class="align-center">平台简介</div>
                 <p>
-                    RAEX绿洲是全球领先的专业艺术品生态簇运营商,重点打造“全球领先数字藏品生态簇”的产业闭环,持续塑造推出中国权威数字文创商品,参与全球数字藏品定价体系,加速“一带一路”的全球文化内容输出。在这里您可以创造、收集、售卖您的艺术品及数字手办潮玩,感受全球顽家为您带来的新奇别致体验,共同探索艺术宇宙的真实奥秘!欢迎您的加入!
+                    RAEXRAEX宇宙是全球领先的专业艺术品生态簇运营商,重点打造“全球领先数字藏品生态簇”的产业闭环,持续塑造推出中国权威数字文创商品,参与全球数字藏品定价体系,加速“一带一路”的全球文化内容输出。在这里您可以创造、收集、售卖您的艺术品及数字手办潮玩,感受全球顽家为您带来的新奇别致体验,共同探索艺术宇宙的真实奥秘!欢迎您的加入!
                 </p>
                 <p>
-                    绿洲宇宙,是元宇宙游戏《The Oasis绿洲》旗下重要的艺术品生态簇底层架构及原生内容展示平台,是《The
-                    Oasis绿洲》体系中的核心载体之一。
+                    RAEX宇宙,是元宇宙游戏《The Oasis
+                    RAEX宇宙》旗下重要的艺术品生态簇底层架构及原生内容展示平台,是《The Oasis
+                    RAEX宇宙》体系中的核心载体之一。
                 </p>
                 <p>
-                    《The
-                    Oasis绿洲》的重要特征是开放和自由创作,且可进行不断扩张,摆脱了现实世界时间和空间的束缚,让用户能够放飞自己的想象力,在虚拟世界里自由搭建自己想要做的东西,并在用户互动中碰撞出更多的灵感火花。用户可以搭建建筑并展出自己的成果。用户购买虚拟地产后,可以通过搭建自己喜欢的建筑,展示自己的数字藏品,或者搭建自己的办公室甚至可以在里面开餐厅、数字展厅等。这些成果还可以在项目内进行交易、展览,获得项目积分支持。
+                    《The Oasis
+                    RAEX宇宙》的重要特征是开放和自由创作,且可进行不断扩张,摆脱了现实世界时间和空间的束缚,让用户能够放飞自己的想象力,在虚拟世界里自由搭建自己想要做的东西,并在用户互动中碰撞出更多的灵感火花。用户可以搭建建筑并展出自己的成果。用户购买虚拟地产后,可以通过搭建自己喜欢的建筑,展示自己的数字藏品,或者搭建自己的办公室甚至可以在里面开餐厅、数字展厅等。这些成果还可以在项目内进行交易、展览,获得项目积分支持。
                 </p>
                 <p>
-                    绿洲宇宙于全球范围内持续性引入世界级IP,建立强大且完善的IP数据库:包含演艺明星、体育赛事、科技潮玩,潮流音乐,当红小说、知名艺术品及流量动漫在内的多种配置。
+                    RAEX宇宙于全球范围内持续性引入世界级IP,建立强大且完善的IP数据库:包含演艺明星、体育赛事、科技潮玩,潮流音乐,当红小说、知名艺术品及流量动漫在内的多种配置。
                 </p>
             </div>
         </div>

+ 3 - 3
src/views/account/Login.vue

@@ -1,7 +1,7 @@
 <template>
     <div
         class="login"
-        :class="{ loginHeight: bar.value.show }"
+        :class="{ loginHeight: bar.value && bar.value.show }"
         :style="{ backgroundImage: `url(${require('../../assets/login.jpg')})` }"
     >
         <img class="logo" v-if="active === 'phone'" src="../../assets/lvzhopu-logo.png" alt="" />
@@ -50,7 +50,7 @@
 
                 <van-button block native-type="submit" color="#26F50D" class="sure">现在出发!</van-button>
                 <van-button class="del" block plain @click="$router.replace('/register')"
-                    >暂无绿洲宇宙登陆许可 立即申领</van-button
+                    >暂无RAEX宇宙登陆许可 立即申领</van-button
                 >
             </div>
         </van-form>
@@ -106,7 +106,7 @@
 
                 <van-button block native-type="submit" color="#26F50D" class="sure">现在出发!</van-button>
                 <van-button class="del" block plain @click="$router.replace('/register')"
-                    >暂无绿洲宇宙登陆许可 立即申领</van-button
+                    >暂无RAEX宇宙登陆许可 立即申领</van-button
                 >
             </div>
         </van-form>

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

@@ -11,7 +11,7 @@
                 <p>您好~已购买的数字藏品是经过蚂蚁链确权,权属清晰、数量透明,永不增发的藏品,极具收藏价值。</p>
                 <h6>3.如何购买数字藏品?</h6>
                 <p>您好~购买步骤如下:</p>
-                <p>1)下载绿洲宇宙;</p>
+                <p>1)下载RAEX宇宙;</p>
                 <p>2)注册账号;</p>
                 <p>3)浏览首页/发现页中的商品;</p>
                 <p>4)点击“立即购买“,付款;</p>

+ 2 - 2
src/views/account/Register.vue

@@ -1,7 +1,7 @@
 <template>
     <div
         class="login"
-        :class="{ loginHeight: bar.value.show }"
+        :class="{ loginHeight: bar.value && bar.value.show }"
         :style="{ backgroundImage: `url(${require('../../assets/login.jpg')})` }"
     >
         <img class="logo" src="../../assets/lvzhopu-logo.png" alt="" />
@@ -119,7 +119,7 @@
             <div class="button">
                 <van-button round block native-type="submit" color="#26F50D" class="sure"> 立即申领 </van-button>
                 <van-button class="del" round block plain @click="$router.replace('/login')">
-                    已有绿洲宇宙登陆许可 去登陆
+                    已有RAEX宇宙登陆许可 去登陆
                 </van-button>
             </div>
         </van-form>

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

@@ -173,8 +173,8 @@ export default {
                             this.$toast.clear();
                             this.$router.replace('/Waiting');
                         })
-                        .catch(() => {
-                            this.$toast.clear();
+                        .catch(e => {
+                            this.$toast(e.error || '提交失败,请稍后再试');
                         });
                 })
                 .catch(() => {

+ 7 - 9
src/views/asset/Agreement.vue

@@ -2,7 +2,7 @@
     <van-overlay :show="show" @click="show = false" :lock-scroll="false" z-index="99">
         <div class="content" ref="content" @click.stop="">
             <div>
-                <div class="align-center">RAEX绿洲宇宙华储艺术品中心委托拍卖协议</div>
+                <div class="align-center">RAEX宇宙华储艺术品中心委托拍卖协议</div>
                 <h4>委托方(以下简称“甲方”):{{ identityAuthInfo.realName }}</h4>
                 <h3>身份证号:{{ identityAuthInfo.idNo }}</h3>
                 <h3>联系电话:{{ identityAuthInfo.phone }}</h3>
@@ -16,7 +16,7 @@
                 </p>
                 <h5>一、委托关系</h5>
                 <p>
-                    1、乙方系接受甲方委托按照乙方的拍卖程序,通过RAEX绿洲宇宙APP对外公开拍卖,但乙方对拍卖成交不承担保证责任,也不对竞买人的支付能力承担担保责任。<br />
+                    1、乙方系接受甲方委托按照乙方的拍卖程序,通过RAEX宇宙APP对外公开拍卖,但乙方对拍卖成交不承担保证责任,也不对竞买人的支付能力承担担保责任。<br />
                     2、甲方知晓并认可乙方的拍卖程序,并愿意按照乙方的拍卖程序进行拍卖和拍卖交割,由其对拍卖交易的后果承担全部法律责任。
                 </p>
                 <h5>二、拍卖品</h5>
@@ -48,8 +48,8 @@
                 <h5>4、拍卖品的产权转移:</h5>
                 <p>
                     (1)拍卖一旦成交,视为甲方对拍卖结果及拍卖价格无异议。<br />
-                    (2)拍卖成交后,拍卖标的将由RAEX绿洲宇宙APP自动转移至买受人。<br />
-                    (3)拍卖成交后,拍卖所得款项在扣除乙方及RAEX绿洲宇宙APP应得款项后,在T+1个工作日支付至甲方指定的银行账户内。
+                    (2)拍卖成交后,拍卖标的将由RAEX宇宙APP自动转移至买受人。<br />
+                    (3)拍卖成交后,拍卖所得款项在扣除乙方及RAEX宇宙APP应得款项后,在T+1个工作日支付至甲方指定的银行账户内。
                 </p>
                 <h5>5、特别承诺:</h5>
                 <p>
@@ -58,12 +58,10 @@
                     (3)乙方不得转委托而将拍卖品委托其他人进行拍卖。
                 </p>
                 <h5>6、拍卖的佣金与费用:</h5>
-                <p>
-                    双方确认,拍卖佣金为拍卖成交价的2.5%的佣金。该佣金在甲方向RAEX绿洲宇宙APP支付的5%的平台服务费中扣除。
-                </p>
+                <p>双方确认,拍卖佣金为拍卖成交价的2.5%的佣金。该佣金在甲方向RAEX宇宙APP支付的5%的平台服务费中扣除。</p>
                 <h5>7、拍卖品的撤回与撤除:</h5>
                 <p>
-                    (1)甲方在拍卖开始前可以在RAEX绿洲宇宙APP上取消对拍卖品的拍卖委托并撤回拍卖品。但若因此造成乙方或他方损失的,乙方应承担全部赔偿责任。<br />
+                    (1)甲方在拍卖开始前可以在RAEX宇宙APP上取消对拍卖品的拍卖委托并撤回拍卖品。但若因此造成乙方或他方损失的,乙方应承担全部赔偿责任。<br />
                     (2)乙方有确切证据证明拍卖标的存在下列情况之一的,有权单方解除本协议,撤销对拍卖品的拍卖,并不承担由此产生的法律责任:<br />
                     ① 拍卖品的来源不合法或与甲方承诺不符。<br />
                     ② 拍卖品权属存在争议或权属状况与甲方声明不一致的。<br />
@@ -86,7 +84,7 @@
                     (3)甲方参与竞买或委托他人代为竞买自己委托的拍卖品的、甲方故意恶意炒作价格的、甲方进行“托价”行为的,乙方有权制止甲方的相应行为或向有关行政机关举报,并解除合同;甲方对乙方由此受到的损失应承担赔偿责任。<br />
                     2、争议解决:双方因本协议的解释或履行发生争议,应先由双方协商解决。如协商不成,双方任何一方可向乙方所在地人民法院提起诉讼。<br />
                     3、本协议为电子方式签署。自甲方点击“我已阅读且同意签署”按钮即视为协议生效。<br />
-                    4、甲方联络方式为其在乙方RAEX绿洲宇宙APP上所确认之联系方式,若甲方变更联络方式的,应及时通过乙方RAEX绿洲宇宙APP修改或变更。
+                    4、甲方联络方式为其在乙方RAEX宇宙APP上所确认之联系方式,若甲方变更联络方式的,应及时通过乙方RAEX宇宙APP修改或变更。
                 </p>
 
                 <h4>甲方(签章):{{ identityAuthInfo.realName }}</h4>

+ 2 - 2
src/views/asset/Detail.vue

@@ -147,7 +147,7 @@
                     <div class="prive" v-if="init.length > 0">
                         <div class="prive1" :class="{ opened: item.opened }" v-for="(item, index) in init" :key="index">
                             <img v-if="!item.opened" class="img" :src="item.icon[0]" alt="" />
-                            <div style="margin-top: 4px;" v-if="item.icon[2]">
+                            <div style="margin-top: 4px" v-if="item.icon[2]">
                                 <img v-if="item.opened" class="img" :src="item.icon[2]" alt="" />
                             </div>
                             <!-- <img class="img" v-else :src="item.icon[0]" alt="" /> -->
@@ -188,7 +188,7 @@
                             <div class="text4">{{ item.createdAt.substr(0, 16) }}</div>
                         </div>
                     </div>
-                    <div v-else style="display: flex; justify-content: center;">暂无购买记录</div>
+                    <div v-else style="display: flex; justify-content: center">暂无购买记录</div>
                 </van-collapse-item>
             </van-collapse>
 

+ 1 - 1
src/views/asset/GiveSearch.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="search">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="title">赠送</div>
             <div class="name">通过手机号码检索用户信息,<span>确认赠送后该数字藏品将会被转移</span></div>
             <van-search

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

@@ -1,6 +1,6 @@
 <template>
     <div class="discover" :style="{ backgroundColor: isSearch ? $colors.bg3 : $colors.bg }">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <van-search
                 ref="top"
                 shape="round"

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

@@ -1,6 +1,6 @@
 <template>
     <div class="follow">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <div class="name">铸造者</div>
                 <img src="@assets/icon-sosuo.png" @click="$router.push('/creatorSearch')" alt="" class="search" />

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

@@ -1,6 +1,6 @@
 <template>
     <div class="search" :style="{ backgroundColor: isSearch ? $colors.bg3 : $colors.bg }">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <van-search
                 ref="top"
                 shape="round"

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

@@ -1,6 +1,6 @@
 <template>
     <div class="discover">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <!-- <div class="top">
                 <div class="top-btn">
                     <div class="btn" :class="{ active: type === 'DEFAULT' }" @click="changeActive('DEFAULT')">

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

@@ -1,6 +1,6 @@
 <template>
     <div class="discover">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <div class="top-btn">
                     <div class="btn" :class="{ active: type === 'DEFAULT' }" @click="changeActive('DEFAULT')">

+ 24 - 3
src/views/product/Detail.vue

@@ -264,7 +264,7 @@
                         限购{{ limit.limit }}件
                     </van-button>
                     <template v-else-if="assignment && ((isLogin && userInfo.vipPoint < 1) || !isLogin)">
-                        <div class="btn-assignments" v-if="isLogin && userInfo.vipPurchase">
+                        <div class="btn-assignments" v-if="isLogin && userInfo.vipPurchase && info.openQuota">
                             <van-button @click="vipAssignment" class="vip" type="danger" block round>
                                 vip通道
                             </van-button>
@@ -273,7 +273,14 @@
                             </van-button>
                             <van-button @click="share" v-else type="primary" block round>邀请获取 </van-button>
                         </div>
-                        <van-button style="font-size: 12px" class="no-btn" v-else-if="!info.openQuota" block round>
+                        <van-button
+                            style="font-size: 12px"
+                            @click="showReason"
+                            class="no-btn"
+                            v-else-if="!info.openQuota"
+                            block
+                            round
+                        >
                             活动名额已被抢光
                         </van-button>
                         <van-button
@@ -529,12 +536,25 @@ export default {
                     if (res) {
                         this.blindBoxItems = res.content;
                     }
+                })
+                .catch(e => {
+                    this.$toast.clear();
+                    if (e && e.error) {
+                        this.$dialog
+                            .alert({
+                                title: '提示',
+                                message: e.error
+                            })
+                            .then(res => {
+                                this.$router.back();
+                            });
+                    }
                 });
         },
         showReason() {
             this.$dialog.alert({
                 title: '提示',
-                message: '存在未支付无效订单,等待订单自动5分钟内取消,退回白名单资格。'
+                message: '存在未支付无效订单,等待订单自动5分钟内取消,退回白名单资格。'
             });
         },
         getCouponList() {
@@ -1083,6 +1103,7 @@ export default {
     left: 0;
     right: 0;
     background-color: @bgProductDetail;
+    border-width: 0;
     // background: #202122ee;
 
     // filter: blur(19px);

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

@@ -8,7 +8,7 @@
             </swiper>
         </div>
 
-        <van-sticky ref="top" class="list-top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" class="list-top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top" v-if="!minterId">
                 <div class="name">{{ title || pageName }}</div>
                 <img src="@assets/icon-sosuo.png" alt="" @click="goSearch" class="search" />

+ 18 - 14
src/views/product/NewsDetail.vue

@@ -1,55 +1,59 @@
 <template>
-    <div class="news">
+    <div class="news" :class="{ newsB: info.link }">
         <div class="detail" v-html="info.detail"></div>
         <div class="news-btn" v-if="info.link">
-            <van-button round block type="primary" @click="buy">去购买</van-button>
+            <van-button round block type="primary" @click="goNext(info)">{{ info.buttonName }}</van-button>
         </div>
     </div>
 </template>
 
 <script>
+import banner from '../../mixins/banner';
 export default {
     data() {
         return {
             info: {}
         };
     },
+    mixins: [banner],
     mounted() {
+        this.$toast.loading({
+            message: '加载中...',
+            forbidClick: true
+        });
         this.$http.get('/news/get/' + this.$route.query.id).then(res => {
+            this.$toast.clear();
             this.info = res;
         });
-    },
-    methods: {
-        buy() {
-            if (this.info.linkType === 'collections') {
-                this.$router.push(`/productSearch?search=${this.info.linkContent}&source=TRANSFER`);
-            }
-        }
     }
 };
 </script>
 
 <style lang="less" scoped>
 .news {
-    background-color: #181818;
+    background-color: @bg;
     box-sizing: border-box;
     .detail {
-        background-color: #181818;
+        background-color: @bg;
         /deep/ p {
-            background-color: #181818;
+            background-color: @bg;
             margin: 0;
             img {
                 display: block;
             }
         }
     }
-    padding-bottom: 100px;
+    .bottom(16px);
+
+    &.newsB {
+        .bottom(56px);
+    }
 }
 
 .news-btn {
     position: fixed;
     z-index: 20;
-    background: #181818;
+    background: @bg3;
     padding: 9px 68px;
     .flex();
     left: 0;

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

@@ -1,6 +1,6 @@
 <template>
     <div class="search" :style="{ backgroundColor: isSearch ? $colors.bg3 : $colors.bg }">
-        <van-sticky ref="top" class="list-top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" class="list-top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <van-search
                 ref="top"
                 shape="round"

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

@@ -1,6 +1,6 @@
 <template>
     <div class="follow">
-        <van-sticky :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <div class="name">我的粉丝</div>
             </div>

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

@@ -1,6 +1,6 @@
 <template>
     <div class="follow">
-        <van-sticky :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <div class="name">我关注的</div>
             </div>

+ 2 - 2
src/views/user/Level.vue

@@ -1,9 +1,9 @@
 <template>
     <div class="level">
         <div class="level-title">
-            <div class="text1">绿洲宇宙元力等级系统</div>
+            <div class="text1">RAEX宇宙元力等级系统</div>
             <div class="text2">
-                在绿洲宇宙中使用绿洲石,绿洲石将会产生原力,原力是绿洲藏家晋升之路的基础。原力越高,境界与头衔越高。
+                在RAEX宇宙中使用绿洲石,绿洲石将会产生原力,原力是绿洲藏家晋升之路的基础。原力越高,境界与头衔越高。
             </div>
         </div>
         <level-card :levelInfo="levelInfo" :isMore="isMore" :money="money"></level-card>

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

@@ -1,6 +1,6 @@
 <template>
     <div class="follow">
-        <van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
+        <van-sticky ref="top" :offset-top="bar.value && bar.value.show ? 46 : 0">
             <div class="top">
                 <div class="name">我赞过的</div>
             </div>

+ 201 - 0
src/views/user/Rank.vue

@@ -0,0 +1,201 @@
+<template>
+    <div class="rank">
+        <img src="../../assets/top50.jpg" class="top-img" alt="" />
+        <div class="top-text">
+            <div class="text1">TOP50</div>
+            <div class="text2">探索官</div>
+        </div>
+        <div class="time">
+            <div class="text1">数据时间</div>
+            <div class="text2">{{ time }}</div>
+        </div>
+        <div class="rank-content">
+            <div class="tr">
+                <div class="th">排行</div>
+                <div class="th">用户头像</div>
+                <div class="th">用户名称</div>
+            </div>
+            <div class="tr" v-for="(item, index) in list" :key="index">
+                <div class="td">
+                    <van-image
+                        v-if="index < 3"
+                        width="38"
+                        height="38"
+                        :src="require(`../../assets/info_icon_no${index + 1}.png`)"
+                    />
+                    <span v-else>{{ index + 1 }}</span>
+                </div>
+                <div class="td">
+                    <van-image width="38" height="38" radius="38" :src="item.to_avatar" />
+                    <img class="renzhengIocn" src="../../assets/yirenzhng-geren-icon.png" alt="" />
+                </div>
+                <div class="td">
+                    <span>{{ item.to_user }}</span>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            list: [],
+            time: ''
+        };
+    },
+    mounted() {
+        this.$toast.loading({
+            message: '加载中...',
+            forbidClick: true
+        });
+        this.$http.get('/statistic/weekTop').then(res => {
+            this.$toast.clear();
+            this.list = res;
+        });
+
+        this.time =
+            this.dayjs().add(-7, 'days').startOf('week').format('YYYY-MM-DD HH:mm:ss') +
+            ' ~ ' +
+            this.dayjs().startOf('week').format('MM-DD HH:mm:ss');
+    }
+};
+</script>
+
+<style lang="less" scoped>
+.rank {
+    background-color: #1ea022;
+    position: relative;
+    display: flex;
+    flex-direction: column;
+
+    .top-img {
+        width: 100%;
+        display: block;
+        position: absolute;
+        top: 0;
+        left: 0;
+        z-index: 0;
+    }
+    padding: 48vw 10px 0;
+    min-height: calc(100vh - 46px);
+
+    .top-text {
+        position: absolute;
+        top: 36px;
+        left: 20px;
+        color: #fff;
+
+        .text1 {
+            font-size: 36px;
+            font-family: 'ZhenyanGB';
+        }
+        .text2 {
+            font-size: 28px;
+            font-family: 'ZhenyanGB';
+            margin-top: 10px;
+        }
+    }
+
+    .time {
+        position: absolute;
+        left: 0px;
+        top: calc(48vw - 40px);
+        font-size: 12px;
+        color: #ffffff88;
+        line-height: 12px;
+        transform: scale(0.83) translateX(6px);
+        .text2 {
+            margin-top: 2px;
+        }
+    }
+}
+
+.rank-content {
+    height: 100%;
+    background-color: #fff;
+    border-radius: 16px 16px 0 0;
+    flex-grow: 1;
+    position: relative;
+    z-index: 1;
+    .bottom(15px);
+    overflow: hidden;
+    .tr {
+        overflow: hidden;
+        position: relative;
+        padding: 0 30px;
+        .flex();
+        .th {
+            font-size: 12px;
+            color: #939599;
+            line-height: 17px;
+            padding: 15px 0;
+
+            &:nth-child(1) {
+                width: 38px;
+                text-align: center;
+            }
+
+            &:nth-child(2) {
+                margin: 0 46px 0 37px;
+            }
+        }
+
+        &:not(:first-child) {
+            &::after {
+                content: '';
+                bottom: 0;
+                left: 85px;
+                right: 0;
+                height: 1px;
+                background-color: #f5f7fa;
+                position: absolute;
+            }
+        }
+    }
+
+    .td {
+        padding: 10px 0;
+        flex-shrink: 0;
+        &:nth-child(2) {
+            width: 48px;
+            margin: 0 46px 0 37px;
+            .van-image {
+                margin: auto;
+                display: block;
+            }
+
+            position: relative;
+            .renzhengIocn {
+                position: absolute;
+                width: 16px;
+                height: 16px;
+                right: 3px;
+                bottom: 10px;
+            }
+        }
+
+        &:nth-child(3) {
+            overflow: hidden;
+            flex-grow: 1;
+            span {
+                width: 100%;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+            }
+        }
+
+        &:nth-child(1) {
+            text-align: center;
+            width: 38px;
+            font-size: 20px;
+            font-family: 'AlibabaPuHuiTi';
+            color: #939599;
+            font-weight: bold;
+            line-height: 20px;
+        }
+    }
+}
+</style>