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

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

yuanyuan 3 лет назад
Родитель
Сommit
a2db256952
36 измененных файлов с 1126 добавлено и 678 удалено
  1. BIN
      src/assets/icon-quanyi.png
  2. BIN
      src/assets/icon_share_weixin3.png
  3. BIN
      src/assets/icon_xiangqingye_tips.png
  4. BIN
      src/assets/info_icon_time2.png
  5. BIN
      src/assets/shareImg.png
  6. BIN
      src/assets/star-liang.png
  7. BIN
      src/assets/star-no.png
  8. 15 0
      src/components/PayMethodPick.vue
  9. 144 0
      src/components/auction/Share.vue
  10. 167 1
      src/components/auction/asset.vue
  11. 2 2
      src/components/auction/banner.vue
  12. 47 64
      src/components/auction/deposit.vue
  13. 53 56
      src/components/auction/help.vue
  14. 75 18
      src/components/auction/info.vue
  15. 7 6
      src/components/auction/records.vue
  16. 25 28
      src/components/auction/rule.vue
  17. 49 61
      src/components/order/OrderInfoAuction.vue
  18. 1 1
      src/components/product/ProductBanner.vue
  19. 4 0
      src/main.js
  20. 30 9
      src/mixins/auction.js
  21. 38 1
      src/mixins/auctionOrder.js
  22. 4 2
      src/router/index.js
  23. 5 1
      src/store/index.js
  24. 12 13
      src/views/Discover.vue
  25. 14 0
      src/views/Mine.vue
  26. 14 1
      src/views/account/Register.vue
  27. 9 3
      src/views/activity/ChooseProduct.vue
  28. 1 1
      src/views/asset/Detail.vue
  29. 154 134
      src/views/auction/Detail.vue
  30. 31 43
      src/views/auction/Home.vue
  31. 116 37
      src/views/auction/Offer.vue
  32. 1 2
      src/views/auction/Search.vue
  33. 45 93
      src/views/auction/Submit.vue
  34. 43 47
      src/views/order/AuctionDetail.vue
  35. 19 53
      src/views/order/AuctionOrders.vue
  36. 1 1
      src/views/user/ActivityRank2.vue

BIN
src/assets/icon-quanyi.png


BIN
src/assets/icon_share_weixin3.png


BIN
src/assets/icon_xiangqingye_tips.png


BIN
src/assets/info_icon_time2.png


BIN
src/assets/shareImg.png


BIN
src/assets/star-liang.png


BIN
src/assets/star-no.png


+ 15 - 0
src/components/PayMethodPick.vue

@@ -29,6 +29,10 @@ export default {
         showBalance: {
         showBalance: {
             type: Boolean,
             type: Boolean,
             default: true
             default: true
+        },
+        onlyBalance: {
+            type: Boolean,
+            default: false
         }
         }
     },
     },
     computed: {
     computed: {
@@ -50,6 +54,17 @@ export default {
                 }
                 }
             ];
             ];
             this.checked = 'BALANCE';
             this.checked = 'BALANCE';
+        } else if (this.onlyBalance) {
+            this.payConfig = [
+                {
+                    name: '余额',
+                    key: 'BALANCE',
+                    icon: 'https://cdn.raex.vip/image/2022-05-18-17-46-19eDglIIAy.png',
+                    show: true,
+                    enabled: true
+                }
+            ];
+            this.checked = 'BALANCE';
         } else {
         } else {
             this.$http.get('/sysConfig/get/pay_config').then(res => {
             this.$http.get('/sysConfig/get/pay_config').then(res => {
                 let configs = JSON.parse(res.value).filter(item => {
                 let configs = JSON.parse(res.value).filter(item => {

+ 144 - 0
src/components/auction/Share.vue

@@ -0,0 +1,144 @@
+<template>
+    <van-overlay :show="show" @click="show = false" z-index="99">
+        <div class="wrapper" @click.stop>
+            <img :src="img" class="share-img" v-if="img" alt="" />
+            <div class="share-img" ref="post" v-else>
+                <img src="@assets/shareImg.png" alt="" />
+                <vue-qrcode :value="url" :options="{ width: 300, margin: 2 }" class="code"></vue-qrcode>
+            </div>
+            <div class="tips">长按图片可保存</div>
+            <img src="@assets/icon_fenxiang_close.png" @click="show = false" alt="" class="close" />
+        </div>
+    </van-overlay>
+
+    <div class="share" @click="init">
+        <img src="@assets/icon_share_weixin3.png" alt="" />
+        <div>邀请</div>
+    </div>
+</template>
+
+<script>
+import vueQrcode from '@chenfengyuan/vue-qrcode';
+import html2canvas from 'html2canvas';
+import resolveUrl from 'resolve-url';
+import { mapState } from 'vuex';
+export default {
+    components: { vueQrcode },
+    data() {
+        return {
+            show: false,
+            img: ''
+        };
+    },
+    computed: {
+        ...mapState(['userInfo']),
+        url() {
+            if (this.isLogin) {
+                return resolveUrl(this.$baseUrl, '9th/register?invitor=' + this.userInfo.id + '&inviteType=AUCTION');
+            } else {
+                return resolveUrl(this.$baseUrl, '9th/register?inviteType=AUCTION');
+            }
+        }
+    },
+    methods: {
+        init() {
+            this.checkLogin().then(() => {
+                this.show = true;
+                if (!this.img) {
+                    this.$toast.loading({
+                        message: '加载中...',
+                        forbidClick: true
+                    });
+                    this.$nextTick(() => {
+                        setTimeout(() => {
+                            this.loadImg();
+                        }, 1000);
+                    });
+                }
+            });
+        },
+        loadImg() {
+            html2canvas(this.$refs.post, {
+                useCORS: true,
+                allowTaint: true,
+                backgroundColor: null,
+                scale: 3
+            }).then(canvas => {
+                this.$toast.clear();
+                this.img = canvas.toDataURL('image/png');
+            });
+        }
+    }
+};
+</script>
+
+<style lang="less" scoped>
+.wrapper {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    height: 100%;
+}
+.share-img {
+    position: relative;
+    img {
+        width: 80vw;
+        display: block;
+    }
+
+    .code {
+        position: absolute;
+        bottom: 24vw;
+        width: 26vw !important;
+        height: 26vw !important;
+        border-radius: 6px;
+        left: 50%;
+        transform: translateX(-50%);
+    }
+}
+
+.tips {
+    font-size: 13px;
+    color: #939599;
+    line-height: 22px;
+    margin-top: 28px;
+}
+
+.close {
+    width: 40px;
+    height: 40px;
+    margin-top: 20px;
+}
+
+.share {
+    position: fixed;
+    width: 44px;
+    height: 44px;
+    background: #3ab200;
+    z-index: 90;
+    border-radius: 44px;
+    .flex-col();
+    align-items: center;
+    justify-content: center;
+    right: 16px;
+    bottom: 100px;
+
+    img {
+        width: 24px;
+        height: 24px;
+        display: block;
+    }
+    div {
+        font-size: 10px;
+        font-weight: bold;
+        color: #ffffff;
+        line-height: 14px;
+        transform: translateY(-3px);
+    }
+}
+
+.share-img {
+    width: 80vw;
+}
+</style>

+ 167 - 1
src/components/auction/asset.vue

@@ -1,6 +1,79 @@
 <template>
 <template>
     <div class="goods">
     <div class="goods">
         <van-collapse v-model="activeNames">
         <van-collapse v-model="activeNames">
+            <van-collapse-item name="star" class="goods-info">
+                <template #title>
+                    <div class="page-title"><img src="@assets/icon-quanyi.png" alt="" />权益星级</div>
+                </template>
+                <div class="quanyi">
+                    <div class="text">
+                        每个拍品叫价次数越多,权益星级越高,每成功10次叫价,解锁一个星级,满星为3星,具体星级对应权益请查看拍品详情。
+                    </div>
+                    <div class="stars">
+                        <div class="star prim" v-if="recordNum >= 10">
+                            <img src="@assets/star-liang.png" alt="" />
+                            <span>已出价10次</span>
+                        </div>
+                        <div class="star" v-else>
+                            <img src="@assets/star-no.png" alt="" />
+                            <span>出价10次</span>
+                        </div>
+                        <div class="star prim" v-if="recordNum >= 20">
+                            <img src="@assets/star-liang.png" alt="" />
+                            <span>已出价20次</span>
+                        </div>
+                        <div class="star" v-else>
+                            <img src="@assets/star-no.png" alt="" />
+                            <span>出价20次</span>
+                        </div>
+                        <div class="star prim" v-if="recordNum >= 30">
+                            <img src="@assets/star-liang.png" alt="" />
+                            <span>已出价30次</span>
+                        </div>
+                        <div class="star" v-else>
+                            <img src="@assets/star-no.png" alt="" />
+                            <span>出价30次</span>
+                        </div>
+                    </div>
+                </div>
+            </van-collapse-item>
+
+            <van-collapse-item name="info" class="goods-info">
+                <template #title>
+                    <div class="page-title"><img src="@assets/icon-paipingxinxi-bai.png" alt="" />拍品信息</div>
+                </template>
+
+                <div class="card-content">
+                    <div class="card-info">
+                        <span class="text1">拍卖类型</span>
+                        <span class="text2">增价拍</span>
+                        <div class="card-right">
+                            <span class="text1">起拍价</span>
+                            <span class="text2">¥{{ auctionInfo.price }}</span>
+                        </div>
+                    </div>
+                    <div class="card-info">
+                        <span class="text1">加价幅度</span>
+                        <span class="text2">当前价的{{ auctionInfo.increasePer }}%</span>
+                        <div class="card-right">
+                            <span class="text1">预估价</span>
+                            <span class="text2">¥{{ auctionInfo.recommendPrice }}</span>
+                        </div>
+                    </div>
+                    <div class="card-info">
+                        <span class="text1">竞价手续费</span>
+                        <span class="text2">(当前价-起拍价)+叫价*3%</span>
+                    </div>
+                    <div class="card-info">
+                        <span class="text1">出局补偿</span>
+                        <span class="text2">当日叫价-起拍价</span>
+                    </div>
+                    <div class="card-info">
+                        <span class="text1">竞价周期</span>
+                        <span class="text2">24小时</span>
+                    </div>
+                </div>
+            </van-collapse-item>
             <van-collapse-item name="1" class="goods-info">
             <van-collapse-item name="1" class="goods-info">
                 <template #title>
                 <template #title>
                     <div class="page-title">
                     <div class="page-title">
@@ -181,6 +254,16 @@ export default {
             default: () => {
             default: () => {
                 return {};
                 return {};
             }
             }
+        },
+        auctionInfo: {
+            type: Object,
+            default: () => {
+                return {};
+            }
+        },
+        recordNum: {
+            type: Number,
+            default: 0
         }
         }
     },
     },
     components: {
     components: {
@@ -198,7 +281,7 @@ export default {
             init: [],
             init: [],
             init2: null,
             init2: null,
             list: [],
             list: [],
-            activeNames: ['1', '2', '3', '4', '5', '6', 'hashCode', 'hchashCode', '8'],
+            activeNames: ['star', 'info', '1', '2', '3', '4', '5', '6', 'hashCode', 'hchashCode', '8'],
             inWeixin,
             inWeixin,
             limit: {},
             limit: {},
             couponList: [],
             couponList: [],
@@ -224,6 +307,9 @@ export default {
             return list.map(item => {
             return list.map(item => {
                 return this.changeImgs(item.pic);
                 return this.changeImgs(item.pic);
             });
             });
+        },
+        estPrice() {
+            return this.accMul(this.auctionInfo.currentPrice || this.auctionInfo.price || 0, 1.06);
         }
         }
     },
     },
     methods: {
     methods: {
@@ -1184,4 +1270,84 @@ export default {
         width: 130px;
         width: 130px;
     }
     }
 }
 }
+.quanyi {
+    .text {
+        font-size: 12px;
+        color: #8c8e93;
+        line-height: 17px;
+    }
+
+    .stars {
+        .flex();
+        margin-top: 14px;
+        .star {
+            .flex();
+            padding: 4px 10px;
+            background: #27272b;
+            border-radius: 8px;
+            flex-grow: 1;
+            img {
+                width: 28px;
+                height: 28px;
+            }
+            span {
+                font-size: 11px;
+                color: #939599;
+                line-height: 18px;
+                margin-left: 2px;
+            }
+            &.prim {
+                border: 1px solid #fff287;
+                span {
+                    color: #ffef66;
+                }
+            }
+        }
+        .star + .star {
+            margin-left: 15px;
+        }
+    }
+}
+
+.card-content {
+    padding: 0 0;
+
+    .card-info {
+        .flex();
+        .text1 {
+            font-size: 12px;
+            color: #939599;
+            line-height: 17px;
+            display: inline-block;
+            min-width: 60px;
+        }
+        .text2 {
+            font-size: 12px;
+            color: #fff;
+            line-height: 17px;
+            margin-left: 10px;
+            flex-grow: 1;
+        }
+
+        .card-right {
+            .flex();
+            width: 100px;
+            .text1 {
+                min-width: 36px;
+            }
+        }
+    }
+
+    .card-info + .card-info {
+        margin-top: 6px;
+    }
+
+    /deep/&.card-detail {
+        img {
+            width: 100%;
+            height: auto;
+            display: block;
+        }
+    }
+}
 </style>
 </style>

+ 2 - 2
src/components/auction/banner.vue

@@ -61,7 +61,7 @@
 
 
         <post ref="post" :info="assetInfo" noButton :pageUrl="pageUrl" />
         <post ref="post" :info="assetInfo" noButton :pageUrl="pageUrl" />
     </div>
     </div>
-    <div class="top-box" v-else>
+    <!-- <div class="top-box" v-else>
         <three-mode :info="info.model3d" v-if="!!info.model3d" :pageType="pageType"></three-mode>
         <three-mode :info="info.model3d" v-if="!!info.model3d" :pageType="pageType"></three-mode>
 
 
         <swiper
         <swiper
@@ -88,7 +88,7 @@
                 <van-image width="100vw" height="100vw" :src="getImg(item.url, '', 1200)" fit="cover" />
                 <van-image width="100vw" height="100vw" :src="getImg(item.url, '', 1200)" fit="cover" />
             </swiper-slide>
             </swiper-slide>
         </swiper>
         </swiper>
-    </div>
+    </div> -->
 </template>
 </template>
 
 
 <script>
 <script>

+ 47 - 64
src/components/auction/deposit.vue

@@ -1,43 +1,18 @@
 <template>
 <template>
-    <van-action-sheet v-model:show="show" title="参拍详情">
+    <van-action-sheet v-model:show="show" title="出价订单">
         <div class="content">
         <div class="content">
-            <div class="collection">
-                <van-image width="80" height="80" radius="8" :src="getImg(changeImgs(info.pic, 600))" fit="cover" />
-                <div class="collection-info">
-                    <div class="name">{{ info.name }}</div>
-                    <div class="time">
-                        <img src="../../assets/info_icon_time.png" alt="" />
-                        <span>{{ timeText }}:<van-count-down :time="time" format="HH 时 mm 分 ss 秒" /></span>
-                    </div>
-                </div>
-            </div>
-
             <div class="price">
             <div class="price">
-                <div class="text1">保证金</div>
-                <img src="../../assets/jiage_huang.png" alt="" />
-                <div class="text2">{{ info.deposit }}</div>
+                <div class="text1">手续费(元)</div>
+                <div class="text2">{{ info.commission }}</div>
             </div>
             </div>
-            <div class="tips">若竞拍不成功,保证金将原路退回</div>
-
-            <div v-if="!isNFT" class="address" @click="onAdd">
-                <div class="address-info" v-if="addressInfo.id">
-                    <div class="text1">
-                        <span>收货人</span>
-                        <span>{{ addressInfo.name }} {{ addressInfo.phone }}</span>
-                    </div>
-
-                    <div class="text1">
-                        <span>收货地址</span>
-                        <span
-                            >{{ addressInfo.provinceName }} {{ addressInfo.cityName }} {{ addressInfo.districtName }}
-                            {{ addressInfo.address }}</span
-                        >
-                    </div>
-                </div>
-                <span class="address-info address-info-text" v-else> 选择收货地址 </span>
-                <img src="../../assets/icon_inter.png" alt="" />
+            <div class="tips">
+                <img src="@assets/icon_xiangqingye_tips.png" alt="" />
+                <span class="text1"> 若叫价失败,将原路退给您出局补偿。 </span>
+                <span class="text2">¥{{ info.earning }}</span>
             </div>
             </div>
-
+            <!-- <van-cell-group :border="false">
+                <van-cell title="若叫价失败,将原路退给您出局补偿。" :value="`¥${info.earning}`" :border="false" />
+            </van-cell-group> -->
             <div class="pay">
             <div class="pay">
                 <!-- <div class="pay-item" @click="payType = item.type" v-for="(item, index) in payInfos" :key="index">
                 <!-- <div class="pay-item" @click="payType = item.type" v-for="(item, index) in payInfos" :key="index">
                     <img class="icon" :src="item.icon" alt="" />
                     <img class="icon" :src="item.icon" alt="" />
@@ -45,7 +20,7 @@
                     <img class="choose-icon" :src="payType === item.type ? icons[1] : icons[0]" alt="" />
                     <img class="choose-icon" :src="payType === item.type ? icons[1] : icons[0]" alt="" />
                 </div> -->
                 </div> -->
 
 
-                <pay-method-pick v-model="payType"></pay-method-pick>
+                <pay-method-pick v-model="payType" onlyBalance></pay-method-pick>
             </div>
             </div>
         </div>
         </div>
         <div class="bottom">
         <div class="bottom">
@@ -319,15 +294,12 @@ export default {
         createOrder() {
         createOrder() {
             let form = {
             let form = {
                 userId: this.$store.state.userInfo.id,
                 userId: this.$store.state.userInfo.id,
-                auctionId: this.info.id,
-                type: 'DEPOSIT',
-                amount: this.money
+                tradeAuctionId: this.info.id,
+                price: this.money,
+                paymentType: 'DEPOSIT'
             };
             };
-            if (!this.isNFT) {
-                form.addressId = this.addressInfo.id;
-            }
             return this.$http
             return this.$http
-                .post('/auctionOrder/createDeposit', form)
+                .post('/tradeAuctionOrder/createOrder', form)
                 .then(res => {
                 .then(res => {
                     return Promise.resolve(res);
                     return Promise.resolve(res);
                 })
                 })
@@ -336,11 +308,6 @@ export default {
                 });
                 });
         },
         },
         submit() {
         submit() {
-            if (!this.isNFT && !this.addressInfo.id) {
-                this.$toast('请选择收货地址');
-                return;
-            }
-
             this.$toast.loading({
             this.$toast.loading({
                 message: '加载中...',
                 message: '加载中...',
                 forbidClick: true
                 forbidClick: true
@@ -473,7 +440,7 @@ export default {
                             forbidClick: true
                             forbidClick: true
                         });
                         });
                         this.$http
                         this.$http
-                            .post('/payOrder/v2/auction/balance', {
+                            .post('/payOrder/v2/tradeAuction/balance', {
                                 id: this.orderId,
                                 id: this.orderId,
                                 tradeCode: this.tradeCode
                                 tradeCode: this.tradeCode
                             })
                             })
@@ -688,34 +655,50 @@ export default {
 }
 }
 
 
 .price {
 .price {
-    .flex();
-    align-items: flex-end;
-    padding-top: 16px;
+    .flex-col();
+    align-items: center;
+    padding: 18px 0;
+    background: #f5f7fa;
+    border-radius: 4px;
     .text1 {
     .text1 {
         font-size: 14px;
         font-size: 14px;
-        color: #000000;
+        color: #939599;
         line-height: 14px;
         line-height: 14px;
-        font-weight: bold;
-    }
-
-    img {
-        width: 10px;
-        height: 11px;
-        margin-left: 10px;
     }
     }
     .text2 {
     .text2 {
         font-size: 32px;
         font-size: 32px;
         font-family: OSP-DIN, OSP;
         font-family: OSP-DIN, OSP;
         font-weight: normal;
         font-weight: normal;
-        color: #3ab200;
-        line-height: 20px;
+        color: #000;
+        line-height: 36px;
+        margin-top: 7px;
     }
     }
 }
 }
 .tips {
 .tips {
     font-size: 12px;
     font-size: 12px;
     color: #c8c9cc;
     color: #c8c9cc;
-    line-height: 17px;
-    margin-top: 6px;
+    line-height: 18px;
+    margin-top: 11px;
+
+    .flex();
+    img {
+        width: 18px;
+        height: 18px;
+    }
+
+    .text1 {
+        font-size: 12px;
+        color: #939599;
+        line-height: 17px;
+        flex-grow: 1;
+        margin-left: 4px;
+    }
+
+    .text2 {
+        font-size: 12px;
+        color: #000000;
+        line-height: 17px;
+    }
 }
 }
 
 
 .address {
 .address {

+ 53 - 56
src/components/auction/help.vue

@@ -8,72 +8,59 @@
         title="帮助"
         title="帮助"
     >
     >
         <div class="container" ref="container">
         <div class="container" ref="container">
-            <van-tabs v-model:active="active" @click="changeTab" v-show="scrollTop > 10">
-                <van-tab title="特别提醒" name="node1"> </van-tab>
+            <van-tabs v-model:active="active" @click="changeTab" v-show="showTab">
+                <van-tab title="绿洲易拍" name="node1"> </van-tab>
                 <van-tab title="竞拍说明" name="node2"> </van-tab>
                 <van-tab title="竞拍说明" name="node2"> </van-tab>
-                <van-tab title="竞拍告知" name="node3"> </van-tab>
-                <van-tab title="竞拍公告" name="node4"> </van-tab>
+                <van-tab title="竞拍公告" name="node3"> </van-tab>
             </van-tabs>
             </van-tabs>
-            <h3 ref="node1">一、特别提醒</h3>
-            <h4>1.温馨提示</h4>
+            <h3 ref="node1">一、绿洲易拍</h3>
+            <h4>1.说明</h4>
             <p>
             <p>
-                华储艺术品中心(深圳)有限公司举办的拍卖活动均按照本规则进行,参加拍卖活动的相关方务必仔细阅读并予以遵守。
+                绿洲易拍,是RAEX绿洲宇宙的数字商品专业拍卖模块,以数字艺术品、数字商品及元宇宙物资为核心的垂直赛道,为高端数字艺术品及元宇宙资产爱好者提供“1
+                of 1级别”的拍卖服务。
             </p>
             </p>
-            <h4>2.特别声明</h4>
-            <p>华储艺术品中心(深圳)有限公司特别声明不能保证拍品的真伪、品质及价值,对拍品不承担瑕疵担保责任。</p>
             <h3 ref="node2">二、竞拍说明(玩法说明)</h3>
             <h3 ref="node2">二、竞拍说明(玩法说明)</h3>
             <h4>1.什么是增价拍?</h4>
             <h4>1.什么是增价拍?</h4>
             <p>
             <p>
-                增加拍是指由送拍方设置最低成交价和加价幅度,由竞买人按照规定的加价幅度加价,在规定的时间内由最高出价者竞得。
+                增加拍是指由送拍方设置起拍价和加价幅度,由竞买人按照规定的加价幅度加价,在规定的时间内由最高出价者竞得。
             </p>
             </p>
             <h4>增价拍规则</h4>
             <h4>增价拍规则</h4>
-            <p><span>1</span>首次出价不得低于最低成交价。</p>
-            <p><span>2</span>出价最高者领先,价低者竞拍记录出具,出局者可以再次出价。</p>
-            <p><span>3</span>再次出价,须至少增加一个加价幅度出价。</p>
-            <h4>2.什么是一口价?</h4>
-            <p>一口价是送拍方以固定价格出售商品,没有讨价还价的余地,最先付款支付成功的竞买人竞得。</p>
-            <h4>3.保证金的缴纳</h4>
-
             <p>
             <p>
-                保证金是买家需要预先缴纳一定金额的资金,作为最终支付竞得拍品的拍品款和相关费用的保证。如果竞拍成功,已缴纳的保证金将自动抵扣相应金额的拍品款。如果买家为竞得拍品,系统将自动将保证金(无息)退回到买家的账户中。
+                <span>1</span
+                >每天每个拍卖标的仅能进行有限的拍卖委托,具体拍卖开拍时间以官方公告为准。每次仅有一人竞价权委托,一旦进行竞价委托,不可撤销。
+            </p>
+            <p>
+                <span>2</span
+                >为防止恶意炒作,在拍卖开始后,竞买人成功获得竞价权后,每次竞价幅度(加价)不得超过拍品原有竞拍价格的6%。
             </p>
             </p>
-            <h4>4.保证金的返还</h4>
-            <p><span>1</span>买家未成功竞得拍品:例如在竞拍过程中始终未出价、在竞拍过程中放弃加价等等情况;</p>
-            <p><span>2</span>买家竞拍成功后,平台自动关闭交易,或未履约发货及其他原因导致交易未完成的;</p>
             <p>
             <p>
                 <span>3</span
                 <span>3</span
-                >竞拍结束后,系统一般会在1-15个工作日内将款项退还到支付账号中,如您缴纳的竞拍保证金符合退换条件,但是系统未予自动退还,您可以联系本公司客服
+                >为保证公平原则,防止恶意竞拍,竞买人出价后,在官方指定的时间方可继续由第三方竞价,如竞价冷却结束后24小时内无人继续竞价,则关闭竞价通道,由竞买人竞拍成功,48小时内支付标的全款,如未按照最新竞价支付标的全款,则取消所有易拍竞价资格,其所交纳的竞价手续费不予退还,标的视为流拍。拍卖行择时另行上架进行重新拍卖。
             </p>
             </p>
-            <h4>5.保证金的扣除</h4>
-            <p>买家竞拍成功后,如果未按规定时间支付剩余货款,保证金将被扣除。</p>
-            <h4>6.保证金抵拍退款</h4>
-            <p>买家竞拍成功后 买家需在规定时间内缴纳剩余尾款,订单完成后之后,保证金原路退回至买家支付账户。</p>
-            <h4>7.关于退换货</h4>
-            <p>由于拍品的特殊性质,因此不提供退换货服务,请您务必充分评估并谨慎出价。</p>
-            <h3 ref="node3">三、竞拍告知</h3>
-            <h4>1.发货时间</h4>
-            <p>数字艺术品在拍卖付款成功后1个工作日内将移至您的账户。</p>
+            <h4>2.什么是一口价?</h4>
             <p>
             <p>
-                实物商品正常订单付款后一般72小时发货。节假日订单顺延至工作日统一发货。送拍方的仓库可能分布在全国各地,因此一旦出现疫情封控或其他特殊情况需要延后发货的,送拍方将直接联系您沟通具体情况
+                竞买人可对拍品每日可进行“继续竞价,解锁权益”或“一口价购买,获得当前权益”两种方式操作。“一口价”为市场指导价。
             </p>
             </p>
-            <h4>2.物流服务</h4>
-            <p>所有实物拍品一般默认快递发货。</p>
-            <h4>3.关于运费</h4>
+            <h4>3.竞价手续费的缴纳</h4>
+
             <p>
             <p>
-                中国大陆地区一般提供包邮服务,不提供的会在详情页注明。
-                国际及港澳台快递费、包装费用均由买受人支付相应费用。
+                委托人每进行一次竞价,拍卖行收取拍卖挂单价格的3%+(标的现价-起拍价)作为竞价手续费,竞价手续费用于支付通道费用与竞价出局补偿,为单次收取。
             </p>
             </p>
-            <h4>4.运费保险</h4>
+            <h4>4.出局补偿</h4>
             <p>
             <p>
-                如拍品物流过程中出现问题,快递公司默认保丢不保损,未选择保价服务的商品,如在运输途中出现破损、缺失、丢失等异常情况,买家将无法享受快递公司的理赔服务。买家接受和认可平台不对运输过程中的任何损失或丢失情况负责任。为避免运输途中出现缺失与损坏,买受人可根据拍品价值及需求提前联系官方咨询保价服务
+                出局补偿是当拍卖委托人的拍品被第三人竞价成功后,对于前一竞价人的补偿(拍卖标的现价-起拍价)。拍卖委托人的拍品被第三人竞价成功后,拍卖委托人失去竞价权,竞价权由第三人获得
             </p>
             </p>
-            <h4>5.开具发票</h4>
+            <h4>5.竞价手续费的扣除</h4>
+            <p>买家竞拍成功后,如果未按规定时间支付剩余货款,竞价手续费将被扣除,同时失去所有易拍竞价资格。</p>
+            <h4>6.解锁权益</h4>
             <p>
             <p>
-                如买家需开具发票,发票中的购买方名称必须与本人名称一致,且须于结清拍品款的当月月底前联系客服办理增值税普通发票开具事宜。逾期恕不办理,请买家务必正确提供开票信息。
+                每个藏品的权益需要解锁:每个拍品叫价次数越多,权益星级越高,解锁更多权益,为每成功10次叫价,解锁一个星级,满星为3星,具体星级对应权益请查看拍品详情
             </p>
             </p>
-            <h3 ref="node4">四、竞拍公告</h3>
+            <h4>7.关于退换货</h4>
+            <p>由于拍品的特殊性质,因此不提供退换货服务,请您务必充分评估并谨慎出价。</p>
+            <h3 ref="node3">三、竞拍公告</h3>
             <p>
             <p>
-                1.凡参与一口价购买或增价拍的竞买人,请您先了解本(公告)规则,您一旦参与购买或竞价即视为您已经同意本现则。
+                1.凡参与一口价购买或增价拍的竞买人,请您先了解本(公告)规则,您一旦参与购买或竞价即视为您已经同意本现则
             </p>
             </p>
             <p>
             <p>
                 2.本场竞拍活动是数字艺术品版权(拍品)的拍卖活动,本拍品已经过蚂蚁链技术的加密程序,您竞拍成功后可前往“RAEX绿洲宇宙”手机APP查看、验证和下载。
                 2.本场竞拍活动是数字艺术品版权(拍品)的拍卖活动,本拍品已经过蚂蚁链技术的加密程序,您竞拍成功后可前往“RAEX绿洲宇宙”手机APP查看、验证和下载。
@@ -87,18 +74,15 @@
             <p>
             <p>
                 5.本拍品由送拍方提供,您将独立承担参与本次拍卖的相关风险,并享有相应权利。如因送拍方或者拍品原创作者发布危害国家利益、违反社会道德、公序良俗及其他可能造成严重负面舆论的言论或行为,导致数字艺术品版权被屏蔽或者限制使用的,您应当自行与送拍方沟通解决。
                 5.本拍品由送拍方提供,您将独立承担参与本次拍卖的相关风险,并享有相应权利。如因送拍方或者拍品原创作者发布危害国家利益、违反社会道德、公序良俗及其他可能造成严重负面舆论的言论或行为,导致数字艺术品版权被屏蔽或者限制使用的,您应当自行与送拍方沟通解决。
             </p>
             </p>
-            <p>6.“蚂蚁链”仅提供区块链技术服务,不参与作品拍卖的具体环节。 7送拍方应保证本作品版权的合法性和唯一性。</p>
-            <p>
-                8.为防止恶意竞拍扰乱市场秩序的行为,在您参加竞拍活动前,系统需要冻结一定金额的保证金。在竞拍结束后如未成功则自动解冻,无息返还至原支付账户。竞拍成功的用户竞拍结束后72小时内未支付尾款的,保证金将作为违约金不予返还。
-            </p>
-            <p>9.每个拍品每个用户仅限参与一次,名额不可转让、折现、出售。</p>
+            <p>6.“蚂蚁链”仅提供区块链技术服务,不参与作品拍卖的具体环节。</p>
+            <p>7.送拍方应保证本作品版权的合法性和唯一性。</p>
             <p>
             <p>
-                10.考虑到本次拍卖活动中的拍品具有区块链上唯一性的特征,同时鉴于参拍前已向您充分说明拍卖特性,因此拍品不提供退换货服务,请您务必充分评估并谨慎出价。
+                8.考虑到本次拍卖活动中的拍品具有区块链上唯一性的特征,同时鉴于参拍前已向您充分说明拍卖特性,因此拍品不提供退换货服务,请您务必充分评估并谨慎出价。
             </p>
             </p>
             <p>
             <p>
-                11.买家理解并同意,鉴于网络服务的特殊性,我们对本服务持续提供可能受到多重因素影响,如出现技术升级、网路故障、经营策略调整、配合国家重大技术、法规政策变化,平台可能随时终止、中断提供服务或变更服务形式、规格或其他方面而无须承担责任。
+                9.买家理解并同意,鉴于网络服务的特殊性,我们对本服务持续提供可能受到多重因素影响,如出现技术升级、网路故障、经营策略调整、配合国家重大技术、法规政策变化,平台可能随时终止、中断提供服务或变更服务形式、规格或其他方面而无须承担责任。
             </p>
             </p>
-            <p>12.如您想要通过竞拍方式购买数字艺术品,应当满足以下条件:</p>
+            <p>10.如您想要通过竞拍方式购买数字艺术品,应当满足以下条件:</p>
             <p><span>1</span>您已满18周岁未满60周岁,并具有中华人民共和国国籍。</p>
             <p><span>1</span>您已满18周岁未满60周岁,并具有中华人民共和国国籍。</p>
             <p><span>2</span>您已通过实名制认证。</p>
             <p><span>2</span>您已通过实名制认证。</p>
             <p>
             <p>
@@ -109,7 +93,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { ref, watch } from 'vue';
+import { computed, ref, watch } from 'vue';
 import { useScrollParent, useEventListener, useToggle } from '@vant/use';
 import { useScrollParent, useEventListener, useToggle } from '@vant/use';
 export default {
 export default {
     setup() {
     setup() {
@@ -122,15 +106,20 @@ export default {
         const active = ref('');
         const active = ref('');
         const [state, toggle] = useToggle();
         const [state, toggle] = useToggle();
         const scrollTop = ref(0);
         const scrollTop = ref(0);
+        const showTab = computed(() => {
+            return scrollTop.value > 10;
+        });
 
 
         useEventListener(
         useEventListener(
             'scroll',
             'scroll',
             e => {
             e => {
                 scrollTop.value = container.value.parentNode.scrollTop;
                 scrollTop.value = container.value.parentNode.scrollTop;
+                if (!showTab.value) {
+                    active.value = '';
+                    return;
+                }
                 if (!state.value) {
                 if (!state.value) {
-                    if (scrollTop.value > node4.value.offsetTop - 80) {
-                        active.value = 'node4';
-                    } else if (scrollTop.value > node3.value.offsetTop - 80) {
+                    if (scrollTop.value > node3.value.offsetTop - 80) {
                         active.value = 'node3';
                         active.value = 'node3';
                     } else if (scrollTop.value > node2.value.offsetTop - 80) {
                     } else if (scrollTop.value > node2.value.offsetTop - 80) {
                         active.value = 'node2';
                         active.value = 'node2';
@@ -170,7 +159,7 @@ export default {
             }, 1500);
             }, 1500);
         };
         };
 
 
-        return { container, node1, node2, node3, node4, active, changeTab, scrollTop };
+        return { container, node1, node2, node3, node4, active, changeTab, scrollTop, showTab };
     },
     },
     data() {
     data() {
         return {
         return {
@@ -252,6 +241,14 @@ p {
     margin-right: 0;
     margin-right: 0;
     flex-grow: 0 !important;
     flex-grow: 0 !important;
 }
 }
+
+/deep/.van-tab.van-tab--active {
+    color: #000000 !important;
+}
+/deep/.van-tabs__line {
+    --van-tabs-bottom-bar-width: 16px;
+    --van-tabs-bottom-bar-color: #000;
+}
 </style>
 </style>
 <style lang="less">
 <style lang="less">
 .help-box {
 .help-box {

+ 75 - 18
src/components/auction/info.vue

@@ -7,34 +7,39 @@
             }
             }
         }"
         }"
         class="auction-info"
         class="auction-info"
-        :class="{ isEnd: isEnd }"
+        :class="{ isEnd: isEnd, isDark: isDark }"
     >
     >
         <van-image :radius="8" width="128" height="128" :src="getImg(changeImgs(info.pic, 600))" fit="cover" />
         <van-image :radius="8" width="128" height="128" :src="getImg(changeImgs(info.pic, 600))" fit="cover" />
         <div class="content">
         <div class="content">
             <div class="text1 van-multi-ellipsis--l2">
             <div class="text1 van-multi-ellipsis--l2">
                 {{ info.name }}
                 {{ info.name }}
             </div>
             </div>
+            <div class="category">
+                <span>{{ info.category }}</span>
+                <span>绿洲易拍卖</span>
+                <span>1of1</span>
+            </div>
             <div class="text2">
             <div class="text2">
                 <div class="time" v-if="!isEnd">
                 <div class="time" v-if="!isEnd">
-                    <img src="../../assets/info_icon_time.png" alt="" />
+                    <img v-if="!isDark" src="@assets/info_icon_time.png" alt="" />
                     <span
                     <span
                         >{{ timeText }}:<van-count-down @finish="finish" :time="time" format="HH 小时 mm 分 ss 秒"
                         >{{ timeText }}:<van-count-down @finish="finish" :time="time" format="HH 小时 mm 分 ss 秒"
                     /></span>
                     /></span>
                 </div>
                 </div>
 
 
-                <div class="time" v-else>
-                    <img src="../../assets/info_icon_time1.png" alt="" />
+                <div class="time end" v-else>
                     <span>{{ timeText }}</span>
                     <span>{{ timeText }}</span>
                 </div>
                 </div>
             </div>
             </div>
 
 
             <div class="text3">
             <div class="text3">
-                <span class="text3-1">{{ priceText }}</span>
+                <span class="text3-1">当前价</span>
                 <div class="price">
                 <div class="price">
-                    <img src="../../assets/icon_jiage_hei.png" alt="" />
+                    <img v-if="isDark" src="../../assets/icon_jiage_bai.png" alt="" />
+                    <img v-else src="../../assets/icon_jiage_hei.png" alt="" />
                     <span>{{ showPrice }}</span>
                     <span>{{ showPrice }}</span>
                 </div>
                 </div>
-                <span class="text3-3">出价{{ info.bids }}次</span>
+                <span class="text3-3">预估价 ¥{{ info.recommendPrice }}</span>
             </div>
             </div>
         </div>
         </div>
     </router-link>
     </router-link>
@@ -63,6 +68,10 @@ export default {
         isLink: {
         isLink: {
             type: Boolean,
             type: Boolean,
             default: true
             default: true
+        },
+        isDark: {
+            type: Boolean,
+            default: false
         }
         }
     },
     },
     mixins: [auction],
     mixins: [auction],
@@ -72,10 +81,10 @@ export default {
     methods: {
     methods: {
         setTime() {
         setTime() {
             let time = 0;
             let time = 0;
-            if (this.info.status === 'NOTSTARTED') {
-                time = this.getTime(this.info.startTime);
+            if (this.info.status === 'NOTSTARTED' || this.info.status === 'WAITING') {
+                time = this.getTime(this.info.currentStartTime);
             } else {
             } else {
-                time = this.getTime(this.info.endTime);
+                time = this.getTime(this.info.currentEndTime);
             }
             }
             if (time > 0) {
             if (time > 0) {
                 this.time = time;
                 this.time = time;
@@ -105,7 +114,7 @@ export default {
 .auction-info {
 .auction-info {
     border-radius: 8px;
     border-radius: 8px;
     overflow: hidden;
     overflow: hidden;
-    background-color: #fff;
+    background-color: #ffffff;
     display: inline-flex;
     display: inline-flex;
     width: calc(100% - 16px);
     width: calc(100% - 16px);
     margin: 8px;
     margin: 8px;
@@ -131,11 +140,11 @@ export default {
 
 
             .time {
             .time {
                 .flex();
                 .flex();
-                height: 22px;
-                background: #fff7f2;
+                height: 18px;
                 border-radius: 4px;
                 border-radius: 4px;
                 display: inline-flex;
                 display: inline-flex;
                 padding: 0 4px;
                 padding: 0 4px;
+                background-color: #fff7f2;
                 img {
                 img {
                     width: 18px;
                     width: 18px;
                     height: 18px;
                     height: 18px;
@@ -143,14 +152,14 @@ export default {
                 span {
                 span {
                     margin-left: 2px;
                     margin-left: 2px;
                     .flex();
                     .flex();
-                    font-size: 12px;
+                    font-size: 11px;
                     color: #ff7f1f;
                     color: #ff7f1f;
-                    line-height: 22px;
+                    line-height: 18px;
                     white-space: nowrap;
                     white-space: nowrap;
                     .van-count-down {
                     .van-count-down {
                         font-size: 12px;
                         font-size: 12px;
                         color: #ff7f1f;
                         color: #ff7f1f;
-                        line-height: 22px;
+                        line-height: 18px;
                     }
                     }
                 }
                 }
             }
             }
@@ -161,7 +170,6 @@ export default {
             .text3-1 {
             .text3-1 {
                 font-size: 10px;
                 font-size: 10px;
                 font-weight: bold;
                 font-weight: bold;
-                color: #000000;
                 line-height: 10px;
                 line-height: 10px;
             }
             }
             .price {
             .price {
@@ -175,7 +183,6 @@ export default {
                     font-size: 20px;
                     font-size: 20px;
                     font-family: OSP-DIN, OSP;
                     font-family: OSP-DIN, OSP;
                     font-weight: normal;
                     font-weight: normal;
-                    color: #000000;
                     line-height: 14px;
                     line-height: 14px;
                 }
                 }
 
 
@@ -202,5 +209,55 @@ export default {
             }
             }
         }
         }
     }
     }
+
+    &.isDark {
+        background-color: #2e3031;
+        color: #fff;
+        .content {
+            .text2 {
+                .time {
+                    background-color: transparent;
+                    border: 1px solid #ffe196;
+                    box-sizing: border-box;
+                    span {
+                        color: #ffe196;
+                        .van-count-down {
+                            color: #ffe196;
+                        }
+                    }
+                    &.end {
+                        border-color: #939599;
+                        span {
+                            color: #939599;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+.category {
+    .flex();
+    font-size: 12px;
+    color: #939599;
+    line-height: 17px;
+    padding-top: 8px;
+    span {
+        margin: 0 6px;
+    }
+    span + span {
+        position: relative;
+        &::before {
+            content: '';
+            width: 1px;
+            height: 15px;
+            background: rgba(147, 149, 153, 0.2);
+            border-radius: 1px;
+            position: absolute;
+            top: 0;
+            left: -7px;
+        }
+    }
 }
 }
 </style>
 </style>

+ 7 - 6
src/components/auction/records.vue

@@ -10,9 +10,9 @@
                 </div>
                 </div>
                 <van-list class="list" v-model:loading="loading" :finished="finished" finished-text="" @load="getData">
                 <van-list class="list" v-model:loading="loading" :finished="finished" finished-text="" @load="getData">
                     <div class="record-item" v-for="(item, index) in list" :key="index">
                     <div class="record-item" v-for="(item, index) in list" :key="index">
-                        <span>{{ item.user }}</span>
+                        <span>{{ item.nickname }}</span>
                         <span>{{ index === 0 ? '领先' : '出局' }}</span>
                         <span>{{ index === 0 ? '领先' : '出局' }}</span>
-                        <span>¥{{ item.bidderPrice || 0 }}</span>
+                        <span>¥{{ item.currentPrice || 0 }}</span>
                         <span>{{ showTime(item.createdAt) }}</span>
                         <span>{{ showTime(item.createdAt) }}</span>
                     </div>
                     </div>
                     <div class="empty" v-if="empty">暂无拍卖纪录</div>
                     <div class="empty" v-if="empty">暂无拍卖纪录</div>
@@ -41,7 +41,7 @@ export default {
     data() {
     data() {
         return {
         return {
             show: false,
             show: false,
-            url: '/auctionRecord/all',
+            url: '/tradeAuctionOrder/all',
             size: 10
             size: 10
         };
         };
     },
     },
@@ -49,9 +49,10 @@ export default {
         beforeData() {
         beforeData() {
             return {
             return {
                 query: {
                 query: {
-                    auctionId: this.auctionId,
-                    type: 'BIDDER',
-                    del: false
+                    tradeAuctionId: this.auctionId,
+                    del: false,
+                    status: 'FINISH',
+                    paymentType: 'DEPOSIT,PURCHASE_PRICE'
                 },
                 },
                 sort: 'id,desc'
                 sort: 'id,desc'
             };
             };

+ 25 - 28
src/components/auction/rule.vue

@@ -10,40 +10,49 @@
         <div class="page">
         <div class="page">
             <h3>RAEX绿洲宇宙拍卖规则</h3>
             <h3>RAEX绿洲宇宙拍卖规则</h3>
             <p>
             <p>
-                一、凡参与一口价购买或增价拍的竞买人,请您先了解本(公告)规则,您一旦参与购买或竞价即视为您已经同意本现则。
+                1.凡参与一口价购买或增价拍的竞买人,请您先了解本(公告)规则,您一旦参与购买或竞价即视为您已经同意本现则。
             </p>
             </p>
             <p>
             <p>
-                二、本场竞拍活动是数字艺术品版权(拍品)的拍卖活动,本拍品已经过蚂蚁链技术的加密程序,您竞拍成功后可前往“RAEX绿洲宇宙”手机APP查看、验证和下载。
+                2.拍卖标的(拍品)为“1 of
+                1”。起拍价、保证金、加价幅度,以各标的(拍品)页面显示为准。平台藏品均为增价拍卖方式,<span>价高者得</span>。
             </p>
             </p>
             <p>
             <p>
-                三、本拍品数量为【1】件,作品拍卖展示时,频道内会显著、清晰标准拍品的详细信息,所有拍品的相关内容和版权均由送拍方自行承担责任
+                3.为防止恶意炒作,每天每个拍卖标的仅能进行有限的拍卖委托,具体拍卖开拍时间以官方公告为准。<span>每次仅有一人竞价权委托</span>,一旦进行竞价委托,不可撤销
             </p>
             </p>
             <p>
             <p>
-                四、本拍品的介绍(包括但不限于图片、文字、视频等)及拍品资质文件(包括但不限于来源证明、鉴定证书等),所有拍品的相关内容和版权均由送拍方自行编辑上传并承担责任。
+                4. 为防止恶意炒作,在拍卖开始后,竞买人成功获得竞价权后,<span
+                    >每次竞价幅度(加价)不得超过拍品原有竞拍价格的6%。</span
+                >
             </p>
             </p>
             <p>
             <p>
-                五、本拍品由送拍方提供,您将独立承担参与本次拍卖的相关风险,并享有相应权利。如因送拍方或者拍品原创作者发布危害国家利益、违反社会道德、公序良俗及其他可能造成严重负面舆论的言论或行为,导致数字艺术品版权被屏蔽或者限制使用的,您应当自行与送拍方沟通解决
+                5.为保证公平原则,防止恶意竞拍,竞买人出价后,<span>在官方指定的时间方可继续由第三方竞价</span>,如竞价冷却结束后24小时内无人继续竞价,则关闭竞价通道,由竞买人竞拍成功,48小时内支付标的全款,如未按照最新竞价支付标的全款,<span>则取消所有易拍竞价资格</span>,其所交纳的<span>竞价手续费不予退还</span>,标的视为流拍。拍卖行择时另行上架进行重新拍卖
             </p>
             </p>
             <p>
             <p>
-                六、“蚂蚁链”仅提供区块链技术服务,不参与作品拍卖的具体环节。
-                七、送拍方应保证本作品版权的合法性和唯一性。
+                6.竞买人可对拍品每日可进行“继续竞价,解锁权益”或“一口价购买,获得当前权益”两种方式操作。“一口价”为市场指导价。
             </p>
             </p>
             <p>
             <p>
-                八、为防止恶意竞拍扰乱市场秩序的行为,在您参加竞拍活动前,系统需要冻结一定金额的保证金。在竞拍结束后如未成功则自动解冻,无息返还至原支付账户。竞拍成功的用户竞拍结束后72小时内未支付尾款的,保证金将作为违约金不予返还
+                7.为防止恶意炒作,<span>每幅作品设置最高竞拍次数,</span>触达最高竞拍次数时,无法继续竞价,只有直接购买按钮,买受人支付标的全款,自动触发成交,拍卖标的将直接空投至买受人藏品室,触发藏品所有相关持有权益
             </p>
             </p>
-            <p>九、每个拍品每个用户仅限参与一次,名额不可转让、折现、出售。</p>
             <p>
             <p>
-                十、考虑到本次拍卖活动中的拍品具有区块链上唯一性的特征,同时鉴于参拍前已向您充分说明拍卖特性,因此拍品不提供退换货服务,请您务必充分评估并谨慎出价
+                8.绿洲易拍作为平台方,展示委托方自行发布并上传的拍卖及拍品信息(包括拍品、文字、来源证明、鉴定证书(如有)等)。拍品实际情况以现状为准,竞买方在拍卖前必须仔细审查标的物(拍品)的实际情况,自行判断标的(拍品)的真伪、优劣,并为自己的竞拍行为负责,如若参拍,将视作您对该件拍品无任何异议。竞买人一旦作出竞买决定,视为对本标的(拍品)现状的确认,并接受标的物(拍品)的现状和一切已知及未知的瑕疵。标的物(拍品)一经拍出不接受退换退还
             </p>
             </p>
             <p>
             <p>
-                十一、买家理解并同意,鉴于网络服务的特殊性,我们对本服务持续提供可能受到多重因素影响,如出现技术升级、网路故障、经营策略调整、配合国家重大技术、法规政策变化,平台可能随时终止、中断提供服务或变更服务形式、规格或其他方面而无须承担责任
+                9.买受人参与竞买的风险(包括但不限于《商标法》中所规定的商标无效、商标撤销、商标无法转让等风险)由买受人自行承担
             </p>
             </p>
-            <p>十二、如您想要通过竞拍方式购买数字艺术品,应当满足以下条件:</p>
-            <p>1)您已满18周岁未满60周岁,并具有中华人民共和国国籍。 2)您已通过实名制认证。</p>
+            <p>10.竞买方竞得拍卖标的后,拍卖行惯例需先收到全部拍品款及佣金后安排转赠。</p>
+            <p>11.竞买方竞得拍卖标的后,拍卖行惯例需先收到全部拍品款及佣金后安排转赠。</p>
             <p>
             <p>
-                您仅代表您个人而不属于任何组织或企业,您理解及确认我们有权依据国家法律法规、监管政策、活动规则或业务需要对上述条件进行补充或修改,您一旦参拍并购买商品,即表示您承诺符合以上条件并受到本协议及活动细则约束。
+                12.委托人每进行一次竞价,<span>拍卖行收取拍卖挂单价格的3%+(标的现价-起拍价)作为竞价手续费</span>,竞价手续费用于支付通道费用与竞价出局补偿,为单次收取。
+            </p>
+            <p>
+                13.出局补偿是当拍卖委托人的拍品被第三人竞价成功后,<span>对于前一竞价人的补偿(拍卖标的现价-起拍价)</span>。拍卖委托人的拍品被第三人竞价成功后,拍卖委托人失去竞价权,竞价权由第三人获得。
+            </p>
+            <p>
+                14.每个藏品的权益需要解锁:每个拍品叫价次数越多,权益星级越高,解锁更多权益,<span>为每成功10次叫价,解锁一个星级,满星为3星,</span>具体星级对应权益请查看拍品详情。
+            </p>
+            <p>
+                15.以上内容为“绿洲易拍”基础规则,日常活动有可能与本规则产生冲突,冲突部分以官方公告为准,拍卖当事人已充分了解以上所有信息及所有官方公告。华储艺术品中心(深圳)有限公司、RAEX绿洲及绿洲易拍享有最终解释权。
             </p>
             </p>
-            <p>生效日期:2022年4月25日</p>
 
 
             <div class="botton-btn">
             <div class="botton-btn">
                 <van-button @click="show = false" type="primary" block round>知道了</van-button>
                 <van-button @click="show = false" type="primary" block round>知道了</van-button>
@@ -105,19 +114,7 @@ p + p {
 
 
 p {
 p {
     span {
     span {
-        font-size: 12px;
-        font-weight: bold;
-        color: #ffffff;
-        line-height: 16px;
-        width: 16px;
-        height: 16px;
-        display: inline-flex;
-        background-color: #939599;
-        text-align: center;
-        border-radius: 16px;
-        align-items: center;
-        justify-content: center;
-        margin-right: 6px;
+        color: #000000;
     }
     }
 }
 }
 
 

+ 49 - 61
src/components/order/OrderInfoAuction.vue

@@ -28,21 +28,21 @@
                     </div>
                     </div>
                 </div>
                 </div>
 
 
-                <div class="text3" v-if="type !== 'FIXED_PRICE'">
-                    <span class="text3-1">保证金</span>
+                <div class="text3">
+                    <span class="text3-1">起拍价</span>
                     <div class="price">
                     <div class="price">
                         <!-- <img src="../../assets/icon_jiage_hei.png" alt="" /> -->
                         <!-- <img src="../../assets/icon_jiage_hei.png" alt="" /> -->
-                        <span>¥{{ info.deposit }}{{ deposit ? `(${deposit})` : '' }}</span>
+                        <span>¥{{ info.orginPrice || 0 }}</span>
                     </div>
                     </div>
                     <!-- <span class="text3-3">出价{{ info.bids }}次</span> -->
                     <!-- <span class="text3-3">出价{{ info.bids }}次</span> -->
                 </div>
                 </div>
             </div>
             </div>
         </div>
         </div>
         <div class="bottom">
         <div class="bottom">
-            <div class="tips">{{ showText }}: {{ info.createdAt || info.createdTime }}</div>
+            <div class="tips" v-if="info.paymentType === 'DEPOSIT'">手续费 ¥{{ info.serviceCharge }}</div>
             <div class="price">
             <div class="price">
-                <span class="text1">{{ payText }}</span>
-                <span class="text2" :style="{ color: priceColor }">¥{{ info.totalPrice || info.bidderPrice }}</span>
+                <span class="text1">叫价</span>
+                <span class="text2" :style="{ color: priceColor }">¥{{ info.price }}</span>
             </div>
             </div>
         </div>
         </div>
         <!-- <div class="total-price">
         <!-- <div class="total-price">
@@ -93,38 +93,18 @@ export default {
         isbidder() {
         isbidder() {
             return this.info.auctionStatus == 'PURCHASED' && this.info.actPurchasedId === this.userInfo.id;
             return this.info.auctionStatus == 'PURCHASED' && this.info.actPurchasedId === this.userInfo.id;
         },
         },
-        status() {
-            let status = this.getLabelName(this.info.orderStatus || this.info.orderStatus, this.orderStatusOptions);
-            if (!status) {
-                if (this.isbidder) {
-                    status = '竞价成功,去支付';
-                } else if (this.info.auctionStatus === 'PASS') {
-                    status = '已流局';
-                } else if (this.info.auctionStatus === 'ONGOING' && this.isLeader) {
-                    status = '竞价中';
-                } else if (this.info.auctionStatus === 'ONGOING' && !this.isLeader) {
-                    status = '已出局,重新叫价';
-                } else {
-                    status = '已结束';
-                }
-            }
-            return status;
-        },
         statusColor() {
         statusColor() {
             let color = '#3AB200';
             let color = '#3AB200';
-            if (this.isbidder) {
-                color = '#FF4F50';
-            } else if (
-                this.info.auctionStatus === 'ONGOING' &&
-                (this.info.purchaserId === this.userInfo.id || !this.info.purchaserId)
-            ) {
-                color = '#3AB200';
-            } else if (this.info.purchaserId) {
-                color = '#3AB200';
-            } else if (this.isPass) {
-                color = '#939599';
-            } else {
-                color = '#939599';
+            switch (this.info.paybackStatus) {
+                case 'NOPASSED':
+                    color = '#3AB200';
+                    break;
+                case 'PASSED':
+                    color = '#F53809';
+                    break;
+                case 'PAYED':
+                    color = '#939599';
+                    break;
             }
             }
 
 
             return color;
             return color;
@@ -135,15 +115,6 @@ export default {
             }
             }
             return false;
             return false;
         },
         },
-        payText() {
-            if (this.orderId || this.isOrder) {
-                return '实际支付';
-            } else if (this.info.auctionStatus === 'ONGOING') {
-                return '当前价';
-            } else {
-                return '成交价';
-            }
-        },
         showText() {
         showText() {
             if (this.orderId || this.isOrder) {
             if (this.orderId || this.isOrder) {
                 return '订单时间';
                 return '订单时间';
@@ -170,14 +141,8 @@ export default {
             }
             }
         },
         },
         priceColor() {
         priceColor() {
-            if (this.info.orderId || this.isOrder) {
+            if (this.info.paybackStatus === 'NOPASSED') {
                 return '#3AB200';
                 return '#3AB200';
-            } else if (
-                this.info.auctionStatus === 'ONGOING' &&
-                this.info.purchaserId &&
-                this.info.purchaserId === this.userInfo.id
-            ) {
-                return '#F53809';
             }
             }
             return '#939599';
             return '#939599';
         },
         },
@@ -186,9 +151,7 @@ export default {
         }
         }
     },
     },
     mounted() {
     mounted() {
-        if (this.info.auctionStatus === 'ONGOING') {
-            this.time = this.getTime(this.info.endTime);
-        }
+        this.time = this.getTime(this.info.currentStartTime);
     },
     },
     methods: {
     methods: {
         delInit() {
         delInit() {
@@ -259,18 +222,35 @@ export default {
                 });
                 });
         },
         },
         goDetail() {
         goDetail() {
-            if (this.info.orderId || this.isOrder) {
+            if (
+                this.info.paymentType === 'DEPOSIT' &&
+                this.info.paybackStatus === 'NOPASSED' &&
+                this.info.status === 'PASS'
+            ) {
                 this.$router.push({
                 this.$router.push({
                     path: '/auctionOrderDetail',
                     path: '/auctionOrderDetail',
                     query: {
                     query: {
-                        id: this.isOrder ? this.info.id : this.info.orderId
+                        id: this.info.id
+                    }
+                });
+            } else if (
+                (this.info.paybackStatus == 'PASSED' ||
+                    this.info.paybackStatus === 'PAYED' ||
+                    this.info.paymentType === 'FIXED_PRICE' ||
+                    this.info.paymentType === 'PURCHASE_PRICE') &&
+                this.info.status === 'FINISH'
+            ) {
+                this.$router.push({
+                    path: '/auctionOrderDetail',
+                    query: {
+                        id: this.info.id
                     }
                     }
                 });
                 });
             } else {
             } else {
                 this.$router.push({
                 this.$router.push({
                     path: '/auctionDetail',
                     path: '/auctionDetail',
                     query: {
                     query: {
-                        id: this.info.auctionId
+                        id: this.info.tradeAuctionId
                     }
                     }
                 });
                 });
             }
             }
@@ -443,7 +423,15 @@ export default {
 
 
 .bottom {
 .bottom {
     .flex();
     .flex();
-    justify-content: space-between;
+    justify-content: flex-end;
+
+    .tips {
+        font-size: 14px;
+        font-weight: bold;
+        color: #939599;
+        line-height: 24px;
+        margin-right: 12px;
+    }
 
 
     .price {
     .price {
         .text1 {
         .text1 {
@@ -456,9 +444,9 @@ export default {
         .text2 {
         .text2 {
             font-size: 16px;
             font-size: 16px;
             font-weight: bold;
             font-weight: bold;
-            color: #939599;
+            color: #3ab200;
             line-height: 24px;
             line-height: 24px;
-            margin-left: 10px;
+            margin-left: 4px;
         }
         }
     }
     }
 }
 }

+ 1 - 1
src/components/product/ProductBanner.vue

@@ -42,7 +42,7 @@
                 </swiper-slide>
                 </swiper-slide>
             </swiper>
             </swiper>
 
 
-            <div class="share-content">
+            <div class="share-content" v-if="pageType !== 'auction'">
                 <div class="setAvatar" @click="setAvatar" v-if="pageType == 'asset' && onlyImg">
                 <div class="setAvatar" @click="setAvatar" v-if="pageType == 'asset' && onlyImg">
                     <img src="../../assets/icon-sheweitouxiang.png" alt="" />
                     <img src="../../assets/icon-sheweitouxiang.png" alt="" />
                     <span>设为头像</span>
                     <span>设为头像</span>

+ 4 - 0
src/main.js

@@ -130,6 +130,10 @@ if (query.invitor) {
     if (query.id) {
     if (query.id) {
         store.commit('setProductId', query.id);
         store.commit('setProductId', query.id);
     }
     }
+
+    if (query.inviteType) {
+        store.commit('setInviteType', query.inviteType);
+    }
 }
 }
 if (query.from) {
 if (query.from) {
     store.commit('setFrom', query.from);
     store.commit('setFrom', query.from);

+ 30 - 9
src/mixins/auction.js

@@ -29,18 +29,21 @@ export default {
         timeText() {
         timeText() {
             if (this.info.status === 'NOTSTARTED') {
             if (this.info.status === 'NOTSTARTED') {
                 return '距开始';
                 return '距开始';
-            } else if (this.info.status === 'ONGOING') {
+            }
+            if (this.info.status === 'ONGOING') {
                 return '距结束';
                 return '距结束';
-            } else {
-                return '已结束';
             }
             }
+            if (this.info.status === 'WAITING') {
+                return '距开始';
+            }
+
+            return '已结束';
         },
         },
         //是否结束
         //是否结束
         isEnd() {
         isEnd() {
-            if (this.info.status !== 'NOTSTARTED' && this.info.status !== 'ONGOING') {
-                return true;
-            }
-            return false;
+            let startStatus = ['NOTSTARTED', 'ONGOING', 'WAITING'];
+
+            return !startStatus.includes(this.info.status);
         },
         },
         priceText() {
         priceText() {
             if (
             if (
@@ -58,13 +61,31 @@ export default {
             }
             }
         },
         },
         showPrice() {
         showPrice() {
-            return this.info.purchasePrice || this.info.startingPrice || this.info.fixedPrice || 0;
+            if (this.info.status == 'FIXED_PRICE_PURCHASED') {
+                return this.info.fixedPrice;
+            }
+            return this.info.currentPrice || this.info.price || 0;
         },
         },
         isLeader() {
         isLeader() {
-            return this.isLogin && this.info.purchaserId === this.$store.state.userInfo.id;
+            return this.isLogin && this.info.currentOwnerId === this.$store.state.userInfo.id;
         },
         },
         isbidder() {
         isbidder() {
             return this.isLeader && this.info.status === 'PURCHASED';
             return this.isLeader && this.info.status === 'PURCHASED';
+        },
+        estPrice() {
+            return this.accMul(this.showPrice, 1.06);
+        },
+        startText() {
+            let day1 = this.dayjs(this.info.currentStartTime);
+
+            return day1.calendar(this.dayjs(), {
+                sameDay: '[今天] HH:mm ', // The same day ( Today at 2:30 AM )
+                nextDay: '[明天] HH:mm', // The next day ( Tomorrow at 2:30 AM )
+                nextWeek: '[下周] DD HH:mm', // The next week ( Sunday at 2:30 AM )
+                lastDay: '[昨天] HH:mm', // The day before ( Yesterday at 2:30 AM )
+                lastWeek: '[上周] DD HH:mm', // Last week ( Last Monday at 2:30 AM )
+                sameElse: 'DD/MM/YYYY' // Everything else ( 7/10/2011 )
+            });
         }
         }
     },
     },
     methods: {
     methods: {

+ 38 - 1
src/mixins/auctionOrder.js

@@ -27,11 +27,48 @@ export default {
                 { label: '待收货', value: 'RECEIVE' },
                 { label: '待收货', value: 'RECEIVE' },
                 { label: '待空投', value: 'AIR_DROP' }
                 { label: '待空投', value: 'AIR_DROP' }
             ],
             ],
+            paybackStatusOptions: [
+                { label: '竞拍中', value: 'NOPASSED', text: '' },
+                { label: '已出局,待补偿', value: 'PASSED', text: '竞拍失败,待补偿' },
+                { label: '已补偿', value: 'PAYED', text: '补偿成功' }
+            ],
             payMethodOptions: [
             payMethodOptions: [
                 { label: '微信', value: 'WEIXIN' },
                 { label: '微信', value: 'WEIXIN' },
                 { label: '支付宝', value: 'ALIPAY' },
                 { label: '支付宝', value: 'ALIPAY' },
-                { label: '无GAS费', value: 'FREE' }
+                { label: '无GAS费', value: 'FREE' },
+                { label: '衫德支付', value: 'SANDPAY' },
+                { label: '河马支付', value: 'HMPAY' },
+                { label: '首信易', value: 'PAYEASE' },
+                { label: '余额支付', value: 'BALANCE' },
+                { label: '销毁藏品', value: 'DESTROY' }
             ]
             ]
         };
         };
+    },
+    computed: {
+        status() {
+            let status = this.getLabelName(this.info.paybackStatus, this.paybackStatusOptions);
+            if (
+                this.info.paymentType === 'FIXED_PRICE' ||
+                (this.info.status !== 'FINISH' && this.info.status !== 'PASS')
+            ) {
+                status = this.getLabelName(this.info.status, this.orderStatusOptions);
+            }
+            if (this.info.paymentType === 'PURCHASE_PRICE') {
+                status = this.getLabelName(this.info.status, this.orderStatusOptions);
+            }
+            if (
+                this.info.paymentType === 'DEPOSIT' &&
+                this.info.paybackStatus === 'NOPASSED' &&
+                (this.info.status == 'FINISH' || this.info.status === 'PASS')
+            ) {
+                if (this.info.tradeAuctionStatus == 'PURCHASED' && this.info.status == 'FINISH') {
+                    status = '竞价成功,去支付';
+                }
+                if (this.info.status === 'PASS') {
+                    status = '已流局';
+                }
+            }
+            return status;
+        }
     }
     }
 };
 };

+ 4 - 2
src/router/index.js

@@ -402,7 +402,8 @@ const routes = [
         component: () => import('../views/auction/Home.vue'),
         component: () => import('../views/auction/Home.vue'),
         meta: {
         meta: {
             pageType: Page.Every,
             pageType: Page.Every,
-            title: '拍卖'
+            title: '拍卖',
+            tabColor: '#222426'
         }
         }
     },
     },
     {
     {
@@ -411,7 +412,8 @@ const routes = [
         component: () => import('../views/auction/Detail.vue'),
         component: () => import('../views/auction/Detail.vue'),
         meta: {
         meta: {
             pageType: Page.Every,
             pageType: Page.Every,
-            title: '拍卖'
+            title: '拍卖',
+            tabColor: '#0f0f0f'
         }
         }
     },
     },
     {
     {

+ 5 - 1
src/store/index.js

@@ -23,7 +23,8 @@ export default createStore({
         showRoomId: null,
         showRoomId: null,
         platform: '',
         platform: '',
         darkTheme: false,
         darkTheme: false,
-        starPage: false
+        starPage: false,
+        inviteType: 'NORMAL'
     },
     },
     mutations: {
     mutations: {
         setFinished(state, finished) {
         setFinished(state, finished) {
@@ -85,6 +86,9 @@ export default createStore({
         },
         },
         setStarPage(state, starPage) {
         setStarPage(state, starPage) {
             state.starPage = starPage;
             state.starPage = starPage;
+        },
+        setInviteType(state, inviteType) {
+            state.inviteType = inviteType;
         }
         }
     },
     },
     actions: {
     actions: {

+ 12 - 13
src/views/Discover.vue

@@ -512,19 +512,18 @@ export default {
                 });
                 });
         },
         },
         goAuction() {
         goAuction() {
-            this.$toast('升级改版中');
-            // this.$http
-            //     .get('/sysConfig/get/auction_show')
-            //     .then(res => {
-            //         if (res.value === true || res.value === '1') {
-            //             this.$router.push('/auction');
-            //         } else {
-            //             return Promise.reject();
-            //         }
-            //     })
-            //     .catch(() => {
-            //         this.wait();
-            //     });
+            this.$http
+                .get('/sysConfig/get/auction_show')
+                .then(res => {
+                    if (res.value === true || res.value === '1') {
+                        this.$router.push('/auction');
+                    } else {
+                        return Promise.reject();
+                    }
+                })
+                .catch(() => {
+                    this.$toast('升级改版中');
+                });
         }
         }
     },
     },
     activated() {
     activated() {

+ 14 - 0
src/views/Mine.vue

@@ -532,6 +532,20 @@ export default {
             //     .then(() => {
             //     .then(() => {
 
 
             //     });
             //     });
+        },
+        goAuction() {
+            this.$http
+                .get('/sysConfig/get/auction_show')
+                .then(res => {
+                    if (res.value === true || res.value === '1') {
+                        this.$router.push('/auctionOrders');
+                    } else {
+                        return Promise.reject();
+                    }
+                })
+                .catch(() => {
+                    this.$toast('升级改版中');
+                });
         }
         }
     }
     }
 };
 };

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

@@ -192,7 +192,13 @@ export default {
                 .then(() => {
                 .then(() => {
                     this.$toast.success('注册成功');
                     this.$toast.success('注册成功');
                     setTimeout(() => {
                     setTimeout(() => {
-                        if (!fromRoute.name || fromRoute.name === 'userRegister' || fromRoute.name === 'userLogin') {
+                        if (this.$store.state.inviteType == 'AUCTION') {
+                            this.$router.replace('/auction');
+                        } else if (
+                            !fromRoute.name ||
+                            fromRoute.name === 'userRegister' ||
+                            fromRoute.name === 'userLogin'
+                        ) {
                             this.$router.replace('/home');
                             this.$router.replace('/home');
                         } else {
                         } else {
                             this.$router.back();
                             this.$router.back();
@@ -209,9 +215,16 @@ export default {
     mounted() {
     mounted() {
         if (this.$store.state.invitor && this.$store.state.productId) {
         if (this.$store.state.invitor && this.$store.state.productId) {
             this.showInvite = false;
             this.showInvite = false;
+            this.form.inviteType = this.$store.state.inviteType;
         } else {
         } else {
             this.showInvite = true;
             this.showInvite = true;
         }
         }
+
+        if (this.$store.state.invitor && this.$store.state.inviteType) {
+            this.form.inviteType = this.$store.state.inviteType;
+            this.form.invitor = this.$store.state.invitor;
+            this.showInvite = false;
+        }
     },
     },
     beforeRouteLeave(to, from, next) {
     beforeRouteLeave(to, from, next) {
         if (to.path === '/agreement') {
         if (to.path === '/agreement') {

+ 9 - 3
src/views/activity/ChooseProduct.vue

@@ -246,7 +246,6 @@ export default {
             let list = [...this.list];
             let list = [...this.list];
             let nots = [...this.nots];
             let nots = [...this.nots];
             let _map = new Map();
             let _map = new Map();
-            console.log(list);
             list.forEach(item => {
             list.forEach(item => {
                 let flag = true;
                 let flag = true;
                 nots.forEach(_not => {
                 nots.forEach(_not => {
@@ -277,13 +276,20 @@ export default {
                     }
                     }
                 }
                 }
             });
             });
-            console.log(_map);
 
 
             return [..._map.values()];
             return [..._map.values()];
         },
         },
         numList() {
         numList() {
             let chooseIds = [...this.chooseIds];
             let chooseIds = [...this.chooseIds];
-            let collections = [...this.collections];
+            let collections = [...this.collections]
+                .map(item => {
+                    if (item.collectionInfos) {
+                        return [item, ...item.collectionInfos];
+                    } else {
+                        return item;
+                    }
+                })
+                .flat();
             let nums = [];
             let nums = [];
             chooseIds.forEach(item => {
             chooseIds.forEach(item => {
                 let info = collections.find(coll => {
                 let info = collections.find(coll => {

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

@@ -492,7 +492,7 @@
                     <van-button v-if="!isOlder" @click="Consignment" type="primary" block round>{{
                     <van-button v-if="!isOlder" @click="Consignment" type="primary" block round>{{
                         info.consignment ? '取消一口价' : '一口价拍卖'
                         info.consignment ? '取消一口价' : '一口价拍卖'
                     }}</van-button>
                     }}</van-button>
-                    <van-button v-if="!isOlder" @click="publish" color="#FF7F1F" block round>竞价拍卖</van-button>
+                    <!-- <van-button v-if="!isOlder" @click="publish" color="#FF7F1F" block round>竞价拍卖</van-button> -->
                     <van-button @click="Add" color="#FFBF27" block round>赠送</van-button>
                     <van-button @click="Add" color="#FFBF27" block round>赠送</van-button>
                     <van-button @click="showLock = true" color="#515976" block round>封存</van-button>
                     <van-button @click="showLock = true" color="#515976" block round>封存</van-button>
                     <van-button @click="starCreate" v-if="canStar" color="#5D7DFF" block round> 铸造星图</van-button>
                     <van-button @click="starCreate" v-if="canStar" color="#5D7DFF" block round> 铸造星图</van-button>

+ 154 - 134
src/views/auction/Detail.vue

@@ -2,31 +2,40 @@
     <van-pull-refresh
     <van-pull-refresh
         success-text="加载成功"
         success-text="加载成功"
         success-duration="1000"
         success-duration="1000"
-        class="detail"
-        :class="{ dark: isNFT, isEnd: isEnd }"
+        class="detail dark"
+        :class="{ isEnd: isEnd }"
         v-model="isLoading"
         v-model="isLoading"
         @refresh="onRefresh"
         @refresh="onRefresh"
-        :pageType="isNFT ? 'dark' : 'light'"
+        pageType="dark"
     >
     >
         <div class="top">
         <div class="top">
-            <auction-banner :info="info" :assetInfo="assetInfo" @getProduct="getDetail"></auction-banner>
+            <product-banner
+                :info="info"
+                :assetInfo="assetInfo"
+                @getProduct="getDetail"
+                pageType="auction"
+            ></product-banner>
             <div class="price-bar" v-if="isEnd">
             <div class="price-bar" v-if="isEnd">
                 <div class="price-left">
                 <div class="price-left">
-                    <div class="text1">{{ priceText }}</div>
+                    <div class="text1">当前价</div>
                     <div class="text2">
                     <div class="text2">
                         <img src="../../assets/icon_jiage_bai.png" alt="" />
                         <img src="../../assets/icon_jiage_bai.png" alt="" />
                         <span>{{ showPrice }}</span>
                         <span>{{ showPrice }}</span>
                     </div>
                     </div>
                     <i class="font_family icon-sanjiao"></i>
                     <i class="font_family icon-sanjiao"></i>
                 </div>
                 </div>
-                <div class="price-right">
+                <div class="price-right price-right2" v-if="info.status === 'FIXED_PRICE_PURCHASED'">
+                    <img src="@assets/info_icon_time2.png" alt="" />
+                    <span>一口价成交</span>
+                </div>
+                <div class="price-right isEnd" v-else>
                     <span>{{ timeText }}</span>
                     <span>{{ timeText }}</span>
                     <span class="time-box">{{ time }}</span>
                     <span class="time-box">{{ time }}</span>
                 </div>
                 </div>
             </div>
             </div>
             <div class="price-bar" v-else>
             <div class="price-bar" v-else>
                 <div class="price-left">
                 <div class="price-left">
-                    <div class="text1">{{ priceText }}</div>
+                    <div class="text1">当前价</div>
                     <div class="text2">
                     <div class="text2">
                         <img src="../../assets/icon_jiage_bai.png" alt="" />
                         <img src="../../assets/icon_jiage_bai.png" alt="" />
                         <span>{{ showPrice }}</span>
                         <span>{{ showPrice }}</span>
@@ -43,16 +52,20 @@
                     <span>秒</span>
                     <span>秒</span>
                 </div>
                 </div>
             </div>
             </div>
-            <div class="title">{{ info.name }}</div>
-            <div class="title-sub">
-                <span class="text1">出价{{ info.bids }}次</span>
+            <!-- <div class="title">{{ info.name }}</div> -->
+            <div class="info-title">
+                <product-title :isSmall="info.name && info.name.length > 16">{{ info.name }}</product-title>
+            </div>
+            <div class="types">
+                <div class="product-type">{{ info.category }}</div>
+                <div class="product-type">绿洲易拍</div>
+                <div class="product-type">1of1</div>
             </div>
             </div>
         </div>
         </div>
 
 
         <div class="card" v-if="recordNum > 0">
         <div class="card" v-if="recordNum > 0">
             <div class="card-title" @click="showRecord">
             <div class="card-title" @click="showRecord">
-                <img src="../../assets/icon-paimaijilu-bai.png" v-if="isNFT" alt="" />
-                <img src="../../assets/icon-paimaijilu.png" alt="" v-else />
+                <img src="../../assets/icon-paimaijilu-bai.png" alt="" />
                 <span class="flex1">拍卖纪录</span>
                 <span class="flex1">拍卖纪录</span>
                 <div class="card-title-r">
                 <div class="card-title-r">
                     <span>共{{ recordNum }}条</span>
                     <span>共{{ recordNum }}条</span>
@@ -61,57 +74,19 @@
             </div>
             </div>
             <div class="card-content">
             <div class="card-content">
                 <div class="record-item" v-for="(item, index) in records" :key="index">
                 <div class="record-item" v-for="(item, index) in records" :key="index">
-                    <span>{{ item.user }}</span>
+                    <span>{{ item.nickname }}</span>
                     <span>{{ index === 0 ? '领先' : '出局' }}</span>
                     <span>{{ index === 0 ? '领先' : '出局' }}</span>
-                    <span>¥{{ item.bidderPrice || 0 }}</span>
+                    <span>¥{{ item.currentPrice || 0 }}</span>
                     <span>{{ item.createdAt }}</span>
                     <span>{{ item.createdAt }}</span>
                 </div>
                 </div>
             </div>
             </div>
         </div>
         </div>
-        <div class="card">
-            <div class="card-title">
-                <img src="../../assets/icon-paipingxinxi-bai.png" v-if="isNFT" alt="" />
-                <img src="../../assets/auction1.png" alt="" v-else />
-                <span>拍品信息</span>
-            </div>
-            <div class="card-content">
-                <div class="card-info">
-                    <span class="text1">增价拍</span>
-                    <span class="text2">{{ info.startingPrice ? '竞拍价' : '一口价' }}</span>
-                    <div class="card-right" v-if="info.startingPrice">
-                        <span class="text1">起拍价</span>
-                        <span class="text2">¥{{ info.startingPrice }}</span>
-                    </div>
-                </div>
-                <div class="card-info" v-if="info.startingPrice">
-                    <span class="text1">加价幅度</span>
-                    <span class="text2">¥{{ info.increment }}</span>
-                    <div class="card-right">
-                        <span class="text1">保证金</span>
-                        <span class="text2">¥{{ info.deposit }}</span>
-                    </div>
-                </div>
-                <div class="card-info">
-                    <span class="text1">开拍时间</span>
-                    <span class="text2">{{ info.startTime }}</span>
-                </div>
-                <div class="card-info">
-                    <span class="text1">结束时间</span>
-                    <span class="text2">{{ info.endTime }}</span>
-                </div>
-            </div>
-        </div>
-        <auction-asset v-if="isNFT" :info="assetInfo"></auction-asset>
-        <div class="card" v-else>
-            <div class="card-title">
-                <img src="../../assets/icon-paipingxinxi-bai.png" v-if="isNFT" alt="" />
-                <img src="../../assets/auction2.png" v-else alt="" />
-                <span>拍品描述</span>
-            </div>
-            <div v-if="info.detail" class="card-content card-detail" v-html="info.detail"></div>
-        </div>
-
-        <div class="btn-bottom van-safe-area-bottom" :class="{ showPopup: showPopup }">
+        <auction-asset :info="info" :auctionInfo="info" :recordNum="recordNum"></auction-asset>
+        <div
+            class="btn-bottom van-safe-area-bottom"
+            :class="{ showPopup: showPopup }"
+            v-if="info.status !== 'FIXED_PRICE_PURCHASED'"
+        >
             <div class="fixed-list">
             <div class="fixed-list">
                 <div class="help" @click="showHelp">
                 <div class="help" @click="showHelp">
                     <i class="font_family icon-help"></i>
                     <i class="font_family icon-help"></i>
@@ -128,6 +103,12 @@
                         </div>
                         </div>
                     </van-button>
                     </van-button>
                 </div>
                 </div>
+                <div class="btn-list not" v-else-if="info.status === 'PASS'">
+                    <van-button disabled block round>
+                        <div>已流拍</div>
+                        <div class="sub" v-if="isLeader">((扣除手续费,取消所有易拍竞价资格))</div>
+                    </van-button>
+                </div>
                 <div
                 <div
                     class="btn-list not"
                     class="btn-list not"
                     v-else-if="
                     v-else-if="
@@ -138,59 +119,35 @@
                 >
                 >
                     <van-button disabled block round>竞拍结束</van-button>
                     <van-button disabled block round>竞拍结束</van-button>
                 </div>
                 </div>
+                <!-- <div
+                    class="btn-list not"
+                    v-else-if="
+                        !isLeader && (recordInfo.paybackStatus === 'PASSED' || recordInfo.paybackStatus === 'PAYED')
+                    "
+                >
+                    <van-button disabled block round>{{
+                        getLabelName(recordInfo.paybackStatus, paybackStatusOptions)
+                    }}</van-button>
+                </div> -->
                 <div class="btn-list not" v-else-if="info.status === 'NOTSTARTED'">
                 <div class="btn-list not" v-else-if="info.status === 'NOTSTARTED'">
-                    <van-button disabled block round>未开始</van-button>
+                    <van-button disabled block round>{{ isLeader ? '出价中' : '未开始' }}</van-button>
                 </div>
                 </div>
-                <div class="btn-list not" v-else-if="info.status === 'PASS' && recordInfo.payDeposit">
-                    <van-button disabled block round>
-                        <div>已流拍</div>
-                        <div class="sub" v-if="info.purchaserId === userInfo.id">
-                            (保证金 ¥{{ info.deposit }} 不退回)
-                        </div>
-                    </van-button>
+                <div class="btn-list not" v-else-if="info.status === 'WAITING'">
+                    <van-button disabled block round>{{ isLeader ? '出价中' : startText + '开抢' }}</van-button>
                 </div>
                 </div>
 
 
-                <template v-else-if="info.status === 'ONGOING' || info.status === 'FIXED_PRICE_PURCHASED'">
-                    <div class="btn-list" v-if="!info.startingPrice">
-                        <van-button
-                            type="primary"
-                            :disabled="info.status === 'FIXED_PRICE_PURCHASED'"
-                            block
-                            round
-                            @click="goBuy"
-                            >立即支付</van-button
-                        >
+                <template v-else-if="info.status === 'ONGOING'">
+                    <div class="btn-list not" v-if="isLeader">
+                        <van-button disabled block round>出价中</van-button>
                     </div>
                     </div>
-
                     <div class="btn-list" v-else>
                     <div class="btn-list" v-else>
                         <van-button type="primary" @click="goBuy" block plain>
                         <van-button type="primary" @click="goBuy" block plain>
-                            <div>直接购买</div>
-                            <div class="sub">¥{{ info.fixedPrice }}</div>
-                        </van-button>
-                        <van-button type="primary" block v-if="isLeader">
-                            <div>竞价中</div>
-                            <div class="sub">(出价金额为 ¥{{ info.purchasePrice }})</div>
+                            <div>一口价购买</div>
+                            <div class="sub">获得权益</div>
                         </van-button>
                         </van-button>
-
-                        <van-button type="primary" block v-else-if="isOut" @click="goCreated">
-                            <div>已出局</div>
-                            <div class="sub">(重新出价)</div>
-                        </van-button>
-                        <van-button type="primary" block v-else-if="recordInfo.payDeposit" @click="goCreated"
-                            >去出价</van-button
-                        >
-                        <van-button type="primary" v-else block @click="goDeposit">
-                            <div>立即参拍</div>
-                            <div class="sub">(保证金 ¥{{ info.deposit }})</div>
-                            <!-- <div class="sub">
-                                (请在
-                                <van-count-down
-                                    :time="buyTime"
-                                    @finish="getDetail"
-                                    format="HH小时mm分ss秒"
-                                ></van-count-down
-                                >内支付)
-                            </div> -->
+                        <van-button type="primary" block @click="goDeposit">
+                            <div>立即竞价</div>
+                            <div class="sub">解锁权益</div>
                         </van-button>
                         </van-button>
                     </div>
                     </div>
                 </template>
                 </template>
@@ -225,16 +182,18 @@ import 'swiper/swiper-bundle.min.css';
 import AuctionDeposit from '../../components/auction/deposit.vue';
 import AuctionDeposit from '../../components/auction/deposit.vue';
 import AuctionHelp from '../../components/auction/help.vue';
 import AuctionHelp from '../../components/auction/help.vue';
 import AuctionRule from '../../components/auction/rule.vue';
 import AuctionRule from '../../components/auction/rule.vue';
-import AuctionBanner from '../../components/auction/banner.vue';
+import ProductBanner from '../../components/product/ProductBanner.vue';
 import AuctionAsset from '../../components/auction/asset.vue';
 import AuctionAsset from '../../components/auction/asset.vue';
 import AuctionRecords from '../../components/auction/records.vue';
 import AuctionRecords from '../../components/auction/records.vue';
+import ProductTitle from '../../components/product/ProductTitle.vue';
 import { useCountDown, useToggle } from '@vant/use';
 import { useCountDown, useToggle } from '@vant/use';
 import auction from '../../mixins/auction';
 import auction from '../../mixins/auction';
+import auctionOrder from '../../mixins/auctionOrder';
 import { mapState } from 'vuex';
 import { mapState } from 'vuex';
 export default {
 export default {
     name: 'auctionDetail',
     name: 'auctionDetail',
     inject: ['setKeeps', 'changeTab'],
     inject: ['setKeeps', 'changeTab'],
-    mixins: [auction],
+    mixins: [auction, auctionOrder],
     setup() {
     setup() {
         const [timeDown, toggleTime] = useToggle(false);
         const [timeDown, toggleTime] = useToggle(false);
         const countDown = useCountDown({
         const countDown = useCountDown({
@@ -253,9 +212,10 @@ export default {
         AuctionDeposit,
         AuctionDeposit,
         AuctionHelp,
         AuctionHelp,
         AuctionRule,
         AuctionRule,
-        AuctionBanner,
+        ProductBanner,
         AuctionAsset,
         AuctionAsset,
-        AuctionRecords
+        AuctionRecords,
+        ProductTitle
     },
     },
     data() {
     data() {
         return {
         return {
@@ -322,10 +282,10 @@ export default {
             this.showPopup = flag;
             this.showPopup = flag;
         },
         },
         startCount(time = 24 * 3600 * 1000) {
         startCount(time = 24 * 3600 * 1000) {
-            if (this.info.status === 'NOTSTARTED') {
-                time = this.dayjs(this.info.startTime).diff(this.dayjs());
-            } else if (this.info.status === 'ONGOING') {
-                time = this.dayjs(this.info.endTime).diff(this.dayjs());
+            if (this.info.status === 'ONGOING') {
+                time = this.dayjs(this.info.currentEndTime).diff(this.dayjs());
+            } else if (this.info.status === 'NOTSTARTED' || this.info.status === 'WAITING') {
+                time = this.dayjs(this.info.currentStartTime).diff(this.dayjs());
             }
             }
             if (!this.isEnd) {
             if (!this.isEnd) {
                 if (time > 0) {
                 if (time > 0) {
@@ -337,18 +297,40 @@ export default {
             }
             }
         },
         },
         getRecord() {
         getRecord() {
-            this.$http.get('/auctionRecord/hasPayDeposit?auctionId=' + this.auctionId).then(res => {
-                this.recordInfo = res;
-            });
+            if (this.isLogin) {
+                this.$http
+                    .post(
+                        '/tradeAuctionOrder/all',
+                        {
+                            query: {
+                                tradeAuctionId: this.auctionId,
+                                del: false,
+                                userId: this.userInfo.id,
+                                status: 'FINISH',
+                                paymentType: 'DEPOSIT,PURCHASE_PRICE'
+                            },
+                            size: 1,
+                            page: 0,
+                            sort: 'id,desc'
+                        },
+                        { body: 'json' }
+                    )
+                    .then(res => {
+                        if (!res.empty) {
+                            this.recordInfo = res.content[0];
+                        }
+                    });
+            }
 
 
             this.$http
             this.$http
                 .post(
                 .post(
-                    '/auctionRecord/all',
+                    '/tradeAuctionOrder/all',
                     {
                     {
                         query: {
                         query: {
-                            auctionId: this.auctionId,
-                            type: 'BIDDER',
-                            del: false
+                            tradeAuctionId: this.auctionId,
+                            del: false,
+                            status: 'FINISH',
+                            paymentType: 'DEPOSIT,PURCHASE_PRICE'
                         },
                         },
                         size: 2,
                         size: 2,
                         page: 0,
                         page: 0,
@@ -367,7 +349,7 @@ export default {
                 forbidClick: true
                 forbidClick: true
             });
             });
             return this.$http
             return this.$http
-                .get('/auctionActivity/get/' + this.auctionId)
+                .get('/tradeAuction/get/' + this.auctionId)
                 .then(res => {
                 .then(res => {
                     // res.model3d = {
                     // res.model3d = {
                     //     name: '99.FBX',
                     //     name: '99.FBX',
@@ -381,18 +363,13 @@ export default {
                     this.getRecord();
                     this.getRecord();
                     //改变头部颜色
                     //改变头部颜色
                     this.$nextTick(() => {
                     this.$nextTick(() => {
-                        if (this.isNFT) {
-                            this.changeTab('#0f0f0f');
-                        }
                         if (this.isbidder) {
                         if (this.isbidder) {
-                            this.$http.get('/sysConfig/get/auction_cancel_time').then(res => {
-                                let date1 = this.dayjs(this.info.endTime).add(Number(res.value), 'minute');
-                                let date2 = this.dayjs();
-                                let time = date1.diff(date2);
-                                if (time > 0) {
-                                    this.buyTime = time;
-                                }
-                            });
+                            let date1 = this.dayjs(this.info.currentEndTime);
+                            let date2 = this.dayjs();
+                            let time = date1.diff(date2);
+                            if (time > 0) {
+                                this.buyTime = time;
+                            }
                         }
                         }
                     });
                     });
 
 
@@ -543,7 +520,7 @@ export default {
                 min-width: 22px;
                 min-width: 22px;
                 height: 22px;
                 height: 22px;
                 display: inline-block;
                 display: inline-block;
-                color: #cc9163;
+                color: #ff7f1f;
                 line-height: 22px;
                 line-height: 22px;
                 text-align: center;
                 text-align: center;
                 background-color: #fff;
                 background-color: #fff;
@@ -565,6 +542,10 @@ export default {
                 font-weight: normal;
                 font-weight: normal;
             }
             }
         }
         }
+
+        &.isEnd {
+            justify-content: flex-end;
+        }
     }
     }
 }
 }
 
 
@@ -713,6 +694,7 @@ export default {
         margin-left: 31px;
         margin-left: 31px;
         .flex();
         .flex();
         .van-button {
         .van-button {
+            --van-button-primary-background-color: #3ab200;
             flex-grow: 1;
             flex-grow: 1;
             font-weight: bold;
             font-weight: bold;
             /deep/.van-button__text {
             /deep/.van-button__text {
@@ -724,6 +706,7 @@ export default {
                 font-weight: normal;
                 font-weight: normal;
                 transform: scale(0.83);
                 transform: scale(0.83);
                 text-align: center;
                 text-align: center;
+                margin-top: 3px;
                 .van-count-down {
                 .van-count-down {
                     color: #fff;
                     color: #fff;
                 }
                 }
@@ -748,14 +731,14 @@ export default {
         }
         }
     }
     }
 }
 }
-
+.card-content {
+    background-color: #131313;
+}
 .record-item {
 .record-item {
     .flex();
     .flex();
     font-size: 12px;
     font-size: 12px;
     color: #939599;
     color: #939599;
     line-height: 17px;
     line-height: 17px;
-    margin-top: 10px;
-
     span {
     span {
         &:first-child {
         &:first-child {
             width: 20%;
             width: 20%;
@@ -778,6 +761,9 @@ export default {
         color: @prim;
         color: @prim;
     }
     }
 }
 }
+.record-item + .record-item {
+    margin-top: 10px;
+}
 
 
 .dark {
 .dark {
     background-color: #0f0f0f;
     background-color: #0f0f0f;
@@ -858,7 +844,41 @@ export default {
             span {
             span {
                 color: #939599;
                 color: #939599;
             }
             }
+
+            &.price-right2 {
+                justify-content: flex-end;
+                padding-right: 16px;
+                img {
+                    width: 18px;
+                    height: 18px;
+                    margin-right: 2px;
+                }
+            }
         }
         }
     }
     }
 }
 }
+
+.info-title {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.types {
+    .flex();
+    justify-content: center;
+    margin-top: 5px;
+}
+.product-type {
+    font-size: 12px;
+    color: #939599;
+    line-height: 22px;
+    padding: 0 5px;
+    background: #27272b;
+    border-radius: 4px;
+}
+
+.product-type + .product-type {
+    margin-left: 12px;
+}
 </style>
 </style>

+ 31 - 43
src/views/auction/Home.vue

@@ -10,7 +10,7 @@
     >
     >
         <van-sticky :offset-top="barHeight">
         <van-sticky :offset-top="barHeight">
             <div class="search-bar">
             <div class="search-bar">
-                <span class="icon">拍卖中心</span>
+                <span class="icon">绿洲易拍</span>
                 <div class="search-input" @click="$router.push('/auctionSearch')">
                 <div class="search-input" @click="$router.push('/auctionSearch')">
                     <img src="../../assets/icon-sosuo1.png" alt="" />
                     <img src="../../assets/icon-sosuo1.png" alt="" />
                     <span>搜索你要的精彩</span>
                     <span>搜索你要的精彩</span>
@@ -30,41 +30,28 @@
                 />
                 />
             </swiper-slide>
             </swiper-slide>
         </swiper>
         </swiper>
-        <van-grid :border="false">
-            <van-grid-item
-                :icon="require('../../assets/yikou.png')"
-                :to="{ path: '/auctionList', query: { status: 'ONGOING', pageName: '随时拍' } }"
-                text="随时拍"
-            />
-            <van-grid-item
-                :icon="require('../../assets/suishi.png')"
-                :to="{ path: '/auctionList', query: { hasFixedPrice: true, pageName: '一口价' } }"
-                text="一口价"
-            />
-            <van-grid-item
-                :icon="require('../../assets/shuzi.png')"
-                :to="{ path: '/auctionList', query: { auctionType: 'NFT', pageName: '数字艺术' } }"
-                text="数字艺术"
-            />
-            <van-grid-item @click="wait" :icon="require('../../assets/zhengji.png')" text="拍卖征集" />
-        </van-grid>
-        <van-tabs v-model:active="auctionType" @change="getData(true)">
+        <van-tabs v-model:active="auctionType" shrink @change="getData(true)">
             <van-tab title="官方拍卖" name="OFFICIAL"></van-tab>
             <van-tab title="官方拍卖" name="OFFICIAL"></van-tab>
-            <van-tab title="数字艺术" name="NFT"></van-tab>
-            <van-tab title="藏传文玩" name="ENTITY"></van-tab>
+            <van-tab title="藏家市场" name="NFT"></van-tab>
+            <!-- <van-tab title="藏家市场" name="ENTITY"></van-tab> -->
         </van-tabs>
         </van-tabs>
         <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="getData">
         <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="getData">
             <template v-for="(item, index) in list" :key="index">
             <template v-for="(item, index) in list" :key="index">
-                <auction-info-large v-model:info="list[index]" v-if="auctionType === 'OFFICIAL'"></auction-info-large>
-                <auction-info v-model:info="list[index]" v-else></auction-info>
+                <auction-info isDark v-model:info="list[index]"></auction-info>
             </template>
             </template>
             <!-- <template v-for="i in 10" :key="i">
             <!-- <template v-for="i in 10" :key="i">
                 <auction-info></auction-info>
                 <auction-info></auction-info>
             </template> -->
             </template> -->
 
 
-            <van-empty :image="require('@assets/empty_img_asset.png')" v-if="empty" description="没有任何藏品哦~" />
+            <van-empty
+                :image="require('@assets/empty_img_asset_dark.png')"
+                v-if="empty"
+                description="没有任何拍卖品哦~"
+            />
         </van-list>
         </van-list>
     </van-pull-refresh>
     </van-pull-refresh>
+
+    <auction-share></auction-share>
 </template>
 </template>
 
 
 <script>
 <script>
@@ -79,8 +66,8 @@ import SwiperCore, { Pagination, Autoplay } from 'swiper';
 SwiperCore.use([Pagination, Autoplay]);
 SwiperCore.use([Pagination, Autoplay]);
 import list from '../../mixins/list';
 import list from '../../mixins/list';
 import auctionInfo from '../../components/auction/info.vue';
 import auctionInfo from '../../components/auction/info.vue';
-import auctionInfoLarge from '../../components/auction/infoLarge.vue';
 import banner from '../../mixins/banner';
 import banner from '../../mixins/banner';
+import auctionShare from '../../components/auction/Share.vue';
 export default {
 export default {
     name: 'auctionHome',
     name: 'auctionHome',
     mixins: [list, banner],
     mixins: [list, banner],
@@ -89,12 +76,12 @@ export default {
         Swiper,
         Swiper,
         SwiperSlide,
         SwiperSlide,
         auctionInfo,
         auctionInfo,
-        auctionInfoLarge
+        auctionShare
     },
     },
     data() {
     data() {
         return {
         return {
             auctionType: 'OFFICIAL',
             auctionType: 'OFFICIAL',
-            url: '/auctionActivity/all',
+            url: '/tradeAuction/all',
             list: [],
             list: [],
             banners: [],
             banners: [],
             scrollTop: 0
             scrollTop: 0
@@ -132,11 +119,10 @@ export default {
             }
             }
             return {
             return {
                 query: {
                 query: {
-                    auctionType: auctionType,
-                    status: 'NOTSTARTED,ONGOING',
-                    source: source
+                    // auctionType: 'OFFICIAL',
+                    // status: 'NOTSTARTED,ONGOING,WAITING'
                 },
                 },
-                sort: 'id,desc'
+                sort: 'status,asc;id,desc'
             };
             };
         },
         },
         onRefresh() {
         onRefresh() {
@@ -166,20 +152,22 @@ export default {
 <style lang="less" scoped>
 <style lang="less" scoped>
 .auction {
 .auction {
     position: relative;
     position: relative;
+    background-color: #222426 !important;
 }
 }
 .search-bar {
 .search-bar {
     padding: 9px 16px;
     padding: 9px 16px;
+    background-color: #222426;
     .flex();
     .flex();
     .icon {
     .icon {
         font-size: 16px;
         font-size: 16px;
         font-weight: bold;
         font-weight: bold;
-        color: #000000;
+        color: #fff;
         line-height: 24px;
         line-height: 24px;
     }
     }
 
 
     .search-input {
     .search-input {
         height: 32px;
         height: 32px;
-        background: #f5f7fa;
+        background: #2e3031;
         border-radius: 8px;
         border-radius: 8px;
         flex-grow: 1;
         flex-grow: 1;
         margin-left: 10px;
         margin-left: 10px;
@@ -243,35 +231,35 @@ export default {
 }
 }
 
 
 /deep/.van-tabs {
 /deep/.van-tabs {
-    padding: 0 16px;
+    // padding: 0 16px;
     position: relative;
     position: relative;
+    --van-tabs-nav-background-color: #222426;
 
 
     .van-tab {
     .van-tab {
-        margin-right: 30px;
+        flex-grow: 1 !important;
+        margin-right: auto;
         .van-tab__text {
         .van-tab__text {
             font-size: 16px;
             font-size: 16px;
         }
         }
-
         &.van-tab--active {
         &.van-tab--active {
-            .van-tab__text {
-                color: #000;
-                font-weight: bold;
-            }
+            color: #fff !important;
         }
         }
     }
     }
     .van-tabs__nav--line {
     .van-tabs__nav--line {
         padding-bottom: 0;
         padding-bottom: 0;
+        &.van-tabs__nav--complete {
+            padding: 0 0 !important;
+        }
     }
     }
     .van-tabs__line {
     .van-tabs__line {
         width: 16px;
         width: 16px;
         height: 2px;
         height: 2px;
-        bottom: 0px;
+        bottom: 1px;
     }
     }
 }
 }
 
 
 .van-list {
 .van-list {
     padding: 8px;
     padding: 8px;
-    background: linear-gradient(to bottom, #ffffff 0%, #f5f5f5 40px, #f5f5f5 100%);
     min-height: calc(100vh - 156px);
     min-height: calc(100vh - 156px);
 }
 }
 </style>
 </style>

+ 116 - 37
src/views/auction/Offer.vue

@@ -10,36 +10,42 @@
             <div class="panel">
             <div class="panel">
                 <div class="panel-title">你的出价金额(元)</div>
                 <div class="panel-title">你的出价金额(元)</div>
                 <van-stepper
                 <van-stepper
-                    :step="info.increment"
-                    :min="min"
-                    :max="max"
                     v-model="value"
                     v-model="value"
                     theme="round"
                     theme="round"
                     button-size="22"
                     button-size="22"
                     :decimal-length="2"
                     :decimal-length="2"
                     allow-empty
                     allow-empty
+                    :show-plus="false"
+                    :show-minus="false"
                     :default-value="defValue"
                     :default-value="defValue"
+                    disable-input
                 />
                 />
-                <div class="panel-tips">加价幅度¥{{ info.increment }}</div>
-                <van-button type="primary" block round @click="submit">立即出价</van-button>
+                <div class="panel-tips">加价幅度为当前价的{{ info.increasePer }}%</div>
+                <van-cell-group class="panel-info">
+                    <van-cell title="竞价手续费" :value="`¥${info.commission}`" />
+                    <van-cell v-if="recordNum < 29" title="出局补偿" :value="`¥${info.earning}`" :border="false">
+                        <template #label>
+                            <div class="panel-label">
+                                <img src="@assets/icon_xiangqingye_tips.png" alt="" />
+                                <span>若叫价失败,将原路退给您出局补偿。</span>
+                            </div>
+                        </template>
+                    </van-cell>
+                </van-cell-group>
+                <van-button type="primary" block round @click="submit">确认出价</van-button>
+                <div class="label-info" v-if="recordNum >= 29">
+                    <img src="@assets/icon_xiangqingye_tips.png" alt="" />
+                    <span>当前是第30次叫价,可直接购买获得权益</span>
+                </div>
             </div>
             </div>
 
 
-            <div class="list-box">
-                <div class="name">
-                    <img src="../../assets/icon-paimaijilu.png" alt="" />
-                    <span>拍卖纪录</span>
-                </div>
+            <div class="tips">
+                <div class="text1">竞拍提示</div>
 
 
-                <div class="list">
-                    <div class="item" v-for="(item, index) in records" :key="index">
-                        <span>{{ item.user }}</span>
-                        <span>{{ item.createdAt }}</span>
-                        <span>{{ index === 0 ? '领先' : '出局' }}</span>
-                        <span>¥{{ item.bidderPrice || 0 }}</span>
-                    </div>
+                <div class="text2">
+                    1.为保证公平原则,防止恶意竞拍,竞买人出价后,在官方指定的时间方可继续由第三方竞价,如竞价冷却结束后24小时内无人继续竞价,则关闭竞价通道,由竞买人竞拍成功,48小时内支付标的全款,如未按照最新竞价支付标的全款,则取消所有易拍竞价资格,其所交纳的竞价手续费不予退还,标的视为流拍。拍卖行择时另行上架进行重新拍卖。<br />
+                    2. 华储艺术品中心(深圳)有限公司、RAEX绿洲及绿洲易拍享有最终解释权。
                 </div>
                 </div>
-
-                <div class="empty" v-if="records.length === 0">暂无数据</div>
             </div>
             </div>
         </div>
         </div>
 
 
@@ -67,15 +73,13 @@ export default {
             info: {},
             info: {},
             recordInfo: {},
             recordInfo: {},
             records: [],
             records: [],
-            showPopup: false
+            showPopup: false,
+            recordNum: 0
         };
         };
     },
     },
     computed: {
     computed: {
-        min() {
-            return (this.info.purchasePrice || this.info.startingPrice || 0) + (this.info.increment || 0);
-        },
         defValue() {
         defValue() {
-            return this.min;
+            return this.info.nextPrice;
         }
         }
     },
     },
     components: {
     components: {
@@ -90,15 +94,16 @@ export default {
         this.getDetail();
         this.getDetail();
     },
     },
     methods: {
     methods: {
-        getDetail() {
+        getDetail(refreash = false) {
             this.$toast.loading({
             this.$toast.loading({
                 message: '加载中...',
                 message: '加载中...',
                 forbidClick: true
                 forbidClick: true
             });
             });
             this.$http
             this.$http
-                .get('/auctionActivity/get/' + this.auctionId)
+                .get('/tradeAuction/get/' + this.auctionId)
                 .then(res => {
                 .then(res => {
                     this.info = res;
                     this.info = res;
+                    this.value = res.nextPrice;
                     // this.startCount();
                     // this.startCount();
                     this.$nextTick(() => {
                     this.$nextTick(() => {
                         this.$refs.info.setTime();
                         this.$refs.info.setTime();
@@ -106,6 +111,21 @@ export default {
                     this.getRecord();
                     this.getRecord();
 
 
                     this.$toast.clear();
                     this.$toast.clear();
+                    if (refreash) {
+                        this.$nextTick(() => {
+                            if (this.isbidder) {
+                                this.$router.push({
+                                    name: 'auctionSubmit',
+                                    query: {
+                                        auctionId: this.info.id,
+                                        paymentType: 'PURCHASE_PRICE'
+                                    }
+                                });
+                            } else {
+                                this.$router.back();
+                            }
+                        });
+                    }
                 })
                 })
                 .catch(e => {
                 .catch(e => {
                     this.$toast.clear();
                     this.$toast.clear();
@@ -124,25 +144,23 @@ export default {
         getRecord() {
         getRecord() {
             this.$http
             this.$http
                 .post(
                 .post(
-                    '/auctionRecord/all',
+                    '/tradeAuctionOrder/all',
                     {
                     {
                         query: {
                         query: {
-                            auctionId: this.auctionId,
-                            type: 'BIDDER',
-                            del: false
+                            tradeAuctionId: this.auctionId,
+                            del: false,
+                            status: 'FINISH',
+                            paymentType: 'DEPOSIT,PURCHASE_PRICE'
                         },
                         },
-                        size: 3,
+                        size: 1,
                         page: 0,
                         page: 0,
                         sort: 'id,desc'
                         sort: 'id,desc'
                     },
                     },
                     { body: 'json' }
                     { body: 'json' }
                 )
                 )
                 .then(res => {
                 .then(res => {
-                    this.records = res.content;
+                    this.recordNum = res.totalElements;
                 });
                 });
-            this.$http.get('/auctionRecord/hasPayDeposit?auctionId=' + this.auctionId).then(res => {
-                this.recordInfo = res;
-            });
         },
         },
         submit() {
         submit() {
             if (!this.recordInfo.payDeposit) {
             if (!this.recordInfo.payDeposit) {
@@ -175,7 +193,11 @@ export default {
             this.showPopup = flag;
             this.showPopup = flag;
         },
         },
         onRefresh() {
         onRefresh() {
-            this.$router.back();
+            if (this.recordNum >= 29) {
+                this.getDetail(true);
+            } else {
+                this.$router.back();
+            }
         },
         },
         goDeposit() {
         goDeposit() {
             // this.goCreated();
             // this.goCreated();
@@ -241,7 +263,7 @@ export default {
             background: #f5f7fa;
             background: #f5f7fa;
             border-radius: 8px;
             border-radius: 8px;
             flex-grow: 1;
             flex-grow: 1;
-            margin: 0 20px;
+            // margin: 0 20px;
             font-size: 40px;
             font-size: 40px;
             font-family: OSP-DIN, OSP;
             font-family: OSP-DIN, OSP;
             font-weight: normal;
             font-weight: normal;
@@ -260,6 +282,7 @@ export default {
     .van-button {
     .van-button {
         font-size: 16px;
         font-size: 16px;
         font-weight: bold;
         font-weight: bold;
+        margin-top: 12px;
     }
     }
 
 
     .panel-tips {
     .panel-tips {
@@ -327,4 +350,60 @@ export default {
     color: #939599;
     color: #939599;
     padding: 16px;
     padding: 16px;
 }
 }
+
+.tips {
+    .text1 {
+        font-size: 14px;
+        color: #939599;
+        line-height: 24px;
+        padding-top: 20px;
+    }
+
+    .text2 {
+        font-size: 12px;
+        color: #939599;
+        line-height: 20px;
+        padding-top: 4px;
+    }
+}
+
+.panel-label {
+    .flex();
+    img {
+        width: 18px;
+        height: 18px;
+        margin-right: 4px;
+    }
+}
+
+/deep/.panel-info {
+    --van-cell-vertical-padding: 12px;
+    --van-cell-horizontal-padding: 0;
+    --van-padding-md: 0;
+    --van-cell-border-color: #f5f7fa;
+    --van-cell-value-color: #000;
+    .van-cell__title {
+        flex-grow: 3;
+    }
+    .van-cell__value {
+        flex-shrink: 0;
+        font-weight: bold;
+    }
+}
+
+.label-info {
+    .flex();
+    justify-content: center;
+    padding-top: 12px;
+    img {
+        width: 18px;
+        height: 18px;
+    }
+    span {
+        font-size: 12px;
+        color: #939599;
+        line-height: 17px;
+        margin-left: 4px;
+    }
+}
 </style>
 </style>

+ 1 - 2
src/views/auction/Search.vue

@@ -131,7 +131,7 @@ export default {
             source: '',
             source: '',
             status: '',
             status: '',
             minterId: '',
             minterId: '',
-            url: '/auctionActivity/all',
+            url: '/tradeAuction/all',
             scrollTop: 0,
             scrollTop: 0,
             sort: 'id,desc',
             sort: 'id,desc',
             sortDes: '',
             sortDes: '',
@@ -224,7 +224,6 @@ export default {
             return {
             return {
                 query: {
                 query: {
                     auctionType: this.auctionType,
                     auctionType: this.auctionType,
-                    status: this.status,
                     del: false
                     del: false
                 },
                 },
                 search: this.search,
                 search: this.search,

+ 45 - 93
src/views/auction/Submit.vue

@@ -5,22 +5,6 @@
             background="#FF7F1F"
             background="#FF7F1F"
             color="#fff"
             color="#fff"
         />
         />
-        <div class="address" v-if="!isNFT">
-            <div class="van-address-item van-contact-card" @click="onAdd">
-                <div class="van-cell van-cell--borderless">
-                    <div class="van-cell__value van-cell__value--alone van-address-item__value">
-                        <div role="radio" class="van-radio" tabindex="0" aria-checked="false">
-                            <span class="van-radio__label" v-if="addressInfo.id">
-                                <div class="van-address-item__name">{{ showAddress.name }} {{ showAddress.tel }}</div>
-                                <div class="van-address-item__address">{{ showAddress.address }}</div>
-                            </span>
-                            <span class="van-radio__label tips" v-else> 选择收货地址 </span>
-                        </div>
-                    </div>
-                    <i class="van-badge__wrapper van-icon van-icon-arrow van-address-item__edit"></i>
-                </div>
-            </div>
-        </div>
         <div class="assets">
         <div class="assets">
             <div class="assets-product" :class="{ isEnd: isEnd }">
             <div class="assets-product" :class="{ isEnd: isEnd }">
                 <van-image width="80" height="80" radius="6" :src="getImg(changeImgs(info.pic))" fit="cover" />
                 <van-image width="80" height="80" radius="6" :src="getImg(changeImgs(info.pic))" fit="cover" />
@@ -35,6 +19,7 @@
                         </div>
                         </div>
                         <div class="time" v-else>{{ timeText }}</div>
                         <div class="time" v-else>{{ timeText }}</div>
                     </div>
                     </div>
+                    <div class="price">当前价 ¥{{ info.currentPrice }}</div>
                     <!-- <div class="text2" v-if="info.category">类型:{{ info.category }}</div>
                     <!-- <div class="text2" v-if="info.category">类型:{{ info.category }}</div>
                     <div class="text2" v-if="info.number">编号:{{ info.number }}</div> -->
                     <div class="text2" v-if="info.number">编号:{{ info.number }}</div> -->
                 </div>
                 </div>
@@ -42,10 +27,18 @@
         </div>
         </div>
 
 
         <div class="text-list">
         <div class="text-list">
-            <div class="text-info">
-                <span class="text1">{{ getLabelName(paymentType, paymentTypeOptions) }}</span>
+            <div class="text-info" v-if="paymentType === 'FIXED_PRICE'">
+                <span class="text1">一口价(当前价的{{ fixedPre }}%)</span>
+                <span class="text2">¥{{ preMoney }}</span>
+            </div>
+            <div class="text-info" v-else>
+                <span class="text1">当前价</span>
                 <span class="text2">¥{{ preMoney }}</span>
                 <span class="text2">¥{{ preMoney }}</span>
             </div>
             </div>
+            <div class="text-info">
+                <span class="text1">GAS费用</span>
+                <span class="text2">¥{{ gas }}</span>
+            </div>
 
 
             <!-- <div class="text-info">
             <!-- <div class="text-info">
                 <span class="text1">GAS费用</span>
                 <span class="text1">GAS费用</span>
@@ -57,7 +50,7 @@
             </div>
             </div>
 
 
             <template v-if="paymentType !== 'FIXED_PRICE'">
             <template v-if="paymentType !== 'FIXED_PRICE'">
-                <div class="text-cell">
+                <!-- <div class="text-cell">
                     <div class="text-top">
                     <div class="text-top">
                         <span class="text1">保证金</span>
                         <span class="text1">保证金</span>
                         <span class="text2 warn">¥{{ info.deposit }}</span>
                         <span class="text2 warn">¥{{ info.deposit }}</span>
@@ -65,7 +58,7 @@
                     <div class="sub">
                     <div class="sub">
                         竞拍成功支付后,送拍机构主动关闭交易,系统会在72小时内释放保证金;若竞拍成功未支付,保证金将不会释放
                         竞拍成功支付后,送拍机构主动关闭交易,系统会在72小时内释放保证金;若竞拍成功未支付,保证金将不会释放
                     </div>
                     </div>
-                </div>
+                </div> -->
                 <div class="text-info">
                 <div class="text-info">
                     <span class="text1">保证金状态</span>
                     <span class="text1">保证金状态</span>
                     <span class="text2">正常</span>
                     <span class="text2">正常</span>
@@ -79,7 +72,7 @@
                 <span>{{ item.name }}</span>
                 <span>{{ item.name }}</span>
                 <img class="choose-icon" :src="payType === item.type ? icons[1] : icons[0]" alt="" />
                 <img class="choose-icon" :src="payType === item.type ? icons[1] : icons[0]" alt="" />
             </div> -->
             </div> -->
-            <pay-method-pick v-model="payType"></pay-method-pick>
+            <pay-method-pick v-model="payType" onlyBalance></pay-method-pick>
         </div>
         </div>
 
 
         <div class="bottom van-safe-area-bottom" ref="bottom">
         <div class="bottom van-safe-area-bottom" ref="bottom">
@@ -145,27 +138,10 @@ export default {
             list: [],
             list: [],
             payType: null,
             payType: null,
             payChannel: null,
             payChannel: null,
-            payInfos: [
-                {
-                    icon: require('@assets/svgs/zhifubao.svg'),
-                    name: '支付宝',
-                    type: 'ALIPAY'
-                },
-                {
-                    icon: require('@assets/svgs/wechat.svg'),
-                    name: '微信',
-                    type: 'WEIXIN'
-                }
-                // {
-                //   icon: require("@assets/svgs/png-decp.svg"),
-                //   name: "DCEP",
-                // },
-            ],
             icons: [require('@assets/svgs/icon_gouxuan_huise.svg'), require('@assets/icon_gouxuan_pre.png')],
             icons: [require('@assets/svgs/icon_gouxuan_huise.svg'), require('@assets/icon_gouxuan_pre.png')],
             inWeixin,
             inWeixin,
             inApp,
             inApp,
             inIos,
             inIos,
-            gas: 1,
             enable_wx_lite: false,
             enable_wx_lite: false,
             enable_wx_pub: false,
             enable_wx_pub: false,
             assets: '',
             assets: '',
@@ -179,25 +155,26 @@ export default {
             recordInfo: {},
             recordInfo: {},
             showPwdDialog: false,
             showPwdDialog: false,
             showKeyboard: false,
             showKeyboard: false,
-            tradeCode: ''
+            tradeCode: '',
+            fixedPre: 0,
+            gas: 0
         };
         };
     },
     },
     computed: {
     computed: {
         preMoney() {
         preMoney() {
             if (this.paymentType === 'PURCHASE_PRICE') {
             if (this.paymentType === 'PURCHASE_PRICE') {
-                return this.info.purchasePrice || 0;
-            } else {
-                return this.info.fixedPrice || 0;
+                return this.info.currentPrice;
             }
             }
+            return this.accMul(this.info.currentPrice || 0, this.fixedPre / 100);
         },
         },
         money() {
         money() {
             let money = 0;
             let money = 0;
             if (this.preMoney) {
             if (this.preMoney) {
                 money = this.accAdd(this.preMoney, money);
                 money = this.accAdd(this.preMoney, money);
             }
             }
-            // if (this.gas) {
-            //     money = this.accAdd(money, this.gas);
-            // }
+            if (this.gas) {
+                money = this.accAdd(money, this.gas);
+            }
 
 
             return money;
             return money;
         },
         },
@@ -232,28 +209,18 @@ export default {
             this.$http.get('/auctionRecord/hasPayDeposit?auctionId=' + this.auctionId).then(res => {
             this.$http.get('/auctionRecord/hasPayDeposit?auctionId=' + this.auctionId).then(res => {
                 this.recordInfo = res;
                 this.recordInfo = res;
             });
             });
-            this.$http.get('/auctionActivity/get/' + this.auctionId).then(res => {
+            this.$http.get('/tradeAuction/get/' + this.auctionId).then(res => {
                 this.info = res;
                 this.info = res;
-                this.time = this.getTime(res.endTime);
-                // this.gas = res.gasPrice;
-                this.$http
-                    .post(
-                        '/userAddress/all',
-                        {
-                            query: {
-                                userId: this.$store.state.userInfo.id,
-                                del: false,
-                                def: true
-                            },
-                            size: 99
-                        },
-                        { body: 'json' }
-                    )
-                    .then(res => {
-                        if (!res.empty) {
-                            this.addressInfo = res.content[0];
-                        }
-                    });
+                if (res.status === 'ONGOING') {
+                    this.time = this.dayjs(res.currentEndTime).diff(this.dayjs());
+                } else if (this.info.status === 'NOTSTARTED' || this.info.status === 'WAITING') {
+                    this.time = this.dayjs(res.currentStartTime).diff(this.dayjs());
+                }
+            });
+
+            this.$http.get('/sysConfig/get/fixed_per,gas_fee').then(res => {
+                this.fixedPre = Number(res.fixed_per.value);
+                this.gas = Number(res.gas_fee.value);
             });
             });
         }
         }
     },
     },
@@ -295,40 +262,25 @@ export default {
 
 
             let form = {
             let form = {
                 userId: this.$store.state.userInfo.id,
                 userId: this.$store.state.userInfo.id,
-                auctionId: this.auctionId,
-                type: this.paymentType
+                tradeAuctionId: this.auctionId,
+                price: this.money,
+                paymentType: this.paymentType
             };
             };
 
 
             if (!this.isNFT) {
             if (!this.isNFT) {
                 form.addressId = this.addressInfo.id;
                 form.addressId = this.addressInfo.id;
             }
             }
 
 
-            if (this.paymentType === 'PURCHASE_PRICE') {
-                form.auctionRecordId = this.recordInfo.id;
-                return this.$http
-                    .post('/auctionOrder/create', form)
-                    .then(res => {
-                        return Promise.resolve(res);
-                    })
-                    .catch(e => {
-                        return Promise.reject(e);
-                    });
-            } else {
-                return this.$http
-                    .post('/auctionOrder/createFixPrice', form)
-                    .then(res => {
-                        return Promise.resolve(res);
-                    })
-                    .catch(e => {
-                        return Promise.reject(e);
-                    });
-            }
+            return this.$http
+                .post('/tradeAuctionOrder/createOrder', form)
+                .then(res => {
+                    return Promise.resolve(res);
+                })
+                .catch(e => {
+                    return Promise.reject(e);
+                });
         },
         },
         submit() {
         submit() {
-            if (!this.addressInfo.id && !this.isNFT) {
-                this.$toast('请选择收货地址');
-                return;
-            }
             if (!this.payType) {
             if (!this.payType) {
                 this.$toast('请选择支付方式');
                 this.$toast('请选择支付方式');
                 return;
                 return;
@@ -461,7 +413,7 @@ export default {
                             forbidClick: true
                             forbidClick: true
                         });
                         });
                         this.$http
                         this.$http
-                            .post('/payOrder/v2/auction/balance', {
+                            .post('/payOrder/v2/tradeAuction/balance', {
                                 id: this.orderId,
                                 id: this.orderId,
                                 tradeCode: this.tradeCode
                                 tradeCode: this.tradeCode
                             })
                             })

+ 43 - 47
src/views/order/AuctionDetail.vue

@@ -10,73 +10,63 @@
     >
     >
         <div class="order-content">
         <div class="order-content">
             <div class="order-top">
             <div class="order-top">
-                <div class="text1">{{ getLabelName(info.status, orderStatusOptions) }}</div>
+                <div class="text1">{{ status }}</div>
                 <div class="text2">
                 <div class="text2">
-                    {{
-                        info.status === 'FINISH'
-                            ? info.airDrop
-                                ? '交易成功啦!交易后的藏品将在您的藏品室中展示'
-                                : '交易已完成!'
-                            : getLabelName(info.status, statusOptions, 'text')
-                    }}
+                    {{ statusText }}
                 </div>
                 </div>
             </div>
             </div>
             <driver />
             <driver />
-            <template v-if="!info.airDrop && info.contactName">
-                <div class="address" v-if="info.courierId">
-                    <img src="../../assets/dingdan_icon_wuliu.png" alt="" />
-                    <div class="text1">快递编号</div>
-                    <div class="text2" @click="copyWuliu">
-                        <span>{{ info.courierId }}</span>
-                        <img src="../../assets/icon-miaoshu.png" alt="" />
-                    </div>
-                </div>
-                <div class="address">
-                    <img src="../../assets/dingdan_icon_dizhi.png" alt="" />
-                    <div class="text1">{{ info.contactName }} {{ info.contactPhone }}</div>
-                    <div class="text1">{{ info.address }}</div>
-                </div>
-                <driver />
-            </template>
             <div class="product">
             <div class="product">
                 <div class="product-title">
                 <div class="product-title">
                     <div class="text1">{{ info.mintActivity }}</div>
                     <div class="text1">{{ info.mintActivity }}</div>
-                    <div class="text2" v-if="info.consume">商品的铸造将会销毁对应藏品</div>
                 </div>
                 </div>
                 <div class="product-info">
                 <div class="product-info">
                     <van-image :radius="6" width="60" height="60" :src="getImg(changeImgs(info.pic))" fit="cover" />
                     <van-image :radius="6" width="60" height="60" :src="getImg(changeImgs(info.pic))" fit="cover" />
                     <div class="product-content">
                     <div class="product-content">
                         <div class="text1 van-multi-ellipsis--l2">{{ info.name }}</div>
                         <div class="text1 van-multi-ellipsis--l2">{{ info.name }}</div>
                         <div class="flex1"></div>
                         <div class="flex1"></div>
-                        <div class="text2" v-if="info.category">类型:{{ info.category }}</div>
-                        <div class="text2" v-if="info.number">编号:{{ info.number }}</div>
+                        <div class="text2">起拍价 ¥{{ info.originPrice }}</div>
                     </div>
                     </div>
                 </div>
                 </div>
             </div>
             </div>
+            <template v-if="info.paymentType === 'DEPOSIT'">
+                <div class="info-item">
+                    <div class="text1">当前价</div>
+                    <div class="text1">¥{{ info.currentPrice }}</div>
+                </div>
 
 
-            <div class="info-item">
-                <div class="text1">{{ getLabelName(info.paymentType, paymentTypeOptions) }}交价</div>
+                <div class="info-item">
+                    <div class="text1">叫价</div>
+                    <div class="text1">¥{{ info.price }}</div>
+                </div>
+                <div class="info-item">
+                    <div class="text1">手续费</div>
+                    <div class="text1 prim">¥{{ info.serviceCharge }}</div>
+                </div>
+            </template>
+            <div class="info-item" v-else>
+                <div class="text1">实付款</div>
                 <div class="text1 prim">¥{{ info.price }}</div>
                 <div class="text1 prim">¥{{ info.price }}</div>
             </div>
             </div>
 
 
-            <div class="info-item">
-                <div class="text1">实际支付</div>
-                <div class="text1 prim">¥{{ info.totalPrice }}</div>
+            <div
+                class="text-cell"
+                v-if="status !== '竞价成功,去支付' && status !== '已流局' && info.paymentType !== 'PURCHASE_PRICE'"
+            >
+                <div class="text-top">
+                    <span class="text1">出局补偿</span>
+                    <span class="text2 warn">¥{{ info.earnedPrice }}</span>
+                </div>
+                <div class="sub">若叫价失败,将原路退给您出局补偿。</div>
+            </div>
+            <div class="info-item" v-if="info.paybackStatus !== 'NOPASSED'">
+                <div class="text1">补偿状态</div>
+                <div class="text1">{{ getLabelName(info.paybackStatus, paybackStatusOptions) }}</div>
             </div>
             </div>
 
 
             <div class="info-item" v-if="!$store.state.review && info.payTime">
             <div class="info-item" v-if="!$store.state.review && info.payTime">
                 <div class="text1">支付方式</div>
                 <div class="text1">支付方式</div>
-                <div class="text1">{{ getLabelName(info.payMethod, payMethodOptions) }}支付</div>
-            </div>
-
-            <div class="text-cell" v-if="info.paymentType !== 'FIXED_PRICE'">
-                <div class="text-top">
-                    <span class="text1">保证金</span>
-                    <span class="text2 warn">¥{{ auctionInfo.deposit }}</span>
-                </div>
-                <div class="sub">
-                    竞拍成功支付后,送拍机构主动关闭交易,系统会在72小时内释放保证金;若竞拍成功未支付,保证金将不会释放
-                </div>
+                <div class="text1">{{ getLabelName(info.payMethod, payMethodOptions) }}</div>
             </div>
             </div>
 
 
             <div class="tips-item">
             <div class="tips-item">
@@ -136,6 +126,9 @@ export default {
                 }
                 }
             }
             }
             return false;
             return false;
+        },
+        statusText() {
+            return this.getLabelName(this.info.paybackStatus, this.paybackStatusOptions, 'text');
         }
         }
     },
     },
     methods: {
     methods: {
@@ -150,11 +143,11 @@ export default {
             });
             });
 
 
             return this.$http
             return this.$http
-                .get('/auctionOrder/get/' + this.$route.query.id)
+                .get('/tradeAuctionOrder/get/' + this.$route.query.id)
                 .then(res => {
                 .then(res => {
                     this.info = res;
                     this.info = res;
                     this.$toast.clear();
                     this.$toast.clear();
-                    return this.$http.get('/auctionActivity/get/' + res.auctionId);
+                    return this.$http.get('/tradeAuction/get/' + res.tradeAuctionId);
                 })
                 })
                 .then(res => {
                 .then(res => {
                     this.auctionInfo = res;
                     this.auctionInfo = res;
@@ -340,6 +333,9 @@ export default {
         &.prim {
         &.prim {
             color: @prim;
             color: @prim;
         }
         }
+        &:nth-child(2) {
+            font-weight: bold;
+        }
     }
     }
 }
 }
 .tips-item {
 .tips-item {
@@ -416,12 +412,12 @@ export default {
             font-weight: bold;
             font-weight: bold;
         }
         }
         .warn {
         .warn {
-            color: #ff7f1f;
+            color: #4d9fff;
         }
         }
     }
     }
     .sub {
     .sub {
         font-size: 12px;
         font-size: 12px;
-        color: #ff7f1f;
+        color: #4d9fff;
         line-height: 17px;
         line-height: 17px;
         margin-top: 4px;
         margin-top: 4px;
     }
     }

+ 19 - 53
src/views/order/AuctionOrders.vue

@@ -9,15 +9,6 @@
         pageType="light"
         pageType="light"
     >
     >
         <van-sticky ref="top" :offset-top="barHeight">
         <van-sticky ref="top" :offset-top="barHeight">
-            <div class="top">
-                <div class="top-btn">
-                    <div class="btn" :class="{ active: type === 'ENTITY' }" @click="changeActive('ENTITY')">
-                        藏传文玩拍卖
-                    </div>
-                    <div class="btn" :class="{ active: type === 'NFT' }" @click="changeActive('NFT')">数字艺术拍卖</div>
-                </div>
-            </div>
-
             <van-tabs
             <van-tabs
                 v-model:active="paymentType"
                 v-model:active="paymentType"
                 :ellipsis="false"
                 :ellipsis="false"
@@ -70,7 +61,7 @@ export default {
                     name: '一口价订单'
                     name: '一口价订单'
                 },
                 },
                 {
                 {
-                    status: 'BIDDER',
+                    status: 'DEPOSIT,PURCHASE_PRICE',
                     name: '竞拍订单'
                     name: '竞拍订单'
                 }
                 }
             ],
             ],
@@ -102,31 +93,18 @@ export default {
     },
     },
     computed: {
     computed: {
         url() {
         url() {
-            if (this.paymentType === 'FIXED_PRICE') {
-                return '/auctionOrder/all';
-            } else {
-                return '/auctionRecord/userRecord';
-            }
+            return '/tradeAuctionOrder/all';
         }
         }
     },
     },
     methods: {
     methods: {
         beforeData() {
         beforeData() {
-            if (this.paymentType === 'FIXED_PRICE') {
-                return {
-                    query: {
-                        userId: this.$store.state.userInfo.id,
-                        paymentType: this.paymentType,
-                        source: this.type === 'ENTITY' ? 'OFFICIAL' : 'TRANSFER'
-                        // hide: false,
-                        // del: false
-                    },
-                    sort: 'id,desc'
-                };
-            } else {
-                return {
-                    type: this.type
-                };
-            }
+            return {
+                query: {
+                    userId: this.$store.state.userInfo.id,
+                    paymentType: this.paymentType
+                },
+                sort: 'id,desc'
+            };
         },
         },
         getData(isFirst = false, scrollTop = 0) {
         getData(isFirst = false, scrollTop = 0) {
             if (isFirst) {
             if (isFirst) {
@@ -147,30 +125,18 @@ export default {
             }
             }
             let url = this.url;
             let url = this.url;
 
 
-            if (this.paymentType !== 'FIXED_PRICE') {
-                data = {};
-                url += '?type=' + this.type;
-            }
-
             return this.$http.post(url, data, { body: 'json' }).then(res => {
             return this.$http.post(url, data, { body: 'json' }).then(res => {
-                if (this.paymentType !== 'FIXED_PRICE') {
-                    this.list = res;
-                    this.empty = res.length === 0;
-                    this.finished = true;
-                    this.loading = false;
-                } else {
-                    if (res.first) {
-                        this.list = [];
-                    }
-                    this.list = [...this.list, ...res.content];
-                    this.empty = res.empty;
-                    this.loading = false;
-                    this.finished = res.last;
-                    if (!this.finished) {
-                        this.page = this.page + 1;
-                    }
-                    this.totalElements = Number(res.totalElements);
+                if (res.first) {
+                    this.list = [];
+                }
+                this.list = [...this.list, ...res.content];
+                this.empty = res.empty;
+                this.loading = false;
+                this.finished = res.last;
+                if (!this.finished) {
+                    this.page = this.page + 1;
                 }
                 }
+                this.totalElements = Number(res.totalElements);
             });
             });
         },
         },
         delFn() {
         delFn() {

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

@@ -49,7 +49,7 @@ export default {
             });
             });
             this.$http.get('/mintOrder/mintRank').then(res => {
             this.$http.get('/mintOrder/mintRank').then(res => {
                 this.$toast.clear();
                 this.$toast.clear();
-                this.list = res;
+                this.list = res.slice(0, 50);
             });
             });
         },
         },
         changeRare(rare) {
         changeRare(rare) {