feat: 券商功能

This commit is contained in:
2026-01-10 15:53:01 +08:00
parent 0d7f520dc4
commit 20fe8528e3
9 changed files with 737 additions and 541 deletions
@@ -1,121 +1,130 @@
<template>
<view class="shop-item-view" v-if="dataItem">
<image src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/alpha.png" v-if="dataItem.name != 'WALLET'"></image>
<image src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/no_black_data.png" v-else></image>
<view class="shop-mid-view-one" v-if="dataItem.name != 'WALLET'">
<text class="text-32 text-zu1 text-overflow">{{dataItem.account}}</text>
</view>
<view class="shop-mid-view" v-else>
<text class="text-32 text-zu1 text-overflow">BNB Smart Chain(BEP20)</text>
<text class="text-32 text-fu1 text-overflow">{{address}}</text>
</view>
<view class="biao-view">
<text class="text-20 text-zi" style="line-height: 1.2;">{{dataItem.name != 'WALLET' ? 'Alpha账户' : '区块链账户'}}</text>
</view>
<view class="jie-bind" @click="onJie">
<text class="text-zu1 text-24">解绑</text>
</view>
</view>
<view class="shop-item-view" v-if="dataItem" @click="onSelect">
<image
src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/alpha.png"
v-if="dataItem.name != 'WALLET'"
></image>
<image
src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/no_black_data.png"
v-else
></image>
<view class="shop-mid-view-one" v-if="dataItem.name != 'WALLET'">
<text class="text-32 text-zu1 text-overflow">{{ dataItem.account }}</text>
</view>
<view class="shop-mid-view" v-else>
<text class="text-30 text-fu1 text-overflow">{{ address }}</text>
<view class="jie-bind" @click.stop="onJie"> 解绑 </view>
</view>
<view class="biao-view">
<text class="text-20 text-zi" style="line-height: 1.2">{{
dataItem.name != "WALLET" ? "Alpha账户" : "券商登记地址"
}}</text>
</view>
</view>
</template>
<script>
import func from '@/utils/func.js';
export default {
props:{
dataItem:{
type:Object,
default:null
},
},
computed:{
address(){
let tmp = '';
console.log('this.data',this.dataItem)
if(this.dataItem && this.dataItem.name == 'WALLET'){
this.dataItem.address = func.addressTurn(this.dataItem.account,6);
tmp = this.dataItem.address;
}
return tmp;
}
},
mounted(){
},
methods: {
onJie(){
this.$emit('jie',this.dataItem);
}
}
}
import func from "@/utils/func.js";
export default {
props: {
dataItem: {
type: Object,
default: null,
},
},
computed: {
address() {
let tmp = "";
console.log("this.data", this.dataItem);
if (this.dataItem && this.dataItem.name == "WALLET") {
this.dataItem.address = this.maskAddress(this.dataItem.account);
tmp = this.dataItem.address;
}
return tmp;
},
},
mounted() {},
methods: {
maskAddress(address) {
return "******" + address.slice(-4);
},
onJie() {
this.$emit("jie", this.dataItem);
},
onSelect() {
this.$emit("select", this.dataItem);
},
},
};
</script>
<style lang="scss" scoped>
.shop-item-view{
width:100%;
min-height:152rpx;
display: flex;
flex-direction: row;
align-items: center;
padding: 32rpx 28rpx;
box-sizing: border-box;
position: relative;
border-radius: 12rpx;
overflow: hidden;
background-color: #fff;
margin-top:24rpx;
border:2rpx solid #e3e3e3;
.jie-bind{
height:48rpx;
width:112rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius:24rpx;
position: absolute;
right:32rpx;
bottom:24rpx;
background-color: #F3F3F3;
}
.biao-view{
padding: 0 12rpx;
display: flex;
align-items: center;
justify-content: center;
height:36rpx;
min-height:36rpx;
position: absolute;
border-radius: 0px 12rpx 0px 12rpx;
top:0;
right:0;
background-color: #F2EBFE;
}
.shop-mid-view{
margin:0 24rpx;
display: flex;
flex:1;
height:88rpx;
min-height:88rpx;
flex-direction: column;
justify-content: space-between;
}
.shop-mid-view-one{
margin:0 24rpx;
display: flex;
flex:1;
height:88rpx;
min-height:88rpx;
flex-direction: column;
justify-content: center;
}
image{
width:88rpx;
min-width:88rpx;
height:88rpx;
}
}
.shop-item-view {
width: 100%;
min-height: 152rpx;
display: flex;
flex-direction: row;
align-items: center;
padding: 28rpx 28rpx;
box-sizing: border-box;
position: relative;
border-radius: 12rpx;
overflow: hidden;
background-color: #fff;
margin-top: 24rpx;
border: 2rpx solid #e3e3e3;
.jie-bind {
width: 112rpx;
height: 48rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius: 24rpx;
color: #666;
font-size: 24rpx;
// position: absolute;
// right:32rpx;
// bottom:24rpx;
background-color: #f3f3f3;
}
.biao-view {
padding: 0 12rpx;
display: flex;
align-items: center;
justify-content: center;
height: 36rpx;
min-height: 36rpx;
position: absolute;
border-radius: 0px 12rpx 0px 12rpx;
top: 0;
right: 0;
background-color: #f2ebfe;
}
.shop-mid-view {
margin-left: 24rpx;
display: flex;
flex: 1;
height: 88rpx;
min-height: 88rpx;
// flex-direction: column;
align-items: center;
justify-content: space-between;
}
.shop-mid-view-one {
margin: 0 24rpx;
display: flex;
flex: 1;
height: 88rpx;
min-height: 88rpx;
flex-direction: column;
justify-content: center;
}
image {
width: 88rpx;
min-width: 88rpx;
height: 88rpx;
}
}
</style>
@@ -1,212 +1,225 @@
<template>
<u-popup :show="itemShow" mode="bottom" bgColor="transparent">
<view class="select-item">
<view class="select-head">
<view></view>
<text class="text-28 text-fu1">选择地址</text>
<u-icon name="close" color="#333" size="16" @click="onClose"></u-icon>
</view>
<view class="item-mid-view" v-if="data.length">
<view class="item-mid-list" @click="onOk(item)" v-for="(item,index) in data" :key="item.id">
<image src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/no_black_data.png" style="min-width:88rpx;heihgt:88rpx;"></image>
<view class="item-mid-li">
<text class="text-32 text-zu1">BNB Smart Chain(BEP20)</text>
<text class="text-28 text-fu">{{item.addressOne}}</text>
</view>
</view>
</view>
<view class="item-mid-view-two" @click="onAdd" v-if="!data.length">
<image src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/no_black_data.png" class="no-data-black"></image>
<text class="text-28 text-fu mt-48">{{`请先绑定一个区块链账户,用于收款`}}</text>
<view class="add-btn mt-48">
<image src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/add.png" style="margin-right:5rpx;"></image>
<text class="text-32 text-zi text-bold" style="margin-left:5rpx;">添加</text>
</view>
</view>
<!-- <view class="item-bottom-btn" v-if="data.length">
<u-popup :show="itemShow" mode="bottom" bgColor="transparent">
<view class="select-item">
<view class="select-head">
<view></view>
<text class="text-28 text-fu1">选择地址</text>
<u-icon name="close" color="#333" size="16" @click="onClose"></u-icon>
</view>
<view class="item-mid-view" v-if="data.length">
<view
class="item-mid-list"
@click="onOk(item)"
v-for="(item, index) in data"
:key="item.id"
>
<image
src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/no_black_data.png"
style="min-width: 88rpx; heihgt: 88rpx"
></image>
<view class="item-mid-li">
<text class="text-32 text-zu1">券商登记地址</text>
<text class="text-28 text-fu">{{ item.addressOne }}</text>
</view>
</view>
</view>
<view class="item-mid-view-two" @click="onAdd" v-if="!data.length">
<image
src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/no_black_data.png"
class="no-data-black"
></image>
<text class="text-28 text-fu mt-48">{{
`请先绑定一个区块链账户,用于收款`
}}</text>
<view class="add-btn mt-48">
<image
src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/add.png"
style="margin-right: 5rpx"
></image>
<text class="text-32 text-zi text-bold" style="margin-left: 5rpx"
>添加</text
>
</view>
</view>
<!-- <view class="item-bottom-btn" v-if="data.length">
<MyBtn @ok="onOk" text="确定"></MyBtn>
</view> -->
</view>
</u-popup>
</view>
</u-popup>
</template>
<script>
import MyBtn from '@/components/common/my-btn.vue'
import func from '@/utils/func.js';
export default {
data() {
return {
itemSelect:''
}
},
components: { MyBtn },
props:{
itemShow:{
type:Boolean,
default:false
},
itemData:{
type:Array,
default:[]
},
type:{
type:[Number,String],
default:'0'
}
},
computed:{
data(){
let tmp = [];
if(this.itemData && this.itemData.length){
this.itemData.forEach(item=>{
console.log('item',item)
item.addressOne = func.addressTurn(item.account,6);
})
tmp = this.itemData;
}
return tmp || [];
}
},
mounted(){
},
methods: {
onOk(item){
this.$emit('ok',item);
},
onAdd(){
this.$emit('add');
},
onClose(){
this.$emit('close');
}
}
}
import MyBtn from "@/components/common/my-btn.vue";
import func from "@/utils/func.js";
export default {
data() {
return {
itemSelect: "",
};
},
components: { MyBtn },
props: {
itemShow: {
type: Boolean,
default: false,
},
itemData: {
type: Array,
default: [],
},
type: {
type: [Number, String],
default: "0",
},
},
computed: {
data() {
let tmp = [];
if (this.itemData && this.itemData.length) {
this.itemData.forEach((item) => {
console.log("item", item);
item.addressOne = "******" + item.account.slice(-4);
});
tmp = this.itemData;
}
return tmp || [];
},
},
mounted() {},
methods: {
onOk(item) {
this.$emit("ok", item);
},
onAdd() {
this.$emit("add");
},
onClose() {
this.$emit("close");
},
},
};
</script>
<style scoped lang="scss">
.add-btn{
width:100%;
height:72rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
border:2rpx solid #7934f6;
border-radius: 8rpx;
image{
width:32rpx;
height:32rpx;
}
}
.select-item{
width:100%;
min-height:724rpx;
display: flex;
flex-direction: column;
align-items: center;
padding: 0 32rpx 24rpx;
box-sizing: border-box;
background-color: #fff;
border-radius: 24rpx 24rpx 0 0;
.item-bottom-btn{
width:100%;
margin-top:24rpx;
min-height:88rpx;
display: flex;
}
.item-mid-view-two{
width:100%;
height:564rpx;
min-height:564rpx;
display: flex;
flex-direction: column;
align-items: center;
.no-data-black{
width:120rpx;
height:120rpx;
margin-top:120rpx;
}
.add-btn{
width:248rpx;
height:72rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
border:2rpx solid #7934f6;
border-radius: 12rpx;
image{
width:32rpx;
height:32rpx;
}
}
}
.item-mid-view{
width:100%;
height:564rpx;
min-height:564rpx;
display: flex;
flex-direction: column;
align-items: center;
overflow-y: auto;
.item-mid-list{
display: flex;
flex-direction: row;
width:98%;
height:152rpx;
min-height:152rpx;
border-radius: 8rpx;
margin-top:24rpx;
background: #FFFFFF;
border: 1px solid #E3E3E3;
padding: 32rpx;
box-sizing: border-box;
position: relative;
.item-mid-li{
margin-left:24rpx;
flex:1;
display: flex;
flex-direction: column;
justify-content: space-between;
height:88rpx;
}
.show-item-left{
display: flex;
flex-direction: column;
height:88rpx;
min-height:88rpx;
margin-left:24rpx;
}
.item-right-btn{
display: flex;
align-items: center;
justify-content: center;
background-color: #f3f3f3;
border-radius: 24rpx;
position: absolute;
right:28rpx;
}
image{
width:88rpx;
height:88rpx;
border-radius: 44rpx;
}
}
}
.select-head{
width:100%;
height:88rpx;
min-height:88rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
}
</style>
.add-btn {
width: 100%;
height: 72rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
border: 2rpx solid #7934f6;
border-radius: 8rpx;
image {
width: 32rpx;
height: 32rpx;
}
}
.select-item {
width: 100%;
min-height: 724rpx;
display: flex;
flex-direction: column;
align-items: center;
padding: 0 32rpx 24rpx;
box-sizing: border-box;
background-color: #fff;
border-radius: 24rpx 24rpx 0 0;
.item-bottom-btn {
width: 100%;
margin-top: 24rpx;
min-height: 88rpx;
display: flex;
}
.item-mid-view-two {
width: 100%;
height: 564rpx;
min-height: 564rpx;
display: flex;
flex-direction: column;
align-items: center;
.no-data-black {
width: 120rpx;
height: 120rpx;
margin-top: 120rpx;
}
.add-btn {
width: 248rpx;
height: 72rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
border: 2rpx solid #7934f6;
border-radius: 12rpx;
image {
width: 32rpx;
height: 32rpx;
}
}
}
.item-mid-view {
width: 100%;
height: 564rpx;
min-height: 564rpx;
display: flex;
flex-direction: column;
align-items: center;
overflow-y: auto;
.item-mid-list {
display: flex;
flex-direction: row;
width: 98%;
height: 152rpx;
min-height: 152rpx;
border-radius: 8rpx;
margin-top: 24rpx;
background: #ffffff;
border: 1px solid #e3e3e3;
padding: 32rpx;
box-sizing: border-box;
position: relative;
.item-mid-li {
margin-left: 24rpx;
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
height: 88rpx;
}
.show-item-left {
display: flex;
flex-direction: column;
height: 88rpx;
min-height: 88rpx;
margin-left: 24rpx;
}
.item-right-btn {
display: flex;
align-items: center;
justify-content: center;
background-color: #f3f3f3;
border-radius: 24rpx;
position: absolute;
right: 28rpx;
}
image {
width: 88rpx;
height: 88rpx;
border-radius: 44rpx;
}
}
}
.select-head {
width: 100%;
height: 88rpx;
min-height: 88rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
}
</style>
@@ -9,8 +9,8 @@
<view class="select-box" @click="onOk(0)">
<image src="https://cex-pub.s3.ap-southeast-1.amazonaws.com/static/new/shu_0.png"></image>
<view class="select-box-one">
<text class="text-32 text-zu1">区块链数字积分</text>
<text class="text-26 text-fu1">通过区块链兑换</text>
<text class="text-32 text-zu1">券商地址登记</text>
<text class="text-26 text-fu1">通过券商兑换</text>
</view>
<u-icon name="arrow-right" color="#999" size="14" class="select-icon"></u-icon>
</view>