yuany 3 лет назад
Родитель
Сommit
bc2cd49534

BIN
src/assets/bianjicangpin@3x.png


BIN
src/assets/sousuo@3x.png


BIN
src/assets/xiajiacangpin@3x.png


BIN
src/assets/zengsongchenggong@3x.png


BIN
src/assets/zengsongshibai@3x.png


+ 5 - 4
src/components/CollectionList.vue

@@ -13,7 +13,7 @@
                 <div v-else class="showOnly">仅展示</div>
             </div>
             <div class="information_display_con">
-                <span>1000</span>&nbsp;/&nbsp;<span>4000</span>
+                <span>{{ Math.max(Math.min(info.sale, info.total), 0) }}</span>&nbsp;/&nbsp;<span>{{ info.total }}</span>
             </div>
         </div>
         <div class="current_recommendation_bottom">
@@ -23,7 +23,7 @@
                 <div class="current_recommendation_name">{{ info.owner }}</div>
             </div>
             <div class="current_recommendation_bottom_right">
-                <img :src="require('@assets/viewsnumber.png')"  alt="" class="current_recommendation_bottom_right_img" />
+                <img :src="info.liked ? likes : noLikes"  alt="" class="current_recommendation_bottom_right_img" />
                 <div class="give_number">{{info.likes}}</div>
             </div>
         </div>
@@ -52,8 +52,8 @@ export default {
     },
     data() {
         return {
-            noLikes: require('@assets/icon-dianzan.png'),
-            likes: require('@assets/icon-dianzan@2x.png')
+            noLikes: require('@assets/collection@3x.png'),
+            likes: require('@assets/collection_success@3x.png')
         };
     },
     computed: {
@@ -223,6 +223,7 @@ export default {
             margin-right: 2px;
         }
         .give_number {
+            margin-top: 1px;
             margin-left: 2px;
             height: 18px;
             line-height: 18px;

+ 73 - 14
src/components/Post.vue

@@ -20,10 +20,11 @@
                             <div class="name van-multi-ellipsis--l2">
                                 {{ info.name }}
                             </div>
-                            <div class="tabs">
+                            <div class="title_tip">发现一款超赞的数字藏品,快来看看</div>
+                            <!-- <div class="tabs">
                                 <span v-if="info.category">{{ info.category }}</span>
                                 <span v-if="info.number">编号{{ info.number }}</span>
-                            </div>
+                            </div> -->
                             <template v-if="pageUrl !== 'assetDetail'">
                                 <div class="text" v-if="isBuy">
                                     <div class="price">
@@ -52,13 +53,21 @@
                             </template>
                         </div>
                         <div class="minter">
-                            <div class="minter-content">
+                            <div class="minter_con">
+                                <div>
+                                    <div class="minter_con_one">
+                                        <div class="minter_con_one_text1">拉索</div>
+                                        <div class="minter_con_one_text2" v-if="info.category">{{ info.category }}</div>
+                                    </div>
+                                    <div class="minter_con_two">扫码打开拉索app,发现有趣数字藏品</div>
+                                </div>
+                                <vue-qrcode :value="url" :options="{ width: 70, margin: 3 }" class="code"></vue-qrcode>
+                            </div>
+                            <!-- <div class="minter-content">
                                 <van-image width="26" height="26" round :src="userImg" fit="cover" />
                                 <div class="text1">{{ info.minter }}</div>
                                 <div class="text2">铸造者</div>
-                            </div>
-
-                            <vue-qrcode :value="url" :options="{ width: 70, margin: 3 }" class="code"></vue-qrcode>
+                            </div> -->
                         </div>
                         <div class="sold xianliang" v-if="time">
                             <img src="@assets/shizhong.png" alt="" />
@@ -272,12 +281,22 @@ export default {
 }
 
 .info {
-    padding: 12px 10px 7px;
+    // padding: 12px 10px 7px;
+    padding: 15px;
     .name {
-        font-size: 18px;
-        font-weight: bold;
-        color: @text0;
-        line-height: 24px;
+        font-size: 16px;
+        font-family: PingFangSC-Medium, PingFang SC;
+        font-weight: 500;
+        color: #ffffff;
+        line-height: 22px;
+    }
+    .title_tip {
+        font-size: 12px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #ffffff;
+        line-height: 18px;
+        opacity: 0.5;
     }
     .text {
         display: flex;
@@ -313,12 +332,52 @@ export default {
 }
 
 .minter {
+    width: 100%;
     display: flex;
     justify-content: space-between;
     align-items: center;
-    padding: 10px 16px 12px 10px;
-    border-top: 2px solid @bg3;
-
+    padding: 0px 10px 20px;
+    box-sizing: border-box;
+    margin-top: 24px;
+    .minter_con {
+        width: 100%;
+        display: flex;
+        background: #1E222C;
+        border-radius: 8px;
+        .minter_con_one {
+            display: flex;
+            padding: 12px 0px 6px 15px;
+            box-sizing: border-box;
+            .minter_con_one_text1 {
+                font-size: 20px;
+                color: #eacc9b;
+                margin-right: 7px;
+            }
+            .minter_con_one_text2 {
+                height: 20px;
+                padding: 0px 4px;
+                margin-top: 5px;
+                border: 1px solid #f9ddb3;
+                box-sizing: border-box;
+                border-radius: 2px;
+                font-size: 14px;
+                font-family: PingFangSC-Light, PingFang SC;
+                font-weight: 300;
+                color: #F9DDB3;
+                line-height: 18px;
+                // line-height: 16px;
+            }
+        }
+        .minter_con_two {
+            padding: 0px 0px 10px 15px;
+            box-sizing: border-box;
+            font-size: 10px;
+            font-family: PingFangSC-Regular, PingFang SC;
+            font-weight: 400;
+            color: #f9ddb3;
+            line-height: 18px;
+        }
+    }
     .minter-content {
         /deep/.van-image {
             img {

+ 37 - 25
src/components/creator/CreatorInfo.vue

@@ -1,5 +1,5 @@
 <template>
-    <router-link
+    <!-- <router-link
         :to="{
             path: '/creatorDetail',
             query: {
@@ -7,11 +7,10 @@
             }
         }"
         class="info"
-    >
-        <van-image :width="66" :height="66" :src="getImg(info.avatar)" fit="cover" radius="100" />
-
-        <img v-if="rank" class="NOImg" :src="NOInfo.img1" alt="" />
-
+    > -->
+    <div class="info">
+        <van-image :width="66" :height="66" :src="getImg(info.avatar)" fit="cover" radius="33" />
+        <!-- <img v-if="rank" class="NOImg" :src="NOInfo.img1" alt="" /> -->
         <div class="content">
             <div class="text1 van-ellipsis">{{ info.nickname }}</div>
             <div class="text2 van-ellipsis">
@@ -20,14 +19,14 @@
             <div class="flex1"></div>
 
             <div class="text3">
-                <div class="sale" v-if="rank" :style="{ color: NOInfo.color }">
+                <!-- <div class="sale" v-if="rank" :style="{ color: NOInfo.color }">
                     <img class="icon" :src="NOInfo.img2" alt="" />
                     <span>已售{{ info.sales }}</span>
                     <i class="font_family icon-a-icon-dianzan2"></i>
-                </div>
-                <div class="text4" v-else>
-                    <span>已售</span>
-                    <span>{{ info.sales }}</span>
+                </div> -->
+                <div class="text4">
+                    <span class="text4_one">已售</span>
+                    <span class="text4_two">{{ info.sales }}</span>
                 </div>
             </div>
         </div>
@@ -42,7 +41,8 @@
         >
             {{ info.follow ? (isFollow ? '互相关注' : '已关注') : '关注' }}
         </van-button>
-    </router-link>
+    </div>
+    <!-- </router-link> -->
 </template>
 
 <script>
@@ -111,29 +111,31 @@ export default {
 <style lang="less" scoped>
 .info {
     display: flex;
-    padding: 22px 16px;
+    padding: 20px 15px;
     position: relative;
     align-items: center;
-
     .content {
         flex-grow: 1;
-        padding-left: 12px;
-        display: flex;
-        flex-direction: column;
+        padding-left: 10px;
+        // display: flex;
+        // flex-direction: column;
         overflow: hidden;
-        height: 60px;
-
+        // height: 60px;
         .text1 {
             font-size: 16px;
-            color: @text0;
+            font-family: PingFangSC-Regular, PingFang SC;
+            font-weight: 400;
+            color: #FFFFFF;
             line-height: 22px;
+            margin-bottom: 2px;
         }
-
         .text2 {
-            font-size: @font2;
-            color: @text3;
+            font-size: 14px;
+            font-family: PingFangSC-Regular, PingFang SC;
+            font-weight: 400;
+            color: #8C8E93;
             line-height: 20px;
-            // margin: 6px 0;
+            margin-bottom: 2px;
         }
 
         .text3 {
@@ -173,12 +175,22 @@ export default {
                 }
             }
         }
+        .text4{
+            font-size: 12px;
+            font-family: PingFangSC-Regular, PingFang SC;
+            font-weight: 400;
+            color: #8C8E93;
+            line-height: 18px;
+            .text4_two{
+                color: #FFFFFF;
+                margin-left: 5px;
+            }
+        }
     }
 
     .van-image {
         flex-shrink: 0;
     }
-
     .NOImg {
         position: absolute;
         width: 80px;

+ 1 - 1
src/router/index.js

@@ -382,7 +382,7 @@ const routes = [
         component: () => import('../views/creator/List.vue'),
         meta: {
             pageType: Page.Every,
-            title: '拉索宇宙'
+            title: '铸造者'
         }
     },
     {

+ 12 - 13
src/views/Discover.vue

@@ -29,11 +29,11 @@
                             width="64px"
                             height="64px"
                             radius="33"
-                            :src="getImg(item.pic)"
+                            :src="getImg(item.avatar)"
                             fit="cover"
-                            @click="goNext(item)"
+                            @click="$router.push('/creatorList')"
                         />
-                        <div class="setting_title">{{ item.name }}</div>
+                        <div class="setting_title">{{ item.nickname }}</div>
                     </swiper-slide>
                 </swiper>
             </div>
@@ -191,15 +191,15 @@ export default {
                     value: 'likes,desc',
                     type: 'select'
                 },
-                // {
-                //     label: '价格',
-                //     value: 'price',
-                //     type: 'select'
-                // },
+                {
+                    label: '价格',
+                    value: 'price',
+                    type: 'select'
+                },
                 {
                     label: '浏览量',
                     value: 'view,desc',
-                    type: 'views'
+                    type: 'select'
                 }
             ],
             // 商品展示列表
@@ -274,13 +274,12 @@ export default {
         getBanner() {
             this.$http
                 .post(
-                    '/banner/all',
+                    '/user/all',
                     {
                         query: {
-                            type: 'DISCOVER',
-                            del: false
+                            minter: true
                         },
-                        sort: 'sort,asc;createdAt,desc'
+                        sort: 'id,desc'
                     },
                     { body: 'json' }
                 )

+ 86 - 10
src/views/Store.vue

@@ -15,19 +15,29 @@
                             <div class="collection_switching_con" :class="{ active: active === 0 }" @click="active = 0">
                                 持有藏品
                             </div>
-                            <div class="collection_switching_con" :class="{ active: active === 1 }" @click="active = 1">
+                            <div
+                                class="collection_switching_con"
+                                :class="{ active: active === 1 }"
+                                @click="getCollection"
+                            >
                                 收藏藏品
                             </div>
                         </div>
                         <img
-                            src="@assets/icon-sosuo.png"
+                            src="@assets/sousuo@3x.png"
                             alt=""
                             class="search_img"
                             @click="$router.push('/productSearch')"
                         />
                     </div>
                     <!-- 标签页展示切换 -->
-                    <van-tabs v-model:active="sort" line-width="32" line-height="2" @click-tab="changeTab">
+                    <van-tabs
+                        v-model:active="sort"
+                        line-width="32"
+                        line-height="2"
+                        @click-tab="changeTab"
+                        v-if="active === 0"
+                    >
                         <van-tab
                             :title="item.label"
                             :name="item.value"
@@ -68,7 +78,7 @@
                     </div> -->
                 </div>
             </van-sticky>
-            <div class="data_display">
+            <div class="data_display" v-if="active === 0">
                 <!-- 藏品展示 -->
                 <van-list v-model:loading="loading" :finished="finished" @load="getAllCollections">
                     <div class="data_display_fanter">
@@ -77,7 +87,7 @@
                         </template>
                     </div>
                     <van-empty
-                        v-if="empty || (collections.length === 0 && !loading)"
+                        v-if="collections.length === 0 && !loading"
                         :image="require(`@assets/empty-collection.png`)"
                         :image-size="`172`"
                     >
@@ -87,21 +97,41 @@
                     <!-- </van-empty> -->
                 </van-list>
             </div>
+            <div class="data_display_one" v-else>
+                <div class="current_recommendation">
+                    <template v-for="(item, index) in showList" :key="index">
+                        <CollectionList v-model:info="list[item.index]" @update:info="init"></CollectionList>
+                    </template>
+                </div>
+                <van-empty
+                    v-if="showList.length === 0"
+                    :image="require(`@assets/empty-collection.png`)"
+                    :image-size="`172`"
+                >
+                    <div class="h44_tip_one">你还没有收藏的藏品</div>
+                    <div class="h44_tip">这里将展示你在拉索持有的数字藏品</div>
+                </van-empty>
+            </div>
         </van-pull-refresh>
     </div>
 </template>
 
 <script>
 import AssetInfo from '../components/asset/assetInfo.vue';
+import CollectionList from '../components/CollectionList.vue';
+import product from '../mixins/product';
 export default {
+    mixins: [product],
     components: {
-        AssetInfo
+        AssetInfo,
+        CollectionList
     },
     data() {
         return {
             tabLabel: 'whole',
             page: 0,
             empty: false,
+            list: [],
             loading: false,
             finished: false,
             // 藏品列表
@@ -131,12 +161,40 @@ export default {
     computed: {
         status() {
             return 'NORMAL,TRADING,GIFTING,MINTING';
+        },
+        showList() {
+            return [...this.list].map((item, index) => {
+                return {
+                    ...item,
+                    index
+                };
+            });
         }
     },
     mounted() {
         // this.getAllCollections();
     },
     methods: {
+        // 获取收藏藏品
+        getCollection() {
+            this.active = 1;
+            this.init();
+        },
+        init() {
+            this.$toast.loading({
+                message: '加载中...',
+                forbidClick: true
+            });
+            this.empty = false;
+            this.$http.get('/collection/myLikes').then(res => {
+                this.list = res;
+                this.empty = res.length === 0;
+                this.$toast.clear();
+            });
+        },
+        change() {
+            this.$root.$el.scrollTop = 0;
+        },
         // 获取全部库存藏品
         getAllCollections() {
             if (!this.isLogin) {
@@ -211,10 +269,16 @@ export default {
             return form;
         },
         onRefresh() {
-            this.page = 0;
-            this.getAllCollections().then(() => {
-                this.isLoading = false;
-            });
+            if (this.active === 0) {
+                this.page = 0;
+                this.getAllCollections().then(() => {
+                    this.isLoading = false;
+                });
+            } else {
+                Promise.all([this.init()]).then(res => {
+                    this.isLoading = false;
+                });
+            }
         }
     }
 };
@@ -332,6 +396,18 @@ export default {
             margin-bottom: 50px;
         }
     }
+    .data_display_one {
+        // padding: 0px 16px 16px;
+        // box-sizing: border-box;
+        .current_recommendation {
+            width: 100%;
+            display: flex;
+            justify-content: space-between;
+            flex-wrap: wrap;
+            padding: 16px;
+            box-sizing: border-box;
+        }
+    }
 }
 .shop_list_one {
     height: 100%;

+ 455 - 45
src/views/asset/Detail.vue

@@ -1,7 +1,7 @@
 /* eslint-disable no-empty */
 <template>
     <!-- <TopNavigation/> -->
-    <div class="detail_content">
+    <div class="detail_content" v-if="!giftCollection">
         <!-- <swiper pagination class="mySwiper" v-if="banners.length > 0">
             <swiper-slide v-for="(item, index) in banners" :key="index">
                 <video
@@ -61,14 +61,18 @@
                 <div class="list_of_details_one_title">
                     <img :src="require('@assets/maisui.png')" alt="" class="list_of_details_one_title_img" />
                     <div class="list_of_details_one_title_con">{{ info.name }}</div>
-                    <div class="list_of_details_one_text">
+                    <div class="list_of_details_one_text" v-if="!info.consignment">
                         <img :src="require('@assets/blockchain@3x.png')" alt="" class="list_of_details_one_text_img" />
                         <div class="list_of_details_one_text_con">ac10781#03506/10000</div>
                     </div>
+                    <div class="list_of_details_one_title_one" v-else>
+                        <div class="list_of_details_one_title_one_text1">清乾隆</div>
+                        <div class="list_of_details_one_title_one_text2">{{ info.category }}</div>
+                    </div>
                 </div>
             </div>
             <div class="collection_holder">
-                <div class="collection_holder_con">
+                <div class="collection_holder_con" v-if="!info.consignment">
                     <div class="collection_holder_one collection_holder_two">
                         <div class="collection_holder_one_title">持有者</div>
                         <div class="collection_holder_one_time">{{ userInfo.nickname }}</div>
@@ -78,6 +82,19 @@
                         <div class="collection_holder_one_time">{{ info.createdAt }}</div>
                     </div>
                 </div>
+                <div class="collection_holder_publisher" v-else>
+                    <van-image
+                        width="40px"
+                        height="40px"
+                        radius="40"
+                        :src="userInfo.avatar || require('@assets/svgs/img_default_photo.svg')"
+                        fit="cover"
+                    />
+                    <div class="collection_holder_publisher_title">
+                        <div class="collection_holder_publisher_title_one">{{ userInfo.nickname }}</div>
+                        <div class="collection_holder_publisher_title_two">作品06</div>
+                    </div>
+                </div>
             </div>
             <div class="work_story">
                 <div class="work_story_con">
@@ -101,16 +118,31 @@
                     </div>
                     <div class="hold_privileges_name" v-if="privileges.length == 0">创作者暂时未设置</div>
                     <div class="hold_privileged_information" v-else>
-                        <div class="hold_privileged_information_con" v-for="(item, index) in privileges" :key="index">
+                        <div class="hold_privileged_information_con" :class="{ hold_privileged_information_con_opened: item.opened }" v-for="(item, index) in privileges" :key="index">
                             <van-image
+                                v-if="!item.opened"
                                 width="18px"
                                 height="18px"
-                                :src="require('@assets/1@3x.png')"
+                                :src="item.icon[0]"
                                 fit="cover"
                                 class="hold_privileged_information_con_img"
                             />
+                            <van-image
+                                v-if="item.opened"
+                                width="18px"
+                                height="18px"
+                                :src="item.icon[2]"
+                                fit="cover"
+                                class="hold_privileged_information_con_img"
+                            />
+                            <div v-if="item.once" @click="privilegeFn2(item)" class="hold_privileged_information_con_title_opened">
+                                {{ item.name }}
+                            </div>
+                            <div v-else @click="privilegeFn(item)" class="hold_privileged_information_con_title">
+                                {{ item.name }}
+                            </div>
                             <!-- <img :src="item.icon[0]" alt="" class="hold_privileged_information_con_img" /> -->
-                            <div class="hold_privileged_information_con_title">{{ item.name }}</div>
+                            <!-- <div class="hold_privileged_information_con_title">{{ item.name }}</div> -->
                         </div>
                     </div>
                 </div>
@@ -247,7 +279,25 @@
                 </div>
             </div>
         </div>
-        <div class="purchase_transaction_button_two" v-else>
+        <div class="purchase_transaction_button_one" v-else-if="!startTime && info.consignment === true">
+            <div class="purchase_transaction_button_one_con" @click="shelfCollection">
+                <img
+                    :src="require('@assets/xiajiacangpin@3x.png')"
+                    alt=""
+                    class="purchase_transaction_button_one_con_img"
+                />
+                <div class="purchase_transaction_button_one_con_title">下架藏品</div>
+            </div>
+            <div class="purchase_transaction_button_one_con">
+                <img
+                    :src="require('@assets/bianjicangpin@3x.png')"
+                    alt=""
+                    class="purchase_transaction_button_one_con_img"
+                />
+                <div class="purchase_transaction_button_one_con_title">编辑藏品</div>
+            </div>
+        </div>
+        <div class="purchase_transaction_button_two" v-else-if="!startTime && info.consignment === false">
             <div class="purchase_transaction_button_two_con">
                 <div class="purchase_transaction_button_two_con_give">
                     <img
@@ -275,7 +325,7 @@
                     />
                     <div class="purchase_transaction_button_two_con_text">证书</div>
                 </div>
-                <van-icon name="ellipsis" size="20" @click="moreDisplay"/>
+                <van-icon name="ellipsis" size="20" @click="moreDisplay" />
                 <div class="purchase_transaction_button_two_con_more_display" v-if="moreDisplayOne === true">
                     <img
                         :src="require('@assets/xingzhuanglianhe@3x.png')"
@@ -283,16 +333,100 @@
                         class="purchase_transaction_button_two_con_more_display_img"
                     />
                     <div class="purchase_transaction_button_two_con_more_display_con" @click="Consignment">
-                        <img :src="require('@assets/guashou@3x.png')" alt="" class="purchase_transaction_button_two_con_more_display_con_img"/>
+                        <img
+                            :src="require('@assets/guashou@3x.png')"
+                            alt=""
+                            class="purchase_transaction_button_two_con_more_display_con_img"
+                        />
                         <div class="purchase_transaction_button_two_con_more_display_con_title">挂售</div>
                     </div>
-                    <div class="purchase_transaction_button_two_con_more_display_con">
-                        <img :src="require('@assets/fengxiang@3x.png')" alt="" class="purchase_transaction_button_two_con_more_display_con_img"/>
+                    <div class="purchase_transaction_button_two_con_more_display_con" @click="share">
+                        <img
+                            :src="require('@assets/fengxiang@3x.png')"
+                            alt=""
+                            class="purchase_transaction_button_two_con_more_display_con_img"
+                        />
                         <div class="purchase_transaction_button_two_con_more_display_con_title">分享</div>
                     </div>
                 </div>
             </div>
         </div>
+        <post ref="post" :info="info" noButton :pageUrl="pageUrl" />
+        <van-popup v-model:show="show">
+            <div class="title2">
+                <div class="top">
+                    <img class="img" v-if="list2.icon[1]" :src="list2.icon[1]" alt="" />
+                    <img class="img" v-else :src="list2.icon[0]" alt="" />
+                    <div class="title3">{{ list2.name }}</div>
+                </div>
+                <img @click="allFn" class="icon" :src="require('@assets/icon-dianzan.png')" alt="" />
+            </div>
+            <div class="border"></div>
+            <div class="name">{{ list2.description }}</div>
+            <div class="name1" v-if="list2.type === 'text'">
+                <!-- <div>{{ list2.detail }}</div> -->
+                <span>{{ list2.detail || '暂无' }}</span>
+            </div>
+            <div class="name1" v-if="list2.type === 'exchange'">
+                <span>{{ list2.detail }}</span>
+            </div>
+            <div class="name1" v-if="list2.type == 'qrcode'">
+                <img class="qrcodeImg" :src="list2.detail" alt="" />
+                <div class="qrcode1">扫描二维码进行票务核销</div>
+                <span>{{ list2.remark || '暂无' }}</span>
+            </div>
+            <div v-if="list2.type === 'code'">
+                <div class="copy">
+                    <div class="id">
+                        <!-- {{ list2.detail }} -->
+                        <!-- yshsbn -->
+                    </div>
+                    <img class="copyImg" @click="copy" src="@assets/svgs/copy_icon.svg" alt="" />
+                </div>
+                <span class="span">说明:</span> <span>{{ list2.remark || '暂无' }}</span>
+                <div class="border"></div>
+                <div class="code">每次交易都会产生校验码</div>
+            </div>
+            <div v-if="list2.openTime">
+                <div v-if="list2.type == 'qrcode'" class="timename">
+                    <span class="time">截止时间:</span>{{ list2.openTime }}
+                </div>
+                <div v-else class="timename"><span class="time">打开时间:</span>{{ list2.openTime }}</div>
+            </div>
+        </van-popup>
+    </div>
+    <div class="detail_content" v-else>
+        <img :src="require('@assets/guang@3x.png')" alt="" class="detail_content_con" />
+        <product-banner :info="info" pageType="asset" class="detail_content_banner"></product-banner>
+        <div class="list_of_details">
+            <div class="list_of_details_one">
+                <img :src="require('@assets/dizuo.png')" alt="" class="list_of_details_one_img" />
+                <div class="list_of_details_one_title">
+                    <img :src="require('@assets/maisui.png')" alt="" class="list_of_details_one_title_img" />
+                    <div class="list_of_details_one_title_con">{{ info.name }}</div>
+                    <div class="list_of_details_one_text">
+                        <img :src="require('@assets/blockchain@3x.png')" alt="" class="list_of_details_one_text_img" />
+                        <div class="list_of_details_one_text_con">ac10781#03506/10000</div>
+                    </div>
+                </div>
+            </div>
+            <!-- 赠送 -->
+            <div class="gift_collection">
+                <div class="gift_collection_one">
+                    <img :src="giftStatus ? giftSuccess : giftFailed" alt="" class="gift_collection_one_img" />
+                    <div class="gift_collection_one_title">{{ giftStatus ? '赠送成功' : '赠送失败' }}</div>
+                </div>
+                <div class="gift_collection_two">
+                    {{ giftStatus ? '我们会在24小时内,短信通知您的好友' : '很遗憾!赠送失败' }}
+                </div>
+                <div class="gift_collection_three">
+                    <div class="gift_collection_three_left" @click="$router.push('/store')">返回</div>
+                    <div class="gift_collection_three_right" @click="againGive">
+                        {{ giftStatus ? '完成' : '重新转赠' }}
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
     <!-- <div class="detail">
         <product-banner :info="info" pageType="asset"></product-banner>
@@ -564,7 +698,6 @@
             </div>
             <div v-if="init2.openTime" class="timename"><span class="time">开启时间:</span>{{ init2.openTime }}</div>
         </van-popup>
-      
         <div class="whisper">
             <van-popup v-model:show="show2">
                 <div class="con">
@@ -602,6 +735,7 @@
 import { abs } from 'mathjs';
 import asset from '../../mixins/asset';
 import product from '../../mixins/product';
+import Post from '../../components/Post.vue';
 import { mapState } from 'vuex';
 import { ImagePreview } from 'vant';
 import { Dialog } from 'vant';
@@ -615,7 +749,8 @@ export default {
     components: {
         HashCode,
         // ProductTitle,
-        ProductBanner
+        ProductBanner,
+        Post
         // OrderOpen,
         // TopNavigation
     },
@@ -644,7 +779,11 @@ export default {
                 { label: '铸造', value: 'exchange' }
             ],
             publicDisplay: require('@assets/publicDisplay@3x.png'),
-            privateDisplay: require('@assets/privateDisplay@3x.png')
+            privateDisplay: require('@assets/privateDisplay@3x.png'),
+            giftCollection: false,
+            giftStatus: true,
+            giftSuccess: require('@assets/zengsongchenggong@3x.png'),
+            giftFailed: require('@assets/zengsongshibai@3x.png')
         };
     },
     computed: {
@@ -669,8 +808,11 @@ export default {
         }, 1000);
     },
     methods: {
+        share() {
+            this.$refs.post.init();
+        },
         moreDisplay() {
-            this.moreDisplayOne = !this.moreDisplayOne
+            this.moreDisplayOne = !this.moreDisplayOne;
         },
         allFn() {
             this.show = false;
@@ -743,7 +885,6 @@ export default {
                     })
                     .then(res => {
                         this.init2.opened = true;
-                        console.log(res);
                     });
             }
         },
@@ -772,23 +913,31 @@ export default {
                         }).then(() => {
                             this.$router.push('/Consignment?id=' + this.info.id);
                         });
-                    } else {
-                        Dialog.confirm({
-                            title: '取消寄售',
-                            message: '确定取消寄售吗?'
-                        })
-                            .then(() => {
-                                return this.$http.post(`/asset/cancelConsignment?id=${this.info.id}`);
-                            })
-                            .then(res => {
-                                this.$toast.success('取消寄售');
-                                setTimeout(() => {
-                                    this.getProduct();
-                                }, 1000);
-                            });
                     }
                 });
         },
+        shelfCollection() {
+            Dialog.confirm({
+                title: '取消寄售',
+                message: '确定取消寄售吗?'
+            })
+                .then(() => {
+                    return this.$http.post(`/asset/cancelConsignment?id=${this.info.id}`);
+                })
+                .then(res => {
+                    this.$toast.success('取消寄售');
+                    setTimeout(() => {
+                        this.getProduct();
+                    }, 1000);
+                });
+        },
+        againGive() {
+            if (this.giftStatus === true) {
+                this.$router.push('/store');
+            } else {
+                this.$router.push('/giveSearch?id=' + this.info.id);
+            }
+        },
         Add() {
             if (this.userInfo.authStatus === 'PENDING' || this.userInfo.authStatus === 'FAIL') {
                 Dialog.confirm({
@@ -1073,6 +1222,90 @@ export default {
                         line-height: 14px;
                     }
                 }
+                .list_of_details_one_title_one {
+                    display: flex;
+                    justify-content: center;
+                    transform: translateY(-50px);
+                    font-size: 11px;
+                    font-family: PingFangSC-Regular, PingFang SC;
+                    font-weight: 400;
+                    .list_of_details_one_title_one_text1 {
+                        padding: 0px 6px;
+                        box-sizing: border-box;
+                        height: 16px;
+                        background: #f9ddb3;
+                        border-radius: 3px;
+                        color: #282d3a;
+                        margin-right: 6px;
+                        line-height: 16px;
+                    }
+                    .list_of_details_one_title_one_text2 {
+                        padding: 0px 6px;
+                        box-sizing: border-box;
+                        height: 16px;
+                        background: #323743;
+                        border-radius: 3px;
+                        line-height: 16px;
+                        color: #f9ddb3;
+                    }
+                }
+            }
+        }
+        .gift_collection {
+            padding: 0px 33px;
+            box-sizing: border-box;
+            transform: translateY(-130px);
+            .gift_collection_one {
+                display: flex;
+                justify-content: center;
+                margin-bottom: 14px;
+                .gift_collection_one_img {
+                    width: 26px;
+                    height: 26px;
+                    margin-right: 7px;
+                }
+                .gift_collection_one_title {
+                    font-size: 19px;
+                    font-family: PingFangSC-Medium, PingFang SC;
+                    font-weight: 500;
+                    color: #ffffff;
+                    line-height: 26px;
+                }
+            }
+            .gift_collection_two {
+                font-size: 14px;
+                font-family: PingFangSC-Regular, PingFang SC;
+                font-weight: 400;
+                color: #ffffff;
+                line-height: 20px;
+                opacity: 0.5;
+                margin-bottom: 50px;
+                text-align: center;
+            }
+            .gift_collection_three {
+                display: flex;
+                justify-content: center;
+                height: 46px;
+                font-size: 18px;
+                font-family: PingFangSC-Medium, PingFang SC;
+                font-weight: 500;
+                text-align: center;
+                line-height: 46px;
+                .gift_collection_three_left {
+                    width: 50%;
+                    height: 46px;
+                    background: rgba(249, 221, 179, 0.1);
+                    border-radius: 8px;
+                    color: #ffffff;
+                }
+                .gift_collection_three_right {
+                    width: 50%;
+                    height: 46px;
+                    background: #f9ddb3;
+                    border-radius: 8px;
+                    color: #503a1e;
+                    margin-left: 13px;
+                }
             }
         }
         .collection_holder {
@@ -1101,6 +1334,34 @@ export default {
                     margin-bottom: 16px;
                 }
             }
+            .collection_holder_publisher {
+                width: 100%;
+                background: #1e222c;
+                border-radius: 12px;
+                padding: 9px 15px;
+                box-sizing: border-box;
+                display: flex;
+                .collection_holder_publisher_title {
+                    margin-top: 1px;
+                    margin-left: 10px;
+                    .collection_holder_publisher_title_one {
+                        font-size: 14px;
+                        font-family: PingFangSC-Medium, PingFang SC;
+                        font-weight: 500;
+                        color: #ffffff;
+                        line-height: 20px;
+                        margin-bottom: 2px;
+                    }
+                    .collection_holder_publisher_title_two {
+                        font-size: 12px;
+                        font-family: PingFangSC-Regular, PingFang SC;
+                        font-weight: 400;
+                        color: #ffffff;
+                        line-height: 16px;
+                        opacity: 0.3;
+                    }
+                }
+            }
         }
         .work_story {
             padding: 0px 15px;
@@ -1202,6 +1463,18 @@ export default {
                             line-height: 18px;
                             margin-left: 1px;
                         }
+                        .hold_privileged_information_con_title_opened{
+                            font-size: 12px;
+                            font-family: PingFangSC-Regular, PingFang SC;
+                            font-weight: 400;
+                            color: #333333;
+                            line-height: 18px;
+                            margin-left: 1px;
+                        }
+                    }
+                    .hold_privileged_information_con_opened{
+                        background: #ffffff;
+                        opacity: 0.5;
                     }
                     .hold_privileged_information_con:nth-of-type(3n) {
                         margin-right: 0px;
@@ -1689,8 +1962,8 @@ export default {
     .purchase_transaction_button {
         width: 100%;
         // height: 66px;
-        background: #161A24;
-        box-shadow: inset 0px 1px 0px 0px #292D36;
+        background: #161a24;
+        box-shadow: inset 0px 1px 0px 0px #292d36;
         position: fixed;
         bottom: 0;
         // justify-content: space-between;
@@ -1718,7 +1991,7 @@ export default {
                 font-size: 16px;
                 font-family: PingFangSC-Medium, PingFang SC;
                 font-weight: 500;
-                color: #FFFFFF;
+                color: #ffffff;
                 opacity: 0.6;
                 line-height: 20px;
             }
@@ -1726,7 +1999,7 @@ export default {
                 font-size: 12px;
                 font-family: PingFangSC-Regular, PingFang SC;
                 font-weight: 400;
-                color: #FFFFFF;
+                color: #ffffff;
                 opacity: 0.3;
                 line-height: 16px;
             }
@@ -1752,7 +2025,7 @@ export default {
             width: 50%;
             height: 44px;
             border-radius: 8px;
-            background: #F9DDB3;
+            background: #f9ddb3;
             color: #725837;
             line-height: 44px;
             text-align: center;
@@ -1770,7 +2043,7 @@ export default {
                 font-size: 16px;
                 font-family: PingFangSC-Medium, PingFang SC;
                 font-weight: 500;
-                color: #FFFFFF;
+                color: #ffffff;
                 opacity: 0.6;
                 line-height: 20px;
             }
@@ -1778,7 +2051,7 @@ export default {
                 font-size: 12px;
                 font-family: PingFangSC-Regular, PingFang SC;
                 font-weight: 400;
-                color: #FFFFFF;
+                color: #ffffff;
                 opacity: 0.3;
                 line-height: 16px;
             }
@@ -1817,6 +2090,32 @@ export default {
             text-align: center;
         }
     }
+    .purchase_transaction_button_one {
+        width: 100%;
+        height: 66px;
+        background: #161a24;
+        box-shadow: inset 0px 1px 0px 0px #292d36;
+        position: fixed;
+        bottom: 0;
+        display: flex;
+        .purchase_transaction_button_one_con {
+            width: 50%;
+            height: 66px;
+            display: flex;
+            justify-content: center;
+            font-size: 12px;
+            font-family: PingFangSC-Medium, PingFang SC;
+            font-weight: 500;
+            color: #ffffff;
+            line-height: 66px;
+            .purchase_transaction_button_one_con_img {
+                width: 32px;
+                height: 32px;
+                margin-top: 17px;
+                margin-right: 3px;
+            }
+        }
+    }
     .purchase_transaction_button_two {
         width: 100%;
         height: 66px;
@@ -1825,10 +2124,10 @@ export default {
         position: fixed;
         bottom: 0;
         .purchase_transaction_button_two_con {
-            padding: 17px 0px;
+            padding: 17px 14px 17px 24px;
             box-sizing: border-box;
             display: flex;
-            justify-content: center;
+            // justify-content: center;
             font-size: 12px;
             font-family: PingFangSC-Medium, PingFang SC;
             font-weight: 500;
@@ -1839,30 +2138,30 @@ export default {
                 position: absolute;
                 bottom: 10px;
                 right: 15px;
-                .purchase_transaction_button_two_con_more_display_img{
+                .purchase_transaction_button_two_con_more_display_img {
                     width: 137px;
                     height: 102px;
                 }
-                .purchase_transaction_button_two_con_more_display_con{
+                .purchase_transaction_button_two_con_more_display_con {
                     padding-left: 13px;
                     box-sizing: border-box;
                     display: flex;
                     transform: translateY(-92px);
-                    .purchase_transaction_button_two_con_more_display_con_img{
+                    .purchase_transaction_button_two_con_more_display_con_img {
                         width: 28px;
                         height: 28px;
                         margin-right: 4px;
                     }
-                    .purchase_transaction_button_two_con_more_display_con_title{
+                    .purchase_transaction_button_two_con_more_display_con_title {
                         font-size: 15px;
                         font-family: PingFangSC-Regular, PingFang SC;
                         font-weight: 400;
-                        color: #FFFFFF;
+                        color: #ffffff;
                         line-height: 22px;
                         margin-top: 3px;
                     }
                 }
-                .purchase_transaction_button_two_con_more_display_con:nth-of-type(2){
+                .purchase_transaction_button_two_con_more_display_con:nth-of-type(2) {
                     transform: translateY(-80px);
                 }
             }
@@ -1880,14 +2179,17 @@ export default {
             .purchase_transaction_button_two_con_give {
                 display: flex;
                 margin-right: 36px;
+                flex-grow: 1;
             }
             .purchase_transaction_button_two_con_exhibition {
                 display: flex;
                 margin-right: 36px;
+                flex-grow: 1;
             }
             .purchase_transaction_button_two_con_certificate {
                 display: flex;
                 margin-right: 38px;
+                flex-grow: 1;
             }
             .purchase_transaction_button_two_con_img {
                 width: 32px;
@@ -1896,5 +2198,113 @@ export default {
             }
         }
     }
+    /deep/ .van-popup {
+        width: 228px;
+        background: #ffffff;
+        padding: 0 16px;
+        border-radius: 8px;
+        .title2 {
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            padding-top: 12px;
+            .top {
+                display: flex;
+                align-items: center;
+                .img {
+                    width: 18px;
+                    height: 18px;
+                    color: #ff4f50;
+                    margin-right: 3px;
+                }
+                .title3 {
+                    font-size: @font2;
+                    font-weight: 400;
+                    color: #ff4f50;
+                    line-height: 24px;
+                }
+            }
+            .icon {
+                width: 18px;
+                height: 18px;
+            }
+        }
+        .border {
+            height: 1px;
+            background: #f2f3f5;
+            border-radius: 1px;
+            margin: 12px 0 6px;
+        }
+        .name1 {
+            width: 208px;
+            padding: 10px;
+            background: @bg3;
+            border-radius: 4px;
+            color: @text3;
+            margin-bottom: 11px;
+            .qrcodeImg {
+                width: 93px;
+                height: 93px;
+                border-radius: 11px;
+                margin-left: 60px;
+            }
+            .qrcode1 {
+                font-size: @font1;
+                font-weight: 400;
+                color: @text3;
+                line-height: 18px;
+                margin: 12px 0px 12px 44px;
+            }
+        }
+        .timename {
+            color: #ff4f50;
+            font-size: @font1;
+            padding-bottom: 12px;
+        }
+        .time {
+            color: @text3;
+            font-size: @font1;
+        }
+        .copy {
+            width: 220px;
+            height: 42px;
+            background: @bg3;
+            border-radius: 24px;
+            margin-bottom: 16px;
+            justify-content: center;
+            display: flex;
+            align-items: center;
+            .id {
+                font-size: @font2;
+                color: #303133;
+            }
+            .copyImg {
+                width: 18px;
+                height: 18px;
+                margin-left: 6px;
+                cursor: pointer;
+            }
+        }
+        span {
+            color: #303133;
+        }
+        .span {
+            color: @text3;
+        }
+        .code {
+            font-size: @font1;
+            font-weight: 400;
+            color: @text3;
+            line-height: 18px;
+            padding-bottom: 12px;
+        }
+        .name {
+            font-size: @font1;
+            font-weight: 400;
+            color: @text3;
+            line-height: 18px;
+            margin-bottom: 6px;
+        }
+    }
 }
 </style>

+ 25 - 9
src/views/creator/List.vue

@@ -1,10 +1,12 @@
 <template>
     <div class="follow">
+        <img
+            :src="require('@assets/sousuo@3x.png')"
+            alt=""
+            class="follow_search"
+            @click="$router.push('/productSearch')"
+        />
         <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" />
-            </div>
             <van-tabs v-model:active="sort" :ellipsis="false" line-width="16" line-height="2" @change="getData(true)">
                 <van-tab
                     :title="item.label"
@@ -61,11 +63,12 @@ export default {
                     value: 'createdAt,desc'
                 },
                 {
-                    label: '最热',
-                    value: 'followers,desc'
+                    label: '销量',
+                    value: ['sales,desc', 'sales,asc'],
+                    type: 'select'
                 },
                 {
-                    label: '量',
+                    label: '浏览量',
                     value: ['sales,desc', 'sales,asc'],
                     type: 'select'
                 }
@@ -102,12 +105,25 @@ export default {
 
 <style lang="less" scoped>
 .follow {
-    background-color: @bg;
+    background: #191d27;
     padding-bottom: 100px;
 }
+.follow_search {
+    width: 32px;
+    height: 32px;
+    position: fixed;
+    top: 6px;
+    right: 10px;
+    z-index: 99;
+}
 /deep/.van-tabs__nav--line.van-tabs__nav--complete {
+    padding: 0px !important;
+    border-top: none;
     border-color: @tabBorder;
 }
+/deep/ .van-tabs__line{
+    z-index: -1;
+}
 .top {
     background-color: @bg;
     padding: 0 16px;
@@ -142,6 +158,7 @@ export default {
 
         &.van-icon-arrow-up {
             bottom: 8px;
+            // color: #fff;
         }
     }
 }
@@ -149,5 +166,4 @@ export default {
 .van-tabs {
     background-color: @bg;
 }
-
 </style>

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

@@ -339,7 +339,7 @@
                             <div class="author_details_two">作品06</div>
                         </div>
                     </div>
-                    <div class="collection_author_right">关注</div>
+                    <div class="collection_author_right" @click="follow">{{ info.follow ? '已关注' : '关注' }}</div>
                 </div>
             </div>
             <div class="appointment_process">
@@ -714,6 +714,20 @@ export default {
                 startPosition: index
             });
         },
+        // 关注
+        follow() {
+            if (!this.info.follow) {
+                this.$http.get(`/user/${this.info.id}/follow`).then(res => {
+                    this.getInfo();
+                    this.$toast.success('关注成功');
+                });
+            } else {
+                this.$http.get(`/user/${this.info.id}/unfollow`).then(() => {
+                    this.getInfo();
+                    this.$toast.success('取消关注');
+                });
+            }
+        },
         // 藏品预约
         appointment() {
             if (this.info.appointment) {
@@ -745,6 +759,11 @@ export default {
                     // on cancel
                 });
         },
+        // this.$http.get('/user/get/' + this.$route.query.id).then(res => {
+        //         this.$toast.clear();
+        //         this.info = res;
+        //         this.getData(true);
+        //     });
         getProduct() {
             this.$toast.loading({
                 message: '加载中...',

+ 16 - 12
src/views/product/Search.vue

@@ -1,9 +1,9 @@
 <template>
-    <div class="search" :style="{ backgroundColor: isSearch ? '@bg' : '@bg' }">
+    <div class="search" :style="{ backgroundColor: isSearch ? '#191D27' : '#191D27' }">
         <van-sticky ref="top" :offset-top="46">
             <van-search
                 v-model="search"
-                placeholder="请输入"
+                placeholder="搜索"
                 show-action
                 autofocus
                 :left-icon="require('@assets/svgs/icon-sosuo.svg')"
@@ -41,6 +41,7 @@
                     </van-tab>
                 </van-tabs>
                 <van-button
+                    v-if="isSearch && source == 'TRANSFER' && !title"
                     @click="changeSort"
                     color="#29293F"
                     class="sala"
@@ -80,7 +81,7 @@
                     <CollectionList v-model:info="list[index]" @update:info="init"></CollectionList>
                 </template>
             </div>
-            <van-empty v-if="empty" description="什么都没有搜到哦~" :image="require('@assets/storage_room_icon_01.png')" />
+            <van-empty v-if="empty" description="什么都没有搜到哦~" :image="require(`@assets/empty-collection.png`)" :image-size="`172`"/>
         </van-list>
         <div class="search-content" v-else>
             <div class="hot-content" v-if="historys.length > 0">
@@ -262,16 +263,16 @@ export default {
 /deep/ .van-sticky{
     padding: 12px 0px 10px;
     box-sizing: border-box;
-    background: #15152D;
+    background: #191D27;
 }
 /deep/ .van-search {
     padding: 0px 16px;
-    background: #15152d;
+    background: #191D27;
     box-sizing: border-box;
     // margin-bottom: 6px;
     .van-search__content {
         padding-left: 16px;
-        background: #29293f;
+        background: #1E222C;
         box-sizing: border-box;
     }
     .van-search__content--round {
@@ -280,9 +281,9 @@ export default {
     .van-search__action {
         padding-right: 0;
         padding-left: 12px;
-        color: #939599;
+        color: #077DFF;
         box-sizing: border-box;
-        background: #15152d;
+        background: #191D27;
     }
     .van-field__control {
         color: #ffffff;
@@ -296,7 +297,7 @@ export default {
     padding: 16px 16px 10px;
     box-sizing: border-box;
     display: flex;
-    background: #15152D;
+    background: #191D27;
     justify-content: space-between;
 }
 /deep/ .van-tabs--line .van-tabs__wrap {
@@ -342,9 +343,12 @@ export default {
     padding: 10px 0 6px 16px;
     box-sizing: border-box;
     .title {
-        font-size: @font2;
-        color: @text3;
-        line-height: 24px;
+        font-size: 16px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        font-weight: 400;
+        color: #FFFFFF;
+        line-height: 22px;
+        margin-bottom: 10px;
     }
 
     .hot-list {