|
@@ -3,33 +3,43 @@
|
|
|
<van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
|
|
<van-sticky ref="top" :offset-top="bar.value.show ? 46 : 0">
|
|
|
<div class="top">
|
|
<div class="top">
|
|
|
<div class="top-btn">
|
|
<div class="top-btn">
|
|
|
- <div class="btn" :class="{ active: active === 'explore' }">我拥有的</div>
|
|
|
|
|
- <!-- <div
|
|
|
|
|
- class="btn"
|
|
|
|
|
- :class="{ active: active === 'creator' }"
|
|
|
|
|
- @click="changeActive('creator')"
|
|
|
|
|
- >
|
|
|
|
|
- 我卖出的
|
|
|
|
|
- </div> -->
|
|
|
|
|
|
|
+ <div class="btn" :class="{ active: active === 'explore' }" @click="changeActive('explore')">
|
|
|
|
|
+ 我拥有的
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="btn" :class="{ active: active === 'creator' }" @click="changeActive('creator')">
|
|
|
|
|
+ 我卖出的
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="btn" :class="{ active: active === 'coupon' }" @click="changeActive('coupon')">
|
|
|
|
|
+ 兑换券
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="search" v-if="isLogin" @click="$router.push('/assetSearch')">
|
|
|
|
|
|
|
+ <div
|
|
|
|
|
+ class="search"
|
|
|
|
|
+ v-if="isLogin && active !== 'coupon'"
|
|
|
|
|
+ @click="$router.push('/assetSearch?status=' + status)"
|
|
|
|
|
+ >
|
|
|
<img src="../assets/svgs/search.svg" alt="" />
|
|
<img src="../assets/svgs/search.svg" alt="" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <van-tabs
|
|
|
|
|
- v-model:active="type"
|
|
|
|
|
- line-width="16"
|
|
|
|
|
- line-height="2"
|
|
|
|
|
- :ellipsis="false"
|
|
|
|
|
- @change="(page = 0), getList()"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <van-tabs v-model:active="type" line-width="16" line-height="2" :ellipsis="false" @click="changeTab">
|
|
|
<van-tab
|
|
<van-tab
|
|
|
:title="item.label"
|
|
:title="item.label"
|
|
|
- :name="item.type"
|
|
|
|
|
|
|
+ :name="
|
|
|
|
|
+ item.type === 'select' ? (type === item.value[0] ? item.value[1] : item.value[0]) : item.value
|
|
|
|
|
+ "
|
|
|
|
|
+ :title-class="item.type === 'select' && type === item.value[0] ? '' : 'asc'"
|
|
|
:key="index"
|
|
:key="index"
|
|
|
v-for="(item, index) in typeOptions"
|
|
v-for="(item, index) in typeOptions"
|
|
|
- ></van-tab>
|
|
|
|
|
|
|
+ >
|
|
|
|
|
+ <template v-if="item.type === 'select'" #title>
|
|
|
|
|
+ <div class="tab">
|
|
|
|
|
+ <span>{{ item.label }}</span>
|
|
|
|
|
+ <van-icon size="8" name="arrow-up" />
|
|
|
|
|
+ <van-icon size="8" name="arrow-down" />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </van-tab>
|
|
|
</van-tabs>
|
|
</van-tabs>
|
|
|
|
|
|
|
|
<!-- <van-button
|
|
<!-- <van-button
|
|
@@ -46,12 +56,13 @@
|
|
|
</van-sticky>
|
|
</van-sticky>
|
|
|
|
|
|
|
|
<van-list class="box-list" v-model:loading="loading" :finished="finished" finished-text="" @load="getList">
|
|
<van-list class="box-list" v-model:loading="loading" :finished="finished" finished-text="" @load="getList">
|
|
|
- <template v-for="(item, index) in list" :key="index">
|
|
|
|
|
- <asset-info :info="item"></asset-info>
|
|
|
|
|
|
|
+ <template v-for="(item, index) in showList" :key="index">
|
|
|
|
|
+ <coupon-info :info="item" v-if="active == 'coupon'"></coupon-info>
|
|
|
|
|
+ <asset-info :info="item" v-else></asset-info>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<van-empty
|
|
<van-empty
|
|
|
- v-if="empty"
|
|
|
|
|
|
|
+ v-if="empty || (showList.length === 0 && !loading)"
|
|
|
description="你还有没有藏品哦~"
|
|
description="你还有没有藏品哦~"
|
|
|
:image="require('../assets/kong_png_maichude.png')"
|
|
:image="require('../assets/kong_png_maichude.png')"
|
|
|
/>
|
|
/>
|
|
@@ -71,13 +82,16 @@
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
import AssetInfo from '../components/asset/assetInfo.vue';
|
|
import AssetInfo from '../components/asset/assetInfo.vue';
|
|
|
|
|
+import CouponInfo from '../components/CouponInfo.vue';
|
|
|
import asset from '../mixins/asset';
|
|
import asset from '../mixins/asset';
|
|
|
|
|
+import coupon from '../mixins/coupon';
|
|
|
export default {
|
|
export default {
|
|
|
name: 'discover',
|
|
name: 'discover',
|
|
|
- mixins: [asset],
|
|
|
|
|
|
|
+ mixins: [asset, coupon],
|
|
|
inject: ['bar'],
|
|
inject: ['bar'],
|
|
|
components: {
|
|
components: {
|
|
|
- AssetInfo
|
|
|
|
|
|
|
+ AssetInfo,
|
|
|
|
|
+ CouponInfo
|
|
|
},
|
|
},
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
@@ -87,20 +101,6 @@ export default {
|
|
|
empty: false,
|
|
empty: false,
|
|
|
list: [],
|
|
list: [],
|
|
|
label: '全部',
|
|
label: '全部',
|
|
|
- typeOptions: [
|
|
|
|
|
- {
|
|
|
|
|
- label: '全部',
|
|
|
|
|
- type: ''
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- label: '售卖',
|
|
|
|
|
- type: 'ON_SALE'
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- label: '仅展示',
|
|
|
|
|
- type: 'NORMAL'
|
|
|
|
|
- }
|
|
|
|
|
- ],
|
|
|
|
|
showSelect: false,
|
|
showSelect: false,
|
|
|
actions: [{ name: '选项一' }, { name: '选项二' }, { name: '选项三' }],
|
|
actions: [{ name: '选项一' }, { name: '选项二' }, { name: '选项三' }],
|
|
|
action: null,
|
|
action: null,
|
|
@@ -111,6 +111,78 @@ export default {
|
|
|
name: ''
|
|
name: ''
|
|
|
};
|
|
};
|
|
|
},
|
|
},
|
|
|
|
|
+ computed: {
|
|
|
|
|
+ typeOptions() {
|
|
|
|
|
+ if (this.active === 'explore') {
|
|
|
|
|
+ return [
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '全部',
|
|
|
|
|
+ value: ''
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '售卖',
|
|
|
|
|
+ value: 'ON_SALE'
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '仅展示',
|
|
|
|
|
+ value: 'NORMAL'
|
|
|
|
|
+ }
|
|
|
|
|
+ ];
|
|
|
|
|
+ } else if (this.active === 'creator') {
|
|
|
|
|
+ return [
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '全部',
|
|
|
|
|
+ value: 'createdAt,desc'
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '价格',
|
|
|
|
|
+ value: ['sellPrice,desc', 'sellPrice,asc'],
|
|
|
|
|
+ type: 'select'
|
|
|
|
|
+ }
|
|
|
|
|
+ ];
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return [
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '未使用',
|
|
|
|
|
+ value: 'CAN_USE'
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '不可用',
|
|
|
|
|
+ value: 'CANNOT_USE'
|
|
|
|
|
+ }
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ showList() {
|
|
|
|
|
+ if (this.active === 'coupon') {
|
|
|
|
|
+ return [...this.list].filter(item => {
|
|
|
|
|
+ if (this.type === 'CAN_USE') {
|
|
|
|
|
+ return this.checkTime(item);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return !this.checkTime(item);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return this.list;
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ sort() {
|
|
|
|
|
+ if (this.active === 'creator') {
|
|
|
|
|
+ return this.type;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return 'createdAt,desc';
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ status() {
|
|
|
|
|
+ if (this.active === 'explore') {
|
|
|
|
|
+ return 'NORMAL,TRADING,GIFTING';
|
|
|
|
|
+ } else if (this.active === 'creator') {
|
|
|
|
|
+ return 'TRANSFERRED';
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return '';
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
mounted() {
|
|
mounted() {
|
|
|
this.$nextTick(() => {
|
|
this.$nextTick(() => {
|
|
|
this.stiky = this.$refs.top.$el.childNodes[0];
|
|
this.stiky = this.$refs.top.$el.childNodes[0];
|
|
@@ -127,47 +199,75 @@ export default {
|
|
|
if (this.page === 0) {
|
|
if (this.page === 0) {
|
|
|
this.list = [];
|
|
this.list = [];
|
|
|
}
|
|
}
|
|
|
- this.loading = true;
|
|
|
|
|
this.finished = false;
|
|
this.finished = false;
|
|
|
this.empty = false;
|
|
this.empty = false;
|
|
|
let form = {
|
|
let form = {
|
|
|
page: this.page,
|
|
page: this.page,
|
|
|
size: 20,
|
|
size: 20,
|
|
|
|
|
+ sort: this.sort,
|
|
|
query: {
|
|
query: {
|
|
|
userId: this.$store.state.userInfo.id,
|
|
userId: this.$store.state.userInfo.id,
|
|
|
- status: 'NORMAL,TRADING,GIFTING'
|
|
|
|
|
- },
|
|
|
|
|
- sort: 'createdAt,desc'
|
|
|
|
|
|
|
+ ...this.beforeQuery()
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
- if (this.type === 'NORMAL') {
|
|
|
|
|
- form.query = {
|
|
|
|
|
- ...form.query,
|
|
|
|
|
- publicShow: true,
|
|
|
|
|
- consignment: false
|
|
|
|
|
|
|
+ this.$http
|
|
|
|
|
+ .post(this.active === 'coupon' ? '/userCoupon/all' : '/asset/all', form, { body: 'json' })
|
|
|
|
|
+ .then(res => {
|
|
|
|
|
+ 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;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+ beforeQuery() {
|
|
|
|
|
+ let form = {};
|
|
|
|
|
+ if (this.active == 'explore') {
|
|
|
|
|
+ form = {
|
|
|
|
|
+ status: this.status
|
|
|
};
|
|
};
|
|
|
- }
|
|
|
|
|
- if (this.type === 'ON_SALE') {
|
|
|
|
|
- form.query = {
|
|
|
|
|
- ...form.query,
|
|
|
|
|
- consignment: true
|
|
|
|
|
|
|
+ if (this.type === 'NORMAL') {
|
|
|
|
|
+ form = {
|
|
|
|
|
+ ...form,
|
|
|
|
|
+ publicShow: true,
|
|
|
|
|
+ consignment: false
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+ if (this.type === 'ON_SALE') {
|
|
|
|
|
+ form = {
|
|
|
|
|
+ ...form,
|
|
|
|
|
+ consignment: true
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (this.active === 'creator') {
|
|
|
|
|
+ form = {
|
|
|
|
|
+ status: this.status
|
|
|
|
|
+ };
|
|
|
|
|
+ } else {
|
|
|
|
|
+ form = {
|
|
|
|
|
+ used: false
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
- this.$http.post('/asset/all', form, { body: 'json' }).then(res => {
|
|
|
|
|
- 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;
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
|
|
+
|
|
|
|
|
+ return form;
|
|
|
},
|
|
},
|
|
|
changeActive(active) {
|
|
changeActive(active) {
|
|
|
this.active = active;
|
|
this.active = active;
|
|
|
|
|
+ this.loading = true;
|
|
|
this.$nextTick(() => {
|
|
this.$nextTick(() => {
|
|
|
- this.bs.value.scrollTo(0, 0);
|
|
|
|
|
- this.bs.value.refresh();
|
|
|
|
|
|
|
+ this.type = this.typeOptions[0].type;
|
|
|
});
|
|
});
|
|
|
|
|
+ this.page = 0;
|
|
|
|
|
+ this.getList();
|
|
|
|
|
+ },
|
|
|
|
|
+ changeTab() {
|
|
|
|
|
+ if (this.active !== 'coupon') {
|
|
|
|
|
+ this.loading = true;
|
|
|
|
|
+ this.page = 0;
|
|
|
|
|
+ this.getList();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
@@ -291,11 +391,29 @@ export default {
|
|
|
padding: 8px 8px 100px;
|
|
padding: 8px 8px 100px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+.tab {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ padding-right: 14px;
|
|
|
|
|
+ .van-icon {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ right: 0;
|
|
|
|
|
+
|
|
|
|
|
+ &.van-icon-arrow-down {
|
|
|
|
|
+ top: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &.van-icon-arrow-up {
|
|
|
|
|
+ bottom: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/deep/.van-tab {
|
|
/deep/.van-tab {
|
|
|
color: #fff;
|
|
color: #fff;
|
|
|
flex-grow: 0;
|
|
flex-grow: 0;
|
|
|
padding: 0 0 0 0;
|
|
padding: 0 0 0 0;
|
|
|
margin-right: 30px;
|
|
margin-right: 30px;
|
|
|
|
|
+ position: relative;
|
|
|
|
|
|
|
|
&.van-tab--active {
|
|
&.van-tab--active {
|
|
|
color: @prim;
|
|
color: @prim;
|
|
@@ -312,4 +430,22 @@ export default {
|
|
|
/deep/.van-action-sheet__description::after {
|
|
/deep/.van-action-sheet__description::after {
|
|
|
border-bottom: 1px solid #f2f2f2;
|
|
border-bottom: 1px solid #f2f2f2;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+/deep/.van-tab--active {
|
|
|
|
|
+ .tab {
|
|
|
|
|
+ .van-icon-arrow-up {
|
|
|
|
|
+ color: #646566;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ &.asc {
|
|
|
|
|
+ .tab {
|
|
|
|
|
+ .van-icon-arrow-up {
|
|
|
|
|
+ color: @prim;
|
|
|
|
|
+ }
|
|
|
|
|
+ .van-icon-arrow-down {
|
|
|
|
|
+ color: #646566;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|