panhui hace 3 años
padre
commit
5897ea5e91
Se han modificado 44 ficheros con 371 adiciones y 4773 borrados
  1. BIN
      src/assets/account_bg.png
  2. BIN
      src/assets/game_icon.png
  3. BIN
      src/assets/icon_close.png
  4. BIN
      src/assets/png-renzhengchenggong.png
  5. BIN
      src/assets/png-renzhengshibai.png
  6. 109 0
      src/components/BandAccound.vue
  7. 0 56
      src/mixins/asset.js
  8. 0 80
      src/mixins/auction.js
  9. 0 37
      src/mixins/auctionOrder.js
  10. 0 19
      src/mixins/coupon.js
  11. 0 17
      src/mixins/imgInfo.js
  12. 0 167
      src/mixins/level.js
  13. 0 62
      src/mixins/list.js
  14. 0 16
      src/mixins/order.js
  15. 0 19
      src/mixins/orderAct.js
  16. 0 181
      src/mixins/product.js
  17. 0 45
      src/mixins/room.js
  18. 28 6
      src/router/index.js
  19. 2 0
      src/styles/app.less
  20. 1 2
      src/views/Home.vue
  21. 12 4
      src/views/Mine.vue
  22. 1 2
      src/views/Submit.vue
  23. 23 31
      src/views/account/FaceAuth.vue
  24. 0 153
      src/views/account/Message.vue
  25. 0 222
      src/views/account/MessageAdd.vue
  26. 0 158
      src/views/account/MessageDetail.vue
  27. 0 80
      src/views/account/Question.vue
  28. 0 1
      src/views/account/Security.vue
  29. 19 19
      src/views/account/Waiting.vue
  30. 112 0
      src/views/user/Account.vue
  31. 0 135
      src/views/user/Address.vue
  32. 0 149
      src/views/user/AddressEdit.vue
  33. 0 202
      src/views/user/Banks.vue
  34. 0 277
      src/views/user/BanksAdd.vue
  35. 64 0
      src/views/user/Collections.vue
  36. 0 303
      src/views/user/Exchange.vue
  37. 0 71
      src/views/user/Followers.vue
  38. 0 87
      src/views/user/Follows.vue
  39. 0 226
      src/views/user/Level.vue
  40. 0 127
      src/views/user/Likes.vue
  41. 0 231
      src/views/user/Rank.vue
  42. 0 918
      src/views/user/Wallet.vue
  43. 0 148
      src/views/user/WalletAgreement.vue
  44. 0 522
      src/views/user/WalletBak.vue

BIN
src/assets/account_bg.png


BIN
src/assets/game_icon.png


BIN
src/assets/icon_close.png


BIN
src/assets/png-renzhengchenggong.png


BIN
src/assets/png-renzhengshibai.png


+ 109 - 0
src/components/BandAccound.vue

@@ -0,0 +1,109 @@
+<template>
+    <van-popup
+        round
+        close-on-popstate
+        safe-area-inset-bottom
+        v-model:show="show"
+        closeable
+        position="bottom"
+        :close-icon="require('@assets/icon_close.png')"
+    >
+        <div class="popup">
+            <div class="title">
+                <img src="@assets/icon-zhanghugauanli.png" alt="" />
+                <span>绑定账户</span>
+            </div>
+            <van-form @submit="submit">
+                <van-field
+                    name="游戏昵称"
+                    label="游戏昵称"
+                    placeholder="请输入您的游戏昵称"
+                    v-model="form.nickname"
+                    :rules="[{ required: true, message: '请输入您的游戏昵称' }]"
+                />
+                <van-field
+                    type="digit"
+                    name="游戏营地"
+                    label="游戏营地"
+                    placeholder="请输入您的营地ID"
+                    v-model="form.id"
+                    :rules="[{ required: true, message: '请输入您的营地ID' }]"
+                />
+                <div class="tips">
+                    <div class="text1">温馨提示</div>
+                    <div class="text2">便于游戏公平性,校验官方数据,请认真填写王者荣耀昵称及王者营地1D账号</div>
+                    <div class="text2">如误填将有可能导致赛事结算延迟,漏结算等</div>
+                    <div class="text2">
+                        注:王者营地ID账号将用于无法结算,对方恶意结算,乱提交赛事截图等。方便人工后续查询,请您打开王者营地个人战绩,谢谢配合
+                    </div>
+                </div>
+                <div class="btn">
+                    <van-button round block type="primary" native-type="submit">提交</van-button>
+                </div>
+            </van-form>
+        </div>
+    </van-popup>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            show: true,
+            form: {
+                nickname: '',
+                id: ''
+            }
+        };
+    },
+    methods: {
+        submit() {}
+    }
+};
+</script>
+
+<style lang="less" scoped>
+.title {
+    .flex();
+    img {
+        width: 28px;
+        height: 28px;
+    }
+    span {
+        font-size: 14px;
+        font-weight: bold;
+        color: #ffffff;
+        line-height: 24px;
+        margin-left: 10px;
+    }
+    padding: 14px 16px 8px;
+    border-bottom: 1px solid #313346;
+}
+
+/deep/.van-form {
+    .van-field__label {
+        color: #fff;
+        width: 56px;
+        margin-right: 12px;
+    }
+}
+
+.tips {
+    font-size: 12px;
+    color: #6a6d83;
+    line-height: 20px;
+    padding: 20px 16px 60px;
+
+    .text1 {
+        padding-bottom: 2px;
+    }
+    .text2 + .text2 {
+        margin-top: 20px;
+    }
+}
+
+.btn {
+    padding: 9px 28px;
+    .bottom(9px);
+}
+</style>

+ 0 - 56
src/mixins/asset.js

@@ -1,56 +0,0 @@
-export default {
-    data() {
-        return {
-            assetStatusOptions: [
-                {
-                    label: '仅展示',
-                    value: 'NORMAL'
-                },
-                {
-                    label: '转让中',
-                    value: 'TRADING'
-                },
-                {
-                    label: '已转让',
-                    value: 'TRANSFERRED'
-                },
-                {
-                    label: '转赠中',
-                    value: 'GIFTING'
-                },
-                {
-                    label: '已转赠',
-                    value: 'GIFTED'
-                },
-                {
-                    label: '铸造中',
-                    value: 'MINTING'
-                },
-                {
-                    label: '已销毁',
-                    value: 'DESTROYED'
-                },
-                {
-                    label: '拍卖中',
-                    value: 'AUCTIONING'
-                },
-                {
-                    label: '已拍卖',
-                    value: 'AUCTIONED'
-                }
-            ]
-        };
-    },
-    computed: {
-        opened() {
-            return this.info
-                ? this.info.type === 'BLIND_BOX' && !this.info.fromAssetId
-                    ? this.info.opened
-                    : true
-                : true;
-        },
-        isLock() {
-            return this.info.lockTo && this.dayjs(this.info.lockTo).isAfter(this.dayjs());
-        }
-    }
-};

+ 0 - 80
src/mixins/auction.js

@@ -1,80 +0,0 @@
-import imgInfo from './imgInfo';
-export default {
-    mixins: [imgInfo],
-    data() {
-        return {
-            auctionTypeOptions: [
-                { label: '虚拟藏品', value: 'NFT' },
-                { label: '实物', value: 'ENTITY' }
-            ],
-            statusOptions: [
-                { label: '未开始', value: 'NOTSTARTED' },
-                { label: '进行中', value: 'ONGOING' },
-                { label: '成交', value: 'PURCHASED' },
-                { label: '一口价成交', value: 'FIXED_PRICE_PURCHASED' },
-                { label: '流拍', value: 'PASS' },
-                { label: '完成', value: 'FINISH' }
-            ],
-            sourceOptions: [
-                { label: '官方拍卖', value: 'OFFICIAL' },
-                { label: '转让拍卖', value: 'TRANSFER' }
-            ]
-        };
-    },
-    computed: {
-        //是否数字藏品
-        isNFT() {
-            return this.info.auctionType === 'NFT';
-        },
-        timeText() {
-            if (this.info.status === 'NOTSTARTED') {
-                return '距开始';
-            } else if (this.info.status === 'ONGOING') {
-                return '距结束';
-            } else {
-                return '已结束';
-            }
-        },
-        //是否结束
-        isEnd() {
-            if (this.info.status !== 'NOTSTARTED' && this.info.status !== 'ONGOING') {
-                return true;
-            }
-            return false;
-        },
-        priceText() {
-            if (
-                this.info.status === 'PURCHASED' ||
-                this.info.status === 'FINISH' ||
-                (this.info.status === 'PASS' && !this.recordInfo.payDeposit)
-            ) {
-                return '成交价';
-            } else if (this.info.purchasePrice) {
-                return '当前价';
-            } else if (this.info.startingPrice) {
-                return '起拍价';
-            } else {
-                return '一口价';
-            }
-        },
-        showPrice() {
-            return this.info.purchasePrice || this.info.startingPrice || this.info.fixedPrice || 0;
-        },
-        isLeader() {
-            return this.isLogin && this.info.purchaserId === this.$store.state.userInfo.id;
-        },
-        isbidder() {
-            return this.isLeader && this.info.status === 'PURCHASED';
-        }
-    },
-    methods: {
-        getTime(endTime) {
-            console.log('2726');
-            let time = this.dayjs(endTime).diff(this.dayjs());
-            return time;
-        },
-        showTime(time) {
-            return this.dayjs(time, 'YYYY-MM-DD HH:mm:ss').format('MM-DD HH:mm:ss');
-        }
-    }
-};

+ 0 - 37
src/mixins/auctionOrder.js

@@ -1,37 +0,0 @@
-export default {
-    data() {
-        return {
-            typeOptions: [
-                { label: '默认', value: 'DEFAULT' },
-                { label: '盲盒', value: 'BLIND_BOX' },
-                { label: '拍卖', value: 'AUCTION' },
-                { label: '展厅', value: 'SHOWROOM' }
-            ],
-            sourceOptions: [
-                { label: '官方拍卖', value: 'OFFICIAL' },
-                { label: '转让拍卖', value: 'TRANSFER' }
-            ],
-            paymentTypeOptions: [
-                { label: '保证金', value: 'DEPOSIT' },
-                { label: '竞拍金', value: 'PURCHASE_PRICE', text: '你已竞价成功' },
-                { label: '一口价', value: 'FIXED_PRICE', text: '一口价支付' }
-            ],
-            orderStatusOptions: [
-                { label: '未支付', value: 'NOT_PAID' },
-                { label: '已支付,处理中', value: 'PROCESSING' },
-                { label: '已完成', value: 'FINISH' },
-                { label: '已取消', value: 'CANCELLED' },
-                { label: '退款中', value: 'REFUNDING' },
-                { label: '已退款', value: 'REFUNDED' },
-                { label: '待发货', value: 'DELIVERY' },
-                { label: '待收货', value: 'RECEIVE' },
-                { label: '待空投', value: 'AIR_DROP' }
-            ],
-            payMethodOptions: [
-                { label: '微信', value: 'WEIXIN' },
-                { label: '支付宝', value: 'ALIPAY' },
-                { label: '无GAS费', value: 'FREE' }
-            ]
-        };
-    }
-};

+ 0 - 19
src/mixins/coupon.js

@@ -1,19 +0,0 @@
-export default {
-    methods: {
-        checkTime(info) {
-            return this.dayjs().isSameOrBefore(this.dayjs(info.expiration, 'YYYY-MM-DD HH:mm:ss'));
-        },
-        checkUse(info, collectionId = 0) {
-            console.log(collectionId);
-            if (collectionId && info.limited) {
-                return [...info.collectionIds]
-                    .map(item => {
-                        return Number(item);
-                    })
-                    .includes(Number(collectionId));
-            } else {
-                return true;
-            }
-        }
-    }
-};

+ 0 - 17
src/mixins/imgInfo.js

@@ -1,17 +0,0 @@
-export default {
-    methods: {
-        changeImgs(list = []) {
-            // console.log(list);
-            return list.map(item => {
-                if (item.type === 'video/mp4') {
-                    return item.thumb;
-                } else {
-                    return item.url;
-                }
-            });
-        },
-        isVideo(info = {}) {
-            return info.type === 'video/mp4';
-        }
-    }
-};

+ 0 - 167
src/mixins/level.js

@@ -1,167 +0,0 @@
-export default {
-    data() {
-        return {
-            medals: [
-                {
-                    start: 0,
-                    end: 9,
-                    color1: '#717171',
-                    color: '#3B445D',
-                    vicon: 'https://cdn.raex.vip/medals/v.png',
-                    icon: 'https://cdn.raex.vip/medals/LV0-1-icon.png',
-                    hide: true,
-                    textColor: '#ffffff',
-                    startColor: '#A5AEC9',
-                    endColor: '#9DA6C1'
-                },
-                {
-                    start: 10,
-                    end: 19,
-                    color: '#557595',
-                    startColor: '#AAD4FF',
-                    endColor: '#C5E2FF',
-                    icon: 'https://cdn.raex.vip/medals/LV10-19-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V10-19.png'
-                },
-                {
-                    start: 20,
-                    end: 29,
-                    color: '#A65F3B',
-                    startColor: '#fec391',
-                    endColor: '#fde9cb',
-                    icon: 'https://cdn.raex.vip/medals/LV20-29-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V20-29.png'
-                },
-                {
-                    start: 30,
-                    end: 39,
-                    color: '#3C62FF',
-                    startColor: '#B6C2FF',
-                    endColor: '#A8B7FF',
-                    icon: 'https://cdn.raex.vip/medals/LV30-39-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V30-39.png'
-                },
-                {
-                    start: 40,
-                    end: 49,
-                    color: '#663FA7',
-                    startColor: '#CEAFFF',
-                    endColor: '#C19AFF',
-                    icon: 'https://cdn.raex.vip/medals/LV40-49-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V40-49.png'
-                },
-                {
-                    start: 50,
-                    end: 59,
-                    color: '#1076E1',
-                    startColor: '#B3EAFF',
-                    endColor: '#7CDAFF',
-                    icon: 'https://cdn.raex.vip/medals/LV50-59-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V50-59.png'
-                },
-                {
-                    start: 60,
-                    end: 69,
-                    color: '#DB31CA',
-                    startColor: '#FFBEF8',
-                    endColor: '#FF8DF5',
-                    icon: 'https://cdn.raex.vip/medals/LV60-69-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V60-69.png'
-                },
-                {
-                    start: 70,
-                    end: 79,
-                    color: '#3D26D2',
-                    startColor: '#B6AAFC',
-                    endColor: '#9F8EFF',
-                    icon: 'https://cdn.raex.vip/medals/LV70-79-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V70-79.png'
-                },
-                {
-                    start: 80,
-                    end: 89,
-                    color: '#DF1637',
-                    startColor: '#FFB2B9',
-                    endColor: '#F89BA3',
-                    icon: 'https://cdn.raex.vip/medals/LV80-89-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V80-89.png'
-                },
-                {
-                    start: 90,
-                    end: 99,
-                    color: '#FA6802',
-                    startColor: '#FFE3BB',
-                    endColor: '#FFCF8C',
-                    icon: 'https://cdn.raex.vip/medals/LV90-99-icon.png',
-                    bg: 'https://cdn.raex.vip/medals/V90-99.png'
-                }
-            ],
-            levels: [],
-            money: 0,
-            showSwiper: false
-        };
-    },
-    computed: {
-        levelInfo() {
-            if (this.isLogin) {
-                let level = Math.floor(this.money / this.$rating);
-                console.log(level);
-                if (level > 99) {
-                    level = 99;
-                }
-                let info = {};
-                [...this.medals].forEach(item => {
-                    if (level >= item.start) {
-                        info = { ...item };
-                    }
-                });
-                let _info = {};
-                [...this.levels].forEach(item => {
-                    if (level >= (item.startLevel || 0)) {
-                        _info = item;
-                    }
-                });
-                return { level, ...info, ..._info };
-            } else {
-                return {};
-            }
-        },
-        isMore() {
-            if (this.isLogin) {
-                let level = Math.floor(this.money / this.$rating);
-                return level >= 99;
-            } else {
-                return false;
-            }
-        }
-    },
-    mounted() {
-        this.$http.post('/purchaseLevel/all', {}, { body: 'json' }).then(res => {
-            this.levels = res.content.map((item, index) => {
-                let start = index - 1 >= 0 ? res.content[index - 1].endLevel : 0;
-                return {
-                    ...item,
-                    startLevel: item.startLevel
-                };
-            });
-
-            if (this.setSwiper) {
-                this.setSwiper();
-            }
-
-            if (this.isLogin) {
-                this.$http.get('/asset/breakdown').then(res => {
-                    this.money = res.buy;
-                    setTimeout(() => {
-                        this.showSwiper = true;
-                    }, 1000);
-                    this.$nextTick(() => {
-                        if (this.$store.state.userInfo.level !== this.levelInfo.level && this.changeLevel) {
-                            this.changeLevel(this.levelInfo.level);
-                        }
-                    });
-                });
-            }
-        });
-    }
-};

+ 0 - 62
src/mixins/list.js

@@ -1,62 +0,0 @@
-export default {
-    data() {
-        return {
-            empty: false,
-            loading: false,
-            finished: false,
-            page: 0,
-            totalElements: 0,
-            size: 20
-        };
-    },
-    methods: {
-        getData(isFirst = false, scrollTop = 0) {
-            if (isFirst) {
-                this.page = 0;
-                this.list = [];
-                this.$root.$el.scrollTop = scrollTop;
-            }
-
-            this.loading = true;
-            this.finished = false;
-            this.empty = false;
-            let data = { page: this.page, size: this.size, sort: 'createdAt,desc' };
-            if (this.beforeData) {
-                data = {
-                    ...data,
-                    ...this.beforeData()
-                };
-            }
-
-            if (this.httpType === 'get') {
-                return this.$http.get(this.url, data, { body: 'json' }).then(res => {
-                    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);
-                });
-            } else {
-                return this.$http.post(this.url, data, { body: 'json' }).then(res => {
-                    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);
-                });
-            }
-        }
-    }
-};

+ 0 - 16
src/mixins/order.js

@@ -1,16 +0,0 @@
-export default {
-    data() {
-        return {
-            statusOptions: [
-                { label: '未支付', value: 'NOT_PAID' },
-                { label: '交易中', value: 'PROCESSING' },
-                { label: '已完成', value: 'FINISH' },
-                { label: '已取消', value: 'CANCELLED' }
-            ],
-            payMethodOptions: [
-                { label: '微信', value: 'WEIXIN' },
-                { label: '支付宝', value: 'ALIPAY' }
-            ]
-        };
-    }
-};

+ 0 - 19
src/mixins/orderAct.js

@@ -1,19 +0,0 @@
-export default {
-    data() {
-        return {
-            statusOptions: [
-                { label: '未支付', value: 'NOT_PAID' },
-                { label: '待审核', value: 'PENDING', text: '付款成功!等待平台审核' },
-                { label: '待发货', value: 'DELIVERY', text: '付款成功!等待平台发货' },
-                { label: '待收货', value: 'RECEIVE', text: '订单已发货!' },
-                { label: '待空投', value: 'AIR_DROP', text: '支付成功,等待平台确认交易' },
-                { label: '已完成', value: 'FINISH' },
-                { label: '已取消', value: 'CANCELLED' }
-            ],
-            payMethodOptions: [
-                { label: '微信', value: 'WEIXIN' },
-                { label: '支付宝', value: 'ALIPAY' }
-            ]
-        };
-    }
-};

+ 0 - 181
src/mixins/product.js

@@ -1,181 +0,0 @@
-import { abs } from 'mathjs';
-import { mapState } from 'vuex';
-import imgInfo from './imgInfo';
-export default {
-    data() {
-        return {
-            typeOptions: [
-                {
-                    label: '精选推荐',
-                    value: ''
-                },
-                {
-                    label: '原创系列',
-                    value: 'DEFAULT'
-                },
-                {
-                    label: '数字盲盒',
-                    value: 'BLIND_BOX'
-                },
-                {
-                    label: '拍卖系列',
-                    value: 'AUCTION'
-                }
-            ],
-            sourceOptions: [
-                { label: '官方首发', value: 'OFFICIAL' },
-                { label: '用户铸造', value: 'USER' },
-                { label: '二手市场', value: 'TRANSFER' }
-            ],
-            picsTypes: [
-                {
-                    label: '视频',
-                    value: 'video/mp4'
-                }
-            ],
-            startTime: '',
-            sortOptions: {
-                精选盲盒: 'soldOut;sort,desc',
-                本期推荐: 'soldOut;sale,desc;sort,desc',
-                最HOT收藏品: 'soldOut;likes,desc;sort,desc;createdAt,desc',
-                更多藏品: 'soldOut;source,asc;sale,desc;likes,desc'
-            },
-            startTimetimer: null,
-            saleTimetimer: null,
-            saleTime: ''
-        };
-    },
-    mixins: [imgInfo],
-    computed: {
-        ...mapState(['usedBuy']),
-        bannerList() {
-            return [...this.changeImgs(this.banners)].map(item => {
-                return this.getImg(item, '', 800);
-            });
-        },
-        isAppointment() {
-            if (this.info.startTime) {
-                return this.dayjs().isBefore(this.dayjs(this.info.startTime));
-            } else {
-                return false;
-            }
-        },
-        isSale() {
-            if (this.info.saleTime) {
-                return this.dayjs().isBefore(this.dayjs(this.info.saleTime));
-            } else {
-                return false;
-            }
-        },
-        isSold() {
-            return this.info && this.info.soldOut && this.info.salable;
-        },
-        isSolded() {
-            return this.info && !this.info.noSoldOut && this.info.salable && this.info.source === 'OFFICIAL';
-        },
-        assignment() {
-            return this.info.assignment || 0;
-        }
-    },
-    methods: {
-        changeImgs(list = []) {
-            // console.log(list);
-            return list.map(item => {
-                if (item.type === 'video/mp4') {
-                    return item.thumb;
-                } else {
-                    return item.url;
-                }
-            });
-        },
-        isVideo(info = {}) {
-            return info.type === 'video/mp4';
-        },
-        pad(n, width, z) {
-            z = z || '0';
-            n = n + '';
-            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
-        },
-        getTime(startTime, key = 'startTime') {
-            if (!startTime) {
-                return;
-            }
-            if (key == 'startTime' && !this.isAppointment) {
-                return;
-            }
-
-            if (key == 'saleTime' && !this.isSale) {
-                return;
-            }
-
-            let subTime = parseInt(this.$store.state.netTime / 1000);
-
-            let seconds = this.dayjs(startTime, 'YYYY-MM-DD HH:mm:ss').diff(this.dayjs(), 'second');
-            seconds = seconds - subTime;
-            let str = '';
-            let d = Math.floor(seconds / 24 / 3600);
-            if (abs(d) > 0) {
-                str += d + '天 ';
-            }
-
-            this[key] =
-                str +
-                this.pad(parseInt(seconds / 3600) % 24, 2) +
-                ':' +
-                this.pad(parseInt(seconds / 60) % 60, 2) +
-                ':' +
-                this.pad(seconds % 60, 2);
-            if (this[key + 'timer']) {
-                clearTimeout(this[key + 'timer']);
-                this[key + 'timer'] = null;
-            }
-            if (!this.dayjs().isBefore(this.dayjs(startTime, 'YYYY-MM-DD HH:mm:ss'))) {
-                if (this.getProduct) {
-                    this.getProduct();
-                }
-                this[key] = '';
-            } else {
-                this[key + 'timer'] = setTimeout(() => {
-                    this.getTime(startTime, key);
-                }, 1000);
-            }
-        },
-        getCutNum(num = 0) {
-            num = Math.floor(num);
-            if (num < 10) {
-                return '0' + num;
-            } else {
-                return num;
-            }
-        },
-        getShort(str = '') {
-            if (str) {
-                str = '...' + str.substr(-8, 8);
-            }
-            return str;
-        },
-        clearTime() {
-            if (this.timer) {
-                clearTimeout(this.timer);
-                this.timer = null;
-            }
-        },
-        updateTime() {
-            if (this.startTime) {
-                this.getTime(this.info.startTime);
-            }
-        }
-    },
-    deactivated() {
-        this.clearTime();
-    },
-    activated() {
-        this.updateTime();
-    },
-    beforeUnmount() {
-        if (this.timer) {
-            clearTimeout(this.timer);
-            this.timer = null;
-        }
-    }
-};

+ 0 - 45
src/mixins/room.js

@@ -1,45 +0,0 @@
-export default {
-    methods: {
-        like(info) {
-            this.checkLogin().then(() => {
-                this.$toast.loading({
-                    message: '加载中...',
-                    forbidClick: true
-                });
-                if (!info.liked) {
-                    this.$http
-                        .get(`/newsLike/${info.id}/likeRoom/`)
-                        .then(() => {
-                            if (this.getDetail) {
-                                this.getDetail({
-                                    ...info,
-                                    liked: true,
-                                    likes: info.likes + 1
-                                });
-                            }
-                            this.$toast.success('点赞成功');
-                        })
-                        .catch(() => {
-                            this.$toast.clear();
-                        });
-                } else {
-                    this.$http
-                        .get(`/newsLike/${info.id}/unlikeRoom/`)
-                        .then(() => {
-                            if (this.getDetail) {
-                                this.getDetail({
-                                    ...info,
-                                    liked: false,
-                                    likes: info.likes - 1
-                                });
-                            }
-                            this.$toast.success('取消成功');
-                        })
-                        .catch(() => {
-                            this.$toast.clear();
-                        });
-                }
-            });
-        }
-    }
-};

+ 28 - 6
src/router/index.js

@@ -239,15 +239,37 @@ const routes = [
             title: '修改昵称'
             title: '修改昵称'
         }
         }
     },
     },
-    // {
-    //     path: '/waiting',
-    //     name: 'userWaiting',
-    //     component: () => import('../views/account/Waiting.vue')
-    // },
+    {
+        path: '/waiting',
+        name: 'userWaiting',
+        component: () => import('../views/account/Waiting.vue'),
+        meta: {
+            title: '实名认证'
+        }
+    },
     {
     {
         path: '/security',
         path: '/security',
         name: 'security',
         name: 'security',
-        component: () => import('../views/account/Security.vue')
+        component: () => import('../views/account/Security.vue'),
+        meta: {
+            title: '系统设置'
+        }
+    },
+    {
+        path: '/account',
+        name: 'account',
+        component: () => import('../views/user/Account.vue'),
+        meta: {
+            title: '关联账户'
+        }
+    },
+    {
+        path: '/collections',
+        name: 'collections',
+        component: () => import('../views/user/Collections.vue'),
+        meta: {
+            title: '藏品兑换记录'
+        }
     },
     },
     {
     {
         path: '/about',
         path: '/about',

+ 2 - 0
src/styles/app.less

@@ -58,6 +58,8 @@
     --van-stepper-input-line-height: 24px;
     --van-stepper-input-line-height: 24px;
     --van-stepper-input-height: 24px;
     --van-stepper-input-height: 24px;
     --van-field-clear-icon-color: #6a6d83;
     --van-field-clear-icon-color: #6a6d83;
+    --van-popup-background-color: #25283d;
+    --van-popup-close-icon-color: #4a4c5d;
 }
 }
 
 
 [contenteditable='true'],
 [contenteditable='true'],

+ 1 - 2
src/views/Home.vue

@@ -55,7 +55,6 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import product from '../mixins/product';
 import { Swiper, SwiperSlide } from 'swiper/vue';
 import { Swiper, SwiperSlide } from 'swiper/vue';
 
 
 import 'swiper/swiper.min.css';
 import 'swiper/swiper.min.css';
@@ -74,7 +73,7 @@ import RoomInfo from '../components/RoomInfo.vue';
 export default {
 export default {
     name: 'home',
     name: 'home',
     inject: ['bar', 'setKeeps', 'scrollWrapper', 'changeScroll'],
     inject: ['bar', 'setKeeps', 'scrollWrapper', 'changeScroll'],
-    mixins: [banner, product],
+    mixins: [banner],
     components: {
     components: {
         Swiper,
         Swiper,
         SwiperSlide,
         SwiperSlide,

+ 12 - 4
src/views/Mine.vue

@@ -9,7 +9,7 @@
                 <div class="user-text">
                 <div class="user-text">
                     <div class="text1">
                     <div class="text1">
                         <div class="name">{{ userInfo.nickname }}</div>
                         <div class="name">{{ userInfo.nickname }}</div>
-                        <div class="auth not" @click="goAuth">
+                        <div class="auth not" @click.stop="goAuth">
                             <img src="@assets/renzheng_icon.png" alt="" />
                             <img src="@assets/renzheng_icon.png" alt="" />
                             <span>未实名认证</span>
                             <span>未实名认证</span>
                         </div>
                         </div>
@@ -50,7 +50,7 @@
                 <img src="@assets/icon_zhanji.png" alt="" />
                 <img src="@assets/icon_zhanji.png" alt="" />
                 <span>我的战绩</span>
                 <span>我的战绩</span>
             </div>
             </div>
-            <div class="order-item">
+            <div class="order-item" @click="$router.push('/collections')">
                 <img src="@assets/icon_duihuan.png" alt="" />
                 <img src="@assets/icon_duihuan.png" alt="" />
                 <span>兑换记录</span>
                 <span>兑换记录</span>
             </div>
             </div>
@@ -58,10 +58,18 @@
 
 
         <div class="grids">
         <div class="grids">
             <van-grid :border="false">
             <van-grid :border="false">
-                <van-grid-item :icon="require('@assets/icon_guanlianzhanghu.png')" text="关联账户" />
+                <van-grid-item
+                    :to="{ path: '/account' }"
+                    :icon="require('@assets/icon_guanlianzhanghu.png')"
+                    text="关联账户"
+                />
                 <van-grid-item :icon="require('@assets/icon-zhanghugauanli.png')" text="账户管理" />
                 <van-grid-item :icon="require('@assets/icon-zhanghugauanli.png')" text="账户管理" />
                 <van-grid-item :icon="require('@assets/icon_guanyuwomen.png')" text="关于我们" />
                 <van-grid-item :icon="require('@assets/icon_guanyuwomen.png')" text="关于我们" />
-                <van-grid-item :icon="require('@assets/icon-xitongshezhi.png')" text="系统设置" />
+                <van-grid-item
+                    :to="{ path: '/security' }"
+                    :icon="require('@assets/icon-xitongshezhi.png')"
+                    text="系统设置"
+                />
             </van-grid>
             </van-grid>
         </div>
         </div>
     </div>
     </div>

+ 1 - 2
src/views/Submit.vue

@@ -74,7 +74,6 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import product from '../mixins/product';
 import coupon from '../mixins/coupon';
 import coupon from '../mixins/coupon';
 import { mapState } from 'vuex';
 import { mapState } from 'vuex';
 import resolveUrl from 'resolve-url';
 import resolveUrl from 'resolve-url';
@@ -86,7 +85,7 @@ let inApp = /#cordova#/i.test(navigator.userAgent);
 let inIos = /iPhone|iPad|iPod/i.test(navigator.userAgent);
 let inIos = /iPhone|iPad|iPod/i.test(navigator.userAgent);
 export default {
 export default {
     name: 'Submit',
     name: 'Submit',
-    mixins: [product, coupon],
+    mixins: [coupon],
     components: { PayMethodPick },
     components: { PayMethodPick },
     data() {
     data() {
         return {
         return {

+ 23 - 31
src/views/account/FaceAuth.vue

@@ -1,12 +1,12 @@
 <template>
 <template>
     <div class="login">
     <div class="login">
-
         <van-form @submit="submit" @failed="failed" ref="form">
         <van-form @submit="submit" @failed="failed" ref="form">
             <van-field
             <van-field
                 label="真实姓名"
                 label="真实姓名"
                 name="真实姓名"
                 name="真实姓名"
                 placeholder="请输入您真实姓名"
                 placeholder="请输入您真实姓名"
                 v-model="form.name"
                 v-model="form.name"
+                input-align="right"
                 :rules="[{ required: true, message: '请输入您真实姓名' }]"
                 :rules="[{ required: true, message: '请输入您真实姓名' }]"
             >
             >
             </van-field>
             </van-field>
@@ -55,6 +55,7 @@
                         message: '身份证号格式错误'
                         message: '身份证号格式错误'
                     }
                     }
                 ]"
                 ]"
+                input-align="right"
             >
             >
             </van-field>
             </van-field>
 
 
@@ -101,17 +102,12 @@
                 </template>
                 </template>
             </van-field> -->
             </van-field> -->
 
 
-            <div class="button" ref="btn">
-                <van-button
-                    round
-                    block
-                    @click="submit"
-                    :color="`linear-gradient(to right, ${$colors.prim}, ${$colors.warn})`"
-                    class="sure"
-                >
-                    身份验证
-                </van-button>
-            </div>
+            <di v class="button" ref="btn">
+                <div class="tips">认证成功后不能修改,并且只允许绑定一个账户</div>
+                <div>
+                    <van-button round block type="primary" @click="submit" class="sure"> 身份验证 </van-button>
+                </div>
+            </di>
         </van-form>
         </van-form>
         <a id="auth" :href="url"></a>
         <a id="auth" :href="url"></a>
     </div>
     </div>
@@ -269,13 +265,12 @@ export default {
 .button {
 .button {
     margin-top: 60px;
     margin-top: 60px;
 
 
-    .del {
-        margin-top: 20px;
-        border-color: @text0;
-    }
-
-    .sure {
-        color: @bg !important;
+    .tips {
+        font-size: 12px;
+        color: #6a6d83;
+        line-height: 17px;
+        text-align: center;
+        padding-bottom: 12px;
     }
     }
 
 
     .van-button {
     .van-button {
@@ -316,18 +311,6 @@ export default {
     }
     }
 }
 }
 
 
-.button {
-    position: fixed;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    background-color: @bg2;
-    padding: 6px 42px;
-    z-index: 20;
-    .bottom(6px);
-    border-top: 1px solid @tabBorder;
-}
-
 /deep/.img {
 /deep/.img {
     &.van-cell {
     &.van-cell {
         margin-top: 20px;
         margin-top: 20px;
@@ -350,4 +333,13 @@ export default {
     margin: 0;
     margin: 0;
     padding: 0;
     padding: 0;
 }
 }
+.van-cell {
+    &::after {
+        border-width: 0;
+        height: 1px;
+        background: rgba(255, 255, 255, 0.1);
+        left: 16px;
+        right: 16px;
+    }
+}
 </style>
 </style>

+ 0 - 153
src/views/account/Message.vue

@@ -1,153 +0,0 @@
-<template>
-    <van-pull-refresh
-        success-text="加载成功"
-        success-duration="500"
-        class="page"
-        v-model="isLoading"
-        @refresh="onRefresh"
-    >
-        <van-sticky>
-            <van-tabs v-model:active="status" line-width="16" line-height="2" @change="getData(true)">
-                <van-tab title="全部" name=""></van-tab>
-                <van-tab title="待反馈" name="NO_REPLY"></van-tab>
-                <van-tab title="已反馈" name="REPLIED"></van-tab>
-                <van-tab title="处理中" name="PROCESSING"></van-tab>
-                <van-tab title="已完成" name="COMPLETED"></van-tab>
-            </van-tabs>
-        </van-sticky>
-        <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="getData">
-            <router-link
-                class="message"
-                :to="{
-                    path: 'messageDetail',
-                    query: {
-                        id: item.id
-                    }
-                }"
-                v-for="(item, index) in list"
-                :key="index"
-            >
-                <div class="top">
-                    <div class="status" v-if="item.status" :class="{ prim: item.status === 'COMPLETED' }">
-                        {{ getLabelName(item.status, statusOptions) }}
-                    </div>
-                    <div class="status" v-else :class="{ prim: item.reply }">
-                        {{ item.reply ? '已反馈' : '待反馈' }}
-                    </div>
-                    <div class="text van-ellipsis">{{ item.detail }}</div>
-                </div>
-                <div class="time">
-                    {{ item.createdAt }}
-                </div>
-            </router-link>
-            <van-empty v-if="empty" description="什么留言都没有哦~" :image="require('@assets/kong_png_wusousuo.png')" />
-        </van-list>
-        <div class="bottom">
-            <van-button type="primary" @click="$router.push('/messageAdd')" round block>新建反馈</van-button>
-        </div>
-    </van-pull-refresh>
-</template>
-
-<script>
-import list from '../../mixins/list';
-export default {
-    mixins: [list],
-    data() {
-        return {
-            reply: '',
-            list: [],
-            empty: false,
-            url: '/message/my',
-            statusOptions: [
-                { label: '已完成', value: 'COMPLETED' },
-                { label: '处理中', value: 'PROCESSING' },
-                { label: '已反馈', value: 'REPLIED' },
-                { label: '未反馈', value: 'NO_REPLY' }
-            ],
-            status: ''
-        };
-    },
-    methods: {
-        beforeData() {
-            return {
-                query: {
-                    status: this.status
-                }
-            };
-        },
-        onRefresh() {
-            this.getData(true).then(() => {
-                this.isLoading = false;
-            });
-        }
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.page {
-    background-color: @bg3;
-}
-
-/deep/.van-tab {
-    margin-right: 0 !important;
-    flex-grow: 1 !important;
-}
-
-.van-list {
-    padding: 16px;
-    box-sizing: border-box;
-    min-height: calc(100vh - 94px);
-}
-
-.bottom {
-    padding: 9px 52px;
-    .bottom(9px);
-    background-color: #fff;
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    right: 0;
-}
-.message {
-    background: #ffffff;
-    border-radius: 8px;
-    padding: 12px 10px;
-    // margin: 8px;
-    display: block;
-    .top {
-        .flex();
-        .status {
-            background: rgba(255, 127, 31, 0.1);
-            border-radius: 4px;
-            padding: 0 10px;
-            font-size: 12px;
-            color: #ff7f1f;
-            line-height: 20px;
-            white-space: nowrap;
-
-            &.prim {
-                color: #3ab200;
-                background: rgba(58, 178, 0, 0.1);
-            }
-        }
-
-        .text {
-            font-size: 14px;
-            color: #000000;
-            line-height: 24px;
-            margin-left: 10px;
-        }
-    }
-
-    .time {
-        font-size: 12px;
-        color: #c8c9cc;
-        line-height: 17px;
-        margin-top: 10px;
-    }
-}
-.message + .message {
-    margin-top: 16px;
-}
-</style>

+ 0 - 222
src/views/account/MessageAdd.vue

@@ -1,222 +0,0 @@
-<template>
-    <div>
-        <van-form @submit="submit">
-            <van-field
-                class="textarea"
-                name="问题描述"
-                label="问题描述"
-                placeholder="请详细说明,以便于我们解决问题,您最多可填300字。"
-                v-model="form.detail"
-                clearable
-                rows="4"
-                autosize
-                required
-                type="textarea"
-                maxlength="300"
-                show-word-limit
-                :rules="[{ required: true, message: '请输入问题描述' }]"
-            />
-            <van-field name="uploader" required label="上传凭证" :rules="[{ required: true, message: '请上传凭证' }]">
-                <template #label>
-                    <div class="title">
-                        <span>上传凭证</span>
-                        <span>最多上传3张</span>
-                    </div>
-                </template>
-                <template #input>
-                    <van-uploader :max-count="3" v-model="form.pic" :after-read="afterRead" />
-                </template>
-            </van-field>
-            <div class="bottom">
-                <van-button round block type="primary" native-type="submit">提交</van-button>
-            </div>
-        </van-form>
-
-        <van-dialog v-model:show="show" @closed="closed" :showConfirmButton="false" closeOnClickOverlay>
-            <div class="dialog-box">
-                <img src="@assets/png-tijiaochenggong.png" alt="" />
-                <div class="dialog-title">提交成功</div>
-                <div class="dialog-text">
-                    感谢您的宝贵意见与建议,我们将于24小时内给您相关答案,感谢您的耐心,愿您有美好的一天!
-                </div>
-                <img src="@assets/close3.png" @click="show = false" class="close" alt="" />
-            </div>
-        </van-dialog>
-    </div>
-</template>
-
-<script>
-import Compressor from 'compressorjs';
-export default {
-    setup() {
-        const beforeRead = file =>
-            new Promise(resolve => {
-                // compressorjs 默认开启 checkOrientation 选项
-                // 会将图片修正为正确方向
-                new Compressor(file, {
-                    success: resolve,
-                    error(err) {
-                        console.log(err.message);
-                    }
-                });
-            });
-
-        return {
-            beforeRead
-        };
-    },
-    data() {
-        return {
-            form: {
-                detail: '',
-                pic: []
-            },
-            show: false
-        };
-    },
-    methods: {
-        closed() {
-            this.$router.back();
-        },
-        submit() {
-            this.$toast.loading({
-                message: '加载中...',
-                forbidClick: true
-            });
-            let form = { ...this.form };
-            form.pic = form.pic.map(item => {
-                return item.url;
-            });
-            this.$http
-                .post('/message/create', form, { body: 'json' })
-                .then(res => {
-                    this.$toast.clear();
-                    this.show = true;
-                })
-                .catch(e => {
-                    this.$toast(e.error);
-                });
-        },
-        afterRead(file, e) {
-            file.status = 'uploading';
-            this.updateFile(file, 'id', 1000).then(img => {
-                console.log(img);
-                file.url = img;
-                file.status = 'done';
-            });
-        }
-    }
-};
-</script>
-
-<style lang="less" scoped>
-/deep/.van-cell {
-    flex-direction: column;
-
-    .van-field__label {
-        color: #000000;
-        line-height: 24px;
-        margin-bottom: 10px;
-    }
-}
-/deep/.textarea {
-    .van-field__body {
-        background: #f5f7fa;
-        border-radius: 8px 8px 0 0;
-        padding: 10px;
-    }
-    .van-field__control {
-        font-size: 12px;
-    }
-
-    .van-field__word-limit {
-        font-size: 12px;
-        color: #c8c9cc;
-        line-height: 17px;
-        background: #f5f7fa;
-        margin-top: 0;
-        padding: 10px;
-        border-radius: 0 0 8px 8px;
-    }
-}
-
-/deep/ .van-uploader__upload {
-    border: 1px dashed #c8c9cc;
-    border-radius: 8px;
-    width: 100px;
-    height: 100px;
-}
-
-/deep/.van-uploader__preview-image {
-    border-radius: 8px;
-    width: 100px;
-    height: 100px;
-}
-
-.bottom {
-    padding: 9px 52px;
-    .bottom(9px);
-    position: fixed;
-    left: 0;
-    bottom: 0;
-    right: 0;
-    background-color: #fff;
-    border-top: 1px solid #f2f3f5;
-}
-
-/deep/.van-cell__title {
-    width: auto;
-}
-.title {
-    display: inline-block;
-    span {
-        font-size: 14px;
-        font-weight: normal;
-        color: #000000;
-        line-height: 24px;
-
-        &:nth-child(2) {
-            font-size: 12px;
-            color: #aaabad;
-            margin-left: 2px;
-        }
-    }
-}
-
-.dialog-box {
-    background: linear-gradient(180deg, #ffeddd 0%, #fff9f4 100%);
-    .flex-col();
-    align-items: center;
-    padding: 24px 16px;
-    position: relative;
-    img {
-        width: 128px;
-        display: block;
-    }
-    .dialog-title {
-        font-size: 16px;
-        font-weight: bold;
-        color: #000000;
-        line-height: 22px;
-        padding: 12px;
-    }
-    .dialog-text {
-        font-size: 14px;
-        color: #939599;
-        line-height: 20px;
-        text-align: center;
-    }
-
-    .close {
-        width: 24px;
-        height: 24px;
-        position: absolute;
-        right: 16px;
-        top: 16px;
-    }
-}
-
-/deep/.van-dialog {
-    width: 260px;
-}
-</style>

+ 0 - 158
src/views/account/MessageDetail.vue

@@ -1,158 +0,0 @@
-<template>
-    <div class="page">
-        <div class="message">
-            <div class="message-top">
-                <van-image round width="36" height="36" :src="userInfo.avatar" />
-                <div class="message-user">
-                    <div class="text1">{{ info.nickname }}</div>
-                    <div class="text2">{{ info.createdAt }}</div>
-                </div>
-            </div>
-            <div class="message-text">
-                {{ info.detail }}
-            </div>
-            <div class="message-imgs" v-if="info.pic && info.pic.length > 0">
-                <van-image
-                    width="66"
-                    height="66"
-                    v-for="(item, index) in info.pic"
-                    :key="index"
-                    :src="item"
-                    fit="cover"
-                    radius="8"
-                    @click="preview(index, info.pic)"
-                />
-            </div>
-        </div>
-
-        <div class="message" v-if="info.reply || (info.status && info.status !== 'PROCESSING')">
-            <div class="message-top">
-                <van-image round width="36" height="36" :src="require('@assets/icon_kefu.png')" />
-                <div class="message-user">
-                    <div class="text1">客服留言</div>
-                    <div class="text2">{{ info.repliedAt }}</div>
-                </div>
-                <div class="status">{{ getLabelName(info.status, statusOptions) || (info.reply ? '已反馈' : '') }}</div>
-            </div>
-            <div class="message-text">
-                {{ info.replyDetail }}
-            </div>
-            <div class="message-imgs" v-if="info.replyPic && info.replyPic.length > 0">
-                <van-image
-                    width="66"
-                    height="66"
-                    v-for="(item, index) in info.replyPic"
-                    :key="index"
-                    :src="item"
-                    fit="cover"
-                    radius="8"
-                    @click="preview(index, info.replyPic)"
-                />
-            </div>
-        </div>
-    </div>
-</template>
-
-<script>
-import { mapState } from 'vuex';
-import { ImagePreview } from 'vant';
-export default {
-    data() {
-        return {
-            id: 0,
-            info: {},
-            statusOptions: [
-                { label: '已完成', value: 'COMPLETED' },
-                { label: '处理中', value: 'PROCESSING' },
-                { label: '已反馈', value: 'REPLIED' },
-                { label: '未反馈', value: 'NO_REPLY' }
-            ]
-        };
-    },
-    computed: {
-        ...mapState(['userInfo'])
-    },
-    mounted() {
-        if (this.$route.query.id) {
-            this.id = this.$route.query.id;
-        }
-        this.getDetail();
-    },
-    methods: {
-        getDetail() {
-            this.$http.get('/message/get/' + this.id).then(res => {
-                this.info = res;
-            });
-        },
-        preview(index = 0, list = []) {
-            ImagePreview({
-                images: [...list],
-                startPosition: index
-            });
-        }
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.page {
-    background-color: @bg3;
-    padding: 16px;
-}
-
-.message {
-    background: #ffffff;
-    border-radius: 8px;
-    padding: 12px 10px;
-
-    .message-top {
-        position: relative;
-        .flex();
-
-        .message-user {
-            margin-left: 6px;
-            .text1 {
-                font-size: 14px;
-                color: #000000;
-                line-height: 20px;
-            }
-
-            .text2 {
-                font-size: 12px;
-                color: #878d99;
-                line-height: 17px;
-            }
-        }
-
-        .status {
-            font-size: 12px;
-            color: #3ab200;
-            line-height: 20px;
-            background: rgba(58, 178, 0, 0.1);
-            border-radius: 4px;
-            position: absolute;
-            right: 0;
-            top: 0;
-            padding: 0 10px;
-        }
-    }
-
-    .message-text {
-        font-size: 14px;
-        color: #000000;
-        line-height: 20px;
-        margin-top: 10px;
-    }
-
-    .message-imgs {
-        margin-top: 6px;
-        .flex();
-        .van-image + .van-image {
-            margin-left: 16px;
-        }
-    }
-}
-.message + .message {
-    margin-top: 16px;
-}
-</style>

+ 0 - 80
src/views/account/Question.vue

@@ -1,80 +0,0 @@
-<template>
-    <div class="page">
-        <div class="content">
-            <div>
-                <div class="align-center">常见问题</div>
-                <h6>1.什么是数字藏品?</h6>
-                <p>
-                    您好~数字藏品是使用区块链技术进行唯一标识的经数字化的特定作品、艺术品和商品,包括但不限于数字画作、图片、音乐、视频、3D模型等各种形式。数字藏品作为虚拟数字视频,而非实物,一经售出,不支持退换。每个数字藏品都映射着特定区块链上的唯一序列号,不可篡改、不可分割,也不能互相替代。每一个数字藏品都映射着特定作品、艺术品和商品或其限量发售的单个数字复制品,记录着其不可篡改的链上权利。因此数字藏品与虚拟货币等同质化代币存在本质的不同,有特定作品、艺术品和商品的实际价值做支撑。
-                </p>
-                <h6>2.购买的数字藏品有什么作用?</h6>
-                <p>您好~已购买的数字藏品是经过蚂蚁链确权,权属清晰、数量透明,永不增发的藏品,极具收藏价值。</p>
-                <h6>3.如何购买数字藏品?</h6>
-                <p>您好~购买步骤如下:</p>
-                <p>1)下载RAEX宇宙;</p>
-                <p>2)注册账号;</p>
-                <p>3)浏览首页/发现页中的商品;</p>
-                <p>4)点击“立即购买“,付款;</p>
-                <p>5)付款完成,在藏品室中“我拥有的”栏目下即可看到购买的数字藏品</p>
-                <h6>4.数字藏品是否可以退换?</h6>
-                <p>您好~数字藏品一经售出不支持退换。</p>
-                <h6>5.数字藏品是否可以售卖与转赠?</h6>
-                <p>您好~售卖与转赠功能将在后续开放,敬请期待。</p>
-                <h6>6.当我购买数字藏品,是否能获得实物?</h6>
-                <p>
-                    您好~数字藏品是使用蚂蚁区块链技术进行唯一标识的数字化的特定作品、艺术品和商品,在平台后期开放铸造功能时,可以铸造实物商品。
-                </p>
-            </div>
-        </div>
-    </div>
-</template>
-
-<script>
-import resolveUrl from 'resolve-url';
-export default {
-    data() {
-        return {
-            detail: ''
-        };
-    },
-    mounted() {
-        let page = this.$route.query.page || 'privacy';
-        this.$http.get(`/${page}.html`).then(res => {
-            let contents = res.split('<body>')[1].split('</body>');
-            this.detail = contents[0];
-        });
-    },
-    methods: {}
-};
-</script>
-
-<style lang="less" scoped>
-.page {
-    background-color: @bg3;
-    padding: 16px;
-}
-/deep/.content {
-    background: @bg;
-    border-radius: 8px;
-    padding: 16px;
-    .align-center {
-        font-size: @font3;
-        font-weight: bold;
-        text-align: center;
-        margin: 0;
-        padding-bottom: 10px;
-    }
-    p {
-        font-size: @font2;
-        margin: 6px 0 0;
-        color: @text3;
-    }
-
-    h4,
-    h5,
-    h6 {
-        font-size: @font2;
-        margin: 20px 0 0;
-    }
-}
-</style>

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

@@ -1,6 +1,5 @@
 <template>
 <template>
     <div class="page">
     <div class="page">
-        <div class="title">账户与安全</div>
         <van-cell-group :border="false">
         <van-cell-group :border="false">
             <van-cell title="修改登录密码" :to="{ path: '/forget' }" is-link />
             <van-cell title="修改登录密码" :to="{ path: '/forget' }" is-link />
             <van-cell title="修改支付密码" :to="{ path: '/tradingPassword' }" is-link />
             <van-cell title="修改支付密码" :to="{ path: '/tradingPassword' }" is-link />

+ 19 - 19
src/views/account/Waiting.vue

@@ -7,9 +7,7 @@
         </div>
         </div>
 
 
         <div class="btn" v-if="statusInfo.showBtn">
         <div class="btn" v-if="statusInfo.showBtn">
-            <van-button type="primary" block plain round @click="$router.replace('/Authentication')">
-                重新申请
-            </van-button>
+            <van-button type="primary" block round @click="$router.replace('/Authentication')"> 重新认证 </van-button>
         </div>
         </div>
     </div>
     </div>
 </template>
 </template>
@@ -20,26 +18,27 @@ export default {
     computed: {
     computed: {
         ...mapState(['userInfo']),
         ...mapState(['userInfo']),
         statusInfo() {
         statusInfo() {
-            if (this.userInfo && this.userInfo.authStatus) {
-                return { ...this.info }[this.userInfo.authStatus];
-            } else {
-                return this.info.PENDING;
-            }
+            return this.info.FAIL;
+            // if (this.userInfo && this.userInfo.authStatus) {
+            //     return { ...this.info }[this.userInfo.authStatus];
+            // } else {
+            //     return this.info.PENDING;
+            // }
         }
         }
     },
     },
     data() {
     data() {
         return {
         return {
             info: {
             info: {
                 PENDING: {
                 PENDING: {
-                    img: require('@assets/shenqing_shenhezhong.png'),
-                    title: '资料审核中',
+                    img: require('@assets/png-renzhengchenggong.png'),
+                    title: '身份验证成功',
                     sub: '平台将于3日内完成资料审核,平台内通知审核结果',
                     sub: '平台将于3日内完成资料审核,平台内通知审核结果',
                     showBtn: false
                     showBtn: false
                 },
                 },
                 FAIL: {
                 FAIL: {
-                    img: require('@assets/shenqing_weitongguo.png'),
-                    title: '资料审核失败',
-                    sub: '很遗憾,您的资料审核失败,请检查您填写的资料是否正确以及上传照片是否清晰',
+                    img: require('@assets/png-renzhengshibai.png'),
+                    title: '身份验证失败',
+                    sub: '很遗憾,您的认证失败,请检查您填写的资料是否正确',
                     showBtn: true
                     showBtn: true
                 }
                 }
             }
             }
@@ -58,25 +57,26 @@ export default {
     display: flex;
     display: flex;
     flex-direction: column;
     flex-direction: column;
     align-items: center;
     align-items: center;
-    padding: 50px;
+    padding: 50px 30px;
     background-color: @bg3;
     background-color: @bg3;
 
 
     .img {
     .img {
-        width: 110px;
+        width: 120px;
         display: block;
         display: block;
     }
     }
 
 
     .title {
     .title {
         font-size: 20px;
         font-size: 20px;
-        color: @text0;
+        color: #fff;
         line-height: 30px;
         line-height: 30px;
         margin-top: 38px;
         margin-top: 38px;
+        font-weight: bold;
     }
     }
     .sub {
     .sub {
-        font-size: 14px;
-        color: @text3;
+        font-size: 12px;
+        color: #6a6d83;
         line-height: 24px;
         line-height: 24px;
-        margin-top: 16px;
+        margin-top: 4px;
         text-align: center;
         text-align: center;
     }
     }
 
 

+ 112 - 0
src/views/user/Account.vue

@@ -0,0 +1,112 @@
+<template>
+    <div class="account">
+        <div class="account-top">
+            <van-image class="bg" width="100%" :src="require('@assets/account_bg.png')" fit="scale-down" />
+            <div class="account-content">
+                <van-image width="58" height="58" radius="2" :src="require('@assets/game_icon.png')" fit="cover" />
+                <div class="title">王者荣耀</div>
+                <div class="type-list">
+                    <div class="type prim">QQ区</div>
+                    <div class="type">微信区</div>
+                </div>
+            </div>
+        </div>
+
+        <div class="account-list">
+            <div class="account-not">已绑定0个账号</div>
+        </div>
+
+        <div class="bottom">
+            <van-button type="primary" block>绑定账号</van-button>
+        </div>
+
+        <band-accound></band-accound>
+    </div>
+</template>
+
+<script>
+import BandAccound from '../../components/BandAccound.vue';
+export default {
+    components: { BandAccound }
+};
+</script>
+
+<style lang="less" scoped>
+.account {
+    padding: 16px;
+}
+.account-top {
+    position: relative;
+    border-radius: 4px;
+    overflow: hidden;
+    .bg {
+        position: relative;
+        z-index: 0;
+    }
+    .account-content {
+        position: absolute;
+        z-index: 1;
+        top: 0;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        .flex-col();
+        justify-content: center;
+        align-items: center;
+        .title {
+            font-size: 14px;
+            font-weight: bold;
+            color: #ffffff;
+            line-height: 24px;
+            margin-top: 6px;
+        }
+        .type-list {
+            .flex();
+            width: 123px;
+            height: 24px;
+            background: #25283d;
+            border-radius: 2px;
+            overflow: hidden;
+            margin-top: 24px;
+            .type {
+                font-size: 12px;
+                color: #ffffff;
+                line-height: 24px;
+                width: 50%;
+                text-align: center;
+                border-radius: 2px;
+
+                &.prim {
+                    background: linear-gradient(225deg, #f6abf0 0%, #10f7ee 100%);
+                    color: #1a1c2b;
+                }
+            }
+        }
+    }
+}
+
+.account-list {
+    padding: 20px 0;
+
+    .account-not {
+        height: 56px;
+        background: #25283d;
+        border-radius: 4px;
+        line-height: 56px;
+        text-align: center;
+        font-size: 14px;
+        color: #ffffff;
+    }
+}
+
+.bottom {
+    padding: 9px 28px;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    .bottom(9px);
+    background-color: @bg;
+    z-index: 20;
+}
+</style>

+ 0 - 135
src/views/user/Address.vue

@@ -1,135 +0,0 @@
-<template>
-    <div class="address">
-        <div class="title" v-if="page !== 'submit'">我的地址</div>
-        <van-address-list
-            v-model="chooseId"
-            :class="{ emptyList: empty }"
-            :switchable="page === 'submit'"
-            :list="showList"
-            default-tag-text="默认"
-            @add="onAdd"
-            @edit="onEdit"
-            @select="selectItem"
-        />
-        <van-empty :image="require('@assets/kong_png_wudizhi.png')" v-if="empty" description="你还没有收货地址哦~">
-            <van-button @click="onAdd" round type="primary" class="bottom-button">新增地址</van-button>
-        </van-empty>
-    </div>
-</template>
-<script>
-export default {
-    data() {
-        return {
-            list: [],
-            empty: false,
-            page: '',
-            chooseId: ''
-        };
-    },
-    computed: {
-        showList() {
-            let list = [...this.list];
-
-            return list.map(item => {
-                return {
-                    id: item.id,
-                    name: item.name,
-                    tel: item.phone,
-                    address: `${item.provinceName} ${item.cityName} ${item.districtName} ${item.address}`,
-                    isDefault: item.def
-                };
-            });
-        }
-    },
-    mounted() {
-        if (this.$route.query.page) {
-            this.page = this.$route.query.page;
-        }
-        if (this.$route.query.chooseId) {
-            this.chooseId = this.$route.query.chooseId;
-        }
-        this.$http
-            .post(
-                '/userAddress/all',
-                {
-                    query: {
-                        userId: this.$store.state.userInfo.id,
-                        del: false
-                    },
-                    size: 99
-                },
-                { body: 'json' }
-            )
-            .then(res => {
-                this.empty = res.empty;
-                this.list = res.content;
-            });
-    },
-    methods: {
-        onAdd() {
-            this.$router.push('/mineAddressEdit');
-        },
-        onEdit(info) {
-            this.$router.push('/mineAddressEdit?id=' + info.id);
-        },
-        selectItem(info, index) {
-            this.$router.go(-1);
-            this.emitter.emit('updateChoose', this.list[index]);
-        }
-    }
-};
-</script>
-<style lang="less" scoped>
-.address {
-    padding-bottom: 100px;
-    box-sizing: border-box;
-    background-color: @bg3;
-}
-
-.title {
-    font-size: 20px;
-    font-weight: bold;
-    color: @text0;
-    line-height: 30px;
-    padding: 10px 10px;
-    background-color: @bg;
-}
-
-/deep/.van-address-item {
-    background-color: @bg;
-    .van-tag--danger {
-        background-color: transparent;
-        color: @prim;
-        border: 1px solid @prim;
-    }
-}
-
-/deep/.van-address-list__bottom {
-    background-color: @bg;
-    padding-left: 48px;
-    padding-right: 48px;
-
-    .van-button--danger {
-        background: linear-gradient(135deg, @prim 0%, @prim 100%);
-        border-width: 0;
-        color: @bg;
-        font-weight: bold;
-    }
-}
-
-.bottom-button {
-    width: 280px;
-    height: 38px;
-}
-
-/deep/.emptyList {
-    .van-address-list__bottom {
-        display: none;
-    }
-}
-
-/deep/.van-address-item .van-radio__icon--checked .van-icon {
-    background-color: @prim;
-    border-color: @prim;
-}
-</style>

+ 0 - 149
src/views/user/AddressEdit.vue

@@ -1,149 +0,0 @@
-<template>
-    <div class="address">
-        <van-address-edit
-            :area-list="areaList"
-            :address-info="addressInfo"
-            show-set-default
-            show-search-result
-            :tel-validator="val => phonePattern.test(val)"
-            :search-result="searchResult"
-            :area-columns-placeholder="['请选择', '请选择', '请选择']"
-            @save="onSave"
-            @delete="onDelete"
-            @change-detail="onChangeDetail"
-            :show-delete="isEdit"
-        />
-
-        <div class="back-list" v-if="!isEdit">
-            <van-button color="@text3" @click="$router.go(-1)" round block plain>返回</van-button>
-        </div>
-    </div>
-</template>
-
-<script>
-import { areaList } from '@vant/area-data';
-import phone from '../../mixins/phone';
-export default {
-    mixins: [phone],
-    data() {
-        return {
-            searchResult: [],
-            areaList,
-            addressInfo: {},
-            isEdit: false
-        };
-    },
-    mounted() {
-        if (this.$route.query.id) {
-            this.isEdit = true;
-            this.$http.get('/userAddress/get/' + this.$route.query.id).then(res => {
-                this.addressInfo = {
-                    id: res.id,
-                    userId: res.userId,
-                    isDefault: res.def,
-                    name: res.name,
-                    tel: res.phone,
-                    addressDetail: res.address,
-                    province: res.provinceName,
-                    city: res.cityName,
-                    county: res.districtName,
-                    areaCode: res.districtId
-                };
-            });
-        } else {
-            this.isEdit = false;
-        }
-    },
-    methods: {
-        onSave(content) {
-            this.$toast.loading({
-                message: '加载中...',
-                forbidClick: true
-            });
-            let form = {
-                userId: this.$store.state.userInfo.id,
-                provinceName: content.province,
-                cityName: content.city,
-                districtName: content.county,
-                districtId: content.areaCode,
-                def: content.isDefault,
-                name: content.name,
-                phone: content.tel,
-                address: content.addressDetail
-            };
-            if (content.id) {
-                form.id = content.id;
-            }
-            this.$http.post('/userAddress/save', form, { body: 'json' }).then(() => {
-                this.$toast.success('保存成功');
-                setTimeout(() => {
-                    this.$router.go(-1);
-                }, 1500);
-            });
-        },
-        onDelete(content) {
-            this.$toast.loading({
-                message: '加载中...',
-                forbidClick: true
-            });
-            this.$http.post('/userAddress/del/' + content.id).then(res => {
-                this.$toast.success('删除成功');
-                setTimeout(() => {
-                    this.$router.go(-1);
-                }, 1500);
-            });
-        },
-        onChangeDetail(val) {
-            console.log(val);
-        }
-    }
-};
-</script>
-<style lang="less" scoped>
-.address {
-    background-color: @bg3;
-}
-/deep/.van-cell {
-    background-color: @bg;
-
-    .van-switch {
-        background-color: #f2f4f5;
-        .van-switch__node {
-            background-color: #fff;
-        }
-    }
-
-    .van-switch--on {
-        background-color: @prim;
-        .van-switch__node {
-            background-color: @bg;
-        }
-    }
-}
-/deep/.van-field__label {
-    color: #000;
-}
-/deep/.van-address-edit__buttons {
-    padding: 50px 32px;
-    .van-button--danger {
-        background: linear-gradient(135deg, @prim 0%, @prim 100%);
-        border-width: 0;
-        color: #fff;
-        font-weight: bold;
-    }
-    .van-button--default {
-        background-color: transparent;
-        border-color: #fff;
-        font-weight: bold;
-    }
-}
-.back-list {
-    margin: -60px 48px 0;
-    .van-button {
-        color: @text3!important;
-    }
-}
-/deep/.van-address-edit__buttons .van-button--default {
-    border-color: @text3;
-}
-</style>

+ 0 - 202
src/views/user/Banks.vue

@@ -1,202 +0,0 @@
-<template>
-    <div class="page">
-        <page-bar>我的银行卡</page-bar>
-
-        <div class="add" @click="add" v-if="list.length === 0">
-            <img src="@assets/png-tianjia.png" alt="" />
-            <span>添加银行卡</span>
-        </div>
-
-        <div class="list">
-            <van-swipe-cell :name="index" v-for="(item, index) in list" :key="index" :before-close="beforeClose">
-                <div class="bank-info" :style="{ background: getColor(item.bankNo) }">
-                    <div class="info1">
-                        <div class="text1">{{ item.bankName }}</div>
-                        <div class="text2">{{ getNum(item.bankNo) }}</div>
-                    </div>
-                    <div class="info2">{{ item.cardTypeDesc }}</div>
-                    <img src="../../assets/png-ka.png" class="card-bg" alt="" />
-                </div>
-                <template #right>
-                    <van-button
-                        :icon="require('../../assets/icon_jiebang.png')"
-                        text="解绑"
-                        type="danger"
-                        class="delete-button"
-                    />
-                </template>
-            </van-swipe-cell>
-        </div>
-    </div>
-</template>
-
-<script>
-import { mapState } from 'vuex';
-export default {
-    data() {
-        return {
-            colorList: ['#6b73a1', '#ea4f56', '#36a0b9', '#f79439']
-        };
-    },
-    created() {
-        this.getBank();
-    },
-    computed: {
-        ...mapState(['bankCard']),
-        list() {
-            return this.bankCard ? [this.bankCard] : [];
-        }
-    },
-    methods: {
-        getColor(bank) {
-            const cyrb53 = function (str, seed = 0) {
-                let h1 = 0xdeadbeef ^ seed,
-                    h2 = 0x41c6ce57 ^ seed;
-                for (let i = 0, ch; i < str.length; i++) {
-                    ch = str.charCodeAt(i);
-                    h1 = Math.imul(h1 ^ ch, 2654435761);
-                    h2 = Math.imul(h2 ^ ch, 1597334677);
-                }
-                h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
-                h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
-                return 4294967296 * (2097151 & h2) + (h1 >>> 0);
-            };
-            if (bank) {
-                console.log(cyrb53(bank));
-                return this.colorList[cyrb53(bank) % 4];
-            }
-            return this.colorList[0];
-        },
-        getBank() {
-            this.$store.dispatch('getBankCard', true);
-        },
-        add() {
-            this.checkAuth().then(() => {
-                this.$router.push('/mineBanksAdd');
-            });
-        },
-        getNum(No) {
-            return '**** ' + No.substr(-4, 4);
-        },
-        beforeClose({ position, name }) {
-            console.log(name);
-            console.log(position);
-            if (position === 'right') {
-                return new Promise(resolve => {
-                    this.$dialog
-                        .confirm({
-                            title: '确定解绑该银行卡吗?'
-                        })
-                        .then(() => {
-                            this.cancelBank();
-                            resolve(true);
-                        })
-                        .catch(() => {
-                            resolve(true);
-                        });
-                });
-            } else {
-                return true;
-            }
-        },
-        cancelBank() {
-            this.$toast.loading({
-                message: '加载中...',
-                forbidClick: true
-            });
-            this.$http
-                .post('/userBankCard/unbind')
-                .then(res => {
-                    this.$toast.success('解绑成功');
-                    this.getBank();
-                })
-                .catch(e => {
-                    this.$toast(e.error);
-                });
-        }
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.page {
-    background-color: @bg3;
-}
-.add {
-    .flex-col();
-    padding: 60px 0;
-    align-items: center;
-
-    img {
-        width: 54px;
-        height: 54px;
-    }
-
-    span {
-        font-size: 14px;
-        color: @text0;
-        line-height: 24px;
-        margin-top: 17px;
-    }
-}
-.list {
-    padding: 20px 16px;
-}
-.van-swipe-cell {
-    /deep/.van-swipe-cell__right {
-        padding: 30px 0 30px 16px;
-        box-sizing: border-box;
-        display: flex;
-    }
-    .delete-button {
-        width: 40px;
-        height: 40px;
-        border-radius: 20px;
-        padding: 0;
-        /deep/.van-button__content {
-            display: flex;
-            flex-direction: column;
-            .van-button__icon {
-                font-size: 18px;
-            }
-            .van-button__text {
-                margin-left: 0;
-                font-size: 12px;
-                transform: scale(0.8);
-            }
-        }
-    }
-}
-.van-swipe-cell + .van-swipe-cell {
-    margin-top: 16px;
-}
-@colorList: #6b73a1, #ea4f56, #36a0b9, #f79439;
-.bank-info {
-    color: #fff;
-    border-radius: 8px;
-    height: 100px;
-    .flex-col();
-    // margin: 20px 16px;
-    justify-content: center;
-    padding: 0 10px;
-    position: relative;
-    .card-bg {
-        width: 166px;
-        height: 68px;
-        position: absolute;
-        right: 0;
-        bottom: 0;
-        z-index: 0;
-    }
-
-    .info1 {
-        .flex();
-        justify-content: space-between;
-        font-size: @font2;
-        line-height: 24px;
-    }
-    .info2 {
-        font-size: @font1;
-    }
-}
-</style>

+ 0 - 277
src/views/user/BanksAdd.vue

@@ -1,277 +0,0 @@
-<template>
-    <div class="page">
-        <page-bar>
-            添加银行卡
-            <template #sub>成功绑定银行卡后</template>
-            <template #sub-prim>不能修改</template>
-        </page-bar>
-        <van-form @submit="onSubmit" class="form">
-            <van-field class="name" type="digit" name="持卡人" label="持卡人" :maxlength="23" v-model="name" disabled />
-            <van-field
-                type="digit"
-                name="卡号"
-                label="卡号"
-                :maxlength="23"
-                placeholder="点击输入银行卡号"
-                :formatter="bankFormatter"
-                v-model="form.bankNo"
-                clearable
-                :rules="[{ required: true, message: '请填写银行卡号' }]"
-            />
-            <van-field
-                type="tel"
-                name="银行预留手机号"
-                label="银行预留手机号"
-                placeholder="请输入银行预留手机号"
-                v-model="form.phone"
-                :rules="[
-                    { required: true, message: '请填写银行预留手机号' },
-                    {
-                        pattern: phonePattern,
-                        message: '手机号码格式错误'
-                    }
-                ]"
-            />
-            <div class="sub">
-                <van-button type="primary" :disabled="!canNext" round block native-type="submit">下一步</van-button>
-            </div>
-        </van-form>
-
-        <phone-code ref="code" @onSubmit="onSubmit" @bind="bind"></phone-code>
-    </div>
-</template>
-
-<script>
-import phoneCode from '../../components/phoneCode.vue';
-import phone from '../../mixins/phone';
-export default {
-    components: { phoneCode },
-    mixins: [phone],
-    data() {
-        return {
-            form: {},
-            show: false,
-            identityAuthInfo: {},
-            bindCardId: 0
-        };
-    },
-    computed: {
-        name() {
-            let name = '';
-            if (this.identityAuthInfo.realName) {
-                for (let i = 0; i < this.identityAuthInfo.realName.length - 1; i++) {
-                    name += '*';
-                }
-            }
-
-            name += (this.identityAuthInfo.realName || '').slice(-1);
-            return name;
-        },
-        canNext() {
-            return this.form.bankNo && this.form.phone;
-        },
-        phoneText() {
-            let phone = this.form.phone || '';
-            if (phone.length === 11) {
-                return phone.substr(0, 3) + '****' + phone.substr(-4, 4);
-            }
-
-            return '';
-        }
-    },
-    mounted() {
-        this.$http.post('/identityAuth/my').then(res => {
-            this.identityAuthInfo = res;
-        });
-    },
-    methods: {
-        onSubmit(e) {
-            if (!this.checkWebDriver(e)) {
-                return;
-            }
-            this.$toast.loading({
-                message: '加载中...',
-                forbidClick: true
-            });
-            let bankNo = this.form.bankNo.replace(/ /g, '');
-            this.$http
-                .post('/userBankCard/bindCard?phone=' + this.form.phone + '&bankNo=' + bankNo)
-                .then(res => {
-                    this.bindCardId = res.bindCardId;
-                    this.$toast.success('发送成功');
-                    this.$refs.code.init();
-                    // return this.$http.post('/userBankCard/bindCardCaptcha?bindCardId=' + res.bindCardId);
-                })
-                .catch(e => {
-                    if (e.error.indexOf('渠道系统异常') !== -1) {
-                        this.$toast('暂不支持该银行');
-                    } else {
-                        this.$toast(e.error);
-                    }
-                });
-        },
-        bind(code) {
-            this.$toast.loading({
-                message: '加载中...',
-                forbidClick: true
-            });
-            let bankNo = this.form.bankNo.replace(/ /g, '');
-            this.$http
-                .post(`/userBankCard/bindCardConfirm?bindCardId=${this.bindCardId}&code=${code}`)
-                .then(res => {
-                    this.$toast.success('添加成功');
-                    setTimeout(() => {
-                        this.$router.go(-1);
-                    }, 1000);
-                })
-                .catch(e => {
-                    if (e) {
-                        this.$toast(e.error);
-                    }
-                });
-        },
-        bankFormatter(val) {
-            let _val = val.replace(/ /g, '');
-            _val = _val.split('');
-            let vals = [];
-            _val.forEach((item, index) => {
-                vals.push(item);
-                if ((index - 2) % 4 === 0 && index !== _val.length - 1) {
-                    vals.push(' ');
-                }
-            });
-            return vals.join('');
-        }
-    }
-};
-</script>
-
-<style lang="less" scoped>
-/deep/.form {
-    .van-cell {
-        .flex-col();
-
-        .van-field__label {
-            width: auto;
-        }
-
-        .van-field__body {
-            line-height: 48px;
-            border-radius: 8px;
-            border: 1px solid @text3;
-            padding: 0 16px;
-            margin-top: 6px;
-
-            .van-field__control {
-                font-size: @font1;
-            }
-        }
-
-        .van-field__error-message {
-            margin-top: 6px;
-        }
-    }
-}
-.sub {
-    margin: 60px 48px;
-}
-@bottom: 280px;
-@gray3: #c8c9cc;
-@text3: #939599;
-.popup {
-    color: #000;
-    position: relative;
-    padding-bottom: calc(@bottom+ constant(safe-area-inset-bottom));
-    padding-bottom: calc(@bottom + env(safe-area-inset-bottom));
-    .title {
-        text-align: center;
-        font-size: @font3;
-        padding: 20px 0;
-        border-bottom: 1px solid #c8c9cc;
-    }
-
-    .cancel {
-        position: absolute;
-        font-size: @font1;
-        font-family: PingFangSC-Regular, PingFang SC;
-        font-weight: 400;
-        color: @text3;
-        line-height: 22px;
-        padding: 21px 20px;
-        left: 0;
-        top: 0;
-    }
-
-    .send {
-        position: absolute;
-        font-size: @font1;
-        font-family: PingFangSC-Regular, PingFang SC;
-        font-weight: 400;
-        color: @text3;
-        line-height: 22px;
-        padding: 21px 20px;
-        right: 0;
-        top: 0;
-        text-decoration: underline;
-    }
-
-    .phone {
-        padding: 12px 0 20px;
-        text-align: center;
-        font-size: 12px;
-        color: #aaabad;
-        line-height: 24px;
-    }
-
-    /deep/.van-password-input {
-        margin: 0 80px;
-    }
-
-    /deep/.van-key {
-        &:hover {
-            background-color: @gray3;
-        }
-        &:focus {
-            background-color: @gray3;
-        }
-        &:active {
-            background-color: @gray3;
-        }
-        &:link {
-            background-color: @gray3;
-        }
-        &:visited {
-            background-color: @gray3;
-        }
-
-        &.van-key--active {
-            background-color: @gray3;
-        }
-    }
-
-    /deep/[class*='van-hairline']::after {
-        border-color: @gray3;
-    }
-
-    /deep/.van-key--blue {
-        background: linear-gradient(135deg, @prim 0%, @warn 100%);
-        color: @btnText;
-    }
-}
-
-/deep/.name {
-    .van-field__body {
-        border-top-width: 0 !important;
-        border-left-width: 0 !important;
-        border-right-width: 0 !important;
-        border-color: #f5f7fa !important;
-        border-radius: 0 !important;
-        padding: 0 0 !important;
-    }
-    .van-field__control:disabled {
-        font-size: 16px !important;
-        color: #000;
-        -webkit-text-fill-color: #000;
-    }
-}
-</style>

+ 64 - 0
src/views/user/Collections.vue

@@ -0,0 +1,64 @@
+<template>
+    <div class="page">
+        <div class="collection-info">
+            <van-image
+                width="64"
+                height="64"
+                radius="4px"
+                fit="cover"
+                src="https://fastly.jsdelivr.net/npm/@vant/assets/cat.jpeg"
+            />
+            <div class="collection-content">
+                <div class="text1">藏品名称藏品名称</div>
+                <div class="text2">兑换账户:188617287287</div>
+                <div class="text2">消耗绿洲石:200个</div>
+            </div>
+            <div class="status">已发放</div>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {};
+</script>
+
+<style lang="less" scoped>
+.page {
+    padding: 16px;
+}
+.collection-info {
+    padding: 12px;
+    background-color: @bg2;
+    position: relative;
+    .flex();
+    .collection-content {
+        flex-grow: 1;
+        margin-left: 10px;
+        .text1 {
+            font-size: 14px;
+            color: #ffffff;
+            line-height: 24px;
+        }
+        .text2 {
+            font-size: 12px;
+            color: #6a6d83;
+            line-height: 17px;
+            margin-top: 2px;
+        }
+    }
+
+    .status {
+        width: 68px;
+        height: 18px;
+        background: #5464e6;
+        border-radius: 0px 4px 0px 4px;
+        font-size: 12px;
+        color: #ffffff;
+        line-height: 18px;
+        text-align: center;
+        position: absolute;
+        top: 0;
+        right: 0;
+    }
+}
+</style>

+ 0 - 303
src/views/user/Exchange.vue

@@ -1,303 +0,0 @@
-<template>
-    <van-pull-refresh
-        success-text="加载成功"
-        success-duration="500"
-        class="search"
-        v-model="isLoading"
-        :head-height="80"
-        @refresh="onRefresh"
-    >
-        <van-sticky>
-            <div class="tabs">
-                <div class="tab-item" :class="{ active: status == 'sale' }" @click="changeBuy('sale')">价值证明</div>
-                <div class="tab-item" :class="{ active: status == 'buy' }" @click="changeBuy('buy')">支付记录</div>
-                <div class="tab-item" :class="{ active: status == 'destory' }" @click="changeBuy('destory')">
-                    销毁记录
-                </div>
-            </div>
-        </van-sticky>
-        <div class="bg" v-if="status !== 'buy'">
-            <van-image width="100%" :src="require('../../assets/img11.png')" fit="scale-down" />
-            <div class="total-price">
-                <div class="text1">{{ title }}</div>
-                <div class="text2">{{ total }}</div>
-            </div>
-        </div>
-        <div class="tab-title">{{ getLabelName(status, statusOptions) }}记录</div>
-        <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="getData">
-            <template v-for="(item, index) in list" :key="index">
-                <div class="exchange" v-if="status === 'destory'">
-                    <div class="text1">获得积分</div>
-                    <div class="price">+{{ item.record }}</div>
-                    <div class="product">
-                        <van-image width="32" height="32" radius="4" :src="item.pic" fit="cover" />
-
-                        <div class="flex1">
-                            <div class="text2">{{ item.name }}</div>
-                            <div class="text2">
-                                <span>{{ item.createdAt }}</span>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="exchange" v-else>
-                    <div class="text1">{{ item.description }}</div>
-                    <div class="price">
-                        {{ isLogin && item.toUserId == $store.state.userInfo.id ? '-' : '+' }}{{ item.price || 0 }}
-                    </div>
-                    <div class="product">
-                        <van-image width="32" height="32" radius="4" :src="getImg(changeImgs(item.pic))" fit="cover" />
-
-                        <div class="flex1">
-                            <div class="text2">{{ item.assetName }}</div>
-                            <div class="text2">
-                                <span>{{ item.createdAt }}</span>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="text3">
-                        <span>来源:{{ item.fromUser }}</span> <span>去向 :{{ item.toUser }}</span>
-                    </div>
-                </div>
-            </template>
-
-            <van-empty v-if="empty" description="暂无交易历史哦~" :image="require('@assets/kong_png_wusousuo.png')" />
-        </van-list>
-    </van-pull-refresh>
-</template>
-
-<script>
-import list from '../../mixins/list';
-import product from '../../mixins/product';
-export default {
-    name: 'Search',
-    mixins: [list, product],
-    data() {
-        return {
-            list: [],
-            empty: false,
-            isBuy: false,
-            info: {},
-            status: 'sale',
-            statusOptions: [
-                {
-                    label: '出售',
-                    value: 'sale'
-                },
-                {
-                    label: '购买',
-                    value: 'buy'
-                },
-                {
-                    label: '销毁',
-                    value: 'destory'
-                }
-            ]
-        };
-    },
-    computed: {
-        url() {
-            if (this.status === 'destory') {
-                return '/destroyRecord/my';
-            } else {
-                return '/asset/userHistory';
-            }
-        },
-        httpType() {
-            if (this.status === 'destory') {
-                return 'post';
-            } else {
-                return 'get';
-            }
-        },
-        total() {
-            if (this.status === 'sale') {
-                return this.info.sale;
-            } else if (this.status === 'buy') {
-                return this.info.buy;
-            } else {
-                return this.$store.state.userInfo.destroyPoint;
-            }
-        },
-        title() {
-            if (this.status === 'destory') {
-                return '总积分';
-            } else {
-                return `累计${this.getLabelName(this.status, this.statusOptions)}(元)`;
-            }
-        }
-    },
-    mounted() {
-        this.getMoeny();
-    },
-    methods: {
-        getMoeny() {
-            this.$http.get('/asset/breakdown').then(res => {
-                this.info = res;
-            });
-        },
-        changeBuy(status) {
-            this.status = status;
-            this.getData(true);
-        },
-        beforeData() {
-            if (this.status == 'buy') {
-                return {
-                    query: {
-                        toUserId: this.$store.state.userInfo.id
-                    }
-                };
-            } else if (this.status == 'sale') {
-                return {
-                    query: {
-                        fromUserId: this.$store.state.userInfo.id
-                        // operation: '转让,转赠'
-                    }
-                };
-            } else if (this.status == 'destory') {
-                return {
-                    query: {
-                        fromUserId: this.$store.state.userInfo.id,
-                        operation: '销毁'
-                    }
-                };
-            }
-        },
-        onRefresh() {
-            this.getMoeny();
-            this.getData(true).then(() => {
-                this.isLoading = false;
-            });
-        }
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.exchange {
-    padding: 14px 16px 15px;
-    position: relative;
-    .text1 {
-        font-size: 14px;
-        color: @text0;
-        line-height: 20px;
-    }
-
-    .van-ellipsis {
-        margin-bottom: 2px;
-    }
-    border-top: 1px solid #f2f4f5;
-
-    .top {
-        .flex();
-        justify-content: space-between;
-        overflow: hidden;
-    }
-    .text2 {
-        max-width: 60vw;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-        min-width: 0;
-        font-size: 12px;
-        color: #969799;
-        line-height: 17px;
-    }
-    .product {
-        .van-image {
-            flex-shrink: 0;
-        }
-        .flex();
-        overflow: hidden;
-        margin-top: 5px;
-        .flex1 {
-            min-width: 0;
-            overflow: hidden;
-            margin: 0 16px 0 5px;
-        }
-    }
-
-    .price {
-        font-size: 16px;
-        font-weight: bold;
-        color: #d3b374;
-        line-height: 24px;
-        position: absolute;
-        right: 16px;
-        top: 10px;
-    }
-}
-.tabs {
-    .flex();
-    .tab-item {
-        line-height: 50px;
-        flex-grow: 1;
-        background: #d3b374;
-        font-size: 14px;
-        color: #f5f7fa;
-        text-align: center;
-        position: relative;
-
-        &.active {
-            color: #fff;
-            font-weight: bold;
-            &::after {
-                content: '';
-                width: 16px;
-                height: 2px;
-                background: #ffffff;
-                border-radius: 2px;
-                position: absolute;
-                left: 50%;
-                bottom: 8px;
-                transform: translateX(-50%);
-            }
-        }
-    }
-}
-.tab-title {
-    padding: 12px 16px 12px;
-    font-size: 14px;
-    color: @text3;
-    line-height: 24px;
-}
-.bg {
-    background-color: #d3b374;
-    padding-top: 10px;
-    .van-image {
-        display: block;
-    }
-    position: relative;
-    .total-price {
-        position: absolute;
-        top: 50%;
-        left: 50%;
-        transform: translate(-50%, -50%);
-        color: #fff;
-        .text1 {
-            font-size: 12px;
-            color: #ffffff;
-            line-height: 17px;
-            text-align: center;
-        }
-        .text2 {
-            font-size: 32px;
-            font-family: OSP-DIN, OSP;
-            color: #ffffff;
-            line-height: 32px;
-            margin-top: 5px;
-            text-align: center;
-        }
-    }
-}
-
-.text3 {
-    font-size: 12px;
-    color: @text3;
-    line-height: 17px;
-    margin-top: 6px;
-    span + span {
-        margin-left: 20px;
-    }
-}
-</style>

+ 0 - 71
src/views/user/Followers.vue

@@ -1,71 +0,0 @@
-<template>
-    <div class="follow">
-        <van-sticky :offset-top="bar && bar.show ? bar.height : 0">
-            <div class="top">
-                <div class="name">我的粉丝</div>
-            </div>
-        </van-sticky>
-        <div class="list">
-            <template v-for="(item, index) in list" :key="index">
-                <creator-info isFollow v-model:info="list[index]"></creator-info>
-            </template>
-            <van-empty v-if="empty" description="你还没有粉丝哦~" :image="require('@assets/kong_png_fensi.png')" />
-        </div>
-    </div>
-</template>
-
-<script>
-import CreatorInfo from '../../components/creator/CreatorInfo.vue';
-export default {
-    components: { CreatorInfo },
-    inject: ['bar'],
-    data() {
-        return {
-            list: [],
-            empty: false
-        };
-    },
-    mounted() {
-        this.$toast.loading({
-            message: '加载中...',
-            forbidClick: true
-        });
-        this.empty = false;
-        this.$http.get('/user/myFollowers').then(res => {
-            this.list = res;
-            this.empty = res.length === 0;
-            this.$toast.clear();
-        });
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.follow {
-    background-color: @bg3;
-}
-.top {
-    background-color: @bg;
-    padding: 0 16px;
-    height: 50px;
-    display: flex;
-    align-items: center;
-    .name {
-        font-size: 20px;
-        font-weight: bold;
-        color: @text0;
-        line-height: 30px;
-    }
-}
-.info {
-    background-color: @bg;
-
-    /deep/.van-button--mini {
-        background-image: linear-gradient(@bg, @bg), linear-gradient(135deg, @prim, @warn) !important;
-
-        &.follow {
-            background-image: linear-gradient(@bg, @bg), linear-gradient(135deg, @text3, @text3) !important;
-        }
-    }
-}
-</style>

+ 0 - 87
src/views/user/Follows.vue

@@ -1,87 +0,0 @@
-<template>
-    <div class="follow">
-        <van-sticky :offset-top="bar && bar.show ? bar.height : 0">
-            <div class="top">
-                <div class="name">我关注的</div>
-            </div>
-        </van-sticky>
-        <div class="list">
-            <template v-for="(item, index) in list" :key="index">
-                <creator-info v-model:info="list[index]" @update:info="init"></creator-info>
-            </template>
-            <van-empty
-                v-if="empty"
-                description="你还没有关注别人哦~"
-                :image="require('@assets/kong_png_gaunzhu.png')"
-            />
-        </div>
-    </div>
-</template>
-
-<script>
-import CreatorInfo from '../../components/creator/CreatorInfo.vue';
-export default {
-    components: { CreatorInfo },
-    inject: ['bar'],
-    data() {
-        return {
-            list: [],
-            empty: false
-        };
-    },
-    computed: {
-        showList() {
-            return [...this.list].filter(item => {
-                return item.follow;
-            });
-        }
-    },
-    mounted() {
-        this.init();
-    },
-    methods: {
-        init() {
-            this.$toast.loading({
-                message: '加载中...',
-                forbidClick: true
-            });
-            this.empty = false;
-            this.$http.get('/user/myFollows').then(res => {
-                this.list = res;
-                this.empty = res.length === 0;
-                this.$toast.clear();
-            });
-        }
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.follow {
-    background-color: @bg3;
-}
-.top {
-    background-color: @bg;
-    padding: 0 16px;
-    height: 50px;
-    display: flex;
-    align-items: center;
-    .name {
-        font-size: 20px;
-        font-weight: bold;
-        color: @text0;
-        line-height: 30px;
-    }
-}
-.info {
-    background-color: @bg;
-
-    /deep/.van-button--mini {
-        background-image: linear-gradient(@bg, @bg), linear-gradient(135deg, @prim, @warn) !important;
-
-        &.follow {
-            background-image: linear-gradient(@bg, @bg), linear-gradient(135deg, @text3, @text3) !important;
-        }
-    }
-}
-</style>

+ 0 - 226
src/views/user/Level.vue

@@ -1,226 +0,0 @@
-<template>
-    <div class="level">
-        <div class="level-title">
-            <div class="text1">RAEX宇宙元力等级系统</div>
-            <div class="text2">
-                在RAEX宇宙中使用绿洲石,绿洲石将会产生元力,元力是绿洲藏家晋升之路的基础。元力越高,境界与头衔越高。
-            </div>
-        </div>
-        <level-card :levelInfo="levelInfo" :isMore="isMore" :money="money"></level-card>
-        <div class="level-title">
-            <div class="text1">勋章展示</div>
-            <div class="text2">10级以上(包含10级)将会获得勋章奖励,最高等级Lv99</div>
-        </div>
-        <template v-if="showSwiper">
-            <swiper
-                :initialSlide="prevIndex"
-                :options="swiperOption"
-                slidesPerView="auto"
-                :spaceBetween="16"
-                class="box-swiper"
-            >
-                <template v-for="(item, index) in medals" :key="index">
-                    <swiper-slide
-                        class="box"
-                        :style="{
-                            background: `linear-gradient(180deg, ${item.startColor} 0%, ${item.endColor} 100%)`
-                        }"
-                        v-if="!item.hide"
-                    >
-                        <van-image
-                            class="box-bg-img"
-                            :src="require('../../assets/diwen-gongyong-png.png')"
-                            width="88"
-                            height="100"
-                        />
-
-                        <div class="box-content">
-                            <div class="box-bg">
-                                <van-image width="40" height="40" :src="item.icon" />
-                                <span class="text1" :style="{ color: item.color }">**</span>
-                            </div>
-                            <div class="box-text" :style="{ color: item.color }">Lv{{ item.start }}-{{ item.end }}</div>
-                        </div>
-                    </swiper-slide>
-                </template>
-            </swiper>
-        </template>
-
-        <div class="table-title">元力级别详情</div>
-
-        <div class="table">
-            <div class="tr">
-                <div class="th">元力级别</div>
-                <div class="th">境界</div>
-                <div class="th">头衔</div>
-            </div>
-
-            <div class="tr" v-for="(item, index) in levels" :key="index">
-                <div class="td">
-                    Lv{{ item.endLevel !== 0 ? item.startLevel + '~' : item.startLevel }} {{ item.endLevel || '' }}级
-                </div>
-                <div class="td">{{ item.realm || '/' }}</div>
-                <div class="td">{{ item.title }}</div>
-            </div>
-        </div>
-    </div>
-</template>
-
-<script>
-import { Swiper, SwiperSlide } from 'swiper/vue';
-import 'swiper/swiper.min.css';
-import 'swiper/swiper-bundle.min.css';
-import level from '../../mixins/level';
-import LevelCard from '../../components/level/LevelCard';
-import SwiperCore from 'swiper';
-
-// install Swiper modules
-export default {
-    data() {
-        return {
-            swiperOption: {
-                on: {
-                    init: swiper => {
-                        console.log(swiper);
-                    }
-                }
-            }
-        };
-    },
-    computed: {
-        prevIndex() {
-            return this.levelInfo.level ? Math.floor(this.levelInfo.level / 10) - 1 : 0;
-        }
-    },
-    mixins: [level],
-    components: {
-        Swiper,
-        SwiperSlide,
-        LevelCard
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.level-title {
-    padding: 10px 16px;
-    .text1 {
-        font-size: 14px;
-        font-weight: bold;
-        color: #000000;
-        line-height: 24px;
-    }
-
-    .text2 {
-        font-size: 12px;
-        color: @text3;
-        line-height: 17px;
-    }
-}
-/deep/.box-swiper {
-    padding: 6px 0 30px 16px;
-    .swiper-slide {
-        // background-color: @bg3;
-        height: 100px;
-        width: 88px;
-    }
-}
-.table-title {
-    font-size: 12px;
-    color: @text3;
-    line-height: 17px;
-    .flex();
-    justify-content: center;
-    &::before,
-    &::after {
-        content: '';
-        background: rgba(147, 149, 153, 0.5);
-        width: 42px;
-        height: 1px;
-        display: block;
-        margin: 0 10px;
-    }
-}
-.table {
-    margin: 16px;
-    border-radius: 12px;
-    overflow: hidden;
-    .tr {
-        height: 32px;
-        .flex();
-
-        & > div {
-            width: 33%;
-            padding: 0 6.4vw;
-            box-sizing: border-box;
-
-            &.th {
-                font-size: 12px;
-                color: #000000;
-                line-height: 17px;
-                white-space: nowrap;
-            }
-
-            &.td {
-                font-size: 12px;
-                color: @text3;
-                line-height: 17px;
-                white-space: nowrap;
-                flex-shrink: 0;
-                &:first-child {
-                    color: #000000;
-                }
-            }
-        }
-
-        &:nth-child(2n + 1) {
-            background: @bg3;
-        }
-    }
-}
-
-.box {
-    position: relative;
-    border-radius: 8px;
-
-    .box-content {
-        position: absolute;
-        top: 50%;
-        left: 50%;
-        transform: translate(-50%, -50%);
-        .flex-col();
-        align-items: center;
-
-        .box-text {
-            white-space: nowrap;
-            font-size: 12px;
-            line-height: 20px;
-            padding: 0 6px;
-            background-color: rgba(255, 255, 255, 0.3);
-            margin-top: 8px;
-            border-radius: 12px;
-        }
-    }
-
-    .box-bg {
-        position: relative;
-        .van-image {
-            display: block;
-        }
-
-        .text1 {
-            position: absolute;
-            top: 18px;
-            left: 19px;
-            font-size: 12px;
-            font-weight: bold;
-            line-height: 10px;
-            transform: scale(0.8);
-        }
-    }
-
-    .box-bg-img {
-        display: block;
-    }
-}
-</style>

+ 0 - 127
src/views/user/Likes.vue

@@ -1,127 +0,0 @@
-<template>
-    <div class="follow">
-        <van-sticky ref="top" :offset-top="bar && bar.show ? bar.height : 0">
-            <div class="top">
-                <div class="name">我赞过的</div>
-            </div>
-            <van-tabs v-model:active="type" @change="change" :ellipsis="false" line-width="16" line-height="2">
-                <van-tab
-                    :title="item.label"
-                    :name="item.type"
-                    :key="index"
-                    v-for="(item, index) in typeOptions"
-                ></van-tab>
-            </van-tabs>
-        </van-sticky>
-        <div class="list">
-            <template v-for="(item, index) in showList" :key="index">
-                <product-info v-model:info="list[item.index]" @update:info="init"></product-info>
-            </template>
-            <van-empty
-                v-if="showList.length === 0"
-                description="你还没有点赞哦~"
-                :image="require('@assets/kong_png_dianzan.png')"
-            />
-        </div>
-    </div>
-</template>
-
-<script>
-import ProductInfo from '../../components/product/productInfo.vue';
-export default {
-    components: { ProductInfo },
-    inject: ['bar'],
-    data() {
-        return {
-            list: [],
-            empty: false,
-            type: '',
-            typeOptions: [
-                {
-                    label: '全部',
-                    type: ''
-                },
-                {
-                    label: '收藏品',
-                    type: 'DEFAULT'
-                },
-                {
-                    label: '数字盲盒',
-                    type: 'BLIND_BOX'
-                }
-            ]
-        };
-    },
-    computed: {
-        showList() {
-            return [...this.list]
-                .map((item, index) => {
-                    return {
-                        ...item,
-                        index
-                    };
-                })
-                .filter(item => {
-                    return !this.type || this.type === item.type;
-                });
-        }
-    },
-    mounted() {
-        this.init();
-    },
-    methods: {
-        init() {
-            this.$toast.loading({
-                message: '加载中...',
-                forbidClick: true
-            });
-            this.empty = false;
-            this.$http.get('/collection/myLikes').then(res => {
-                this.list = res;
-                this.empty = res.length === 0;
-                this.$toast.clear();
-            });
-        },
-        change() {
-            this.$root.$el.scrollTop = 0;
-        }
-    }
-};
-</script>
-
-<style lang="less" scoped>
-.follow {
-    background-color: @bg3;
-    padding-bottom: 100px;
-}
-.list {
-    padding: 8px;
-}
-.top {
-    background-color: @bg;
-    padding: 0 16px;
-    height: 50px;
-    display: flex;
-    align-items: center;
-    .name {
-        font-size: 20px;
-        font-weight: bold;
-        color: @text0;
-        line-height: 30px;
-    }
-}
-/deep/.van-tabs {
-    background-color: @bg;
-    .van-tabs__nav {
-        padding-left: 16px;
-    }
-}
-/deep/.van-tabs__nav--line.van-tabs__nav--complete {
-    border-color: @tabBorder;
-}
-/deep/.van-tab {
-    flex-grow: 0;
-    padding: 0 0 0 0;
-    margin-right: 50px;
-}
-</style>

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

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

+ 0 - 918
src/views/user/Wallet.vue

@@ -1,918 +0,0 @@
-<template>
-    <div class="wallet">
-        <div class="balance-card">
-            <img class="cover" src="https://cdn.raex.vip/image/2022-06-01-16-09-56vifAnxiR.png" />
-            <div class="stat" v-if="!(userInfo && userInfo.walletEnabled)">未开通</div>
-            <div
-                class="btn-open"
-                @click="$router.push({ name: 'walletAgreement' })"
-                v-if="!(userInfo && userInfo.walletEnabled)"
-            >
-                <img src="@assets/icon_arrow_left.png" class="arrow" />
-                申请开通
-                <img src="@assets/icon_arrow_left.png" class="arrow right" />
-            </div>
-        </div>
-        <div class="balance-amount" v-if="userInfo && userInfo.walletEnabled">
-            <div class="label" v-if="$store.state.review">绿魔币余额</div>
-            <div class="label" v-else>账户余额(元)</div>
-            <div class="value">
-                <span class="number"> {{ Number(userBalance.balance || 0).toFixed(2) }}</span>
-                <button
-                    class="btn-withdraw"
-                    @click="showWithdrawDialog = true"
-                    v-if="enableWithdraw && !$store.state.review"
-                >
-                    提现
-                </button>
-                <button class="btn-recharge" @click="showIapRechargeDialog = true" v-if="enableRecharge && iosReview">
-                    充值
-                </button>
-                <button class="btn-recharge" @click="showRechargeDialog = true" v-else-if="enableRecharge">充值</button>
-            </div>
-        </div>
-        <div class="cell-group" v-if="!$store.state.review">
-            <div class="cell" @click="$router.push({ name: 'mineBanks' })">
-                <img class="icon" src="@assets/icon_yinhangka.png" />
-                <span class="label">我的银行卡</span>
-                <img class="into" src="@assets/icon_inter1.png" />
-            </div>
-            <div
-                class="cell"
-                v-if="userInfo && userInfo.walletEnabled"
-                @click="$router.push({ name: 'balanceRecord' })"
-            >
-                <img class="icon" src="@assets/info_icon_jiaoyijilu.png" />
-                <span class="label">余额记录</span>
-                <img class="into" src="@assets/icon_inter1.png" />
-            </div>
-        </div>
-
-        <div class="tips">
-            <div
-                class="tips-title"
-                @click="
-                    $router.push({
-                        name: 'walletAgreement',
-                        query: {
-                            isRead: true
-                        }
-                    })
-                "
-            >
-                《钱包规则说明》
-            </div>
-        </div>
-        <van-action-sheet v-model:show="showRechargeDialog" :closeable="false" class="recharge-dialog">
-            <div class="title">
-                <div class="text">充值详情</div>
-                <div class="close" @click="showRechargeDialog = false">
-                    <img src="@assets/icon_dialog_close.png" />
-                </div>
-            </div>
-            <div class="content">
-                <div class="amount">
-                    <div class="text">充值金额(元)</div>
-                    <div class="num">单次最低充值 ¥{{ minAmount }},最高充值 ¥{{ maxAmount }}</div>
-                </div>
-                <div class="input">
-                    <img class="yuan" src="@assets/icon_jiage.png" />
-                    <input type="number" inputmode="decimal" v-model="amount" pattern="[0-9.]*" />
-                    <div class="placeholder" v-if="amount == undefined || amount === ''">请输入充值金额</div>
-                </div>
-                <div class="line"></div>
-                <div class="title-methods">充值方式</div>
-                <div style="padding: 0 16px">
-                    <pay-method-pick v-model="payMethod" :showBalance="false"></pay-method-pick>
-                </div>
-            </div>
-            <div class="btn-wrapper">
-                <van-button
-                    type="primary"
-                    :color="$colors.prim"
-                    round
-                    block
-                    class="btn-recharge"
-                    @click="confirmRecharge"
-                >
-                    确认支付
-                </van-button>
-            </div>
-        </van-action-sheet>
-
-        <van-action-sheet v-model:show="showWithdrawDialog" :closeable="false" class="recharge-dialog">
-            <div class="title">
-                <div class="text">提现详情</div>
-                <div class="close" @click="showWithdrawDialog = false">
-                    <img src="@assets/icon_dialog_close.png" />
-                </div>
-            </div>
-            <div class="content">
-                <div class="amount">
-                    <div class="text">提现金额</div>
-                    <div class="num">全部可提现 ¥{{ Number(userBalance.balance || 0).toFixed(2) }}</div>
-                </div>
-                <div class="input">
-                    <img class="yuan" src="@assets/icon_jiage.png" />
-                    <input type="number" v-model="amount" />
-                    <div class="placeholder" v-if="amount == undefined || amount === ''">请输入提现金额</div>
-                    <button class="btn-all" @click="amount = userBalance.balance">全部</button>
-                </div>
-                <div class="line"></div>
-                <van-cell v-if="bankCard" title="提现帐户" :value="bankCard.bankName">
-                    <template #value>
-                        <span>
-                            {{ bankCard.bankName }} <br />
-                            ****{{ bankCard.bankNo.slice(-4) }}
-                        </span>
-                    </template>
-                </van-cell>
-                <van-cell v-else title="提现帐户" value="添加" is-link to="mineBanksAdd"></van-cell>
-            </div>
-            <div class="btn-wrapper">
-                <van-button
-                    type="primary"
-                    :color="$colors.prim"
-                    round
-                    block
-                    class="btn-recharge"
-                    @click="confirmWithdraw"
-                    :disabled="!bankCard"
-                >
-                    确认提现
-                </van-button>
-            </div>
-        </van-action-sheet>
-
-        <van-action-sheet v-model:show="showIapRechargeDialog" :closeable="false" class="recharge-dialog">
-            <div class="title">
-                <div class="text">充值</div>
-                <div class="close" @click="showIapRechargeDialog = false">
-                    <img src="@assets/icon_dialog_close.png" />
-                </div>
-            </div>
-            <div class="content">
-                <div class="iap-row">
-                    <div class="iap-item" :class="{ active: iapId === '68' }" @click="iapId = '68'">
-                        <div class="name">68绿魔币</div>
-                        <div class="price">¥68</div>
-                    </div>
-                    <div class="iap-item" :class="{ active: iapId === '108' }" @click="iapId = '108'">
-                        <div class="name">108绿魔币</div>
-                        <div class="price">¥108</div>
-                    </div>
-                    <div class="iap-item" :class="{ active: iapId === '198' }" @click="iapId = '198'">
-                        <div class="name">198绿魔币</div>
-                        <div class="price">¥198</div>
-                    </div>
-                </div>
-                <div class="iap-row">
-                    <div class="iap-item" :class="{ active: iapId === '288' }" @click="iapId = '288'">
-                        <div class="name">288绿魔币</div>
-                        <div class="price">¥288</div>
-                    </div>
-                    <div class="iap-item" :class="{ active: iapId === '588' }" @click="iapId = '588'">
-                        <div class="name">588绿魔币</div>
-                        <div class="price">¥588</div>
-                    </div>
-                    <div class="iap-item" :class="{ active: iapId === '998' }" @click="iapId = '998'">
-                        <div class="name">998绿魔币</div>
-                        <div class="price">¥998</div>
-                    </div>
-                </div>
-            </div>
-            <div class="btn-wrapper">
-                <van-button type="primary" :color="$colors.prim" round block class="btn-recharge" @click="iapRecharge">
-                    确认
-                </van-button>
-            </div>
-        </van-action-sheet>
-    </div>
-</template>
-<script>
-import PayMethodPick from '@/components/PayMethodPick';
-import resolveUrl from 'resolve-url';
-import { mapGetters, mapState } from 'vuex';
-export default {
-    components: { PayMethodPick },
-    data() {
-        return {
-            userBalance: {
-                balance: 0
-            },
-            amountOptions: [100, 200, 500, 1000, 2000, 5000],
-            amount: null,
-            minAmount: -1,
-            maxAmount: -1,
-            showRechargeDialog: false,
-            payMethod: null,
-            showWithdrawDialog: false,
-            enableRecharge: false,
-            enableWithdraw: false,
-            showIapRechargeDialog: false,
-            iapId: '68'
-        };
-    },
-    created() {
-        this.emitter.on('iapEvent', this.iapEvent);
-        this.$http
-            .get('/sysConfig/get/min_recharge_amount,max_recharge_amount,enable_recharge,enable_withdraw')
-            .then(res => {
-                this.minAmount = Number(res['min_recharge_amount'].value);
-                this.maxAmount = Number(res['max_recharge_amount'].value);
-                this.enableRecharge = res['enable_recharge'].value === '1';
-                this.enableWithdraw = res['enable_withdraw'].value === '1';
-            });
-        this.$store.dispatch('getBankCard');
-        this.getBalance();
-    },
-    beforeUnmount() {
-        this.emitter.off('iapEvent', this.iapEvent);
-    },
-    computed: {
-        ...mapState(['bankCard', 'userInfo', 'review']),
-        ...mapGetters(['iosReview', 'androidReview'])
-    },
-    methods: {
-        getBalance() {
-            this.$http.get('/userBalance/my').then(res => {
-                this.userBalance = res;
-            });
-        },
-        recharge() {
-            if (!this.amount) {
-                this.$toast('请输入充值金额');
-                return;
-            }
-            const amount = Number(this.amount);
-            if (this.minAmount > -1 && amount < this.minAmount) {
-                this.$toast('充值金额不能小于' + this.minAmount + '元');
-                return;
-            }
-            if (this.maxAmount > -1 && amount > this.maxAmount) {
-                this.$toast('充值金额不能大于' + this.maxAmount + '元');
-                return;
-            }
-            if (amount > 50000) {
-                this.$toast('充值金额不能大于50000');
-                return;
-            }
-            this.showRechargeDialog = true;
-        },
-        confirmRecharge() {
-            if (!this.amount) {
-                this.$toast('请输入充值金额');
-                return;
-            }
-            const amount = Number(this.amount);
-            if (this.minAmount > -1 && amount < this.minAmount) {
-                this.$toast('充值金额不能小于' + this.minAmount + '元');
-                return;
-            }
-            if (this.maxAmount > -1 && amount > this.maxAmount) {
-                this.$toast('充值金额不能大于' + this.maxAmount + '元');
-                return;
-            }
-            if (amount > 50000) {
-                this.$toast('充值金额不能大于50000');
-                return;
-            }
-            if (!this.payMethod) {
-                this.$toast('请选择支付方式');
-                return;
-            }
-            this.showRechargeDialog = false;
-            switch (this.payMethod) {
-                case 'ALIPAY':
-                    this.$toast.loading('充值中');
-                    this.$http
-                        .post('/payOrder/v2/recharge', { amount: this.amount })
-                        .then(res => {
-                            this.openScheme(res);
-                            setTimeout(() => {
-                                this.$toast.clear();
-                            }, 1000);
-                        })
-                        .catch(e => {
-                            this.$toast(e.error || '充值失败');
-                        });
-                    break;
-                case 'UNION':
-                    window.open(
-                        resolveUrl(
-                            this.$baseUrl,
-                            '/payOrder/v2/recharge/sandQuick?userId=' +
-                                this.$store.state.userInfo.id +
-                                '&amount=' +
-                                this.amount
-                        )
-                            .replace('www.raex.vip', 'jump.raex.vip')
-                            .replace('test.raex.vip', 'jumptest.raex.vip'),
-                        '_blank'
-                    );
-                    break;
-                case 'SYXPAY':
-                    this.$router.push({
-                        name: 'bankPay',
-                        query: {
-                            type: 'recharge',
-                            amount: this.amount
-                        }
-                    });
-            }
-        },
-        withdraw() {
-            if (!this.amount) {
-                this.$toast('请输入提现金额');
-                return;
-            }
-            if (Number(this.amount) > this.userBalance.balance) {
-                this.$toast('提现金额不能大于余额');
-                return;
-            }
-            this.showWithdrawDialog = true;
-        },
-        confirmWithdraw() {
-            if (!this.amount) {
-                this.$toast('请输入提现金额');
-                return;
-            }
-            if (Number(this.amount) > this.userBalance.balance) {
-                this.$toast('提现金额不能大于余额');
-                return;
-            }
-            this.showWithdrawDialog = false;
-            this.$toast.loading('申请提现');
-            this.$http
-                .post('/withdrawApply/apply', { amount: this.amount })
-                .then(res => {
-                    this.$toast.success('申请提现成功');
-                    this.getBalance();
-                })
-                .catch(e => {
-                    this.$toast(e.error || '申请提现失败');
-                });
-        },
-        all() {
-            console.log('111');
-        },
-        iapEvent(e) {
-            console.log(e);
-            switch (e.event) {
-                case 'initiated':
-                    this.$toast.loading({
-                        duration: 0,
-                        forbidClick: true,
-                        message: '加载中'
-                    });
-                    break;
-                case 'finished':
-                    //this.$toast.clear();
-                    this.$http
-                        .post('/userBalance/iap', {
-                            receiptData: e.product.transaction.appStoreReceipt
-                        })
-                        .then(res => {
-                            this.getBalance();
-                            this.$toast.clear();
-                        })
-                        .catch(e => {
-                            console.log(e);
-                            this.$toast.clear();
-                        });
-                    console.log(e.product.transaction.appStoreReceipt);
-                    break;
-                case 'cancelled':
-                    this.$toast.clear();
-                    this.orderId = null;
-                    break;
-            }
-        },
-        iapRecharge() {
-            if (window.store) {
-                window.store.order(this.iapId);
-            }
-            this.showIapRechargeDialog = false;
-        }
-    }
-};
-</script>
-<style lang="less" scoped>
-.balance-card {
-    margin: 0 28px;
-    position: relative;
-    .cover {
-        width: 100%;
-        height: auto;
-    }
-    .stat {
-        width: 60px;
-        line-height: 24px;
-        background: rgba(0, 0, 0, 0.7);
-        border-radius: 0px 9px 0px 9px;
-        font-size: 12px;
-        color: white;
-        text-align: center;
-        position: absolute;
-        top: 0;
-        right: 0;
-    }
-    .btn-open {
-        height: 56px;
-        position: absolute;
-        left: 0;
-        bottom: 0;
-        right: 0;
-        .flex();
-        justify-content: center;
-        font-size: 14px;
-        color: white;
-        background: rgba(0, 0, 0, 0.7);
-        border-radius: 0px 0px 9px 9px;
-        .arrow {
-            width: 18px;
-            height: 18px;
-            margin: 0 16px;
-            &.right {
-                transform: rotate(180deg);
-            }
-        }
-    }
-}
-.balance-amount {
-    border-radius: 8px;
-    margin: 16px 16px 0 16px;
-    background: white;
-    padding: 16px 12px;
-    .label {
-        line-height: 24px;
-        font-size: 14px;
-        color: @text3;
-    }
-    .value {
-        line-height: 30px;
-        color: black;
-        margin-top: 4px;
-        font-family: OSP;
-        font-size: 36px;
-        .flex();
-        .number {
-            flex-grow: 1;
-        }
-        button {
-            width: 72px;
-            height: 24px;
-            border-radius: 12px;
-            font-size: 14px;
-            font-weight: bold;
-            .flex();
-            justify-content: center;
-            border: none;
-            margin: 0 0 0 12px;
-            padding: 0;
-        }
-        .btn-withdraw {
-            color: @prim;
-            background: fade(@prim, 10%);
-            &:active {
-                background: fade(@prim, 20%);
-            }
-        }
-        .btn-recharge {
-            color: white;
-            background: @prim;
-            &:active {
-                background: shade(@prim, 20%);
-            }
-        }
-    }
-}
-.cell-group {
-    border-radius: 8px;
-    margin: 16px 16px 0 16px;
-    background: white;
-    .cell {
-        height: 56px;
-        padding: 0 10px 0 12px;
-        .flex();
-        position: relative;
-        .icon {
-            width: 28px;
-            height: 28px;
-        }
-        .label {
-            color: @text3;
-            font-size: 14px;
-            margin-left: 10px;
-            flex-grow: 1;
-        }
-        .into {
-            width: 28px;
-            height: 28px;
-        }
-        &::after {
-            content: '';
-            .setBottomLine();
-            left: 16px;
-            right: 16px;
-        }
-        &:last-child::after {
-            content: none;
-        }
-    }
-}
-
-.wallet {
-    background: @bg3;
-    padding-top: 16px;
-    position: relative;
-    .flex-col();
-    .wallet-card {
-        height: 138px;
-        margin: 0 16px;
-        background: #404569;
-        background-image: url(../../assets/bg_wallet.png);
-        background-size: 182px 94px;
-        background-repeat: no-repeat;
-        background-position-x: right;
-        background-position-y: top;
-        border-radius: 9px;
-        color: white;
-        position: relative;
-        overflow: hidden;
-        .flex-col();
-        .label {
-            font-size: 14px;
-            line-height: 24px;
-            margin: 16px 0 0 16px;
-        }
-        .value {
-            font-family: OSP;
-            font-size: 36px;
-            line-height: 30px;
-            margin: 4px 0 0 16px;
-            flex-grow: 1;
-        }
-        .btns {
-            color: @text3;
-            font-size: 14px;
-            background: #292a52;
-            .flex();
-            .btn {
-                flex-basis: 0;
-                flex-grow: 1;
-                height: 44px;
-                .flex();
-                align-items: center;
-                justify-content: center;
-                transition: color 0.1s;
-                &:active {
-                    color: fade(@text3, 20%);
-                }
-            }
-            .btn-card {
-                position: relative;
-                &:after {
-                    content: '';
-                    width: 1px;
-                    height: 20px;
-                    background: @text3;
-                    border-radius: 1px;
-                    position: absolute;
-                    top: 0;
-                    bottom: 0;
-                    right: 0;
-                    margin: auto;
-                }
-            }
-        }
-    }
-    .recharge-card {
-        margin: 16px 16px 0 16px;
-        padding-top: 16px;
-        border-radius: 16px 16px 0px 0px;
-        background: white;
-        flex-grow: 1;
-        .title {
-            font-size: 16px;
-            font-weight: bold;
-            margin-left: 16px;
-        }
-        .amount {
-            margin: 16px 16px 0 0;
-            .flex();
-            flex-wrap: wrap;
-            .item {
-                width: calc((100vw - 96px) / 3);
-                margin-left: 16px;
-                margin-bottom: 16px;
-                border-radius: 4px;
-                background: fade(#393d62, 20%);
-                font-size: 32px;
-                font-family: OSP;
-                color: white;
-                height: 40px;
-                line-height: 40px;
-                text-align: center;
-                &.active {
-                    background: #393d62;
-                }
-            }
-        }
-        .custom-amount {
-            background: @bg3;
-            margin: 0 16px 16px 16px;
-            height: 48px;
-            border-radius: 4px;
-            color: @text3;
-            .flex();
-            padding-left: 12px;
-            padding-right: 16px;
-            font-size: 14px;
-            font-weight: bold;
-            line-height: 48px;
-            position: relative;
-            .placeholder {
-                position: absolute;
-                left: 28px;
-                top: 0;
-                bottom: 0;
-                right: 16px;
-                text-align: center;
-                margin: auto;
-                font-weight: 400;
-                color: @text3;
-                font-size: 14px;
-                line-height: 48px;
-            }
-            input {
-                flex-grow: 1;
-                border: none;
-                background: none;
-                font-size: 24px;
-                color: black;
-                margin-left: 6px;
-                line-height: 48px;
-                padding: 0;
-                .flex();
-                font-family: OSP;
-                letter-spacing: 1px;
-                text-align: center;
-                z-index: 1;
-            }
-        }
-        .tip {
-            font-size: 12px;
-            color: @text3;
-            margin: 16px;
-        }
-    }
-    .bottom {
-        position: fixed;
-        bottom: 0;
-        left: 0;
-        right: 0;
-        .flex();
-        height: 56px;
-        padding-bottom: env(safe-area-inset-bottom);
-        padding: 0 16px;
-        background: white;
-        border-top: 1px solid @border2;
-        .btn-withdraw {
-            flex: 1 0 0;
-            border-radius: 19px;
-            height: 38px;
-            font-size: 16px;
-            font-weight: bold;
-            color: #373a60;
-            background: fade(#393d62, 20%);
-            .flex();
-            justify-content: center;
-            &:active {
-                background: fade(#393d62, 30%);
-            }
-            & + div {
-                margin-left: 20px;
-            }
-        }
-        .btn-recharge {
-            flex: 1 0 0;
-            border-radius: 19px;
-            height: 38px;
-            font-size: 16px;
-            font-weight: bold;
-            color: white;
-            background: #373a60;
-            .flex();
-            justify-content: center;
-            &:active {
-                background: fade(#393d62, 80%);
-            }
-        }
-    }
-}
-::v-deep(.recharge-dialog .van-action-sheet__content) {
-    overflow: auto !important;
-    display: flex;
-    flex-direction: column;
-}
-.recharge-dialog {
-    overflow: auto;
-    .content {
-        flex-basis: calc(80vh - 150px);
-        flex-grow: 1;
-        overflow: auto;
-        //height: calc(100vh - 300px);
-    }
-    .title {
-        height: 50px;
-        position: relative;
-        &::after {
-            .setBottomLine();
-        }
-        .flex();
-        .text {
-            margin-left: 16px;
-            font-size: 14px;
-            color: black;
-            font-weight: bold;
-            flex-grow: 1;
-        }
-        .close {
-            padding: 10px 16px;
-            img {
-                width: 24px;
-                height: 24px;
-            }
-        }
-    }
-    .amount {
-        margin: 20px 0 0 16px;
-        .text {
-            line-height: 24px;
-            font-size: 14px;
-            color: black;
-            font-weight: bold;
-        }
-        .num {
-            line-height: 22px;
-            font-size: 13px;
-            margin-top: 2px;
-            color: @text3;
-        }
-    }
-    .input {
-        margin-top: 22px;
-        .flex();
-        padding: 0 16px;
-        position: relative;
-        .yuan {
-            width: 15px;
-            height: 17px;
-            position: relative;
-            top: 4px;
-        }
-        input {
-            padding: 0;
-            margin: 0;
-            border: none;
-            line-height: 30px;
-            font-size: 36px;
-            color: black;
-            margin-left: 13px;
-            flex-grow: 1;
-            font-family: OSP;
-            z-index: 1;
-            background: transparent;
-        }
-        .placeholder {
-            position: absolute;
-            left: 48px;
-            top: 0;
-            bottom: 0;
-            right: 16px;
-            margin: auto;
-            font-weight: 400;
-            color: @text3;
-            font-size: 14px;
-            line-height: 48px;
-            z-index: 0;
-        }
-        .btn-all {
-            width: 72px;
-            height: 24px;
-            background: fade(@prim, 10%);
-            border-radius: 12px;
-            color: @prim;
-            border: none;
-            font-size: 14px;
-            font-weight: bold;
-            position: absolute;
-            top: 0;
-            bottom: 0;
-            margin: auto;
-            right: 16px;
-            z-index: 1;
-            &:active {
-                background: fade(@prim, 20%);
-            }
-        }
-    }
-    .line {
-        background: @bg3;
-        height: 1px;
-        margin: 0 16px;
-    }
-    .title-methods {
-        font-size: 14px;
-        line-height: 24px;
-        font-weight: bold;
-        margin-left: 16px;
-        margin-top: 20px;
-        margin-right: 16px;
-        .bank-name {
-            font-size: 14px;
-            color: @text3;
-            font-weight: normal;
-            float: right;
-        }
-    }
-    .btn-wrapper {
-        height: 56px;
-        min-height: 56px;
-        .flex();
-        padding-bottom: env(safe-area-inset-bottom);
-        position: relative;
-        &::after {
-            .setTopLine();
-        }
-        .btn-recharge {
-            // flex-grow: 1;
-            // height: 38px;
-            // border-radius: 19px;
-            // background: #373a60;
-            // font-size: 16px;
-            // color: white;
-            // font-weight: bold;
-            // .flex();
-            // justify-content: center;
-            margin: 0 48px;
-            ::v-deep(.van-button__content) {
-                font-weight: bold;
-            }
-        }
-    }
-    .iap-row {
-        .flex();
-        padding: 0 15px;
-        margin-top: 15px;
-        .iap-item {
-            flex-basis: 0;
-            flex-grow: 1;
-            height: 50px;
-            border-radius: 8px;
-            background-color: @bg3;
-            color: @text1;
-            .flex-col();
-            align-items: center;
-            justify-content: center;
-            margin-left: 15px;
-            .name {
-                font-size: 14px;
-            }
-            .price {
-                margin-top: 2px;
-                font-size: 13px;
-                color: @text3;
-            }
-            &:first-child {
-                margin-left: 0;
-            }
-            &.active {
-                background: @prim;
-                color: white;
-                .price {
-                    color: rgba(255, 255, 255, 0.5);
-                }
-            }
-        }
-    }
-}
-::v-deep(.van-cell__title) {
-    font-weight: bold;
-}
-
-.tips {
-    padding: 16px;
-    position: absolute;
-    left: 50%;
-    bottom: 0px;
-    .bottom(16px);
-    transform: translateX(-50%);
-    .tips-title {
-        font-size: 14px;
-        color: #3ab200;
-        line-height: 24px;
-    }
-}
-</style>

+ 0 - 148
src/views/user/WalletAgreement.vue

@@ -1,148 +0,0 @@
-<template>
-    <div style="padding: 16px 16px calc(var(--safe-bottom) + 50px) 16px">
-        <p style="text-align: center">
-            <strong><span style="font-family: 微软雅黑; font-weight: bold; font-size: 21px">RAEX</span></strong
-            ><strong><span style="font-family: 微软雅黑; font-weight: bold; font-size: 21px">绿洲宇宙</span></strong>
-        </p>
-        <p style="text-align: center">
-            <strong
-                ><span style="font-family: 微软雅黑; font-weight: bold; font-size: 21px">绿魔收藏家俱乐部</span></strong
-            >
-        </p>
-        <p style="text-align: center">
-            <strong><span style="font-family: 微软雅黑; font-weight: bold; font-size: 21px">绿魔卡守则</span></strong
-            ><strong><span style="font-family: 微软雅黑; font-weight: bold; font-size: 21px">及风险声明</span></strong>
-        </p>
-        <p style="text-align: center">
-            <strong><span style="font-family: 微软雅黑; font-weight: bold; font-size: 21px">&nbsp;</span></strong>
-        </p>
-        <p style="text-align: left">
-            <strong><span style="font-family: 微软雅黑; font-weight: bold; font-size: 10px">风险声明:</span></strong>
-            <span>
-                RAEX绿洲宇宙平台发售的数字艺术品具备收藏欣赏或版权价值,RAEX绿洲宇宙发售的数字艺术品首发价格为官方指导价,RAEX绿洲宇宙对数字艺术品二手市场价格不构成任何指导建议。请各位藏家理性消费,仔细阅读相关权益,杜绝恶意炒作,避免损失。
-            </span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>一、RAEX绿洲宇宙为提升各位藏家体验,便于</span
-            ><span>藏家更便捷、更高效的支付拍卖尾款,特定向符合条件的藏家</span
-            ><span>开通RAEX绿洲宇宙&ldquo;绿洲收藏家绿魔卡&rdquo;服务,</span
-            ><span>各位藏家可视自身情况决定是否开通绿魔卡服务。一经申请开通</span
-            ><span>&ldquo;绿洲收藏家绿魔卡&rdquo;服务即视为同意并遵守本守则。</span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>
-                二、&ldquo;绿魔收藏家俱乐部绿魔卡&rdquo;,以下简称&ldquo;绿魔卡&rdquo;,申请开通绿魔卡的藏家须已通过绿洲宇宙平台实名制认证
-            </span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>三、每位藏家仅限开通一张绿魔卡,单张绿魔卡单次最低充值额度为</span
-            ><span>人民币100元,单次最高充值额度为人民币5,000元,单个账户充值金额不得超过人民币</span
-            ><span>10,000元。充值期间绿魔卡不产生利息或任何性质的其他收益。</span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>四、绿魔卡仅可用来购买绿洲宇宙平台的数字艺术品(不含实物衍生品)。</span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>
-                五、各位藏家可根据个人需求随时提现,但每日仅可提现一次,提现最低提现金额为人民币100元整。由于监管需要,绿洲宇宙将在每个月的15日、30日(遇非工作日自动顺延)强制藏家全部提现。
-            </span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>
-                六、提现到账时间为提现成功后的次日(遇非工作日自动顺延),提现手续费为提现金额的0.8%,单笔手续费不足人民币2元的按人民币2元收取;&nbsp;
-            </span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>七、绿魔卡与现金充值比例为1:1,绿洲宇宙官方从未开展或委托其他机构开展</span
-            ><span>&ldquo;预存赠送&rdquo;&ldquo;预存享福利&rdquo;&ldquo;预存升级&rdquo;</span
-            ><span>等活动,请各位藏家仔细甄别,谨防受骗上当。</span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span
-                >八、藏家不得租借或转让绿魔卡;也不得利用绿魔卡随意替他人转账、提现非法来源或来源不明的资金及其他有价证券。一经发现,绿洲宇宙第一时间向监管部门举报并保留向藏家追究法律责任的权利。</span
-            >
-        </p>
-        <p style="text-indent: 24pt">
-            <span>
-                九、RAEX绿洲宇宙按照监管部门要求引入第三方机构风控系统,对于价格明显异常的藏品,将有可能被系统判定为具有洗钱及其他违规风险,一经发现绿洲宇宙将立即下架。
-            </span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>
-                十、绿魔卡充值提现过于频繁,可能触发央行反洗钱系统监管,触发监管后将可能被限制绿魔卡部分或全部功能。
-            </span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>
-                十一、针对少部分使用&ldquo;作弊外挂&rdquo;、&ldquo;盗取他人藏品&rdquo;等严重违规行为的藏家,一经发现直接封号处理。涉嫌违法犯罪的,一律移交司法机关处理。
-            </span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>
-                十二、RAEX绿洲宇宙平台发售的数字艺术品具备收藏欣赏或版权价值,RAEX绿洲宇宙发售的数字艺术品首发价格为官方指导价,RAEX绿洲宇宙对数字艺术品二手市场价格不构成任何指导建议。请各位藏家理性消费,仔细阅读相关权益,杜绝恶意炒作,避免损失。
-            </span>
-        </p>
-        <p style="text-indent: 24pt">
-            <span>十三、本守则在中国法律框架下最终解释权归RAEX绿洲宇宙所有。</span>
-        </p>
-        <p><span>&nbsp;</span></p>
-        <p style="text-align: right"><span>RAEX绿洲宇宙</span></p>
-        <p style="text-align: right"><span>绿魔收藏家俱乐部</span></p>
-        <p style="text-align: right"><span>2022年5月27日</span></p>
-        <div class="btn-wrapper">
-            <van-button
-                class="btn-agree"
-                v-if="isRead"
-                type="primary"
-                round
-                block
-                :color="$colors.prim"
-                @click="$router.go(-1)"
-            >
-                返回
-            </van-button>
-            <van-button class="btn-agree" v-else type="primary" round block :color="$colors.prim" @click="enableWallet">
-                同意并开通
-            </van-button>
-        </div>
-    </div>
-</template>
-<script>
-export default {
-    data() {
-        return {
-            isRead: false
-        };
-    },
-    mounted() {
-        if (this.$route.query.isRead) {
-            this.isRead = true;
-        }
-    },
-    methods: {
-        enableWallet() {
-            this.$toast.loading('正在开通');
-            this.$http
-                .post('/user/enableWallet')
-                .then(res => {
-                    this.$toast('开通成功');
-                    this.$store.dispatch('getUserInfo').then(() => {});
-                    this.$router.go(-1);
-                })
-                .catch(e => {
-                    this.$toast(e.error || '开通失败');
-                });
-        }
-    }
-};
-</script>
-<style lang="less" scoped>
-.btn-wrapper {
-    position: fixed;
-    left: 16px;
-    right: 16px;
-    bottom: 0;
-    padding-bottom: 10px;
-    padding-bottom: calc(10px + var(--safe-bottom));
-}
-</style>

+ 0 - 522
src/views/user/WalletBak.vue

@@ -1,522 +0,0 @@
-<template>
-    <div class="wallet">
-        <div class="wallet-card">
-            <div class="label">账户余额(元)</div>
-            <div class="value">{{ Number(userBalance.balance || 0).toFixed(2) }}</div>
-            <div class="btns">
-                <div class="btn btn-card" @click="$router.push({ name: 'mineBanks' })">我的银行卡</div>
-                <div class="btn btn-record" @click="$router.push({ name: 'balanceRecord' })">余额记录</div>
-            </div>
-        </div>
-        <div class="recharge-card">
-            <div class="title">选择金额</div>
-            <div class="amount">
-                <div
-                    class="item"
-                    v-for="item in amountOptions"
-                    :key="item"
-                    :class="{ active: amount === item }"
-                    @click="amount = item"
-                >
-                    {{ item }}
-                </div>
-            </div>
-            <div class="custom-amount">
-                <span class="yuan">¥</span>
-                <div class="placeholder" v-if="amount == undefined || amount === ''">请输入自定义金额</div>
-                <input type="number" v-model="amount" />
-            </div>
-            <div class="tip">
-                充值说明<br />1、本次充值仅限于平台消费,无法跨地区款站点使用<br />2、若遇到充值未到账,请联系客服
-            </div>
-            <div class="bottom">
-                <div class="btn-withdraw" @click="withdraw">提现</div>
-                <div class="btn-recharge" @click="recharge" v-if="enableRecharge">充值</div>
-            </div>
-        </div>
-        <van-action-sheet v-model:show="showRechargeDialog" :closeable="false" class="recharge-dialog">
-            <div class="title">
-                <div class="text">充值详情</div>
-                <div class="close" @click="showRechargeDialog = false">
-                    <img src="@assets/icon_dialog_close.png" />
-                </div>
-            </div>
-            <div class="content">
-                <div class="amount">
-                    <div class="text">充值金额(元)</div>
-                    <div class="num">{{ amount }}</div>
-                </div>
-                <div class="line"></div>
-                <div class="title-methods">充值方式</div>
-                <div style="padding: 0 16px">
-                    <pay-method-pick v-model="payMethod" :showBalance="false"></pay-method-pick>
-                </div>
-            </div>
-            <div class="btn-wrapper">
-                <div class="btn-recharge" @click="confirmRecharge">确认支付</div>
-            </div>
-        </van-action-sheet>
-
-        <van-action-sheet v-model:show="showWithdrawDialog" :closeable="false" class="recharge-dialog">
-            <div class="title">
-                <div class="text">提现详情</div>
-                <div class="close" @click="showWithdrawDialog = false">
-                    <img src="@assets/icon_dialog_close.png" />
-                </div>
-            </div>
-            <div class="content">
-                <div class="amount">
-                    <div class="text">提现金额(元)</div>
-                    <div class="num">{{ amount }}</div>
-                </div>
-                <div class="line"></div>
-                <van-cell v-if="bankCard" title="提现帐户" :value="bankCard.bankName">
-                    <template #value>
-                        <span>
-                            {{ bankCard.bankName }} <br />
-                            ****{{ bankCard.bankNo.slice(-4) }}
-                        </span>
-                    </template>
-                </van-cell>
-                <van-cell v-else title="提现帐户" value="添加" is-link to="mineBanksAdd"></van-cell>
-            </div>
-            <div class="btn-wrapper">
-                <van-button
-                    type="primary"
-                    color="#373A60"
-                    round
-                    block
-                    class="btn-recharge"
-                    @click="confirmWithdraw"
-                    :disabled="!bankCard"
-                >
-                    确认提现
-                </van-button>
-            </div>
-        </van-action-sheet>
-    </div>
-</template>
-<script>
-import PayMethodPick from '@/components/PayMethodPick';
-import resolveUrl from 'resolve-url';
-import { mapState } from 'vuex';
-export default {
-    components: { PayMethodPick },
-    data() {
-        return {
-            userBalance: {
-                balance: 0
-            },
-            amountOptions: [100, 200, 500, 1000, 2000, 5000],
-            amount: null,
-            minAmount: -1,
-            maxAmount: -1,
-            showRechargeDialog: false,
-            payMethod: null,
-            showWithdrawDialog: false,
-            enableRecharge: false
-        };
-    },
-    created() {
-        this.$http.get('/sysConfig/get/min_recharge_amount,max_recharge_amount,enable_recharge').then(res => {
-            this.minAmount = Number(res['min_recharge_amount'].value);
-            this.maxAmount = Number(res['max_recharge_amount'].value);
-            this.enableRecharge = res['enable_recharge'].value === '1';
-        });
-        this.$store.dispatch('getBankCard');
-        this.getBalance();
-    },
-    computed: {
-        ...mapState(['bankCard'])
-    },
-    methods: {
-        getBalance() {
-            this.$http.get('/userBalance/my').then(res => {
-                this.userBalance = res;
-            });
-        },
-        recharge() {
-            if (!this.amount) {
-                this.$toast('请输入充值金额');
-                return;
-            }
-            const amount = Number(this.amount);
-            if (this.minAmount > -1 && amount < this.minAmount) {
-                this.$toast('充值金额不能小于' + this.minAmount + '元');
-                return;
-            }
-            if (this.maxAmount > -1 && amount > this.maxAmount) {
-                this.$toast('充值金额不能大于' + this.maxAmount + '元');
-                return;
-            }
-            if (amount > 50000) {
-                this.$toast('充值金额不能大于50000');
-                return;
-            }
-            this.showRechargeDialog = true;
-        },
-        confirmRecharge() {
-            if (!this.payMethod) {
-                this.$toast('请选择支付方式');
-                return;
-            }
-            this.showRechargeDialog = false;
-            switch (this.payMethod) {
-                case 'ALIPAY':
-                    this.$toast.loading('充值中');
-                    this.$http
-                        .post('/payOrder/v2/recharge', { amount: this.amount })
-                        .then(res => {
-                            this.openScheme(res);
-                            setTimeout(() => {
-                                this.$toast.clear();
-                            }, 1000);
-                        })
-                        .catch(e => {
-                            this.$toast(e.error || '充值失败');
-                        });
-                    break;
-                case 'UNION':
-                    window.open(
-                        resolveUrl(
-                            this.$baseUrl,
-                            '/payOrder/v2/recharge/sandQuick?userId=' +
-                                this.$store.state.userInfo.id +
-                                '&amount=' +
-                                this.amount
-                        )
-                            .replace('www.raex.vip', 'jump.raex.vip')
-                            .replace('test.raex.vip', 'jumptest.raex.vip'),
-                        '_blank'
-                    );
-                    break;
-                case 'SYXPAY':
-                    this.$router.push({
-                        name: 'bankPay',
-                        query: {
-                            type: 'recharge',
-                            amount: this.amount
-                        }
-                    });
-            }
-        },
-        withdraw() {
-            if (!this.amount) {
-                this.$toast('请输入提现金额');
-                return;
-            }
-            if (Number(this.amount) > this.userBalance.balance) {
-                this.$toast('提现金额不能大于余额');
-                return;
-            }
-            this.showWithdrawDialog = true;
-        },
-        confirmWithdraw() {
-            this.showWithdrawDialog = false;
-            this.$toast.loading('申请提现');
-            this.$http
-                .post('/withdrawApply/apply', { amount: this.amount })
-                .then(res => {
-                    this.$toast.success('申请提现成功');
-                    this.getBalance();
-                })
-                .catch(e => {
-                    this.$toast(e.error || '申请提现失败');
-                });
-        }
-    }
-};
-</script>
-<style lang="less" scoped>
-.wallet {
-    background: @bg3;
-    padding-top: 16px;
-    .flex-col();
-    .wallet-card {
-        height: 138px;
-        margin: 0 16px;
-        background: #404569;
-        background-image: url(../../assets/bg_wallet.png);
-        background-size: 182px 94px;
-        background-repeat: no-repeat;
-        background-position-x: right;
-        background-position-y: top;
-        border-radius: 9px;
-        color: white;
-        position: relative;
-        overflow: hidden;
-        .flex-col();
-        .label {
-            font-size: 14px;
-            line-height: 24px;
-            margin: 16px 0 0 16px;
-        }
-        .value {
-            font-family: OSP;
-            font-size: 36px;
-            line-height: 30px;
-            margin: 4px 0 0 16px;
-            flex-grow: 1;
-        }
-        .btns {
-            color: @text3;
-            font-size: 14px;
-            background: #292a52;
-            .flex();
-            .btn {
-                flex-basis: 0;
-                flex-grow: 1;
-                height: 44px;
-                .flex();
-                align-items: center;
-                justify-content: center;
-                transition: color 0.1s;
-                &:active {
-                    color: fade(@text3, 20%);
-                }
-            }
-            .btn-card {
-                position: relative;
-                &:after {
-                    content: '';
-                    width: 1px;
-                    height: 20px;
-                    background: @text3;
-                    border-radius: 1px;
-                    position: absolute;
-                    top: 0;
-                    bottom: 0;
-                    right: 0;
-                    margin: auto;
-                }
-            }
-        }
-    }
-    .recharge-card {
-        margin: 16px 16px 0 16px;
-        padding-top: 16px;
-        border-radius: 16px 16px 0px 0px;
-        background: white;
-        flex-grow: 1;
-        .title {
-            font-size: 16px;
-            font-weight: bold;
-            margin-left: 16px;
-        }
-        .amount {
-            margin: 16px 16px 0 0;
-            .flex();
-            flex-wrap: wrap;
-            .item {
-                width: calc((100vw - 96px) / 3);
-                margin-left: 16px;
-                margin-bottom: 16px;
-                border-radius: 4px;
-                background: fade(#393d62, 20%);
-                font-size: 32px;
-                font-family: OSP;
-                color: white;
-                height: 40px;
-                line-height: 40px;
-                text-align: center;
-                &.active {
-                    background: #393d62;
-                }
-            }
-        }
-        .custom-amount {
-            background: @bg3;
-            margin: 0 16px 16px 16px;
-            height: 48px;
-            border-radius: 4px;
-            color: @text3;
-            .flex();
-            padding-left: 12px;
-            padding-right: 16px;
-            font-size: 14px;
-            font-weight: bold;
-            line-height: 48px;
-            position: relative;
-            .placeholder {
-                position: absolute;
-                left: 28px;
-                top: 0;
-                bottom: 0;
-                right: 16px;
-                text-align: center;
-                margin: auto;
-                font-weight: 400;
-                color: @text3;
-                font-size: 14px;
-                line-height: 48px;
-            }
-            input {
-                flex-grow: 1;
-                border: none;
-                background: none;
-                font-size: 24px;
-                color: black;
-                margin-left: 6px;
-                line-height: 48px;
-                padding: 0;
-                .flex();
-                font-family: OSP;
-                letter-spacing: 1px;
-                text-align: center;
-                z-index: 1;
-            }
-        }
-        .tip {
-            font-size: 12px;
-            color: @text3;
-            margin: 16px;
-        }
-    }
-    .bottom {
-        position: fixed;
-        bottom: 0;
-        left: 0;
-        right: 0;
-        .flex();
-        height: 56px;
-        padding-bottom: env(safe-area-inset-bottom);
-        padding: 0 16px;
-        background: white;
-        border-top: 1px solid @border2;
-        .btn-withdraw {
-            flex: 1 0 0;
-            border-radius: 19px;
-            height: 38px;
-            font-size: 16px;
-            font-weight: bold;
-            color: #373a60;
-            background: fade(#393d62, 20%);
-            .flex();
-            justify-content: center;
-            &:active {
-                background: fade(#393d62, 30%);
-            }
-            & + div {
-                margin-left: 20px;
-            }
-        }
-        .btn-recharge {
-            flex: 1 0 0;
-            border-radius: 19px;
-            height: 38px;
-            font-size: 16px;
-            font-weight: bold;
-            color: white;
-            background: #373a60;
-            .flex();
-            justify-content: center;
-            &:active {
-                background: fade(#393d62, 80%);
-            }
-        }
-    }
-}
-::v-deep(.recharge-dialog .van-action-sheet__content) {
-    overflow: auto !important;
-    display: flex;
-    flex-direction: column;
-}
-.recharge-dialog {
-    overflow: auto;
-    .content {
-        flex-basis: calc(80vh - 150px);
-        flex-grow: 1;
-        overflow: auto;
-        //height: calc(100vh - 300px);
-    }
-    .title {
-        height: 50px;
-        position: relative;
-        &::after {
-            .setBottomLine();
-        }
-        .flex();
-        .text {
-            margin-left: 16px;
-            font-size: 14px;
-            color: black;
-            font-weight: bold;
-            flex-grow: 1;
-        }
-        .close {
-            padding: 10px 16px;
-            img {
-                width: 24px;
-                height: 24px;
-            }
-        }
-    }
-    .amount {
-        background: @bg3;
-        border-radius: 4px;
-        margin: 16px;
-        padding: 17px 0 20px 0;
-        .flex-col();
-        align-items: center;
-        .text {
-            font-size: 16px;
-            color: black;
-        }
-        .num {
-            font-size: 36px;
-            font-family: DIN;
-            margin-top: 10px;
-        }
-    }
-    .line {
-        background: @bg3;
-        height: 1px;
-        margin: 0 16px;
-    }
-    .title-methods {
-        font-size: 14px;
-        line-height: 24px;
-        font-weight: bold;
-        margin-left: 16px;
-        margin-top: 20px;
-        margin-right: 16px;
-        .bank-name {
-            font-size: 14px;
-            color: @text3;
-            font-weight: normal;
-            float: right;
-        }
-    }
-    .btn-wrapper {
-        height: 56px;
-        min-height: 56px;
-        .flex();
-        padding-bottom: env(safe-area-inset-bottom);
-        position: relative;
-        &::after {
-            .setTopLine();
-        }
-        .btn-recharge {
-            // flex-grow: 1;
-            // height: 38px;
-            // border-radius: 19px;
-            // background: #373a60;
-            // font-size: 16px;
-            // color: white;
-            // font-weight: bold;
-            // .flex();
-            // justify-content: center;
-            margin: 0 48px;
-            ::v-deep(.van-button__content) {
-                font-weight: bold;
-            }
-            // &:active {
-            //     background: shade(#373a60, 20%);
-            // }
-        }
-    }
-}
-::v-deep(.van-cell__title) {
-    font-weight: bold;
-}
-</style>