no message

This commit is contained in:
2025-11-11 20:16:15 +08:00
parent ad378f164d
commit 806a074ce7
9 changed files with 1020 additions and 296 deletions
@@ -1,6 +1,6 @@
<template>
<view class="shop-item-view" >
<image :src="type == 0 ? '../../../static/new/zfb.png' : '../../../static/new/wx.png'" ></image>
<image :src="type == 2 ? '../../../static/new/zfb.png' : '../../../static/new/wx.png'" ></image>
<view class="show-item-left">
<text class="text-32 text-zu1">{{itemData.name}}</text>
<text class="text-26 text-fu1">账号:{{itemData.account}}</text>
@@ -0,0 +1,212 @@
<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="/static/new/alpha.png" style="min-width:88rpx;heihgt:88rpx;"></image>
<view class="item-mid-li">
<text class="text-28 text-fu">{{item.account}}</text>
</view>
</view>
</view>
<view class="item-mid-view-two" @click="onAdd" v-if="!data.length">
<image src="/static/new/no_black_data.png" class="no-data-black"></image>
<text class="text-28 text-fu mt-48">{{`请先绑定一个ALPHACEX账户,用于收款`}}</text>
<view class="add-btn mt-48">
<image src="/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>
</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');
}
}
}
</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;
justify-content: center;
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{
flex:1;
display: flex;
flex-direction: column;
justify-content: center;
height:88rpx;
margin-left:24rpx;
}
.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>
@@ -8,21 +8,24 @@
</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="/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="/static/new/no_black_data.png" class="no-data-black"></image>
<text class="text-28 text-fu mt-48">{{`请先添加一个区块链地址`}}</text>
</view>
<view class="item-bottom-btn">
<view class="add-btn" @click="onAdd">
<text class="text-28 text-fu mt-48">{{`请先绑定一个区块链账户,用于收款`}}</text>
<view class="add-btn mt-48">
<image src="/static/new/add.png" style="margin-right:5rpx;"></image>
<text class="text-32 text-zi text-bold" style="margin-left:5rpx;">添加地址</text>
<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>
</template>
@@ -110,7 +113,7 @@ import func from '@/utils/func.js';
.item-bottom-btn{
width:100%;
margin-top:24rpx;
min-height:72rpx;
min-height:88rpx;
display: flex;
}
.item-mid-view-two{
@@ -125,7 +128,20 @@ import func from '@/utils/func.js';
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{
@@ -138,8 +154,7 @@ import func from '@/utils/func.js';
overflow-y: auto;
.item-mid-list{
display: flex;
flex-direction: column;
justify-content: space-between;
flex-direction: row;
width:98%;
height:152rpx;
min-height:152rpx;
@@ -150,6 +165,14 @@ import func from '@/utils/func.js';
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;
+167 -24
View File
@@ -1,43 +1,179 @@
<template>
<view class="content">
<TopSafe bgColor="rgba(0,0,0,0)"></TopSafe>
<Header bgColor="rgba(0,0,0,0)" />
<Header title="账户管理" bgColor="rgba(0,0,0,0)" />
<view class="setting-view">
<u-icon size="54" name="checkmark-circle-fill" style="margin-top:84rpx" color="#7934F6" ></u-icon>
<text class="text-zu text-32 mt-24">提现成功 ¥{{money || 0}}</text>
<text class="text-fu1 text-28 mt-24" style="text-align: center;">由于第三方结算原因,提现成功后可能存在一定延迟请关注提现账户变动情况~</text>
<view class="tab-view">
<view class="tab-list" v-for="(item,index) in tabList" :key="index" @click="onTab(index)">
<text class="text-fu text-28" :style="{color:type == index ? '#7934F6' :'#666' }">{{item}}</text>
<view class="tab-line" v-if="type == index"></view>
</view>
</view>
<view class="mid-view">
<AccountItem :type="type" v-if="type == 2 || type == 3" :itemData="item" @ok="onItemOk" v-for="(item,index) in dataList" :key="index"></AccountItem>
<AccountItemTwo v-if="type == 0 || type == 1" :dataItem="item" @jie="onJie"
v-for="(item,index) in dataList" :key="index"></AccountItemTwo>
</view>
</view>
<view class="bottom-btn">
<MyBtn text="好的我知道了" @ok="onAdd"></MyBtn>
<MyBtn :text="bottomText" @ok="onJump"></MyBtn>
</view>
<up-toast ref="uToastRef"></up-toast>
</view>
</template>
<script>
import { bindWithdraw } from '@/api/common.js';
import { getExchUsers,unbindExchUsers } from '@/api/finance.js';
import { getWithdraw,unbindWithdraw } from '@/api/common.js';
import Header from '@/components/common/header.vue';
import { clear } from '@/utils/auth.js';
import TopSafe from '@/components/common/top-safe.nvue'
import MyBtn from '@/components/common/my-btn.vue'
import func from '@/utils/func.js';
import AccountItem from './components/account-item.vue'
import AccountItemTwo from './components/account-item-two.vue'
export default {
components: { Header, TopSafe,MyBtn,AccountItem },
components: { Header, TopSafe,MyBtn,AccountItem,AccountItemTwo },
data() {
return {
money:''
type:0,
tabList:['区块链账户','Alpha账户','支付宝账户','微信账户'],
bottomText:'',
dataList:[]
};
},
onLoad(option) {
if(option && option.money){
this.money = Number(option.money);
onLoad(option){
if(option.id){
if(option.id == '3'){
this.type = 0;
this.bottomText = '添加区块链账户';
}else if(option.id == '4'){
this.type = 1;
this.bottomText = '添加Alpha账户';
}else if(option.id == '1'){
this.type = 2;
this.bottomText = '添加支付宝账户';
}else{
this.type = 3;
this.bottomText = '添加微信账户';
}
}
},
onShow() {
this.init();
// this.userinfo();
},
methods: {
onAdd(){
uni.navigateBack()
init() {
if(this.type == 0){
this.bottomText = '添加区块链账户';
}else if(this.type == 1){
this.bottomText = '添加Alpha账户';
}else if(this.type == 2){
this.bottomText = '添加支付宝账户';
}else{
this.bottomText = '添加微信账户';
}
// this.userinfo()
// #ifdef WEB
this.tabList = ['区块链账户','Alpha账户','支付宝账户'];
// #endif
this.getList();
},
onJie(item){
let params = {
accountId:item.id
}
unbindExchUsers(params).then(resp=>{
if (resp && resp.bizcode === 100) {
this.$refs.uToastRef.show({
type: 'success',
message: '解绑成功',
});
this.init();
}
})
},
onItemOk(item){
let params = {
bindId:item.id
}
unbindWithdraw(params).then(res=>{
if (res.bizcode === 100) {
this.$refs.uToastRef.show({
type: 'success',
message:'解绑成功',
});
this.init();
} else {
this.$refs.uToastRef.show({
type: 'error',
message: res.msg,
});
return null;
}
})
},
getList(){
if(this.type == 0 || this.type == 1){
let params = {
name:this.type == 0 ? 'WALLET' : 'ALPHACEX'
}
getExchUsers(params).then(res=>{
if (res.bizcode === 100) {
this.dataList = res.data.entitys ? res.data.entitys : [];
} else {
this.$refs.uToastRef.show({
type: 'error',
message: res.msg,
});
return null;
}
})
}else{
getWithdraw({platform:this.type == 2?1:2}).then(res=>{
if (res.bizcode === 100) {
this.dataList = res.data;
this.dataList.forEach(item=>{
item.name = item.accountName;
item.account = item.accountNumber;
})
} else {
this.$refs.uToastRef.show({
type: 'error',
message: res.msg,
});
return null;
}
})
}
},
onTab(index){
if(index != this.type){
this.dataList = [];
this.type = index;
this.init();
}
},
onJump(){
console.log('his.typ',this.type)
if(this.type == 0){
uni.navigateTo({
url:`/pages/rwa_package/account/shuAdd`
})
}else if(this.type == 1){
uni.navigateTo({
url: '/pages/rwa_package/rwa_binding/rwa_binding',
})
}else{
uni.navigateTo({
url:`/pages/rwa_package/account/bind?type=${this.type == 2?0:1}`
})
}
}
}
@@ -68,27 +204,34 @@ export default {
position: relative;
.mid-view{
width:100%;
height:calc(100% - 88rpx);
display: flex;
flex-direction: column;
overflow-y: auto;
padding-bottom: 24rpx;
box-sizing: border-box;
background-color: #fff;
border-radius: 16rpx;
padding: 48rpx 32rpx;
margin-top:24rpx;
.input-view{
}
.tab-view{
width:100%;
height:100rpx;
background-color: #f5f5f5;
border-radius: 20rpx;
margin-top:32rpx;
height:88rpx;
display: flex;
flex-direction: row;
// align-items: center;
.tab-list{
margin-right:32rpx;
height:55rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
.tab-line{
width:50rpx;
height:4rpx;
min-height:4rpx;
background-color: #7934F6;
}
}
}
}
</style>
+4 -4
View File
@@ -4,7 +4,7 @@
<Header bgColor="#fff" title="兑换区块链数字积分" />
<view class="setting-view">
<text class="text-32 text-fu" style="margin:54rpx 0 32rpx">兑换地址</text>
<view class="input-box" style="">
<view class="input-box">
<input style="flex:1"
placeholder="请输入或选择地址"
placeholder-style="color:#999;font-weight:400;"
@@ -160,7 +160,7 @@ export default {
getExchUsers({name:'WALLET'}).then(res=>{
if (res.bizcode === 100) {
this.addressList = [];
this.addressList = res.data.entitys;
this.addressList = res.data.entitys ? res.data.entitys : [];
} else {
this.$refs.uToastRef.show({
type: 'error',
@@ -218,7 +218,7 @@ export default {
// CryptoJS.MD5(form.password).toString();
exchTransfer(params).then(res=>{
if (res.bizcode === 100) {
uni.redirectTo({
uni.navigateTo({
url:`/pages/rwa_package/account/shuSuccess?money=${this.inputThree}`
})
} else {
@@ -243,7 +243,7 @@ export default {
onAdd(){
this.onClose();
uni.navigateTo({
url:'/pages/rwa_package/account/shuAdd'
url:'/pages/rwa_package/account/index?id=3'
})
},
onAll(){
+1 -3
View File
@@ -37,9 +37,7 @@ export default {
},
methods: {
onAdd(){
uni.redirectTo({
url:`/pages/rwa_package/rwa/rwa`
})
uni.navigateBack()
}
}
+9 -6
View File
@@ -1,8 +1,9 @@
<template>
<view class="content top-view">
<TopSafe bgColor="rgba(0,0,0,0)"></TopSafe>
<Header bgColor="rgba(0,0,0,0)" color="#fff" title="数字积分兑换" />
<view class="top-panel">
<TopSafe bgColor="rgba(0,0,0,0)"></TopSafe>
<Header bgColor="rgba(0,0,0,0)" color="#fff" title="数字积分兑换" style="min-height:88rpx;" />
<text class="text-24 text-white" style="margin-top:24rpx">股东行权</text>
<text class="text-88 text-white text-bold" style="margin-top:24rpx">{{ curData ? curData.curAmount : 0 }}
<text class="text-44 text-white">数字积分(TBC)</text>
@@ -69,7 +70,7 @@ export default {
exchUsers(){
getExchUsers().then(res=>{
if (res && res.bizcode === 100) {
this.dataList = res.data.entitys || [];
this.dataList = res.data.entitys ? res.data.entitys : [];
}
})
},
@@ -106,7 +107,7 @@ export default {
})
}else if(index == 1){
uni.navigateTo({
url: '/pages/rwa_package/rwa_binding/rwa_binding',
url: '/pages/rwa_package/rwa_withdrawal/rwa_withdrawal',
})
}
this.onClose();
@@ -134,10 +135,10 @@ export default {
width:100%;
display: flex;
flex-direction: column;
height:calc(100vh - 88rpx - 298rpx - var(--status-bar-height));
height:calc(100vh - 418rpx - 32rpx - var(--status-bar-height));
background-color: #fff;
border-radius: 24rpx 24rpx 0 0;
padding: 0 32rpx;
padding: 0 32rpx 32rpx;
margin-top:32rpx;
box-sizing: border-box;
.bottom-head-view{
@@ -166,10 +167,12 @@ export default {
}
}
.top-panel{
width:100%;
display: flex;
flex-direction: column;
min-height:calc(330rpx + 88rpx + var(--status-bar-height));
padding: 0 32rpx;
box-sizing: border-box;
@@ -0,0 +1,287 @@
<template>
<view class="rwa_withdrawal">
<Header leftTitle="共享计划终止" left-path-type="navigateTo" left-path="/pages/rwa_package/rwa/rwa" rightTitle="记录"
rightPath="/pages/rwa_package/rwa_withdrawal_log/rwa_withdrawal_log?back=withdrawal" rightPathType="navigateTo" />
<view class="rwa_withdrawal_content">
<view class="_content">
<view class="_content_usdt">
<view>{{ categotyObj.name || 'USDT' }}</view>
<view>{{ categotyObj.curAmount || 0 }}</view>
</view>
<view class="_content_item">
<view class="_content_item_title">行权金额</view>
<up-input placeholder="请输入行权金额" border="surround" v-model="form.amount" :customStyle="inputCss"></up-input>
<view class="_content_item_msg">当前可行权余额 {{ categotyObj.curAmount || 0 }} {{ categotyObj.name || 'USDT' }}
</view>
</view>
<view class="_content_item" @click="accountShowCheck(true)">
<view class="_content_item_title">行权账户</view>
<view class="_content_item_account">
<view v-if="accountName">{{ accountName }}</view>
<view v-else style="color: #30313363;">请选择行权账户</view>
<up-image src="/static/common/right.png" width="20" height="20" bgColor="#f1f6ff00" />
</view>
</view>
<view class="_content_item">
<view class="_content_item_title">交易密码<text class="_content_item_setting_pwd"
@click="jumpSettingPwd">《共享计划终止协议》</text></view>
<up-input placeholder="请输入交易密码" border="surround" v-model="form.password" :customStyle="inputCss"></up-input>
</view>
<view class="_content_item">
<view class="_content_item_title">备注</view>
<up-input placeholder="请输入备注(可选)" border="surround" v-model="form.remark" :customStyle="inputCss"></up-input>
</view>
</view>
<view class="add_but_css" @click="addWithdrawal">
提交
</view>
</view>
<DownPopup :show="tipsShow"
title="股权交割协议"
:contentText="text"
articleTitle="股权交割协议"
ok="我已知晓"
@cancel="tipsShow = false"
@ok="tipsShow = false"
></DownPopup>
<up-picker :show="accountShow" :columns="accountOption" keyName="account" itemHeight="34" @confirm="accountConfirm"
:loading="accountLoading" @close="accountShowCheck(false)" @cancel="accountShowCheck(false)"></up-picker>
<up-toast ref="uToastRef"></up-toast>
</view>
</template>
<script>
import Header from '@/components/header.vue';
import { getSupportBank } from '@/api/common.js';
import { getAcctBalance, exchTransfer, getExchUsers } from '@/api/finance.js';
import DownPopup from '@/components/common/down-popup.vue'
import CryptoJS from 'crypto-js';
export default {
components: { Header,DownPopup },
data() {
return {
categotyObj: {},// 可提现金额
inputCss: {
"height": '80rpx',
"background": "#F5F5F5",
"border-radius": "20rpx",
"border": "0rpx",
"padding-left": "16px",
},
form: {
category: "vcoin",
amount: '',
password: '',
acctIdtipsShow: '',
remark: '',
},
accountName: null,
accountShow: false,
accountOption: [],
accountLoading: false,
tipsShow:false,
text:`甲方(委托人):信任桥用户
乙方(受托人): 信任桥(深圳)网络科技有限公司
统一社会信用代码:91440300MAD3XHDP7C
鉴于条款
1. 甲乙双方已签署《消费型合伙人合作协议》《分红权代持协议》及《承诺书》(以下统称“原协议”),甲方通过购买TB信任桥商城产品取得分红权代持资格。
2. 为规范甲方对“TBC”(TrustBridge Coin,信任桥数字权益凭证)的行权行为,明确双方权利义务,现就甲方将TBC转移至交易所变现事宜达成补充约定。
第一条 定义与行权规则
1. TBC行权变现:指甲方向乙方申请将其持有的TBC通过非关联交易所进行行权的行为。
2. 自动失效条款:
 若甲方将TBC转移至非关联交易所进行行权变现,视为甲方单方终止原协议项下所有权利义务。
 甲方行权变现后,立即丧失以下权益:
(1)TB信任桥商城产品分红权;
(2)所有未兑现的分红收益;
第二条 协议终止与责任划分
1. 协议终止:
 甲方触发行权变现条件后,原协议、《分红权代持协议》及《承诺书》自动终止,双方权利义务关系终结。
 乙方有权立即冻结甲方账户,停止后续分红发放。
2. 责任承担:
 甲方承诺行权变现行为合法合规,若因行权行为导致乙方或关联方遭受行政处罚、声誉损失或第三方索赔,甲方应承担全部赔偿责任。
 乙方对甲方行权后的资金流向不承担监管责任。
第三条 特别提示与风险告知
1. 风险警示:
 TBC行权变现可能涉及市场波动、汇率风险及合规风险,甲方应自行承担全部后果。
 乙方不对TBC的流通性、价值稳定性作出任何承诺。
2. 合规要求:
 甲方承诺行权变现资金用途合法,不得用于非法活动或洗钱行为。
 若监管部门要求追溯资金来源或用途,甲方应全力配合并提供证明材料。
第四条 生效条件
1. 本补充协议自甲方点击确认后生效,与原协议具有同等法律效力。
2. 本协议未尽事宜,以原协议约定为准;与原协议冲突的,以本协议为准。`
};
},
onShow() {
this.getAcctBalance();
},
methods: {
// 查询余额
async getAcctBalance() {
const resp = await getAcctBalance();
let data = {};
if (resp && resp.bizcode === 100) {
if (resp.data) {
resp.data.map(item => {
// 交易币
if (item.categoty === "vcoin") {
data = item;
}
})
}
}
this.categotyObj = data;
},
async addWithdrawal() {
this.form.password = CryptoJS.MD5(this.form.password).toString()
const params = this.form;
if (!params.amount) {
this.$refs.uToastRef.show({
type: 'error',
message: "请输入行权金额",
});
return;
}
if (!params.acctId) {
this.$refs.uToastRef.show({
type: 'error',
message: "请选择行权账户",
});
return;
}
if (!params.password) {
this.$refs.uToastRef.show({
type: 'error',
message: "请输入交易密码",
});
return;
}
console.log("params", params);
const resp = await exchTransfer(params);
if (resp && resp.bizcode === 100) {
this.$refs.uToastRef.show({
type: 'success',
message: "提交成功",
});
setTimeout(() => {
uni.navigateTo({
url: '/pages/rwa_package/rwa/rwa',
})
}, 2000)
}
},
// 选择账户的弹框
async accountShowCheck(status) {
if (status) {
this.accountLoading = true;
const params = {
page: 1,
pageSize: 99,
}
const resp = await getExchUsers(params);
if (resp && resp.bizcode === 100) {
this.accountOption = [resp.data.entitys] || [];
}
this.accountLoading = false;
} else {
this.accountOption = [[]];
}
this.accountShow = status;
},
// 提交
accountConfirm(e) {
const {
columnIndex,
value,
values,
index,
} = e;
if (!value || value.length === 0) {
this.$refs.uToastRef.show({
type: 'error',
message: "请先选择账户",
});
return;
}
const data = value[0];
this.form.acctId = data.id;
this.accountName = data.account;
this.accountShowCheck(false);
},
// 设置交易密码
jumpSettingPwd() {
this.tipsShow = true;
// uni.navigateTo({
// url: '/pages/mine_package/mine_transaction_password/mine_transaction_password',
// })
}
}
}
</script>
<style lang="scss">
.rwa_withdrawal {
background: #F5F5F5;
.rwa_withdrawal_content {
padding: 20rpx;
height: calc(100vh - 198rpx);
._content {
padding: 30rpx;
background: #FFFFFF;
border-radius: 24rpx;
margin-bottom: 60rpx;
._content_usdt {
display: flex;
justify-content: space-between;
font-weight: bold;
font-size: 30rpx;
color: #333333;
border-bottom: 2rpx solid #EEEEEE;
padding: 0 0 20rpx;
}
._content_item {
margin-top: 30rpx;
._content_item_title {
margin-bottom: 20rpx;
font-weight: bold;
font-size: 30rpx;
color: #333333;
}
._content_item_setting_pwd {
color: $app-zt-color;
cursor: pointer;
text-decoration: underline;
font-size: 26rpx;
margin-left: 10rpx;
}
._content_item_msg {
font-weight: 500;
font-size: 24rpx;
color: #808080;
margin-top: 16rpx;
}
._content_item_account {
display: flex;
justify-content: space-between;
align-items: center;
background: #F8F8F8;
border-radius: 20rpx;
padding: 30rpx 20rpx;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
}
}
}
</style>
@@ -1,39 +1,68 @@
<template>
<view class="rwa_withdrawal">
<Header leftTitle="共享计划终止" left-path-type="navigateTo" left-path="/pages/rwa_package/rwa/rwa" rightTitle="记录"
rightPath="/pages/rwa_package/rwa_withdrawal_log/rwa_withdrawal_log?back=withdrawal" rightPathType="navigateTo" />
<view class="rwa_withdrawal_content">
<view class="_content">
<view class="_content_usdt">
<view>{{ categotyObj.name || 'USDT' }}</view>
<view>{{ categotyObj.curAmount || 0 }}</view>
<view class="content">
<TopSafe bgColor="#fff"></TopSafe>
<Header bgColor="#fff" title="共享计划终止" >
<template v-slot:right>
<text class="text-32 text-zi" @click="onRight">记录</text>
</template>
</Header>
<view class="setting-view">
<text class="text-32 text-fu" style="margin:54rpx 0 32rpx">行权账户</text>
<view class="input-box" >
<input style="flex:1"
placeholder="请选择账户"
placeholder-style="color:#999;font-weight:400;"
disabled
border="0" v-model="inputOne" :customStyle="inputCss"></input>
<image src="@/static/new/right_icon.png" class="right-img" @click="onSelectAddress"></image>
</view>
<view class="_content_item">
<view class="_content_item_title">行权金额</view>
<up-input placeholder="请输入行权金额" border="surround" v-model="form.amount" :customStyle="inputCss"></up-input>
<view class="_content_item_msg">当前可行权余额 {{ categotyObj.curAmount || 0 }} {{ categotyObj.name || 'USDT' }}
<text class="text-32 text-fu" style="margin:54rpx 0 32rpx">行权金额
<text class="text-zi" @click="jumpSettingPwd">《共享计划终止协议》</text>
</text>
<view class="input-box" style="marign-top:32rpx">
<input style="flex:1"
placeholder="请输入行权金额(最低1TBC)"
placeholder-style="color:#999;font-weight:400;"
@input="onInput"
border="0" v-model="inputThree" :customStyle="inputCss"></input>
<text class="text-zi text-32" @click="onAll">全部</text>
</view>
<text class="text-28 text-fu" style="margin-top:28rpx">余额 {{money}} TBC</text>
<text class="text-32 text-fu" style="margin:54rpx 0 32rpx">支付密码</text>
<view class="input-box" style="marign-top:32rpx;margin-bottom:32rpx" >
<input style="flex:1"
:type="isEve ? 'text' : 'password'"
placeholder="请输入支付密码"
placeholder-style="color:#999;font-weight:400;"
@input="onInputTwo"
border="0" v-model="inputFour" :customStyle="inputCss"></input>
<image @click="onIsSys" :src="`/static/new/eye_${isEve}.png`" class="right-img"></image>
</view>
<text class="text-32 text-fu" style="marign-top:32rpx;margin-bottom:32rpx">备注:</text>
<view class="input-box" style="marign-top:32rpx">
<input style="flex:1"
placeholder="请输入备注"
placeholder-style="color:#999;font-weight:400;"
border="0" v-model="inputTwo" :customStyle="inputCss"></input>
</view>
</view>
<view class="_content_item" @click="accountShowCheck(true)">
<view class="_content_item_title">行权账户</view>
<view class="_content_item_account">
<view v-if="accountName">{{ accountName }}</view>
<view v-else style="color: #30313363;">请选择行权账户</view>
<up-image src="/static/common/right.png" width="20" height="20" bgColor="#f1f6ff00" />
<view class="bottom-btn">
<!-- <view class="bottom-top">
<image src="/static/new/icon.png"></image>
<text class="text-24 text-zi">为了保障用户体验感,额外赠送0.0001主网gas</text>
</view> -->
<view class="bottom-view">
<view class="bottom-left">
<text class="text-24 text-fu1">到账数量</text>
<text class="text-32 text-zu text-bold">{{inputThree || 0}}
<text class="text-26">TBC</text>
</text>
</view>
</view>
<view class="_content_item">
<view class="_content_item_title">交易密码<text class="_content_item_setting_pwd"
@click="jumpSettingPwd">《共享计划终止协议》</text></view>
<up-input placeholder="请输入交易密码" border="surround" v-model="form.password" :customStyle="inputCss"></up-input>
</view>
<view class="_content_item">
<view class="_content_item_title">备注</view>
<up-input placeholder="请输入备注(可选)" border="surround" v-model="form.remark" :customStyle="inputCss"></up-input>
</view>
</view>
<view class="add_but_css" @click="addWithdrawal">
提交
<MyBtn text="兑换" @ok="onC" wd="346rpx" br="8rpx"></MyBtn>
</view>
</view>
<DownPopup :show="tipsShow"
@@ -44,244 +73,273 @@
@cancel="tipsShow = false"
@ok="tipsShow = false"
></DownPopup>
<up-picker :show="accountShow" :columns="accountOption" keyName="account" itemHeight="34" @confirm="accountConfirm"
:loading="accountLoading" @close="accountShowCheck(false)" @cancel="accountShowCheck(false)"></up-picker>
<SelectLian :itemShow="addressShow" :itemData="addressList" @ok="onOk" @add="onAdd"
@close="onClose"></SelectLian>
<up-toast ref="uToastRef"></up-toast>
</view>
</template>
<script>
import Header from '@/components/header.vue';
import { getSupportBank } from '@/api/common.js';
import { getAcctBalance, exchTransfer, getExchUsers } from '@/api/finance.js';
import { getExchUsers,exchTransfer,getAcctBalance } from '@/api/finance.js';
import Header from '@/components/common/header.vue';
import { clear } from '@/utils/auth.js';
import TopSafe from '@/components/common/top-safe.nvue'
import MyBtn from '@/components/common/my-btn.vue'
import func from '@/utils/func.js';
import SelectLian from '@/pages/rwa_package/account/components/select-lian-two.vue'
import DownPopup from '@/components/common/down-popup.vue'
import CryptoJS from 'crypto-js';
import CryptoJS from "crypto-js";
export default {
components: { Header,DownPopup },
components: { DownPopup,Header, TopSafe,MyBtn,SelectLian },
data() {
return {
categotyObj: {},// 可提现金额
money:'',
isEve:0,
tipsShow:false,
inputOne:'',
inputTwo:'',
addressList:[],
addressShow:false,
inputThree:'',
id:'',
inputFour:'',
inputCss: {
"height": '80rpx',
"background": "#F5F5F5",
"border-radius": "20rpx",
"background": "#F3F3F3FF",
"border-radius": "30rpx",
"border": "0rpx",
"padding-left": "16px",
"padding-left": "12rpx",
},
form: {
category: "vcoin",
amount: '',
password: '',
acctIdtipsShow: '',
remark: '',
},
accountName: null,
accountShow: false,
accountOption: [],
accountLoading: false,
tipsShow:false,
text:`甲方(委托人):信任桥用户
乙方(受托人): 信任桥(深圳)网络科技有限公司
统一社会信用代码:91440300MAD3XHDP7C
鉴于条款
1. 甲乙双方已签署《消费型合伙人合作协议》《分红权代持协议》及《承诺书》(以下统称“原协议”),甲方通过购买TB信任桥商城产品取得分红权代持资格。
2. 为规范甲方对“TBC”(TrustBridge Coin,信任桥数字权益凭证)的行权行为,明确双方权利义务,现就甲方将TBC转移至交易所变现事宜达成补充约定。
第一条 定义与行权规则
1. TBC行权变现:指甲方向乙方申请将其持有的TBC通过非关联交易所进行行权的行为。
2. 自动失效条款:
 若甲方将TBC转移至非关联交易所进行行权变现,视为甲方单方终止原协议项下所有权利义务。
 甲方行权变现后,立即丧失以下权益:
(1)TB信任桥商城产品分红权;
(2)所有未兑现的分红收益;
第二条 协议终止与责任划分
1. 协议终止:
 甲方触发行权变现条件后,原协议、《分红权代持协议》及《承诺书》自动终止,双方权利义务关系终结。
 乙方有权立即冻结甲方账户,停止后续分红发放。
2. 责任承担:
 甲方承诺行权变现行为合法合规,若因行权行为导致乙方或关联方遭受行政处罚、声誉损失或第三方索赔,甲方应承担全部赔偿责任。
 乙方对甲方行权后的资金流向不承担监管责任。
第三条 特别提示与风险告知
1. 风险警示:
 TBC行权变现可能涉及市场波动、汇率风险及合规风险,甲方应自行承担全部后果。
 乙方不对TBC的流通性、价值稳定性作出任何承诺。
2. 合规要求:
 甲方承诺行权变现资金用途合法,不得用于非法活动或洗钱行为。
 若监管部门要求追溯资金来源或用途,甲方应全力配合并提供证明材料。
第四条 生效条件
1. 本补充协议自甲方点击确认后生效,与原协议具有同等法律效力。
2. 本协议未尽事宜,以原协议约定为准;与原协议冲突的,以本协议为准。`
乙方(受托人): 信任桥(深圳)网络科技有限公司
统一社会信用代码:91440300MAD3XHDP7C
鉴于条款
1. 甲乙双方已签署《消费型合伙人合作协议》《分红权代持协议》及《承诺书》(以下统称“原协议”),甲方通过购买TB信任桥商城产品取得分红权代持资格。
2. 为规范甲方对“TBC”(TrustBridge Coin,信任桥数字权益凭证)的行权行为,明确双方权利义务,现就甲方将TBC转移至交易所变现事宜达成补充约定。
第一条 定义与行权规则
1. TBC行权变现:指甲方向乙方申请将其持有的TBC通过非关联交易所进行行权的行为。
2. 自动失效条款:
 若甲方将TBC转移至非关联交易所进行行权变现,视为甲方单方终止原协议项下所有权利义务。
 甲方行权变现后,立即丧失以下权益:
(1)TB信任桥商城产品分红权;
(2)所有未兑现的分红收益;
第二条 协议终止与责任划分
1. 协议终止:
 甲方触发行权变现条件后,原协议、《分红权代持协议》及《承诺书》自动终止,双方权利义务关系终结。
 乙方有权立即冻结甲方账户,停止后续分红发放。
2. 责任承担:
 甲方承诺行权变现行为合法合规,若因行权行为导致乙方或关联方遭受行政处罚、声誉损失或第三方索赔,甲方应承担全部赔偿责任。
 乙方对甲方行权后的资金流向不承担监管责任。
第三条 特别提示与风险告知
1. 风险警示:
 TBC行权变现可能涉及市场波动、汇率风险及合规风险,甲方应自行承担全部后果。
 乙方不对TBC的流通性、价值稳定性作出任何承诺。
2. 合规要求:
 甲方承诺行权变现资金用途合法,不得用于非法活动或洗钱行为。
 若监管部门要求追溯资金来源或用途,甲方应全力配合并提供证明材料。
第四条 生效条件
1. 本补充协议自甲方点击确认后生效,与原协议具有同等法律效力。
2. 本协议未尽事宜,以原协议约定为准;与原协议冲突的,以本协议为准。`
};
},
onShow() {
this.getAcctBalance();
onShow(){
this.acctBalance();
this.getExchUsersList();
},
methods: {
// 查询余额
async getAcctBalance() {
const resp = await getAcctBalance();
let data = {};
if (resp && resp.bizcode === 100) {
if (resp.data) {
resp.data.map(item => {
// 交易币
if (item.categoty === "vcoin") {
data = item;
}
})
}
}
this.categotyObj = data;
},
async addWithdrawal() {
this.form.password = CryptoJS.MD5(this.form.password).toString()
const params = this.form;
if (!params.amount) {
this.$refs.uToastRef.show({
type: 'error',
message: "请输入行权金额",
});
return;
}
if (!params.acctId) {
this.$refs.uToastRef.show({
type: 'error',
message: "请选择行权账户",
});
return;
}
if (!params.password) {
this.$refs.uToastRef.show({
type: 'error',
message: "请输入交易密码",
});
return;
}
console.log("params", params);
const resp = await exchTransfer(params);
if (resp && resp.bizcode === 100) {
this.$refs.uToastRef.show({
type: 'success',
message: "提交成功",
});
setTimeout(() => {
onRight(){
uni.navigateTo({
url: '/pages/rwa_package/rwa/rwa',
url:'/pages/rwa_package/rwa_withdrawal_log/rwa_withdrawal_log?back=withdrawal'
})
}, 2000)
}
},
// 选择账户的弹框
async accountShowCheck(status) {
if (status) {
this.accountLoading = true;
const params = {
page: 1,
pageSize: 99,
}
const resp = await getExchUsers(params);
acctBalance() {
getAcctBalance().then(resp=>{
if (resp && resp.bizcode === 100) {
this.accountOption = [resp.data.entitys] || [];
resp.data.forEach(item=>{
if(item.categoty == 'vcoin'){
this.money = item.curAmount;
}
this.accountLoading = false;
} else {
this.accountOption = [[]];
})
}
this.accountShow = status;
},
// 提交
accountConfirm(e) {
const {
columnIndex,
value,
values,
index,
} = e;
if (!value || value.length === 0) {
this.$refs.uToastRef.show({
type: 'error',
message: "请先选择账户",
});
return;
}
const data = value[0];
this.form.acctId = data.id;
this.accountName = data.account;
this.accountShowCheck(false);
},
// 设置交易密码
jumpSettingPwd() {
this.tipsShow = true;
// uni.navigateTo({
// url: '/pages/mine_package/mine_transaction_password/mine_transaction_password',
// })
},
getExchUsersList(){
getExchUsers({name:'ALPHACEX'}).then(res=>{
if (res.bizcode === 100) {
this.addressList = [];
this.addressList = res.data.entitys ? res.data.entitys : [];
} else {
this.$refs.uToastRef.show({
type: 'error',
message: res.msg,
});
return null;
}
})
},
onC(){
if(!this.inputOne){
this.$refs.uToastRef.show({
type: 'error',
message: '账户不可为空',
});
return;
}
if(!this.inputThree){
this.$refs.uToastRef.show({
type: 'error',
message: '请输入金额',
});
return;
}
if(Number(this.inputThree) < 1){
this.$refs.uToastRef.show({
type: 'error',
message: '最低1TBC',
});
return;
}
if(this.inputFour.length < 6){
this.$refs.uToastRef.show({
type: 'error',
message: '请输入6位密码',
});
return;
}
let params = {
category:'vcoin',
name:'ALPHACEX',
password:CryptoJS.MD5(this.inputFour).toString(),
amount:this.inputThree,
acctId:this.id,
remark: this.inputTwo,
}
// CryptoJS.MD5(form.password).toString();
exchTransfer(params).then(res=>{
if (res.bizcode === 100) {
uni.navigateTo({
url:`/pages/rwa_package/account/shuSuccess?money=${this.inputThree}`
})
} else {
this.$refs.uToastRef.show({
type: 'error',
message: res.msg,
});
return null;
}
})
},
onSelectAddress(){
this.addressShow = true;
},
onClose(){
this.addressShow = false;
},
onOk(item){
this.id = item.id;
this.inputOne = item.account;
this.onClose();
},
onAdd(){
this.onClose();
uni.navigateTo({
url:'/pages/rwa_package/account/index?id=4'
})
},
onAll(){
this.inputThree = this.money;
},
onInputTwo(e){
this.$nextTick(() => {
this.inputFour = func.checkInputNum(e.detail.value,null,6);
})
},
onInput(e){
this.$nextTick(() => {
this.inputThree = func.checkInputPrice(e.detail.value,this.money);
})
},
onIsSys(){
this.isEve = this.isEve == 1?0:1;
}
}
}
</script>
<style lang="scss">
.rwa_withdrawal {
background: #F5F5F5;
.rwa_withdrawal_content {
padding: 20rpx;
height: calc(100vh - 198rpx);
._content {
padding: 30rpx;
background: #FFFFFF;
border-radius: 24rpx;
margin-bottom: 60rpx;
._content_usdt {
<style lang="scss" scoped>
.bottom-btn{
width: 100%;
// margin-bottom:230rpx;
height:136rpx;
min-height:136rpx;
background-color: #fff;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
font-weight: bold;
font-size: 30rpx;
color: #333333;
border-bottom: 2rpx solid #EEEEEE;
padding: 0 0 20rpx;
}
._content_item {
margin-top: 30rpx;
._content_item_title {
margin-bottom: 20rpx;
font-weight: bold;
font-size: 30rpx;
color: #333333;
}
._content_item_setting_pwd {
color: $app-zt-color;
cursor: pointer;
text-decoration: underline;
font-size: 26rpx;
margin-left: 10rpx;
}
._content_item_msg {
font-weight: 500;
font-size: 24rpx;
color: #808080;
margin-top: 16rpx;
}
._content_item_account {
box-sizing: border-box;
position: relative;
.bottom-view{
width:100%;
height:136rpx;
min-height:136rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 0 32rpx;
background-color: #fff;
box-sizing: border-box;
border-top:1rpx solid #ECECEC;
.bottom-left{
height:70rpx;
min-height:70rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
}
.setting-view {
width: 100%;
height: calc(100% - 88rpx - 136rpx - var(--status-bar-height));
display: flex;
flex-direction: column;
overflow-y: auto;
box-sizing: border-box;
position: relative;
background-color: #fff;
padding: 0 32rpx;
box-sizing: border-box;
.input-box{
width:100%;
height:100rpx;
min-height:100rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
background: #F8F8F8;
border-radius: 20rpx;
padding: 30rpx 20rpx;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
background: #F5F5F5;
border-radius: 16rpx;
padding: 0 32rpx;
box-sizing: border-box;
position: relative;
.right-img{
width:44rpx;
height:44rpx;
}
}
}
</style>