Browse Source

合并提交

master
j1ack 3 years ago
parent
commit
24d5f83892
  1. 9
      App.vue
  2. 2
      components/cardHeader/cardHeader.vue
  3. 3
      main.js
  4. 152
      pages/charity/details.vue
  5. 76
      pages/charity/index.vue
  6. 163
      pages/home/index.vue
  7. 73
      pages/me/changeWithdrawalPassword.vue
  8. 62
      pages/me/donateRecord.vue
  9. 25
      pages/me/index.vue
  10. 81
      pages/me/notification.vue
  11. 39
      pages/me/notificationDetails.vue
  12. 30
      pages/me/transfer.vue
  13. 111
      pages/me/walletHistory.vue
  14. 123
      pages/withdrawal/addOrEditBankCard.vue
  15. 2
      utils/api.js
  16. 14
      utils/axios.js
  17. 2
      utils/index.js
  18. 11
      utils/language/en_US.js

9
App.vue

@ -1,4 +1,5 @@
<script> <script>
import api from '@/utils/api'
export default { export default {
// computed: { // computed: {
// i18n() { // i18n() {
@ -7,8 +8,12 @@ export default {
// }, // },
onLaunch: function () { onLaunch: function () {
console.log('App Launch') console.log('App Launch')
api.indexInfo().then(res => {
uni.setStorageSync('coinTypeInfo',res)
})
}, },
onShow: function () { onShow: function () {
console.log('App Show') console.log('App Show')
}, },
onHide: function () { onHide: function () {
@ -20,7 +25,9 @@ export default {
<style lang="scss"> <style lang="scss">
/*每个页面公共css */ /*每个页面公共css */
@import "uview-ui/index.scss"; @import "uview-ui/index.scss";
/deep/ .u-loadmore__content__text {
line-height: 50rpx !important;
}
/deep/body { /deep/body {
// max-width: 828rpx; // // max-width: 828rpx; //
// margin: auto !important; // margin: auto !important;

2
components/cardHeader/cardHeader.vue

@ -98,7 +98,7 @@ export default {
position: absolute; position: absolute;
right: 20rpx; right: 20rpx;
display: inline-block; display: inline-block;
width: 202rpx; // width: 202rpx;
height: 64rpx; height: 64rpx;
border-radius: 16rpx; border-radius: 16rpx;
line-height: 64rpx; line-height: 64rpx;

3
main.js

@ -5,7 +5,7 @@ import VueI18n from 'vue-i18n'
import axios from './utils/axios.js' import axios from './utils/axios.js'
import store from './store' import store from './store'
import index from './utils/index.js'
// 多国语言 // 多国语言
import EN from './utils/language/en_US.js' import EN from './utils/language/en_US.js'
import ZH from './utils/language/zh_TW.js' import ZH from './utils/language/zh_TW.js'
@ -34,6 +34,7 @@ const i18n = new VueI18n({
Vue.prototype.$store = store Vue.prototype.$store = store
Vue.prototype.$axios = axios Vue.prototype.$axios = axios
Vue.prototype.$index = index
Vue.prototype.$_i18n = i18n Vue.prototype.$_i18n = i18n
// #ifndef VUE3 // #ifndef VUE3

152
pages/charity/details.vue

@ -5,52 +5,35 @@
<view class="body"> <view class="body">
<view class="titleBody"> <view class="titleBody">
<!-- 海报 --> <!-- 海报 -->
<u--image class="img" :showLoading="true" src="../../static/charity/Rectangle 2.png" width="750rpx" <u--image class="img" :showLoading="true" :src="baseURL+detail.charityDetails.img" width="750rpx"
height="762rpx"></u--image> height="762rpx"></u--image>
<!-- 文章标题 --> <!-- 文章标题 -->
<view class="title">New Balance Raff Simons Bright </view> <view class="title">{{detail.charityDetails.title}}</view>
</view> </view>
<view class="contentBody"> <view class="contentBody">
<view class="about">{{ i18n.About }}</view> <view class="about">{{ i18n.About }}</view>
<!-- 文字内容 --> <!-- 文字内容 -->
<view class="content">Minimum deposit amount: 10 USDT. Deposit less than the minimum amount will not be <view class="content" v-html="detail.charityDetails.content"></view>
posted
and cannot be returned
This address is your latest deposit address. When the system receives deposit, it will be
automatically
credited to the accountThe transfer needs to be confirmed by the entire blockchain network. When it
reaches 10 network confirmations, your USDT will be automatically deposit into the account
Minimum deposit amount: 10 USDT. Deposit less than the minimum amount will not be posted and cannot
be
returned
This address is your latest deposit address. When the system receives deposit, it will be
automatically
credited to the accountThe transfer needs to be confirmed by the entire blockchain network. When it
reaches 10 network confirmations, your USDT will be automatically deposit into the accountMinimum
deposit amount: 10 USDT. Deposit less than the minimum amount will not be posted and cannot be
returned
This address is your latest deposit address. When the </view>
<!-- 捐赠详情 --> <!-- 捐赠详情 -->
<view class="Participants"> <view class="Participants">
<view class="title">{{ i18n.Participants }}</view> <view class="title">{{ i18n.Participants }}</view>
<!-- 进度条 --> <!-- 进度条 -->
<u-line-progress class="progressbar" :showText="false" :percentage="50" activeColor="#00E8A2" <u-line-progress class="progressbar" :showText="false" :percentage="detail.charityDetails.percentage" activeColor="#00E8A2"
height="32rpx"> height="32rpx">
</u-line-progress> </u-line-progress>
<!-- 百分比 --> <!-- 百分比 -->
<view class="progress">50%</view> <view class="progress">{{detail.charityDetails.percentage}}%</view>
<!-- 捐赠用户头像 --> <!-- 捐赠用户头像 -->
<view class="userIconList"> <view class="userIconList">
<u--image v-for="(item, index) in 10" :key="index" class="userIcon" :showLoading="true" <u--image v-for="(item, index) in detail.headerImgList" :key="index" class="userIcon" :showLoading="true"
src="../../static/charity/Ellipse 502.png" width="64rpx" height="64rpx"></u--image> :src="baseURL+item.headImgPath" width="64rpx" height="64rpx"></u--image>
</view> </view>
</view> </view>
<!-- 按钮 --> <!-- 按钮 -->
<u-button class="button" color="#00E8A2" throttleTime="500" @click="DonatePopupShow = true">{{ <u-button class="button" color="#00E8A2" throttleTime="500" @click="DonatePopupShow = true" :disabled="detail.charityDetails.status!='open'">
i18n.DonateNow {{detail.charityDetails.status!='open'?i18n.Closeddonation:i18n.DonateNow}}
}}
</u-button> </u-button>
<!-- DonateNow按钮通知弹出层 --> <!-- DonateNow按钮通知弹出层 -->
@ -60,30 +43,30 @@
<view class="close" @click="DonatePopupShow = false"></view> <view class="close" @click="DonatePopupShow = false"></view>
<u--form class="form" :model="coinInfo" :rules="rules" ref="form1" errorType="toast"> <u--form class="form" :model="coinInfo" :rules="rules" ref="form1" errorType="toast">
<!-- coin选择框 --> <!-- coin选择框 -->
<u-form-item class="input-item" prop="verificationCode" ref="item1"> <u-form-item class="input-item" prop="coinCode" ref="item1">
<u-input class="input" v-model="coinInfo.verificationCode" color="#fff" fontSize="32rpx" <u-input class="input" color="#fff" fontSize="32rpx"
border="none" :placeholder="i18n.PleaseChooseCoin"> border="none" :placeholder="i18n.PleaseChooseCoin" :disabled="true">
</u-input> </u-input>
<view class="selectCoinBtn" @click="USDTPopupShow = true">USDT <view class="selectCoinBtn" @click="USDTPopupShow = true">{{coinInfo.coinCode}}
</view> </view>
</u-form-item> </u-form-item>
<view class="Available">{{ i18n.AvailableBlance }}:0USDT</view> <view class="Available">{{ i18n.AvailableBlance }}:{{detail.userCapital}}{{" "}}{{detail.coins[0].enname}}</view>
<!-- 数量 --> <!-- 数量 -->
<u-form-item class="input-item" prop="number" ref="item1"> <u-form-item class="input-item" prop="amount" ref="item1">
<u-input class="input" v-model="coinInfo.number" color="#fff" fontSize="32rpx" <u-input class="input" v-model="coinInfo.amount" color="#fff" fontSize="32rpx"
border="none" :placeholder="i18n.Quantity"> border="none" :placeholder="i18n.Quantity">
</u-input> </u-input>
</u-form-item> </u-form-item>
<!-- 密码 --> <!-- 密码 -->
<u-form-item class="input-item" prop="password" ref="item1"> <u-form-item class="input-item" prop="payPassword" ref="item1">
<u-input class="input" v-model="coinInfo.password" color="#fff" fontSize="32rpx" <u-input class="input" v-model="coinInfo.payPassword" color="#fff" fontSize="32rpx"
border="none" :placeholder="i18n.WithdrawalPassword"> border="none" :placeholder="i18n.WithdrawalPassword">
</u-input> </u-input>
</u-form-item> </u-form-item>
</u--form> </u--form>
<u-button class="button" color="#00E8A2" throttleTime="500" :disabled="DonatePopupDisabled" <u-button class="button" color="#00E8A2" throttleTime="500" :disabled="DonatePopupDisabled"
@click="DonatePopupShow = false">{{ i18n.DonateNow }} @click="donate" :throttleTime="500">{{ i18n.DonateNow }}
</u-button> </u-button>
</view> </view>
</u-popup> </u-popup>
@ -96,17 +79,16 @@
<view class="close" @click="USDTPopupShow = false"></view> <view class="close" @click="USDTPopupShow = false"></view>
<scroll-view scroll-y="true" style="height: 580rpx;" scroll-with-animation="true" <scroll-view scroll-y="true" style="height: 580rpx;" scroll-with-animation="true"
@touchmove.stop.prevent=""> @touchmove.stop.prevent="">
<radio-group class="radioGroup" @change="radioChange" v-model="radioValue"> <radio-group class="radioGroup" v-model="radioValue">
<label class="checkBox" v-for="(item, index) in 40" :key="index"> <label class="checkBox" v-for="(item, index) in detail.coins" :key="index" @click="radioChange(item)">
<view class="icon"> <view class="icon">
<u-icon name="../../static/maskets/bye.png" size="52rpx" width="52rpx"></u-icon> <u-icon :name="baseURL+'/coins/'+item.enname+'.png'" size="52rpx" width="52rpx"></u-icon>
</view> </view>
<view class="iconName"> <view class="iconName">
<view class="top">USDT</view> <view class="top">{{item.enname}}</view>
<view class="bottom">BTC</view> <view class="bottom">{{item.useCapital}}{{" "}}{{item.code}}</view>
</view> </view>
<radio color="#00E8A2" shape="square" :checked="coinInfo.coinCode==item.enname"></radio>
<radio color="#00E8A2" shape="square"></radio>
</label> </label>
</radio-group> </radio-group>
@ -127,39 +109,97 @@
</template> </template>
<script> <script>
import UButton from '../../uview-ui/components/u-button/u-button' import UButton from '../../uview-ui/components/u-button/u-button'
export default { import api from '@/utils/api'
import constant from '@/utils/constant.js';
import md5 from 'js-md5'
export default {
name: "charityDetails", name: "charityDetails",
data() { data() {
return { return {
id:'',
baseURL:'',
DonatePopupShow: false, DonatePopupShow: false,
USDTPopupShow: false, USDTPopupShow: false,
DonatePopupDisabled: true, coinInfo: {
coinInfo: {}, amount:null,
rules: {}, coinCode:null,
payPassword:null,
},
rules: {
},
radioValue: '', radioValue: '',
detail:{},
}; };
}, },
computed: { computed: {
i18n() { i18n() {
return this.$t("charity"); return this.$t("charity");
}, },
DonatePopupDisabled() {
if (this.coinInfo.amount && this.coinInfo.coinCode && this.coinInfo.payPassword) {
return false
} else {
return true
}
}
}, },
onLoad() { onLoad(res) {
this.baseURL = constant.BASE_URL
this.id=res.id
this.getDetail(this.id)
// console.log(this.$t('login.emailInputMessage')); // console.log(this.$t('login.emailInputMessage'));
}, },
onShow() { }, onShow() {},
methods: { methods: {
//
donate() {
if(this.coinInfo.amount>this.detail.userCapital){
uni.$u.toast(this.$t("login").Insufficient)
return;
}
let coinInfo = {
charityId:this.detail.charityDetails.id,
amount:this.coinInfo.amount,
coinCode:this.coinInfo.coinCode2,
payPassword:md5(this.coinInfo.payPassword),
}
api.charitySubmit(coinInfo).then(res => {
uni.$u.toast(this.$t("login").Donationsucceeded)
setTimeout(()=>{
this.getDetail(this.id)
this.DonatePopupShow = false
},600)
})
},
radioChange(e) { radioChange(e) {
// console.log(e); this.coinInfo.coinCode=e.enname
} this.coinInfo.coinCode2=e.code
},
getDetail(id) {
api.showCharityDetails({
charityId:id
}).then(res => {
this.detail=res;
this.coinInfo.coinCode=this.detail.coins[0].enname
this.coinInfo.coinCode2=this.detail.coins[0].code
})
}, },
components: { UButton } },
} components: {
UButton
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { /deep/ .u-input{
background: #323045 !important;
}
.main {
.body { .body {
overflow: hidden; overflow: hidden;
@ -415,5 +455,5 @@ export default {
} }
} }
</style> </style>

76
pages/charity/index.vue

@ -2,55 +2,105 @@
<view class="main"> <view class="main">
<!-- 列表 --> <!-- 列表 -->
<view class="charityList"> <view class="charityList">
<view class="item" v-for="(item, index) in 10" :key="index" @click="goto(index)"> <view class="item" v-for="(item, index) in userInfoObj" :key="index" @click="goto(item.id)">
<u--image class="img" :showLoading="true" src="../../static/charity/Rectangle 2.png" width="318rpx" <u--image class="img" :showLoading="true" :src="baseURL+item.img" width="318rpx"
height="230rpx"></u--image> height="230rpx"></u--image>
<view class="title">New Balance Raff Simons Bright Bright </view> <view class="title">{{item.title}} </view>
<view class="target">Target: $1309348</view> <view class="target">Target: {{item.targetAmount}}{{" "}}{{coinTypeInfo.system_cropto_code}}</view>
<u-line-progress class="progressbar" :showText="(index * 10) > 18" :percentage="index * 10" <u-line-progress class="progressbar" :percentage="item.percentage"
activeColor="#00E8A2" height="22rpx"> activeColor="#00E8A2" height="22rpx">
</u-line-progress> </u-line-progress>
</view> </view>
</view> </view>
<u-empty :text="i18n.Dataisempty" mode="data" v-if="userInfoObj.length==0"></u-empty>
<u-loadmore :status="loadStatus" :loading-text="loadingText" :loadmore-text="loadmoreText"
:nomore-text="nomoreText" v-if="userInfoObj.length" height="80" />
<!-- tabBar --> <!-- tabBar -->
<tab-bar :selectActive="3"></tab-bar> <tab-bar :selectActive="3"></tab-bar>
</view> </view>
</template> </template>
<script> <script>
export default { import api from '@/utils/api'
import constant from '@/utils/constant.js';
export default {
name: 'charity', name: 'charity',
data() { data() {
return { return {
isLoadMore: false, //
loadStatus: 'loadmore',
loadingText: this.$t("login").toload,
loadmoreText: this.$t("login").pullup,
nomoreText: this.$t("login").Nomore,
form: {
pageNumber: 1,
pageSize: 20,
ways: 'exchange',
},
userInfoObj: [],
baseURL:'',
} }
}, },
onLoad() { onLoad() {
this.baseURL = constant.BASE_URL
this.getList()
}, },
onShow() { onShow() {
}, },
onHide() { onHide() {},
onReachBottom() {
if (!this.isLoadMore) {
this.form.pageNumber += 1
this.getList();
}
}, },
computed: { computed: {
i18n() { i18n() {
return this.$t('markets') return this.$t('markets')
},
//
coinTypeInfo(){
return uni.getStorageSync('coinTypeInfo')
} }
}, },
methods: { methods: {
//
getList() {
this.isLoadMore = true
api.charityList(this.form).then(res => {
if (res.charityList.content.length) {
if (this.form.pageNumber > 1) {
this.userInfoObj = this.userInfoObj.concat(res.charityList.content)
} else {
this.userInfoObj = res.charityList.content
}
if (this.userInfoObj.length >= Number(res.charityList.totalElements)) { //
this.isLoadMore = true
this.loadStatus = 'nomore'
} else {
this.isLoadMore = false
}
} else {
this.isLoadMore = true
this.loadStatus = 'nomore'
this.userInfoObj = []
}
this.$forceUpdate()
})
},
goto(index) { goto(index) {
uni.navigateTo({ uni.navigateTo({
url: `/pages/charity/details?id=${index}` url: `/pages/charity/details?id=${index}`
}); });
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
padding-bottom: 198rpx; // TabBar padding-bottom: 198rpx; // TabBar
.charityList { .charityList {
@ -114,5 +164,5 @@ export default {
} }
</style> </style>

163
pages/home/index.vue

@ -1,4 +1,3 @@
原始文件 原始文件
永久链接 永久链接
Blame Blame
@ -7,7 +6,7 @@ Blame
<view class="main"> <view class="main">
<!-- nav --> <!-- nav -->
<view class="nav-head"> <view class="nav-head">
<u-button class="serviceButton" color="#323045">{{ i18n.customerService }}</u-button> <u-button class="serviceButton" color="#323045" @click="getContact">{{ i18n.customerService }}</u-button>
<view class="languageBtn" @click.stop="languageShow = true"> <view class="languageBtn" @click.stop="languageShow = true">
{{ langTrue }} {{ langTrue }}
</view> </view>
@ -21,11 +20,11 @@ Blame
<u-swiper class="swiper" :list="swiperList" previousMargin="48rpx" nextMargin="80rpx" circular :autoplay="true" <u-swiper class="swiper" :list="swiperList" previousMargin="48rpx" nextMargin="80rpx" circular :autoplay="true"
radius="32rpx" bgColor="rgba(0,0,0,0)" height="360rpx"></u-swiper> radius="32rpx" bgColor="rgba(0,0,0,0)" height="360rpx"></u-swiper>
<!-- 消息 --> <!-- 消息 -->
<view class="message" @click="popupShow = true"> <view class="message">
<u-icon class="icon" name="../../static/home/ic_proclamation.png" size="60rpx" width="60rpx"></u-icon> <u-icon class="icon" name="../../static/home/ic_proclamation.png" size="60rpx" width="60rpx"></u-icon>
<!-- <view class="text">{{ i18n.homeMessage }}</view> --> <!-- <view class="text">{{ i18n.homeMessage }}</view> -->
<u-notice-bar class="notice" :text="messageList" icon="" fontSize="24rpx" bgColor="#211F32" color="#fff" <u-notice-bar class="notice" :text="messageList" icon="" fontSize="24rpx" bgColor="#211F32" color="#fff"
direction="column"> direction="column" @click="go('/pages/me/notification')">
</u-notice-bar> </u-notice-bar>
</view> </view>
<!-- 三个按钮 --> <!-- 三个按钮 -->
@ -69,16 +68,16 @@ Blame
<video class="video" v-show="videoShow" id="video" :enable-progress-gesture="false" autoplay="true" <video class="video" v-show="videoShow" id="video" :enable-progress-gesture="false" autoplay="true"
:src="videoUrl" controls x5-video-player-type="h5-page" @fullscreenchange="ifStopVideo"></video> :src="videoUrl" controls x5-video-player-type="h5-page" @fullscreenchange="ifStopVideo"></video>
<!-- 通知弹出层 --> <!-- 通知弹出层 -->
<u-popup class="popup" :show="popupShow" round="32rpx" mode="center" @close="popupShow = false" <u-popup class="popup" v-if="popupShow" round="32rpx" mode="center" @close="popupShow = false"
@open="popupShow = true" bgColor="#211F32" :customStyle="{ @open="popupShow = true" bgColor="#211F32" :customStyle="{
margin: 'auto 102rpx auto 118rpx', margin: 'auto 102rpx auto 118rpx',
}"> }">
<view class="content"> <view class="content">
<scroll-view scroll-y="true" style="height: 288rpx;" scroll-with-animation="true" <scroll-view scroll-y="true" style="max-height: 288rpx;" scroll-with-animation="true"
@touchmove.stop.prevent=""> @touchmove.stop.prevent="">
{{ i18n.homeMessage }} <view class="" v-html="contentFirst"></view>
</scroll-view> </scroll-view>
<u-button class="button" color="#00E8A2" @click="popupShow = false">OK</u-button> <u-button class="button" color="#00E8A2" @click="toRead" :throttleTime="500">OK</u-button>
</view> </view>
</u-popup> </u-popup>
<!-- tabBar --> <!-- tabBar -->
@ -87,38 +86,42 @@ Blame
</template> </template>
<script> <script>
import languagePopups from '@/components/language-popups/language-popups.vue' import languagePopups from '@/components/language-popups/language-popups.vue'
import languageData from '@/utils/language/config' import languageData from '@/utils/language/config'
import api from '@/utils/api' import api from '@/utils/api'
// echarts import constant from '@/utils/constant.js';
// import * as echarts from 'echarts'; // echarts
// let videoPlayerObj = {}; // import * as echarts from 'echarts';
let videoPlayer; // let videoPlayerObj = {};
let myChart; let videoPlayer;
export default { let myChart;
export default {
name: 'home', name: 'home',
components: { languagePopups }, components: {
languagePopups
},
data() { data() {
return { return {
//
contentFirst:'',
//
noticeId:null,
//
notice: [],
//
noticeDetail: {},
baseURL: '',
languageShow: false, languageShow: false,
langTrue: languageData[0].title || 'English', langTrue: languageData[0].title || 'English',
languageData, languageData,
popupShow: false, popupShow: true,
messageList: [ messageList: [],
`Please contact customer service on the top-left corner for identity verification on your first Please contact customer service on the top-left corner for identity verification on your first...Please contact customer service on the top-left corner for identity verification on your first... `,
`Please contact customer service on the top-left corner for identity verification on your first Please contact customer service on the top-left corner for identity verification on your first...Please contact customer service on the top-left corner for identity verification on your first... `,
`Please contact customer service on the top-left corner for identity verification on your first Please contact customer service on the top-left corner for identity verification on your first...Please contact customer service on the top-left corner for identity verification on your first... `,
`Please contact customer service on the top-left corner for identity verification on your first Please contact customer service on the top-left corner for identity verification on your first...Please contact customer service on the top-left corner for identity verification on your first... `,
],
swiperList: [ swiperList: [
'https://cdn.uviewui.com/uview/swiper/swiper1.png',
'https://cdn.uviewui.com/uview/swiper/swiper2.png',
'https://cdn.uviewui.com/uview/swiper/swiper3.png',
], ],
videoShow: false, videoShow: false,
videoUrl: '', videoUrl: '',
videoList: [ videoList: [{
{
url: 'https://cdn.uviewui.com/uview/resources/video.mp4', url: 'https://cdn.uviewui.com/uview/resources/video.mp4',
title: 'Video name 1', title: 'Video name 1',
poster: 'https://cdn.uviewui.com/uview/swiper/swiper1.png' poster: 'https://cdn.uviewui.com/uview/swiper/swiper1.png'
@ -141,13 +144,15 @@ export default {
], ],
option: null, option: null,
stepsNum: 5000, // stepsNum: 5000, //
stepTarget: 10000,// stepTarget: 10000, //
myChart: null, myChart: null,
} }
}, },
onLoad() { onLoad() {
this.baseURL = constant.BASE_URL
this.getbanner();
this.noticeList();
this.getContact()
}, },
onShow() { onShow() {
// //
@ -163,7 +168,7 @@ export default {
if (uni.getStorageSync('langTrue')) { if (uni.getStorageSync('langTrue')) {
this.langTrue = uni.getStorageSync('langTrue') this.langTrue = uni.getStorageSync('langTrue')
} }
this.getbanner();
}, },
onHide() { onHide() {
@ -175,9 +180,70 @@ export default {
} }
}, },
methods: { methods: {
//
getContact(){
api.customerService({}).then(res => {
if(res.errCode=='SYS.0012'){
uni.$u.toast(res.errMsg);
}else{
// #ifdef APP-PLUS
plus.runtime.openURL(res.url);
// #endif
// #ifdef H5
window.location.href=res.url
// #endif
}
})
},
//
getNoReadNotice(){
for (var i = 0; i < this.notice.length; i++) {
if(this.notice[i].isRead=='no'){
this.contentFirst=this.notice[i].content
this.noticeId=this.notice[i].id
}
}
if(!this.noticeId){
this.popupShow=false
}
},
go(url){
uni.navigateTo({
url:url
})
},
toRead() {
api.noticeRead({
noticeId: this.noticeId
}).then(res => {
this.noticeId=null;
this.popupShow = false
this.getNoReadNotice()
console.log(res,'已经读了吗')
})
},
//
noticeList() {
api.noticeList({}).then(res => {
this.notice = res;
for (var i = 0; i < res.length; i++) {
this.messageList.push(res[i].title)
}
//
this.getNoReadNotice()
})
},
//
getbanner() { getbanner() {
const indexBanner = api.indexBanner({ 'mark': 'APP_INDEX' }); api.indexBanner({
console.log(indexBanner) 'mark': 'APP_INDEX'
}).then(res => {
for (var i = 0; i < res.length; i++) {
this.swiperList.push(this.baseURL + res[i].adImgPath)
}
})
}, },
// //
laug() { laug() {
@ -219,7 +285,9 @@ export default {
playVideo(data) { playVideo(data) {
this.videoUrl = data.url; this.videoUrl = data.url;
this.videoShow = true; this.videoShow = true;
videoPlayer.requestFullScreen({ direction: 0 }) videoPlayer.requestFullScreen({
direction: 0
})
}, },
/** /**
* 跳转 * 跳转
@ -296,8 +364,7 @@ export default {
}, },
data: [{ data: [{
value: +this.stepsNum / this.stepTarget value: +this.stepsNum / this.stepTarget,
,
name: '步数', name: '步数',
itemStyle: { itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
@ -309,8 +376,7 @@ export default {
}, { }, {
offset: 1, offset: 1,
color: '#0589FF' color: '#0589FF'
} }]),
]),
borderRadius: 800, borderRadius: 800,
@ -334,8 +400,7 @@ export default {
// }); // });
} }
} }
} }
</script> </script>
<script module="echarts" lang="renderjs"> <script module="echarts" lang="renderjs">
@ -345,7 +410,7 @@ export default {
// this.initEcharts(); // this.initEcharts();
if (typeof window.echarts === 'object') { if (typeof window.echarts === 'object') {
this.initEcharts() this.initEcharts()
}else if (typeof window.echarts === 'function') { } else if (typeof window.echarts === 'function') {
this.initEcharts() this.initEcharts()
} else { } else {
// //
@ -413,8 +478,7 @@ export default {
}, },
data: [{ data: [{
value: +this.stepsNum / this.stepTarget value: +this.stepsNum / this.stepTarget,
,
name: '步数', name: '步数',
itemStyle: { itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
@ -426,8 +490,7 @@ export default {
}, { }, {
offset: 1, offset: 1,
color: '#0589FF' color: '#0589FF'
} }]),
]),
borderRadius: 800, borderRadius: 800,
} }
}, },
@ -460,7 +523,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
padding-bottom: 198rpx; // TabBar padding-bottom: 198rpx; // TabBar
.nav-head { .nav-head {
@ -705,5 +768,5 @@ export default {
} }
} }
</style> </style>

73
pages/me/changeWithdrawalPassword.vue

@ -6,12 +6,14 @@
<u-input class="input" type="password" v-model="oldPassword" color="#A1A0A8" fontSize="28rpx" border="none" <u-input class="input" type="password" v-model="oldPassword" color="#A1A0A8" fontSize="28rpx" border="none"
:placeholder="i18n.PleaseEnterTheOldPassword"> :placeholder="i18n.PleaseEnterTheOldPassword">
</u-input> </u-input>
<u-input class="input" type="password" v-model="newPassword" color="#A1A0A8" fontSize="28rpx" border="none" <u-input class="input" type="password" v-model="password" color="#A1A0A8" fontSize="28rpx" border="none"
:placeholder="i18n.CreateNewPassword"> :placeholder="i18n.CreateNewPassword">
</u-input> </u-input>
<u-input class="input" type="password" v-model="confirmPassword" color="#A1A0A8" fontSize="28rpx" border="none"
<!-- 修改登录密码按钮 --> :placeholder="i18n.confirmPassword">
<u-button class="button" color="#00E8A2" throttleTime="500" :disabled="disabled"> </u-input>
<!-- 修改登录密码按钮 :disabled="disabled"-->
<u-button class="button" color="#00E8A2" throttleTime="500">
{{ i18n.Confirm }} {{ i18n.Confirm }}
</u-button> </u-button>
</view> </view>
@ -19,13 +21,19 @@
</template> </template>
<script> <script>
export default { import api from '@/utils/api'
import md5 from 'js-md5'
export default {
name: "changeWithdrawalPassword", name: "changeWithdrawalPassword",
data() { data() {
return { return {
oldPassword: '', oldPassword: '',
newPassword: '', password: '',
confirmPassword: '',
disabled: true, disabled: true,
//
isCanPassword: false,
}; };
}, },
computed: { computed: {
@ -33,17 +41,60 @@ export default {
return this.$t("me"); return this.$t("me");
}, },
}, },
onLoad() { watch: {
'password': {
handler(newValue) {
const numberReg = /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9 _]{6,20}$/
this.isCanPassword = numberReg.test(newValue)
}
},
}, },
onShow() { }, onLoad() {},
onShow() {},
methods: { methods: {
//
changePassword() {
if (!this.password) {
uni.$u.toast(this.$t("login").passwordInputMessage)
return
}
if (!this.isCanPassword) {
let message = this.$t("login").passwordRule
uni.$u.toast(message)
return
}
//
if (this.password !== this.confirmPassword) {
uni.$u.toast(this.$t("login").passwordConfirm)
return
}
if (!this.oldPassword) {
uni.$u.toast(this.$t("login").PleaseEnterTheOldPassword)
return
}
let userInfo = {
oldPassword: md5(this.oldPassword),
password: md5(this.password),
confirmPassword: md5(this.confirmPassword),
}
api.updatePayPassword(userInfo).then(res => {
setTimeout(() => {
uni.showToast({
title: this.$t("me").ModifiedSuccessfully
})
}, 600)
uni.navigateBack({})
})
}, },
} },
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
.body { .body {
overflow: hidden; overflow: hidden;
@ -74,5 +125,5 @@ export default {
} }
} }
</style> </style>

62
pages/me/donateRecord.vue

@ -3,26 +3,40 @@
<!-- nav --> <!-- nav -->
<navigation>{{ i18n.DonateRecord }}</navigation> <navigation>{{ i18n.DonateRecord }}</navigation>
<view class="body"> <view class="body">
<view class="card" v-for="(item, index) in 4" :key="index"> <view class="card" v-for="(item, index) in userInfoObj" :key="index">
<u-icon class="icon" :name="'../../static/me/img_donate.png'" size="64rpx" width="64rpx"></u-icon> <u-icon class="icon" :name="'../../static/me/img_donate.png'" size="64rpx" width="64rpx"></u-icon>
<view class="content"> <view class="content">
<key-value-row class="title" :keyName="'Donate Title'" :value="'200.00'" :leftColor="'#fff'" <key-value-row class="title" :keyName="item.title" :value="item.amount" :leftColor="'#fff'"
:rightColor="'#F2FE8D'"> :rightColor="'#F2FE8D'">
</key-value-row> </key-value-row>
<view class="date">2022/08/06 14:50:34</view> <view class="date">{{item.timestr}}</view>
</view> </view>
</view> </view>
</view> </view>
<u-empty :text="i18n.Dataisempty" mode="data" v-if="userInfoObj.length==0"></u-empty>
<u-loadmore :status="loadStatus" :loading-text="loadingText" :loadmore-text="loadmoreText"
:nomore-text="nomoreText" v-if="userInfoObj.length" height="80" />
</view> </view>
</template> </template>
<script> <script>
import api from '@/utils/api'
import KeyValueRow from '../../components/KeyValueRow/KeyValueRow.vue'; import KeyValueRow from '../../components/KeyValueRow/KeyValueRow.vue';
export default { export default {
components: { KeyValueRow }, components: { KeyValueRow },
name: "donateRecord", name: "donateRecord",
data() { data() {
return { return {
isLoadMore: false, //
loadStatus: 'loadmore',
loadingText: this.$t("login").toload,
loadmoreText: this.$t("login").pullup,
nomoreText: this.$t("login").Nomore,
form: {
pageNumber: 1,
pageSize: 20,
},
userInfoObj: [],
}; };
}, },
computed: { computed: {
@ -30,11 +44,53 @@ export default {
return this.$t("me"); return this.$t("me");
}, },
}, },
onReachBottom() {
if (!this.isLoadMore) {
this.form.pageNumber += 1
this.getList();
}
},
onLoad() { onLoad() {
this.getList()
}, },
onShow() { }, onShow() { },
methods: { methods: {
getList() {
this.isLoadMore = true
api.charityRecord(this.form).then(res => {
if (res.content.length) {
if (this.form.pageNumber > 1) {
this.userInfoObj = this.userInfoObj.concat(res.content)
for (var i = 0; i < this.userInfoObj.length; i++) {
if (this.userInfoObj[i].addTime) {
this.userInfoObj[i].timestr = this.$index.formatyymmddhhmmss(this.userInfoObj[
i].addTime)
}
}
} else {
this.userInfoObj = res.content
for (var i = 0; i < this.userInfoObj.length; i++) {
if (this.userInfoObj[i].addTime) {
this.userInfoObj[i].timestr = this.$index.formatyymmddhhmmss(this.userInfoObj[
i].addTime)
}
}
}
if (this.userInfoObj.length >= Number(res.totalElements)) { //
this.isLoadMore = true
this.loadStatus = 'nomore'
} else {
this.isLoadMore = false
}
} else {
this.isLoadMore = true
this.loadStatus = 'nomore'
this.userInfoObj = []
}
this.$forceUpdate()
})
},
}, },
} }
</script> </script>

25
pages/me/index.vue

@ -3,7 +3,7 @@
<view class="contentBody"> <view class="contentBody">
<!-- 用户头像和id --> <!-- 用户头像和id -->
<view class="userInfo"> <view class="userInfo">
<u-image class="headImg" src="../../static/me/Ellipse 85.png" width="160rpx" height="160rpx" <u-image class="headImg" :src="baseURL+userInfo.headImg" width="160rpx" height="160rpx"
radius="160rpx"></u-image> radius="160rpx"></u-image>
<view class="idAndAccount"> <view class="idAndAccount">
<view class="id">ID:{{userInfo.uid}}</view> <view class="id">ID:{{userInfo.uid}}</view>
@ -32,17 +32,17 @@
<view class="balanceRow"> <view class="balanceRow">
<!-- 可用余额 --> <!-- 可用余额 -->
<view class="item"> <view class="item">
<view class="number">{{userInfoBalance.balance || 0 }}</view> <view class="number">{{userInfoBalance.balance || 0 }} <text style="font-size: 10rpx;">{{coinTypeInfo.system_cropto_code}}</text> </view>
<view class="title">{{ i18n.Balance }}</view> <view class="title">{{ i18n.Balance }}</view>
</view> </view>
<!-- 质押余额 --> <!-- 质押余额 -->
<view class="item"> <view class="item">
<view class="number">{{userInfoBalance.pledge || 0 }}</view> <view class="number">{{userInfoBalance.pledge || 0 }} <text style="font-size: 10rpx;">{{coinTypeInfo.system_cropto_code}}</text></view>
<view class="title">{{ i18n.Pledge }}</view> <view class="title">{{ i18n.Pledge }}</view>
</view> </view>
<!-- 合约余额 --> <!-- 合约余额 -->
<view class="item"> <view class="item">
<view class="number">{{userInfoBalance.contract || 0 }}</view> <view class="number">{{userInfoBalance.contract || 0 }} <text style="font-size: 10rpx;">{{coinTypeInfo.system_cropto_code}}</text></view>
<view class="title">{{ i18n.Contarct }}</view> <view class="title">{{ i18n.Contarct }}</view>
</view> </view>
</view> </view>
@ -85,10 +85,12 @@
<script> <script>
import api from '@/utils/api' import api from '@/utils/api'
import constant from '@/utils/constant.js';
export default { export default {
name: 'me', name: 'me',
data() { data() {
return { return {
baseURL:'',
// 退 // 退
showLogOut: false, showLogOut: false,
// //
@ -98,11 +100,11 @@
} }
}, },
onLoad() { onLoad() {
this.baseURL=constant.BASE_URL
},
onShow() {
// //
this.getUserInfo() this.getUserInfo()
},
onShow() {
// //
this.getUserInfoBalance(); this.getUserInfoBalance();
}, },
@ -110,6 +112,10 @@
computed: { computed: {
i18n() { i18n() {
return this.$t('me') return this.$t('me')
},
//
coinTypeInfo(){
return uni.getStorageSync('coinTypeInfo')
} }
}, },
methods: { methods: {
@ -327,8 +333,9 @@
.number { .number {
margin: 32rpx auto; margin: 32rpx auto;
font-size: 48rpx; font-size: 48rpx;
display: flex;
align-items: center;
justify-content: center;
} }

81
pages/me/notification.vue

@ -3,28 +3,37 @@
<!-- nav --> <!-- nav -->
<navigation>{{ i18n.Notification }}</navigation> <navigation>{{ i18n.Notification }}</navigation>
<view class="body"> <view class="body">
<view class="userItem" v-for="(item, index) in 4" :key="index" @click="gotoDetails(index)"> <view class="userItem" v-for="(item, index) in userInfoObj" :key="index" @click="gotoDetails(item.id)">
<u-icon class="icon" :name="'../../static/home/ic_proclamation.png'" size="60rpx" width="60rpx"> <u-icon class="icon" :name="'../../static/home/ic_proclamation.png'" size="60rpx" width="60rpx">
</u-icon> </u-icon>
<view class="content"> <view class="content">
<view class="title">Please contact customer service on the top-left corner for identity verification <view class="title">{{item.title}}</view>
on your firstPlease contactservice on firstPlease contact customer service on the top-left <view class="date">{{ i18n.Release }}: {{item.timestr}}</view>
corner for identity Please contact customer service on the top-left corner for identity
verification on your firstPlease contactservice on firstPlease contact customer service on the
top-left corner for identity Please contact customer service on the top-left corner for identity
verification on your firstPlease contactservice on firstPlease contact customer ser</view>
<view class="date">{{ i18n.Release }}: 2022/08/06 14:51:34</view>
</view> </view>
</view> </view>
</view> </view>
<u-empty :text="i18n.Dataisempty" mode="data" v-if="userInfoObj.length==0"></u-empty>
<u-loadmore :status="loadStatus" :loading-text="loadingText" :loadmore-text="loadmoreText"
:nomore-text="nomoreText" v-if="userInfoObj.length" height="80" />
</view> </view>
</template> </template>
<script> <script>
export default { import api from '@/utils/api'
export default {
name: "notification", name: "notification",
data() { data() {
return { return {
isLoadMore: false, //
loadStatus: 'loadmore',
loadingText: this.$t("login").toload,
loadmoreText: this.$t("login").pullup,
nomoreText: this.$t("login").Nomore,
form: {
pageNumber: 1,
pageSize: 20,
},
userInfoObj: [],
}; };
}, },
computed: { computed: {
@ -32,22 +41,66 @@ export default {
return this.$t("me"); return this.$t("me");
}, },
}, },
onReachBottom() {
if (!this.isLoadMore) {
this.form.pageNumber += 1
this.getRecordList();
}
},
onLoad() { onLoad() {
this.getRecordList()
}, },
onShow() { }, onShow() {},
methods: { methods: {
//
getRecordList() {
this.isLoadMore = true
api.notices(this.form).then(res => {
if (res.length) {
if (this.form.pageNumber > 1) {
this.userInfoObj = this.userInfoObj.concat(res)
for (var i = 0; i < this.userInfoObj.length; i++) {
if (this.userInfoObj[i].addTime) {
this.userInfoObj[i].timestr = this.$index.formatyymmddhhmmss(this.userInfoObj[
i].addTime)
}
}
} else {
this.userInfoObj = res
for (var i = 0; i < this.userInfoObj.length; i++) {
if (this.userInfoObj[i].addTime) {
this.userInfoObj[i].timestr = this.$index.formatyymmddhhmmss(this.userInfoObj[
i].addTime)
}
}
}
if (this.userInfoObj.length >= Number(res.length)) { //
this.isLoadMore = true
this.loadStatus = 'nomore'
} else {
this.isLoadMore = false
}
} else {
this.isLoadMore = true
this.loadStatus = 'nomore'
this.userInfoObj = []
}
this.$forceUpdate()
})
},
gotoDetails(index) { gotoDetails(index) {
console.log(index);
uni.navigateTo({ uni.navigateTo({
url: `/pages/me/notificationDetails?id=${index}` url: `/pages/me/notificationDetails?id=${index}`
}); });
} }
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
.body { .body {
overflow: hidden; overflow: hidden;
@ -110,5 +163,5 @@ export default {
} }
} }
</style> </style>

39
pages/me/notificationDetails.vue

@ -5,17 +5,10 @@
<view class="body"> <view class="body">
<view class="userItem"> <view class="userItem">
<view class="content"> <view class="content">
<view class="title">Please contact customer service on the top-left corner for identity verification <view class="title">{{detail.title}}</view>
on your firstPlease contactservice on firstPlease contact customer service on the top-left <view class="article" v-html="detail.content"></view>
corner for identity Please contact customer service on </view>
<view class="article">Please contact customer service on the top-left corner for identity <view class="date">{{ i18n.Release }}: {{detail.timestr}}</view>
verification on your firstPlease contactservice on firstPlease contact customer service on the
top-left corner for identity Please contact customer service on the top-left corner for identity
verification on your firstPlease contactservice on firstPlease contact customer service on the
top-left corner for identity Please contact customer service on the top-left corner for identity
verification on your firstPlease contactservice on firstPlease contact customer ser</view>
<view class="date">{{ i18n.Release }}: 2022/08/06 14:51:34</view>
</view> </view>
</view> </view>
</view> </view>
@ -23,10 +16,12 @@
</template> </template>
<script> <script>
export default { import api from '@/utils/api'
export default {
name: "notificationDetails", name: "notificationDetails",
data() { data() {
return { return {
detail:{},
}; };
}, },
computed: { computed: {
@ -34,17 +29,25 @@ export default {
return this.$t("me"); return this.$t("me");
}, },
}, },
onLoad() { onLoad(res) {
this.getNoticeDetail(res.id)
}, },
onShow() { }, onShow() {},
methods: { methods: {
getNoticeDetail(id){
api.noticeDetail({
noticeId: id
}).then(res => {
this.detail=res
this.detail.timestr = this.$index.formatyymmddhhmmss(this.detail.addTime)
})
},
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
.body { .body {
overflow: hidden; overflow: hidden;
@ -96,5 +99,5 @@ export default {
} }
} }
</style> </style>

30
pages/me/transfer.vue

@ -1,7 +1,7 @@
<template> <template>
<view class="main"> <view class="main">
<!-- nav --> <!-- nav -->
<navigation>{{ i18n.WalletHistory }}</navigation> <navigation>{{ i18n.Transfer }}</navigation>
<view class="body"> <view class="body">
<view class="form"> <view class="form">
<!-- coin选择框 --> <!-- coin选择框 -->
@ -37,7 +37,8 @@
<view class="numberDownSelect">USDT <view class="all">{{i18n.ALL}}</view> <view class="numberDownSelect">USDT <view class="all">{{i18n.ALL}}</view>
</view> </view>
</view> </view>
<view class="Usable">{{ i18n.Usable }} <view class="number">560878.90000000</view> <view class="Usable">{{ i18n.Usable }}
<view class="number">{{info.userCapital}}{{info.coinCode}}</view>
</view> </view>
</view> </view>
@ -51,7 +52,8 @@
@open="USDTPopupShow = true" bgColor="#211F32"> @open="USDTPopupShow = true" bgColor="#211F32">
<view class="content"> <view class="content">
<view class="close" @click="USDTPopupShow = false"></view> <view class="close" @click="USDTPopupShow = false"></view>
<scroll-view scroll-y="true" style="height: 432rpx;" scroll-with-animation="true" @touchmove.stop.prevent=""> <scroll-view scroll-y="true" style="height: 432rpx;" scroll-with-animation="true"
@touchmove.stop.prevent="">
<radio-group class="radioGroup" @change="USDTRadioChange" v-model="USDTRadioValue"> <radio-group class="radioGroup" @change="USDTRadioChange" v-model="USDTRadioValue">
<label class="checkBox" v-for="(item, index) in 10" :key="index"> <label class="checkBox" v-for="(item, index) in 10" :key="index">
<view class="icon"> <view class="icon">
@ -78,7 +80,8 @@
@close="accountPopupShow = false" @open="accountPopupShow = true" bgColor="#211F32"> @close="accountPopupShow = false" @open="accountPopupShow = true" bgColor="#211F32">
<view class="content"> <view class="content">
<view class="close" @click="accountPopupShow = false"></view> <view class="close" @click="accountPopupShow = false"></view>
<scroll-view scroll-y="true" style="height: 200rpx;" scroll-with-animation="true" @touchmove.stop.prevent=""> <scroll-view scroll-y="true" style="height: 200rpx;" scroll-with-animation="true"
@touchmove.stop.prevent="">
<radio-group class="radioGroup" @change="accountRadioChange" v-model="accountRadioValue"> <radio-group class="radioGroup" @change="accountRadioChange" v-model="accountRadioValue">
<label class="checkBox" v-for="(item, index) in 3" :key="index"> <label class="checkBox" v-for="(item, index) in 3" :key="index">
<view class="name">Option account</view> <view class="name">Option account</view>
@ -99,10 +102,12 @@
</template> </template>
<script> <script>
export default { import api from '@/utils/api'
export default {
name: "transfer", name: "transfer",
data() { data() {
return { return {
info:{},
coin: '', coin: '',
USDTPopupShow: false, USDTPopupShow: false,
accountPopupShow: false, accountPopupShow: false,
@ -116,9 +121,16 @@ export default {
}, },
}, },
onLoad() { onLoad() {
this.getInfo()
}, },
onShow() { }, onShow() {},
methods: { methods: {
getInfo() {
api.getTransferConfig({}).then(res => {
console.log(res)
this.info=res
})
},
USDTRadioChange(e) { USDTRadioChange(e) {
console.log(e); console.log(e);
}, },
@ -127,11 +139,11 @@ export default {
} }
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
.body { .body {
.form { .form {
margin: 232rpx 32rpx 0; margin: 232rpx 32rpx 0;
@ -351,5 +363,5 @@ export default {
} }
</style> </style>

111
pages/me/walletHistory.vue

@ -4,39 +4,41 @@
<navigation>{{ i18n.WalletHistory }}</navigation> <navigation>{{ i18n.WalletHistory }}</navigation>
<!-- headBtn --> <!-- headBtn -->
<view class="head"> <view class="head">
<view class="headItem" @click="pageState = 'balance'" :class="{ select: pageState === 'balance' }"> <view class="headItem" @click="getType('exchange')" :class="{ select: form.ways === 'exchange' }">
{{ i18n.Balance }} {{ i18n.Balance }}
</view> </view>
<view class="headItem" @click="pageState = 'contarct'" :class="{ select: pageState === 'contarct' }"> <view class="headItem" @click="getType('contract')" :class="{ select: form.ways === 'contract' }">
{{ i18n.Contarct }} {{ i18n.Contarct }}
</view> </view>
</view> </view>
<view class="cardList"> <view class="cardList">
<view class="card" v-for="(item, index) in 4" :key="index"> <view class="card" v-for="(item, index) in userInfoObj" :key="index">
<!-- 卡片条件渲染 --> <!-- 卡片条件渲染 -->
<!-- balance --> <!-- balance -->
<card-header v-if="pageState === 'balance'" <card-header v-if="form.ways === 'exchange'"
:iconName="`../../static/me/${(0 + +balanceTestValue) > 0 ? 'ic_wallet_add' : 'ic_wallet_minus'}.png`" :iconName="`../../static/me/${ item.isIncome=='yes' ? 'ic_wallet_add' : 'ic_wallet_minus'}.png`"
:title="'973430980989323445'" :rightName="balanceTestValue" :title="item.witId" :rightName="`${ item.isIncome=='yes' ? '+' : '-'}`+item.amount+' '+item.coinCode"
:fontColor="`${(0 + +balanceTestValue) > 0 ? '#00E8A2' : '#F4506A'}`"> :fontColor="`${item.isIncome=='yes'? '#00E8A2' : '#F4506A'}`">
</card-header> </card-header>
<view class="dataBody" v-if="pageState === 'balance'"> <view class="dataBody" v-if="form.ways === 'exchange'">
<key-value-row :keyName="i18n.Time" :value="'2022/08/06 14:51'"></key-value-row> <key-value-row :keyName="i18n.Status" :value="item.status"></key-value-row>
<view class="text">Postscript : ontact customer service on the top-left corner for identity verific <key-value-row :keyName="i18n.Time" :value="item.addTimeStr"></key-value-row>
<view class="text">Postscript : {{item.witType}}
</view> </view>
</view> </view>
<!-- contarct --> <!-- contarct -->
<card-header v-if="pageState === 'contarct'" <card-header v-if="form.ways === 'contract'"
:iconName="`../../static/me/${(0 + +contarctTestValue) > 0 ? 'ic_wallet_add' : 'ic_wallet_minus'}.png`" :iconName="`../../static/me/${ item.isIncome=='yes' ? 'ic_wallet_add' : 'ic_wallet_minus'}.png`"
:title="'973430980989323445'" :rightName="contarctTestValue" :title="item.witId" :rightName="`${ item.isIncome=='yes' ? '+' : '-'}`+item.amount+item.coinCode"
:fontColor="`${(0 + +contarctTestValue) > 0 ? '#00E8A2' : '#F4506A'}`"> :fontColor="`${item.isIncome=='yes'? '#00E8A2' : '#F4506A'}`">
</card-header> </card-header>
<view class="dataBody" v-if="pageState === 'contarct'"> <view class="dataBody" v-if="form.ways === 'contract'">
<key-value-row :keyName="i18n.Time" :value="'2022/08/06 14:51'"></key-value-row> <key-value-row :keyName="i18n.Status" :value="item.status"></key-value-row>
<view class="text">Postscript : ontact customer service on the top-left corner for identity verific <key-value-row :keyName="i18n.Time" :value="item.addTimeStr"></key-value-row>
<view class="text">Postscript : {{item.witType}}
</view> </view>
</view> </view>
@ -44,20 +46,35 @@
</view> </view>
</view> </view>
<u-empty :text="i18n.Dataisempty" mode="data" v-if="userInfoObj.length==0"></u-empty>
<u-loadmore :status="loadStatus" :loading-text="loadingText" :loadmore-text="loadmoreText"
:nomore-text="nomoreText" v-if="userInfoObj.length" height="80" />
</view> </view>
</template> </template>
<script> <script>
import KeyValueRow from '../../components/KeyValueRow/KeyValueRow.vue'; import api from '@/utils/api'
import CardHeader from '../../components/cardHeader/cardHeader.vue'; import KeyValueRow from '../../components/KeyValueRow/KeyValueRow.vue';
export default { import CardHeader from '../../components/cardHeader/cardHeader.vue';
components: { KeyValueRow, CardHeader }, export default {
components: {
KeyValueRow,
CardHeader
},
name: "walletHistory", name: "walletHistory",
data() { data() {
return { return {
pageState: 'balance', isLoadMore: false, //
balanceTestValue: '+100', // loadStatus: 'loadmore',
contarctTestValue: '-100', loadingText: this.$t("login").toload,
loadmoreText: this.$t("login").pullup,
nomoreText: this.$t("login").Nomore,
form: {
pageNumber: 1,
pageSize: 20,
ways: 'exchange',
},
userInfoObj: [],
}; };
}, },
computed: { computed: {
@ -65,18 +82,56 @@ export default {
return this.$t("me"); return this.$t("me");
}, },
}, },
onReachBottom() {
if (!this.isLoadMore) {
this.form.pageNumber += 1
this.getRecordList();
}
},
onLoad() { onLoad() {
this.getRecordList();
},
onShow() {
}, },
onShow() { },
methods: { methods: {
getType(type){
this.form.ways=type
this.getRecordList()
},
//
getRecordList() {
this.isLoadMore = true
api.billList(this.form).then(res => {
if (res.content.length) {
if (this.form.pageNumber > 1) {
this.userInfoObj = this.userInfoObj.concat(res.content)
} else {
this.userInfoObj = res.content
}
if (this.userInfoObj.length >= Number(res.count)) { //
this.isLoadMore = true
this.loadStatus = 'nomore'
} else {
this.isLoadMore = false
}
} else {
this.isLoadMore = true
this.loadStatus = 'nomore'
this.userInfoObj = []
}
this.$forceUpdate()
})
},
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main {
.main {
.head { .head {
margin-top: 200rpx; margin-top: 200rpx;
@ -133,5 +188,5 @@ export default {
} }
} }
} }
</style> </style>

123
pages/withdrawal/addOrEditBankCard.vue

@ -3,37 +3,47 @@
<!-- nav --> <!-- nav -->
<navigation>{{ pageState === 'addBank' ? i18n.AddBankInformation : i18n.EditBankInformation }}</navigation> <navigation>{{ pageState === 'addBank' ? i18n.AddBankInformation : i18n.EditBankInformation }}</navigation>
<view class="content"> <view class="content">
<u--form class="form" :model="bankInfo" :rules="rules" ref="uForm" errorType="toast">
<view class="inputBody"> <view class="inputBody">
<view class="title">{{ i18n.FirstName }}</view> <view class="title">{{ i18n.FirstName }}</view>
<view class="input-item"> <view class="input-item">
<u-input class="input" v-model="name" color="#fff" fontSize="32rpx" border="none" <u-form-item class="input-item" prop="acctName" ref="item1">
:placeholder="i18n.enterName"> <u-input class="input" v-model="bankInfo.acctName" color="#fff" fontSize="32rpx"
border="none" :placeholder="i18n.enterName">
</u-input> </u-input>
</u-form-item>
</view> </view>
<view class="title">{{ i18n.Account }}</view> <view class="title">{{ i18n.Account }}</view>
<view class="input-item"> <view class="input-item">
<u-input class="input" v-model="account" color="#fff" fontSize="32rpx" border="none" <u-form-item class="input-item" prop="acctId" ref="item1">
<u-input class="input" v-model="bankInfo.acctId" color="#fff" fontSize="32rpx" border="none"
:placeholder="i18n.enterAccount"> :placeholder="i18n.enterAccount">
</u-input> </u-input>
</u-form-item>
</view> </view>
</view> </view>
<view class="inputBody"> <view class="inputBody">
<view class="title">{{ i18n.BankName }}</view> <view class="title">{{ i18n.BankName }}</view>
<view class="input-item"> <view class="input-item">
<u-input class="input" v-model="bankName" color="#fff" fontSize="32rpx" border="none" <u-form-item class="input-item" prop="email" ref="item1">
:placeholder="i18n.enterBankName"> <u-input class="input" v-model="bankInfo.bankName" color="#fff" fontSize="32rpx"
border="none" :placeholder="i18n.enterBankName">
</u-input> </u-input>
</u-form-item>
</view> </view>
<view class="title">{{ i18n.BankCode }}</view> <view class="title">{{ i18n.BankCode }}</view>
<view class="input-item"> <view class="input-item">
<u-input class="input" type="password" v-model="bankCode" color="#fff" fontSize="32rpx" <u-form-item class="input-item" prop="bankCode" ref="item1">
<u-input class="input" v-model="bankInfo.bankCode" color="#fff" fontSize="32rpx"
border="none" :placeholder="i18n.enterBankCode"> border="none" :placeholder="i18n.enterBankCode">
</u-input> </u-input>
</u-form-item>
</view> </view>
</view> </view>
</u--form>
<u-button class="button" color="#00E8A2" :throttleTime="500" :disabled="btnIsCanClick" @click="bank">
<u-button class="button" color="#00E8A2" throttleTime="500" :disabled="btnIsCanClick">{{ i18n.Confirm }} {{ i18n.Confirm }}
</u-button> </u-button>
</view> </view>
@ -45,45 +55,108 @@
</template> </template>
<script> <script>
export default { import api from '@/utils/api'
export default {
name: "withdrawalRecord", name: "withdrawalRecord",
data() { data() {
return { return {
rules: {
acctName: {
type: 'string',
required: true,
message: this.$t('withdrawal').enterName,
trigger: ['blur', 'change'],
},
bankName: {
type: 'string',
required: true,
message: this.$t('withdrawal').enterBankName,
trigger: ['blur', 'change']
},
acctId: {
type: 'string',
required: true,
message: this.$t('withdrawal').enterAccount,
trigger: ['blur', 'change']
},
bankCode: {
type: 'string',
required: true,
message: this.$t('withdrawal').enterBankCode,
trigger: ['blur', 'change']
},
},
bankInfo: {
bankCode: null,
bankName: null,
acctName: null,
acctId: null,
},
pageState: 'addBank', // , pageState: 'addBank', // ,
name: '',
account: '',
bankName: '',
bankCode: '',
}; };
}, },
computed: { computed: {
i18n() { i18n() {
return this.$t("withdrawal"); return this.$t("withdrawal");
}, },
btnIsCanClick() { // btnIsCanClick() {
if (this.name && this.account && this.bankName && this.bankCode) { if (this.bankInfo.bankCode && this.bankInfo.bankName && this.bankInfo.acctName && this.bankInfo.acctId) {
return false; // return false
} else { } else {
return true return true
} }
} }
}, },
onLoad(option) { onLoad(option) {
console.log(option); this.getBank()
this.pageState = option.mode || 'addBank';
}, },
onShow() { }, onShow() {},
methods: { methods: {
change(e) { //
console.log(e); getBank() {
api.bankCardInfo().then(res => {
this.bankInfo = res;
if (this.bankInfo.id) {
this.pageState = 'editBank' || 'addBank';
} }
})
},
//
bank() {
this.$refs.uForm.validate().then(res => {
let bankInfo = {
bankCode: this.bankInfo.bankCode,
bankName: this.bankInfo.bankName,
acctName: this.bankInfo.acctName,
acctId: this.bankInfo.acctId,
}
if (this.bankInfo.id) {
bankInfo.id = this.bankInfo.id
}
api.bindBank(bankInfo).then(res => {
if (this.bankInfo.id) {
uni.$u.toast(this.$t("me").ModifiedSuccessfully)
} else {
uni.$u.toast(this.$t("me").addSuccessfully)
}
setTimeout(() => {
uni.navigateBack({})
}, 600)
})
}).catch(errors => {
console.log('err')
})
},
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { /deep/ .u-form-item__body {
padding: 0 0;
}
.main {
.content { .content {
margin-top: 200rpx; margin-top: 200rpx;
@ -134,5 +207,5 @@ export default {
} }
} }
} }
</style> </style>

2
utils/api.js

@ -67,7 +67,7 @@ const api = {
receivStepsAward: (params) => Vue.prototype.$axios.post('/api/steps/receivStepsAward',params),//领取奖励 receivStepsAward: (params) => Vue.prototype.$axios.post('/api/steps/receivStepsAward',params),//领取奖励
//--------------------------------- home --------------------------------- //--------------------------------- home ---------------------------------
indexInfo: () => Vue.prototype.$axios.get('/api/index/info'),//获取系统通用配置 indexInfo: () => Vue.prototype.$axios.post('/api/index/info'),//获取系统通用配置
indexLang: (params) => Vue.prototype.$axios.post('/api/index/lang',params),//切换语言 indexLang: (params) => Vue.prototype.$axios.post('/api/index/lang',params),//切换语言
customerService: (params) => Vue.prototype.$axios.post('/api/index/customerService',params),//获取客服联系方式 customerService: (params) => Vue.prototype.$axios.post('/api/index/customerService',params),//获取客服联系方式
sendEmailCode: (params) => Vue.prototype.$axios.post('/api/index/sendEmailCode',params),//发送邮箱验证码 sendEmailCode: (params) => Vue.prototype.$axios.post('/api/index/sendEmailCode',params),//发送邮箱验证码

14
utils/axios.js

@ -139,17 +139,19 @@ service.interceptors.response.use(res => {
// console.log(res.data) // console.log(res.data)
// console.log(res.data.data[0].nameAlias) // console.log(res.data.data[0].nameAlias)
if (res.success || res.errCode === 'USER.0017') { if (res.success || res.errCode === 'USER.0017') {
return res.data; return res.data;
} else { }
if(res.errMsg=='No customer service is online'&&res.errCode=='SYS.0012'){
return res;
}
else {
uni.showToast({ uni.showToast({
title: res.errMsg, title: res.errMsg,
icon: 'none', icon: 'none',
duration: 1500 duration: 1500
}) })
if (res.errCode === 'USER.0010') { if (res.errCode === 'USER.0010') {
uni.setStorageSync('ticket',null);
uni.removeStorage({ uni.removeStorage({
key: 'logInfo', key: 'logInfo',
success: function(res) { success: function(res) {
@ -159,8 +161,6 @@ service.interceptors.response.use(res => {
}, },
fail: (err) => {} fail: (err) => {}
}); });
// #ifdef H5 // #ifdef H5
var url = location.href; var url = location.href;
if (url.indexOf('pages') > -1) { if (url.indexOf('pages') > -1) {
@ -175,8 +175,6 @@ service.interceptors.response.use(res => {
uni.removeStorageSync('url') uni.removeStorageSync('url')
} }
// #endif // #endif
} }
uni.$emit('refreshQrCode') uni.$emit('refreshQrCode')
return Promise.reject(res.errMsg); return Promise.reject(res.errMsg);

2
utils/index.js

@ -60,7 +60,7 @@ var utils = {
var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
// return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s; // return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s;
return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s; return Y + '/' + M + '/' + D + ' ' + h + ':' + m + ':' + s;
}, },
formathhmm: function(time) { formathhmm: function(time) {
var date = new Date(time) var date = new Date(time)

11
utils/language/en_US.js

@ -10,6 +10,11 @@ export default {
}, },
// 登陆相关页面 // 登陆相关页面
login: { login: {
Donationsucceeded:'Donation succeeded',
Insufficient:'Insufficient available balance',
pullup:'Gently pull up',
toload:'Trying to load',
Nomore:'No more',
// 公共字段 // 公共字段
Login: 'Login', Login: 'Login',
SignUp: 'Sign Up', SignUp: 'Sign Up',
@ -78,6 +83,7 @@ export default {
// 合约页面相关 // 合约页面相关
markets: { markets: {
// markets // markets
Dataisempty:'Data is empty',
TrandingPair: 'Tranding Pair', TrandingPair: 'Tranding Pair',
LatestPrice: 'Latest Price', LatestPrice: 'Latest Price',
RiseAndfall: '24H Rise and fall', RiseAndfall: '24H Rise and fall',
@ -139,6 +145,7 @@ export default {
CharityDetails: 'Charity Details', CharityDetails: 'Charity Details',
About: 'About', About: 'About',
Participants: 'Participants', Participants: 'Participants',
Closeddonation: 'Donation Closing',
DonateNow: 'Donate Now', DonateNow: 'Donate Now',
PleaseChooseCoin: 'Please choose coin', PleaseChooseCoin: 'Please choose coin',
AvailableBlance: 'Available blance', AvailableBlance: 'Available blance',
@ -324,6 +331,7 @@ export default {
//me //me
me: { me: {
Dataisempty:'Data is empty',
isLogOut:'Are you sure you want to log out?', isLogOut:'Are you sure you want to log out?',
account: 'account', account: 'account',
Recharge: 'Recharge', Recharge: 'Recharge',
@ -363,6 +371,7 @@ export default {
ModifyWithdrawalPassword: 'Modify Withdrawal Password', ModifyWithdrawalPassword: 'Modify Withdrawal Password',
CreateNewPassword: 'Create new password', CreateNewPassword: 'Create new password',
ModifiedSuccessfully:'Modified successfully', ModifiedSuccessfully:'Modified successfully',
addSuccessfully:'Added successfully',
Fresh: 'Fresh', Fresh: 'Fresh',
Release: 'Release', Release: 'Release',
@ -371,7 +380,7 @@ export default {
DonateRecord: 'Donate record', DonateRecord: 'Donate record',
Time: 'Time', Time: 'Time',
Status:'Status',
SelectCurrency: 'Select currency', SelectCurrency: 'Select currency',
PleaseChooseCoin: 'Please choose coin', PleaseChooseCoin: 'Please choose coin',
From: 'From', From: 'From',

Loading…
Cancel
Save