2026-04-02 18:12:53 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="withdrawalRecord">
|
|
|
|
|
|
<van-pull-refresh v-model="refreshing" @refresh="onRefresh" :loosing-text="$t('loosing_text')" :loading-text="$t('loading_text')">
|
|
|
|
|
|
<van-list v-model="loading" :finished="finished" @load="getList">
|
|
|
|
|
|
<div class="text-center" style="padding: 170px 0" v-if="!emptyData">
|
|
|
|
|
|
<img class="emptyDataIcon" src="https://image.fulllinkai.com/202109/24/718b67f67aa714f83e4dce2a598ad18c.png" alt="" />
|
|
|
|
|
|
<div class="color9 font14" style="margin-top: 14px">{{ $t('Temporarily_no_data') }}</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="record-box" v-else>
|
|
|
|
|
|
<div v-for="(item, index) in list" :key="index">
|
|
|
|
|
|
<div class="record-list">
|
|
|
|
|
|
<div class="record-list-left">
|
|
|
|
|
|
<img class="record-icon" src="https://image.fulllinkai.com/202109/24/4d97a2d419c435d6a375fee38a807ab0.png" alt="" />
|
|
|
|
|
|
<div class="record-data">
|
|
|
|
|
|
<div class="font16 color3 alignment_left" style="margin-bottom: 4px;">
|
2026-04-24 18:31:38 +08:00
|
|
|
|
{{item.way ==='weixin'? '微信' : '支付宝'}}-<span
|
|
|
|
|
|
v-if="item.status == 'wait_user_confirm'"
|
|
|
|
|
|
class="retry-btn"
|
|
|
|
|
|
@click.stop="retryWxPay(item)"
|
|
|
|
|
|
>重新提现</span>
|
|
|
|
|
|
<span v-else>{{ item.status == 'freezing' ? '处理中' : item.status == 'canceled' ? '提现失败' : '提现成功' }}</span>
|
2026-04-02 18:12:53 +08:00
|
|
|
|
<img class="prompt-icon" src="https://image.fulllinkai.com/202109/24/c7374b0e93097fe327fb2391db286c7d.png" alt="" v-if="item.status == 'freezing'" @click.stop="prompt(index)" />
|
|
|
|
|
|
<img class="prompt-icon" src="https://image.fulllinkai.com/202109/24/c7374b0e93097fe327fb2391db286c7d.png" alt="" v-else-if="item.status == 'canceled'" @click.stop="prompt(index)" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="font12 color9">{{ item.created_at }}</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class='error-prompt-box colorff font13' :class="item.status == 'freezing'? 'error-prompt-box-v1': ''" v-if='item.is_show'>{{item.status == 'freezing' ? '处理中,将在24小时内到账': '账号不正确'}}</div>
|
|
|
|
|
|
<div class='error-mask' v-if='errorMask' @click.stop='showPrompt'></div>
|
|
|
|
|
|
</div>
|
2026-04-24 18:31:38 +08:00
|
|
|
|
<div class="font18 color3">
|
|
|
|
|
|
<span v-if="item.status == 'wait_user_confirm'" style="font-size:16px;">冻结中(</span>
|
|
|
|
|
|
<span v-if="item.status == 'wait_user_confirm'">{{ item.value }}</span>
|
|
|
|
|
|
<span v-if="item.status == 'wait_user_confirm'" style="font-size:16px;">)</span>
|
|
|
|
|
|
<span v-else>-{{ item.real_value }}</span>
|
|
|
|
|
|
</div>
|
2026-04-02 18:12:53 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
<div class="line"></div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="bottomLine font12 color6 text-center" v-if="noMoreData">
|
|
|
|
|
|
- {{ $t('I_have_a_line_in_the_sand') }} -
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</van-list>
|
|
|
|
|
|
</van-pull-refresh>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
2026-04-24 18:31:38 +08:00
|
|
|
|
import { $toastClear, $toastLoading, $toastText, $toastSuccess } from '@/config/toast'
|
2026-04-02 18:12:53 +08:00
|
|
|
|
import service from '@/utils/request'
|
|
|
|
|
|
import { formatDate } from '@/plugins/timeConversion'
|
2026-04-24 18:31:38 +08:00
|
|
|
|
import wx from 'weixin-js-sdk'
|
2026-04-02 18:12:53 +08:00
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
|
computed: {},
|
|
|
|
|
|
components: {},
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
list: [],
|
|
|
|
|
|
page: 1,
|
|
|
|
|
|
index: 0,
|
|
|
|
|
|
errorMask: false,
|
|
|
|
|
|
finished: false,
|
|
|
|
|
|
loading: false,
|
|
|
|
|
|
refreshing: false,
|
|
|
|
|
|
emptyData: true,
|
|
|
|
|
|
noMoreData: false
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
watch: {},
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
getList() {
|
|
|
|
|
|
const vm = this
|
|
|
|
|
|
$toastLoading(vm.$i18n.t('loading_text'))
|
|
|
|
|
|
service
|
|
|
|
|
|
.get(`/s/h5/communities/MyWithdraws?page=${vm.page}`)
|
|
|
|
|
|
.then(data => {
|
|
|
|
|
|
const dataV = vm.page === 1 ? [] : vm.list
|
|
|
|
|
|
dataV.push(...data.data)
|
|
|
|
|
|
dataV.forEach(item => {
|
|
|
|
|
|
if (item.err_msg && item.err_msg.includes('余额不足')) {
|
|
|
|
|
|
item.err_msg = '系统正在升级中,请稍后重试'
|
|
|
|
|
|
}
|
|
|
|
|
|
item.is_show = false
|
|
|
|
|
|
})
|
|
|
|
|
|
vm.list = dataV
|
|
|
|
|
|
vm.refreshing = false
|
|
|
|
|
|
if (vm.list.length !== 0) {
|
|
|
|
|
|
vm.emptyData = true
|
|
|
|
|
|
} else {
|
|
|
|
|
|
vm.emptyData = false
|
|
|
|
|
|
}
|
|
|
|
|
|
if (vm.list.length < 15 || data.data.length < 15) {
|
|
|
|
|
|
vm.finished = true
|
|
|
|
|
|
vm.noMoreData = true
|
|
|
|
|
|
if (vm.list.length === 0) {
|
|
|
|
|
|
vm.noMoreData = false
|
|
|
|
|
|
}
|
|
|
|
|
|
$toastClear()
|
|
|
|
|
|
return
|
|
|
|
|
|
} else {
|
|
|
|
|
|
vm.loading = false
|
|
|
|
|
|
$toastClear()
|
|
|
|
|
|
}
|
|
|
|
|
|
vm.page++
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
$toastClear()
|
|
|
|
|
|
}, 500)
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch(error => {
|
|
|
|
|
|
console.log(error)
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
onRefresh() {
|
|
|
|
|
|
this.page = 1
|
|
|
|
|
|
this.finished = false
|
|
|
|
|
|
this.loading = true
|
|
|
|
|
|
this.getList()
|
|
|
|
|
|
},
|
|
|
|
|
|
prompt(index) {
|
|
|
|
|
|
this.index = index
|
|
|
|
|
|
this.errorMask = true
|
|
|
|
|
|
this.list[index].is_show = true
|
|
|
|
|
|
},
|
|
|
|
|
|
showPrompt() {
|
|
|
|
|
|
this.errorMask = false
|
|
|
|
|
|
this.list[this.index].is_show = false
|
|
|
|
|
|
this.index = 0
|
2026-04-24 18:31:38 +08:00
|
|
|
|
},
|
|
|
|
|
|
// 直接重新发起微信支付(数据从list获取)
|
|
|
|
|
|
retryWxPay(item) {
|
|
|
|
|
|
const vm = this
|
|
|
|
|
|
|
|
|
|
|
|
// 必须微信环境
|
|
|
|
|
|
if (!/micromessenger/i.test(navigator.userAgent)) {
|
|
|
|
|
|
$toastText('请在微信内操作')
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 直接调用微信支付
|
|
|
|
|
|
wx.ready(function() {
|
|
|
|
|
|
wx.checkJsApi({
|
|
|
|
|
|
jsApiList: ['requestMerchantTransfer'],
|
|
|
|
|
|
success: function(res) {
|
|
|
|
|
|
if (res.checkResult['requestMerchantTransfer']) {
|
|
|
|
|
|
WeixinJSBridge.invoke('requestMerchantTransfer', {
|
|
|
|
|
|
mchId: item.mch_id, // 从list直接取
|
|
|
|
|
|
appId: item.app_id, // 从list直接取
|
|
|
|
|
|
package: item.package_info // 从list直接取
|
|
|
|
|
|
}, function(resp) {
|
|
|
|
|
|
if (resp.err_msg === 'requestMerchantTransfer:ok') {
|
|
|
|
|
|
$toastSuccess('提现成功')
|
|
|
|
|
|
vm.getList() // 刷新列表
|
|
|
|
|
|
} else if (resp.err_msg === 'requestMerchantTransfer:cancel') {
|
2026-04-27 09:53:25 +08:00
|
|
|
|
$toastText('已取消')
|
2026-04-24 18:31:38 +08:00
|
|
|
|
vm.getList()
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$toastText('支付失败')
|
|
|
|
|
|
}
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
$toastClear()
|
|
|
|
|
|
}, 500)
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
2026-04-02 18:12:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
created() {},
|
|
|
|
|
|
mounted() {
|
|
|
|
|
|
const ScrollTop = document.getElementById('app')
|
|
|
|
|
|
ScrollTop.scrollTop = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.withdrawalRecord {
|
|
|
|
|
|
width: 100vw;
|
|
|
|
|
|
min-height: 100vh;
|
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
|
}
|
|
|
|
|
|
.emptyDataIcon {
|
|
|
|
|
|
width: 220px;
|
|
|
|
|
|
height: 180px;
|
|
|
|
|
|
display: block;
|
|
|
|
|
|
margin: 0 auto;
|
|
|
|
|
|
}
|
|
|
|
|
|
.record-box {
|
|
|
|
|
|
margin: 0 15px;
|
|
|
|
|
|
padding-top: 15px;
|
|
|
|
|
|
padding-bottom: 50px;
|
|
|
|
|
|
.record-list {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
.record-list-left {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: left;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
.record-icon {
|
|
|
|
|
|
width: 28px;
|
|
|
|
|
|
height: 28px;
|
|
|
|
|
|
display: block;
|
|
|
|
|
|
}
|
|
|
|
|
|
.record-data {
|
|
|
|
|
|
margin-left: 8px;
|
|
|
|
|
|
.prompt-icon {
|
|
|
|
|
|
width: 16px;
|
|
|
|
|
|
height: 16px;
|
|
|
|
|
|
display: block;
|
|
|
|
|
|
margin-left: 3px;
|
|
|
|
|
|
margin-top: 2px;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.error-prompt-box{
|
|
|
|
|
|
max-width: 120px;
|
|
|
|
|
|
min-width: 40px;
|
|
|
|
|
|
padding: 6px 12px;
|
|
|
|
|
|
text-align: justify;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
right: 50%;
|
|
|
|
|
|
top: 30px;
|
|
|
|
|
|
transform: translateX(50%);
|
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
|
z-index: 1111;
|
|
|
|
|
|
background: #000000;
|
|
|
|
|
|
}
|
|
|
|
|
|
.error-prompt-box-v1{
|
|
|
|
|
|
right: 55%;
|
|
|
|
|
|
}
|
|
|
|
|
|
.error-prompt-box:before{
|
|
|
|
|
|
content:"";
|
|
|
|
|
|
width:0;
|
|
|
|
|
|
height:0;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: -16px;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
transform: translate(-104%);
|
|
|
|
|
|
border-top:solid 8px transparent;
|
|
|
|
|
|
border-left:solid 8px transparent;
|
|
|
|
|
|
border-right:solid 8px transparent;
|
|
|
|
|
|
border-bottom:solid 8px black;
|
|
|
|
|
|
}
|
|
|
|
|
|
.error-mask{
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
z-index: 222222;
|
|
|
|
|
|
width: 100vw;
|
|
|
|
|
|
height: 100vh;
|
|
|
|
|
|
background: rgba(255, 255, 255, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.line {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 1px;
|
|
|
|
|
|
background-color: #f5f5f5;
|
|
|
|
|
|
margin: 11px 0;
|
|
|
|
|
|
}
|
2026-04-24 18:31:38 +08:00
|
|
|
|
.retry-btn {
|
|
|
|
|
|
color: #4356f3;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
margin-left: 4px;
|
|
|
|
|
|
}
|
2026-04-02 18:12:53 +08:00
|
|
|
|
}
|
2026-04-24 18:31:38 +08:00
|
|
|
|
|
2026-04-02 18:12:53 +08:00
|
|
|
|
</style>
|