Browse Source

申请历史

zhb 3 months ago
parent
commit
dce6d29341

+ 0 - 3
components/cwg-tabel.vue

@@ -212,14 +212,11 @@ const visiblePages = computed(() => {
     if (end - start + 1 < maxVisible) {
         start = Math.max(1, end - maxVisible + 1)
     }
-
     return Array.from({ length: end - start + 1 }, (_, i) => start + i)
 })
 
 // 监听查询参数变化
 watch(() => props.queryParams, () => {
-    console.log(props.queryParams, 123123);
-
     refreshTable()
 }, { deep: true })
 

+ 388 - 0
pages/customer/recording-history.vue

@@ -0,0 +1,388 @@
+<template>
+    <cwg-page-wrapper class="create-page" :isHeaderFixed="true">
+        <view class="info-card">
+            <view class="content-title">
+                <view v-t="'Home.page_customer.item7'"></view>
+            </view>
+            <view class="search-bar">
+                <cwg-combox v-model:value="search.type" :clearable="false" :options="typeMap"
+                    :placeholder="t('Custom.Recording.AccountType')" />
+                <uni-datetime-picker type="daterange" v-model="search.date"
+                    :placeholder="t('placeholder.Start') + ' - ' + t('placeholder.End')" />
+            </view>
+            <cwg-tabel ref="tableRef" :columns="currentColumns" :queryParams="search" :api="listApi"
+                :show-operation="false" :showPagination="false">
+                <!-- 状态列自定义渲染 -->
+                <template #status="{ row }">
+                    <view class="state" :class="getStatusClass(row.status)">
+                        {{ getStatusText(row) }}
+                    </view>
+                </template>
+                <!-- 账户类型列自定义渲染 -->
+                <template #accountType="{ row }">
+                    {{ getAccountTypeText(row.type || row.loginType) }}
+                </template>
+                <!-- 金额列格式化 -->
+                <template #amount="{ row }">
+                    <view>-{{ formatNumber(row.withdrawAmount || row.amount) }}</view>
+                </template>
+                <!-- 备注列格式化 -->
+                <template #note="{ row }">
+                    <view>{{ formatNote(row.approveDesc) }}</view>
+                </template>
+            </cwg-tabel>
+        </view>
+    </cwg-page-wrapper>
+</template>
+
+<script setup lang="ts">
+import { computed, ref, onMounted } from 'vue';
+import { useI18n } from 'vue-i18n';
+const { t, locale } = useI18n();
+import { customApi } from '@/service/custom';
+import useUserStore from "@/stores/use-user-store";
+const userStore = useUserStore();
+const userInfo = computed(() => userStore.userInfo);
+const search = ref({
+    type: 1
+})
+const getInfoAgentTransfer = computed(() => userInfo.value.agentTransfer)
+const typeMap = computed(() => ([
+    { value: 1, text: t('Custom.Recording.NewAccount') },
+    { value: 2, text: t('Custom.Recording.LeverageApply') },
+    { value: 3, text: t('Custom.Recording.InternalTransfer') },
+    { value: 4, text: t('Custom.Recording.ActivitiesApply') },
+    ...(getInfoAgentTransfer.value == 1 ? [{ value: 5, text: t('Custom.Recording.Transfer') }] : [])
+]));
+const isZh = computed(() => ['cn', 'zh', 'zhHant'].includes(locale.value));
+
+// 账户类型映射
+const accountTypeMap = {
+    1: 'AccountType.ClassicAccount',
+    2: 'AccountType.SeniorAccount',
+    5: 'AccountType.SpeedAccount',
+    6: 'AccountType.SpeedAccount',
+    7: 'AccountType.StandardAccount',
+    8: 'AccountType.CentAccount'
+}
+// 拒绝原因映射(示例)
+const reasons = ref({})
+// 根据类型获取列配置
+const getColumnsByType = (type: number) => {
+    switch (type) {
+        case 1: // 开户记录
+            return [
+                {
+                    prop: 'platform',
+                    label: t('Custom.Recording.Platform'),
+                    align: 'left'
+                },
+                {
+                    prop: 'type',
+                    label: t('Custom.PaymentHistory.payType'),
+                    align: 'left',
+                    slot: 'type'
+                },
+                {
+                    prop: 'channelName',
+                    label: t('Custom.PaymentHistory.PaymentMethod'),
+                    formatter: ({ row }) => isZh.value ? row.channelName : row.channelEnName,
+                    align: 'left'
+                },
+                {
+                    prop: 'amount',
+                    label: t('Custom.PaymentHistory.Amount'),
+                    formatter: ({ row }) => row.amount + ' ' + row.currency,
+                    align: 'left'
+                },
+                {
+                    prop: 'addTime',
+                    label: t('Custom.PaymentHistory.ApplicationDate'),
+                    type: 'date',
+                    dateFormat: 'YYYY-MM-DD HH:mm',
+                    align: 'left'
+                },
+                {
+                    prop: 'status',
+                    label: t('Custom.PaymentHistory.Status'),
+                    slot: 'status',
+                    align: 'left'
+                },
+                {
+                    prop: 'note',
+                    label: t('Custom.Recording.Note'),
+                    formatter: ({ row }) => row.note || '--',
+                    align: 'left'
+                }
+            ]
+        case 2: // 杠杆修改记录
+            return [
+                {
+                    prop: 'login',
+                    label: t('Custom.Recording.TradingAccount'),
+                    align: 'center',
+                    formatter: ({ row }) => row.login || '--'
+                },
+                {
+                    prop: 'oldLeverage',
+                    label: t('Custom.Recording.OldLever'),
+                    align: 'center',
+                    formatter: ({ row }) => row.oldLeverage ? `1:${row.oldLeverage}` : '--'
+                },
+                {
+                    prop: 'newLeverage',
+                    label: t('Custom.Recording.NewLever'),
+                    align: 'center',
+                    formatter: ({ row }) => row.newLeverage ? `1:${row.newLeverage}` : '--'
+                },
+                {
+                    prop: 'addTime',
+                    label: t('Custom.PaymentHistory.ApplicationDate'),
+                    type: 'date',
+                    dateFormat: 'YYYY-MM-DD HH:mm',
+                    align: 'left'
+                },
+                {
+                    prop: 'status',
+                    label: t('Custom.PaymentHistory.Status'),
+                    slot: 'status',
+                    align: 'left'
+                },
+                {
+                    prop: 'note',
+                    label: t('Custom.Recording.Note'),
+                    formatter: ({ row }) => row.note || '--',
+                    align: 'left'
+                }
+            ]
+        case 3: // 转账记录
+        case 5: // 内部转账记录
+            return [
+                {
+                    prop: 'withdrawLogin',
+                    label: t('Custom.Recording.TransferAccounts'),
+                    align: 'center',
+                    formatter: ({ row }) => row.withdrawLogin || '--'
+                },
+                {
+                    prop: 'depositLogin',
+                    label: t('Custom.Recording.IntoAccount'),
+                    align: 'center',
+                    formatter: ({ row }) => row.depositLogin || '--',
+                },
+                {
+                    prop: 'withdrawCurrency',
+                    label: t('Custom.Recording.CurrencyType'),
+                    align: 'center',
+                    formatter: ({ row }) => row.withdrawCurrency || '--',
+                },
+                {
+                    prop: 'withdrawAmount',
+                    label: t('Custom.Recording.Amount'),
+                    align: 'center',
+                    slot: 'amount'
+                },
+                {
+                    prop: 'addTime',
+                    label: t('Custom.PaymentHistory.ApplicationDate'),
+                    type: 'date',
+                    dateFormat: 'YYYY-MM-DD HH:mm',
+                    align: 'left'
+                },
+                {
+                    prop: 'status',
+                    label: t('Custom.PaymentHistory.Status'),
+                    slot: 'status',
+                    align: 'left'
+                },
+                {
+                    prop: 'note',
+                    label: t('Custom.Recording.Note'),
+                    formatter: ({ row }) => row.note || '--',
+                    align: 'left'
+                }
+            ]
+        case 4: // 活动申请记录
+            return [
+                {
+                    prop: 'login',
+                    label: t('Custom.Recording.TradingAccount'),
+                    align: 'center',
+                    formatter: ({ row }) => row.login || '--'
+                },
+                {
+                    prop: 'loginType',
+                    label: t('Custom.Recording.AccountType'),
+                    align: 'center',
+                    slot: 'accountType'
+                },
+                {
+                    prop: 'title',
+                    label: t('Custom.Recording.ActivityName'),
+                    align: 'center',
+                    formatter: ({ row }) => row.title || '--'
+                },
+                {
+                    prop: 'addTime',
+                    label: t('Custom.PaymentHistory.ApplicationDate'),
+                    type: 'date',
+                    dateFormat: 'YYYY-MM-DD HH:mm',
+                    align: 'left'
+                },
+                {
+                    prop: 'status',
+                    label: t('Custom.PaymentHistory.Status'),
+                    slot: 'status',
+                    align: 'left'
+                },
+                {
+                    prop: 'note',
+                    label: t('Custom.Recording.Note'),
+                    formatter: ({ row }) => row.note || '--',
+                    align: 'left'
+                }
+            ]
+    }
+}
+
+// 当前列配置
+const currentColumns = computed(() => getColumnsByType(search.value.type))
+// 获取状态文本
+const getStatusText = (row: any) => {
+    const status = row.status
+    // 根据不同记录类型处理状态
+    if (search.value.type === 1) {
+        if (status === 1) return t('State.ToBeProcessed')
+        if (status === 2 && row.accountStatus === 2) return t('State.Completed')
+        if (status === 2 && (row.accountStatus === 1 || !row.accountStatus)) return t('State.InTheProcessing')
+        if (status === 3) return t('State.Refused')
+    } else if (search.value.type === 2) {
+        if (status === 1) return t('State.ToBeProcessed')
+        if (status === 2 && row.leverageStatus === 2) return t('State.Completed')
+        if (status === 2 && row.leverageStatus === 1) return t('State.InTheProcessing')
+        if (status === 3) return t('State.Refused')
+    } else if (search.value.type === 3 || search.value.type === 5) {
+        if (status === 1) return t('State.ToBeProcessed')
+        if (status === 2 && row.withdrawStatus === 2 && row.depositStatus === 2) return t('State.Completed')
+        if (status === 2 && (row.withdrawStatus === 1 || row.depositStatus === 1)) return t('State.InTheProcessing')
+        if (status === 3 || row.withdrawStatus === 3 || row.depositStatus === 3) return t('State.Refused')
+    } else {
+        // 活动申请等
+        if (status === 1) return t('State.ToBeProcessed')
+        if (status === 2) return t('State.Completed')
+        if (status === 3) return t('State.Refused')
+    }
+    return '--'
+}
+// 获取状态样式类
+const getStatusClass = (status: number) => {
+    const classMap: Record<number, string> = {
+        1: 'status-warning',
+        2: 'status-success',
+        3: 'status-processing',
+        4: 'status-danger'
+    }
+    return classMap[status] || ''
+}
+// 获取账户类型文本
+const getAccountTypeText = (type: number) => {
+    const key = accountTypeMap[type as keyof typeof accountTypeMap]
+    return key ? t(key) : '--'
+}
+// 格式化数字
+const formatNumber = (value: string | number) => {
+    if (!value) return '--'
+    const num = Number(value)
+    return isNaN(num) ? '--' : num.toFixed(2)
+}
+// 格式化备注
+const formatNote = (approveDesc: string) => {
+    if (!approveDesc) return '--'
+    const reason = reasons.value[approveDesc as keyof typeof reasons.value]
+    if (reason) {
+        return isZh.value ? reason.content : reason.enContent
+    }
+    return approveDesc
+}
+const listApi = ref(null)
+listApi.value = customApi.CustomRecordAccount
+</script>
+
+<style scoped lang="scss">
+@import "@/uni.scss";
+
+.avatar {
+    width: px2rpx(60);
+    height: px2rpx(60);
+    border-radius: 4px;
+}
+
+.content-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    font-size: px2rpx(20);
+    font-weight: 500;
+
+    .content-title-btns {
+        margin: px2rpx(8) 0;
+
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        gap: px2rpx(12);
+
+        .btn-primary {
+            min-width: px2rpx(120);
+            background-color: var(--color-error);
+            color: white;
+            padding: 0 px2rpx(12);
+            border: none;
+            font-size: px2rpx(14);
+            text-align: center;
+            cursor: pointer;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            gap: px2rpx(8);
+        }
+
+        .btn-primary:active {
+            background-color: var(--color-navy-700);
+        }
+    }
+}
+
+.operation-btn {
+    :deep(span) {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        gap: px2rpx(4);
+        cursor: pointer;
+        background-color: var(--color-slate-150);
+        padding: px2rpx(8) 0;
+    }
+}
+
+.operation-btn.disabled {
+    cursor: not-allowed;
+    opacity: 0.5;
+}
+
+.search-bar {
+    display: flex;
+    align-items: center;
+    justify-content: flex-start;
+    flex-wrap: wrap;
+    gap: px2rpx(16);
+    margin: px2rpx(16) 0;
+
+    .cwg-combox,
+    .uni-easyinput,
+    .uni-date {
+        width: px2rpx(240) !important;
+        flex: none;
+    }
+}
+</style>

+ 4 - 1
uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue

@@ -40,7 +40,7 @@
 								</view>
 							</template>
 							<template v-else>
-								<view v-if="!multiple && mixinDatacomResData.length > 0" class="uni-select__selector-item" v-for="(item,index) in mixinDatacomResData" :key="index"
+								<view v-if="!multiple && mixinDatacomResData.length > 0" :class="{'uni-select__selector-item': true, 'uni-select__selector-item--actived': item.value === modelValue}" class="" v-for="(item,index) in mixinDatacomResData" :key="index"
 									@click="change(item)">
 									<text :class="{'uni-select__selector__disabled': item.disable}">{{formatItemName(item)}}</text>
 								</view>
@@ -719,6 +719,9 @@
 		/* border-bottom: solid 1px $uni-border-3; */
 		padding: 0px 10px;
 	}
+	.uni-select__selector-item--actived{
+		background-color: #f5f7fa;
+	}