| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- <template>
- <cwg-page-wrapper>
- <view class="page">
- <view class="apply-card-footer">
- <cwg-load-more-wrapper :loading="loading" :finished="finished" @reach-bottom="loadMore">
- <view v-if="cardList.length > 0">
- <view class="kyc-list">
- <view v-for="item in cardList" :key="item.id" class="kyc-item">
- <view class="g">
- <view class="g-l">
- <view class="g-item">
- <view class="label a1 ellipsis">
- <text> {{ t(walletBalanceTypeMap[item.type]) }}</text>
- </view>
- <view class="status" :class="statusClass1(item.status)">
- <text v-if="item.status == '2'" v-t="'card.Status.t1'"></text>
- <text v-else-if="item.status == '3'" v-t="'card.Status.t2'"></text>
- <text v-else v-t="'card.Status.t3'"></text>
- </view>
- </view>
- <view class="g-item g-item1">
- <view v-t="'card.Form.f55'" class="label1 a2"></view>
- <view class="label a1">{{ item.amount }} USD</view>
- </view>
- <view class="g-item g-item1">
- <view v-t="'card.Form.f30'" class="label1 a2"></view>
- <view class="label a1">{{ item.fee }} USD</view>
- </view>
- <view class="g-item">
- <view class="label a3"></view>
- <view class="label a3">{{ item.addTime }}</view>
- </view>
- </view>
- </view>
- </view>
- </view>
- </view>
- <cwg-empty-state v-if="cardList.length == 0" :title="t('empty-state.t1')"
- :text="t('empty-state.c1')" />
- </cwg-load-more-wrapper>
- </view>
- </view>
- </cwg-page-wrapper>
- </template>
- <script setup lang="ts">
- import { ref, onMounted, watch, computed } from "vue";
- import { showToast } from "@/utils/toast";
- import { onLoad } from '@dcloudio/uni-app'
- import useRouter from "@/hooks/useRouter";
- import { useI18n } from "vue-i18n";
- import { ucardApi } from "@/api/ucard";
- import { walletBalanceTypeMap } from '@/utils/dataMap';
- const { t } = useI18n();
- const router = useRouter();
- onLoad((options) => {
- // id.value = options.id
- // type.value = options.type
- })
- const status: Record<string, string> = {
- success: t('card.Status.t6'),
- fail: t('card.Status.t7'),
- processing: t('card.Status.t3'),
- wait_process: t('card.Status.t3'),
- cancel: t('card.New2.p3'),
- }
- function statusClass1(status: string) {
- switch (status) {
- case 2:
- return 'status-default status-success'
- case 3:
- return 'status-default status-error'
- default:
- return 'status-default'
- }
- }
- // 分页字段
- const page = ref(1)
- const pageSize = 10
- // 状态
- const loading = ref(false)
- const finished = ref(false)
- const loadingInit = ref(true) // 控制首次加载避免闪 empty
- const cardList = ref<CardInfo[]>([])
- const search = ref({})
- // 加载列表
- async function getCardList(isLoadMore = false) {
- if (loading.value || finished.value) return
- loading.value = true
- try {
- const res = await ucardApi.getRecordPage({
- page: { current: page.value, row: pageSize }
- })
- const data = res.code === 200 ? res.data || [] : []
- if (isLoadMore) {
- cardList.value.push(...data)
- } else {
- cardList.value = data
- }
- // 判断是否还有更多
- if (data.length < pageSize) {
- finished.value = true
- }
- } catch (e) {
- console.error(e)
- } finally {
- loading.value = false
- loadingInit.value = false
- }
- }
- // 父组件触底触发
- function loadMore() {
- console.log(234234);
- if (finished.value || loading.value) return
- page.value++
- getCardList(true)
- }
- onMounted(async () => {
- getCardList()
- })
- </script>
- <style scoped lang="scss">
- @import "@/uni.scss";
- .apply-card-footer {
- width: 100%;
- }
- .kyc-item {
- display: flex;
- align-items: center;
- flex-direction: column;
- padding: px2rpx(12);
- border-bottom: 1px solid var(--border, #333);
- font-size: px2rpx(16);
- background: var(--action-bg);
- border-radius: px2rpx(16);
- margin-bottom: px2rpx(16);
- border: 1px solid rgba(214, 255, 0, 0.2);
- box-shadow: 0 px2rpx(2) px2rpx(8) rgba(0, 0, 0, 0.08);
- gap: px2rpx(16);
- }
- .kyc-item:last-child {
- border-bottom: none;
- }
- .g {
- width: 100%;
- img {
- width: px2rpx(56);
- height: px2rpx(35);
- }
- .g-l {
- width: 100%;
- margin: 0;
- .g-item {
- margin-bottom: 0;
- }
- .g-item1 {
- justify-content: start;
- align-items: center;
- }
- .label {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 600;
- font-size: px2rpx(14);
- line-height: px2rpx(20);
- text-align: left;
- color: #1a1a1a;
- width: px2rpx(180);
- }
- .label1 {
- font-family: 'Roboto';
- font-style: normal;
- font-weight: 600;
- font-size: px2rpx(14);
- line-height: px2rpx(20);
- text-align: left;
- color: #1a1a1a;
- max-width: px2rpx(180);
- padding-right: px2rpx(10);
- }
- .a2 {
- color: #6b7280;
- font-size: px2rpx(12);
- line-height: px2rpx(16);
- }
- .a3 {
- color: #8e8a8a;
- font-family: Roboto;
- font-size: px2rpx(14);
- font-style: normal;
- font-weight: 400;
- line-height: px2rpx(36);
- letter-spacing: px2rpx(0.07);
- text-align: end;
- }
- }
- /* .g-l1 {
- margin-left: 0;
- } */
- }
- </style>
|