1226 lines
37 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="bd-center gradient-background-circles">
<!-- 顶部导航 -->
<GeneralHeader
:isHomePage="true"
:showLanguageList="true"
:title="t('bd_leader_center')"
color="black"
style="box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); z-index: 999"
/>
<!-- 主要内容 -->
<div
style="
padding: 16px;
position: relative;
z-index: 2;
display: flex;
flex-direction: column;
gap: 12px;
"
>
<!-- 用户信息卡片 -->
<div
style="
background-color: white;
padding: 16px;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
"
>
<!-- APP连接状态指示 -->
<div v-if="isInApp() && !appConnected" class="app-status connecting">
<div class="status-indicator"></div>
<span>{{ t('loading') }}...</span>
</div>
<!-- 用户信息 -->
<div style="display: flex; align-items: center; gap: 4px">
<!-- 头像 -->
<div style="width: 3.5em; display: flex; align-items: center; justify-content: center">
<img
:src="userInfo.userAvatar || ''"
style="
display: block;
width: 100%;
aspect-ratio: 1/1;
object-fit: cover;
border-radius: 50%;
"
@error="handleAvatarImageError"
/>
</div>
<!-- 基本信息 -->
<div
style="
flex: 1;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
justify-content: space-around;
"
>
<div
style="
margin-bottom: 4px;
font-weight: 600;
color: #333;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
"
>
{{ userInfo.userNickname || userInfo.name }}
</div>
<div style="margin: 0; font-size: 0.9em; color: #666">
{{ t('user_id_prefix') }} {{ userInfo.id || userInfo.account }}
</div>
</div>
<!-- 按钮 -->
<div style="display: flex; align-items: center" @click="gotoPolicy">
<img src="../../assets/icon/info.png" alt="" style="display: block; width: 20px" />
</div>
</div>
<!-- 前往收入页面 -->
<div
style="
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
"
@click="gotoIncome"
>
<span style="font-weight: 600; color: #1f2937">
{{ t('available_salaries') }} ${{ salaryInfo?.availableBalance || 0 }}
</span>
<img
src="../../assets/icon/arrow.png"
alt=""
style="display: block; width: 20px"
class="flipImg"
/>
</div>
</div>
<!-- 邀请按钮 -->
<div style="display: flex; flex-direction: column; gap: 8px">
<!-- 邀请成为Agency -->
<div
style="
background-color: white;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
padding: 16px;
cursor: pointer;
transition: all 0.2s;
border: 1px solid #e5e7eb;
"
@click="goToInviteAgency"
>
<div style="display: flex; justify-content: space-between; align-items: center">
<span style="font-weight: 600; color: #1f2937"> {{ t('invite_become_agent') }}</span>
<img
src="../../assets/icon/arrow.png"
alt=""
style="display: block; width: 20px"
class="flipImg"
/>
</div>
</div>
<!-- 邀请成为BD -->
<div
style="
background-color: white;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
padding: 16px;
cursor: pointer;
transition: all 0.2s;
border: 1px solid #e5e7eb;
"
@click="goToInviteBD"
>
<div style="display: flex; justify-content: space-between; align-items: center">
<span style="font-weight: 600; color: #1f2937"> {{ t('invite_become_BD') }}</span>
<img
src="../../assets/icon/arrow.png"
alt=""
style="display: block; width: 20px"
class="flipImg"
/>
</div>
</div>
</div>
<!-- 标签页 -->
<div
style="
background-color: white;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
padding: 16px;
"
>
<!-- 标签按钮 -->
<div style="display: flex; position: relative; margin-bottom: 16px">
<button
v-for="tab in tabs"
:key="tab.id"
@click="switchTab(tab.id)"
:style="{
flex: 1,
padding: '8px 16px',
background: 'transparent',
border: 'none',
fontWeight: '600',
color: activeTab === tab.id ? '#8B5CF6' : 'rgba(0, 0, 0, 0.6)',
cursor: 'pointer',
transition: 'all 0.3s',
position: 'relative',
}"
>
{{ t(tab.langKey) }}
</button>
</div>
<!-- BD 标签内容 -->
<div v-if="activeTab === 1">
<!-- 日期 -->
<div style="display: flex; justify-content: space-between; align-items: center">
<div style="font-weight: 600">{{ BDData.billTitle }}</div>
<img
src="../../assets/icon/records.png"
alt=""
style="display: block; width: 1.3em"
@click="records('bd')"
/>
</div>
<!-- 总体信息 -->
<div
style="
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
"
>
<!-- 总支出 -->
<div style="font-size: 0.8em; font-weight: 600">
{{ t('team_recharge') }}: ${{ BDData.totalRecharge || 0 }}
</div>
<!-- 总收入 -->
<div style="font-size: 0.8em; font-weight: 600">
{{ t('total_team_salary') }}: ${{ BDData.totalSalary || 0 }}
</div>
</div>
<!-- 成员列表 -->
<div style="display: flex; flex-direction: column; gap: 12px">
<div
v-for="BDInfo in BDData.memberBillList"
style="
background-color: white;
padding: 10px 16px;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: space-around;
gap: 4px;
"
>
<!-- 头像 -->
<div
style="width: 3.5em; display: flex; align-items: center; justify-content: center"
>
<img
:src="BDInfo.agentAvatar || ''"
alt=""
style="
display: block;
width: 100%;
aspect-ratio: 1/1;
border-radius: 50%;
object-fit: cover;
"
@error="handleAvatarImageError"
/>
</div>
<!-- 基本信息 -->
<div
style="
flex: 1;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
gap: 4px;
"
>
<div
style="
font-weight: 700;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
"
>
{{ BDInfo.agentName }}
</div>
<div style="color: rgba(0, 0, 0, 0.4); font-size: 0.8em; font-weight: 500">
{{ t('user_id_prefix') }} {{ BDInfo.agentAccount }}
</div>
</div>
<!-- 关键信息 -->
<div
style="
width: auto;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
justify-content: space-around;
"
>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('salary') }}: ${{ BDInfo.teamSalaryAmount }}
</div>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('recharge') }}: ${{ BDInfo.teamRechargeAmount }}
</div>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('host') }}:{{ BDInfo.teamMemberCount }}
</div>
</div>
</div>
</div>
</div>
<!-- BD Leader 标签内容 -->
<div v-if="activeTab === 2 && BDLeaderData.billTitle">
<!-- 所处时期 -->
<div style="display: flex; justify-content: space-between; align-items: center">
<div style="font-weight: 600">{{ BDLeaderData.billTitle }}</div>
<img
src="../../assets/icon/records.png"
alt=""
style="display: block; width: 1.3em"
@click="records('bdLeader')"
/>
</div>
<!-- 总收益 -->
<div
style="
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
"
>
<div style="font-size: 0.8em; font-weight: 600">Number of BD:0</div>
<div style="font-size: 0.8em; font-weight: 600">
{{ t('total_team_salary') }}: ${{ BDLeaderData.totalSalary }}
</div>
</div>
<!-- 团队成员列表 -->
<div style="display: flex; flex-direction: column; gap: 12px">
<div
v-for="BDInfo in BDLeaderData.memberBillList"
style="
position: relative;
background-color: white;
padding: 16px;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: space-around;
gap: 4px;
"
>
<!-- 头像 -->
<div
style="
width: 3.5em;
min-width: 0;
align-self: stretch;
display: flex;
align-items: center;
justify-content: center;
"
>
<img
:src="BDInfo.agentAvatar || ''"
alt=""
style="
display: block;
width: 100%;
aspect-ratio: 1/1;
border-radius: 50%;
object-fit: cover;
"
@error="handleAvatarImageError"
/>
</div>
<!-- 基本信息 -->
<div
style="
flex: 1;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
gap: 4px;
"
>
<div
style="
font-weight: 700;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
"
>
{{ BDInfo.agentName }}
</div>
<div style="color: rgba(0, 0, 0, 0.4); font-size: 0.8em; font-weight: 500">
{{ t('user_id_prefix') }} {{ BDInfo.agentAccount }}
</div>
</div>
<!-- 关键信息 -->
<div
style="
width: auto;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
justify-content: space-around;
"
>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('team_salary') }}: ${{ BDInfo.teamSalaryAmount }}
</div>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('agencies') }}: {{ BDInfo.teamMemberCount }}
</div>
</div>
<!-- 删除按钮 -->
<!-- <div
style="
font-size: 0.7em;
position: absolute;
bottom: 4%;
right: 4%;
color: #ff4c4c;
font-weight: 500;
"
@click="removeBD(BDInfo)"
>
Remove This BD >
</div> -->
</div>
</div>
</div>
</div>
</div>
<!-- 遮罩层 -->
<maskLayer :maskLayerShow="maskLayerShow" @click="closedPopup">
<!-- 确认弹窗 -->
<div
v-if="showRemovePopup"
style="
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
"
@click.stop
>
<div
style="
width: 80%;
border-radius: 12px;
background: #fff;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
"
>
<div style="color: rgba(0, 0, 0, 0.8); font-weight: 800">{{ t('tips') }}</div>
<div style="color: rgba(0, 0, 0, 0.5); font-weight: 600; text-align: center">
Are you sure you want to remove ID:123445678 from your BD Leader list?
</div>
<div style="color: rgba(0, 0, 0, 0.5); font-weight: 600; text-align: center">
Are you sure you want to remove ID:123445678 from your BD list?
</div>
<div
style="width: 100%; display: flex; justify-content: space-around; align-items: center"
>
<div
style="
padding: 12px 20px;
border-radius: 12px;
border: 1px solid #e6e6e6;
color: rgba(0, 0, 0, 0.4);
font-weight: 800;
"
@click="closedPopup"
>
{{ t('cancel') }}
</div>
<div
style="
padding: 12px 20px;
border-radius: 12px;
background: linear-gradient(
152deg,
rgba(198, 112, 255, 0.6) 7.01%,
rgba(119, 38, 255, 0.6) 92.99%
);
color: rgba(255, 255, 255, 0.8);
font-weight: 800;
"
@click="Confirm"
>
{{ t('confirm') }}
</div>
</div>
</div>
</div>
<!-- 贴底抽屉 -->
<div style="position: fixed; bottom: 0; width: 100%">
<!-- 历史收入 - 使用相同组件根据类型显示不同内容 -->
<div
v-if="showHistory"
style="
background: white;
border-radius: 16px 16px 0 0;
max-height: 80vh;
display: flex;
flex-direction: column;
gap: 10px;
padding: 20px;
"
class="overflow-y-auto"
@click.stop
>
<!-- 标题 -->
<div style="display: flex; justify-content: center; align-items: center">
<div style="margin: 0; font-size: 1em; font-weight: 600; color: #333">
{{ currentHistoryType === 'bd' ? t('bd_salary') : t('bd_leader_history') }}
</div>
</div>
<!-- 总体信息 -->
<div
style="
box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.25);
border-radius: 8px;
padding: 12px;
margin: 0 4px;
"
>
<div>
<div style="display: grid; gap: 4px">
<div style="font-size: 0.9em; font-weight: 600">
{{ t('total_income') }} ${{
currentHistoryType === 'bd' ? BDSalary.totalIncome : BDLeaderSalary.totalIncome
}}
</div>
<div style="font-size: 0.9em; font-weight: 600">
{{ t('previous_period_income') }}: ${{
currentHistoryType === 'bd'
? BDSalary.previousPeriodIncome
: BDLeaderSalary.previousPeriodIncome
}}
</div>
</div>
</div>
</div>
<!-- 历史薪资列表 -->
<div style="overflow-y: auto" class="salaryList">
<div style="display: flex; flex-direction: column; gap: 8px">
<!-- BD -->
<template v-if="currentHistoryType === 'bd'">
<historySalary
v-for="income in BDSalary.incomeDetails"
:type="income.statusText"
long="true"
@showMore="showReportDetail(income.billBelong)"
>
<!-- 进行中 -->
<template v-if="income.statusText == 'In Progress'" v-slot:content>
<div>{{ income.billTitle }}</div>
<div style="font-size: 0.9em">
{{ t('agency_number') }}: {{ income.agencyNumber || 0 }}
</div>
<!-- 团队薪资和BD薪资收益 -->
<div style="display: flex; justify-content: space-between">
<div style="font-size: 0.9em">
{{ t('team_salary') }}: ${{ income.teamSalaryAmount || 0 }}
</div>
<div style="font-size: 0.9em">
{{ t('bd_income_salary') }}: ${{ income.bdIncomeSalary || 0 }} ({{
income.bdRatioSalary || 0
}}%)
</div>
</div>
<!-- 团队充值和BD充值收益 -->
<div style="display: flex; justify-content: space-between">
<div style="font-size: 0.9em">
{{ t('team_top_up') }}: ${{ income.teamRechargeAmount || 0 }}
</div>
<div style="font-size: 0.9em">
{{ t('bd_income_top_up') }}: ${{ income.bdIncomeRecharge || 0 }} ({{
income.bdRatioRecharge || 0
}}%)
</div>
</div>
</template>
<!-- 已完成 -->
<template v-else v-slot:content>
<div>{{ income.billTitle }}</div>
<div style="font-size: 0.9em">
{{ t('agency_number') }}: {{ income.agencyNumber || 0 }}
</div>
<!-- 展示团队薪资高收入 -->
<div
v-if="income.hitPolicyType == 'TEAM_SALARY'"
style="display: flex; justify-content: space-between"
>
<!-- 团队薪资 -->
<div style="font-size: 0.9em">
{{ t('team_salary') }}: ${{ income.teamSalaryAmount || 0 }}
</div>
<!-- 薪资收益 -->
<div style="font-size: 0.9em">
{{ t('bd_income_salary') }}: ${{ income.settlementSalary || 0 }} ({{
income.commissionRate || 0
}}%)
</div>
</div>
<!-- 展示团队充值高支出 -->
<div
v-else-if="income.hitPolicyType == 'TEAM_RECHARGE'"
style="display: flex; justify-content: space-between"
>
<!-- 团队充值 -->
<div style="font-size: 0.9em">
{{ t('team_top_up') }}: ${{ income.teamRechargeAmount || 0 }}
</div>
<!-- 充值收益 -->
<div style="font-size: 0.9em">
{{ t('bd_income_top_up') }}: ${{ income.settlementSalary || 0 }} ({{
income.commissionRate || 0
}}%)
</div>
</div>
</template>
</historySalary>
</template>
<!-- BD Leader -->
<template v-else-if="currentHistoryType === 'bdLeader'">
<div style="font-weight: 600">Income Details:</div>
<!-- 已完成的记录 -->
<historySalary
v-for="income in BDLeaderSalary.incomeDetails"
:type="income.statusText"
@showMore="showReportDetail(income.billBelong)"
>
<!-- 进行中 -->
<template v-if="income.statusText == 'In Progress'" v-slot:content>
<div>{{ income.billTitle }}</div>
<div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px">
<div>{{ t('bd_number') }}: {{ income.bdNumber || 0 }}</div>
<!-- 团队收入 -->
<div>{{ t('team_salary') }}: ${{ income.teamSalaryAmount || 0 }}</div>
</div>
</template>
<!-- 已完成 -->
<template v-else v-slot:content>
<div>{{ income.billTitle }}</div>
<div>{{ t('bd_number') }}: {{ income.bdNumber || 0 }}</div>
<!-- 团队收入 -->
<div>{{ t('team_salary') }}: ${{ income.teamSalaryAmount || 0 }}</div>
</template>
</historySalary>
</template>
</div>
</div>
</div>
<!-- more -->
<div v-if="showMore">
<!-- BD -->
<div
v-if="currentHistoryType === 'bd'"
style="
background: white;
border-radius: 16px 16px 0 0;
max-height: 60vh;
display: flex;
flex-direction: column;
gap: 10px;
padding: 20px;
"
class="overflow-y-auto"
@click.stop
>
<!-- 日期 -->
<div style="font-weight: 600">{{ SalaryMore.period }}</div>
<!-- 总体信息 -->
<div style="display: flex; justify-content: space-between; align-items: center">
<!-- 总支出 -->
<div style="font-size: 0.7em; font-weight: 600">
{{ t('team_recharge') }}: ${{ SalaryMore.teamTotalRecharge }}
</div>
<!-- 总收入 -->
<div style="font-size: 0.7em; font-weight: 600">
{{ t('total_team_salary') }}: ${{ SalaryMore.teamTotalSalary }}
</div>
</div>
<!-- 代理列表 -->
<div
v-for="member in SalaryMore.memberDetails"
style="
background-color: white;
padding: 10px 16px;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: space-between;
gap: 4px;
"
>
<!-- 头像 -->
<div
style="
width: 3.5em;
display: flex;
align-items: center;
justify-content: center;
"
>
<img
:src="member.userAvatar || ''"
alt=""
style="
display: block;
width: 100%;
aspect-ratio: 1/1;
border-radius: 50%;
object-fit: cover;
"
@error="handleAvatarImageError"
/>
</div>
<!-- 基本信息 -->
<div
style="
flex: 1;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
gap: 4px;
"
>
<div
style="
font-weight: 700;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
"
>
{{ member.userName }}
</div>
<div style="color: rgba(0, 0, 0, 0.4); font-size: 0.8em; font-weight: 500">
{{ t('user_id_prefix') }} {{ member.account }}
</div>
</div>
<!-- 关键信息 -->
<div
style="
width: auto;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
justify-content: space-around;
"
>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('salary') }}: ${{ member.salary }}
</div>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('recharge') }}: ${{ member.recharge }}
</div>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('host') }}:{{ member.hostCount }}
</div>
</div>
</div>
</div>
<!-- BDleader -->
<div
v-if="currentHistoryType === 'bdLeader'"
style="
background: white;
border-radius: 16px 16px 0 0;
max-height: 60vh;
display: flex;
flex-direction: column;
gap: 10px;
padding: 20px;
"
class="overflow-y-auto"
@click.stop
>
<!-- 日期 -->
<div style="font-weight: 600">{{ SalaryMore.period }}</div>
<!-- 总体信息 -->
<div style="display: flex; justify-content: space-between; align-items: center">
<!-- 总收入 -->
<div style="font-size: 0.7em; font-weight: 600">
{{ t('team_salary') }}: ${{ SalaryMore.teamSalary }}
</div>
<!-- BD数量 -->
<div style="font-size: 0.7em; font-weight: 600">
{{ t('bd_number') }}:{{ SalaryMore.bdNumber }}
</div>
</div>
<!-- BD列表 -->
<div
v-for="member in SalaryMore.memberDetails"
style="
background-color: white;
padding: 10px 16px;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: space-between;
gap: 4px;
"
>
<!-- 头像 -->
<div
style="
width: 3.5em;
display: flex;
align-items: center;
justify-content: center;
"
>
<img
:src="member.bdUserAvatar || ''"
alt=""
style="
display: block;
width: 100%;
aspect-ratio: 1/1;
border-radius: 50%;
object-fit: cover;
"
@error="handleAvatarImageError"
/>
</div>
<!-- 基本信息 -->
<div
style="
flex: 1;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
gap: 4px;
"
>
<div
style="
font-weight: 700;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
"
>
{{ member.bdUserName }}
</div>
<div style="color: rgba(0, 0, 0, 0.4); font-size: 0.8em; font-weight: 500">
{{ t('user_id_prefix') }} {{ member.account }}
</div>
</div>
<!-- 关键信息 -->
<div
style="
width: auto;
min-width: 0;
align-self: stretch;
display: flex;
flex-direction: column;
justify-content: space-around;
"
>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('salary') }}: ${{ member.salary }}
</div>
<div style="font-size: 0.8em; font-weight: 500">
{{ t('agencies') }}:{{ member.agencyCount }}
</div>
</div>
</div>
</div>
</div>
</div>
</maskLayer>
</div>
</template>
<script setup>
import { computed, onMounted, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import { setDocumentDirection } from '@/locales/i18n'
import { useRouter } from 'vue-router'
import { isInApp } from '@/utils/appBridge.js'
import { clearSelectedPayee } from '@/utils/payeeStore.js'
import { usePageInitializationWithConfig } from '@/utils/pageConfig.js'
import { useIdentityStore } from '@/stores/identity.js'
import { handleAvatarImageError } from '@/utils/imageHandler.js'
import { getBdMemberBillList, getBdHistory, getBdHistoryMore } from '@/api/bdCenter.js'
import { getBdLeaderHistory, getBdLeaderHistoryMore } from '@/api/bdLeaderCenter'
import { apiGetBankBalance } from '@/api/wallet.js'
import GeneralHeader from '@/components/GeneralHeader.vue'
import maskLayer from '@/components/MaskLayer.vue'
import historySalary from '@/components/historySalary.vue'
const { t, locale } = useI18n()
const router = useRouter()
const identityStore = useIdentityStore()
// 监听语言变化并设置文档方向
locale.value && setDocumentDirection(locale.value)
// 标签页数据
const tabs = ref([
{ id: 1, langKey: 'agency_list' },
{ id: 2, langKey: 'bd_list' },
])
const activeTab = ref(1)
const showHistory = ref(false)
const showMore = ref(false)
const showRemovePopup = ref(false)
const currentHistoryType = ref('bd') // 'bd' 或 'bdLeader'
const BDData = ref({}) // BD成员账单列表
const BDLeaderData = ref({}) // BDLeader成员账单列表
const BDSalary = ref({}) // BD Salary
const BDLeaderSalary = ref({}) // BDLeader Salary
const salaryInfo = ref({}) //钱包信息
const SalaryMore = ref({}) // BD Salary More
// 遮罩层显示状态
const maskLayerShow = computed(() => {
return showHistory.value || showMore.value || showRemovePopup.value
})
const records = (historyType) => {
showHistory.value = true
currentHistoryType.value = historyType
}
// 切换标签页
const switchTab = (tabId) => {
activeTab.value = tabId
}
// 显示报告详情
const showReportDetail = async (billBelong) => {
if (currentHistoryType.value === 'bd') {
const resBdHistoryMore = await getBdHistoryMore(billBelong)
if (resBdHistoryMore.status && resBdHistoryMore.body) {
// 处理返回的数据
console.log('BD History More:', resBdHistoryMore.body)
SalaryMore.value = resBdHistoryMore.body || {}
}
} else if (currentHistoryType.value === 'bdLeader') {
const resBdLeaderHistoryMore = await getBdLeaderHistoryMore(billBelong)
if (resBdLeaderHistoryMore.status && resBdLeaderHistoryMore.body) {
// 处理返回的数据
console.log('BD History More:', resBdLeaderHistoryMore.body)
SalaryMore.value = resBdLeaderHistoryMore.body || {}
}
}
showHistory.value = false
showMore.value = true
}
// 删除BD
const removeBD = (BDItem) => {
showRemovePopup.value = true
}
// 确认删除
const Confirm = () => {
closedPopup()
}
// 关闭弹窗
const closedPopup = () => {
showHistory.value = false
showMore.value = false
showRemovePopup.value = false
SalaryMore.value = {}
}
// 前往政策页
const gotoPolicy = () => {
router.push({
path: '/policy',
query: { from: 'BDLead' },
})
}
// 前往收入页面
const gotoIncome = () => {
router.push('/available-income')
}
// 前往邀请代理
const goToInviteAgency = () => {
router.push('/invite-agency')
}
// 前往邀请BD
const goToInviteBD = () => {
router.push('/invite-bd')
}
// 查询BD成员账单列表
const apiGetBdMemberBillList = async () => {
const res = await getBdMemberBillList('BD')
if (res.status && res.body) {
BDData.value = res.body || {}
// 如果BDSalary.value获取完数据就整合数据
if (BDSalary.value.incomeDetails) {
BDSalary.value.incomeDetails.unshift(BDData.value.bdHistoryCO)
}
}
}
// 查询BDLeader成员账单列表
const apiGetBdLeaderMemberBillList = async () => {
const res = await getBdMemberBillList('BDLEADER')
if (res.status && res.body) {
BDLeaderData.value = res.body || {}
// 如果BDLeaderSalary.value获取完数据就整合数据
if (BDLeaderSalary.value.incomeDetails) {
BDLeaderSalary.value.incomeDetails.unshift(BDLeaderData.value.bdHistoryCO)
}
}
}
// 查询BD历史记录
const apiGetBdHistory = async () => {
const res = await getBdHistory()
if (res.status && res.body) {
BDSalary.value = res.body || {}
// 如果BDData.value获取完数据就整合数据
if (BDData.value.bdHistoryCO) {
BDSalary.value.incomeDetails.unshift(BDData.value.bdHistoryCO)
}
}
}
// 查询BDLeader历史记录
const apiGetBdLeaderHistory = async () => {
const res = await getBdLeaderHistory()
if (res.status && res.body) {
BDLeaderSalary.value = res.body || {}
// 如果BDLeaderData.value获取完数据就整合数据
if (BDLeaderData.value.bdHistoryCO) {
BDLeaderSalary.value.incomeDetails.unshift(BDLeaderData.value.bdHistoryCO)
}
}
}
// 查询可用余额
const getBankBalance = async () => {
const res = await apiGetBankBalance('BD_SALARY')
if (res.status && res.body) {
salaryInfo.value = res.body || {}
}
}
const { appConnected, userInfo } = usePageInitializationWithConfig('BD_LEADER_CENTER', {
forceRefresh: true, // 强制刷新
needsTeamInfo: true,
needsBankBalance: false,
onDataLoaded: () => {},
})
// 初始化数据
const initData = () => {
apiGetBdMemberBillList() //BD成员账单
apiGetBdHistory() //BD历史记录
apiGetBdLeaderHistory() //BD Leader历史记录
apiGetBdLeaderMemberBillList() //BD Leader成员账单
getBankBalance() // 查询可用余额
}
onMounted(() => {
clearSelectedPayee()
initData() // 初始化数据
identityStore.setIdentity('BD_LEADER')
})
</script>
<style scoped>
/* 保持原有的样式不变 */
.bd-center {
max-height: 100vh;
overflow-y: auto;
font-family: -apple-system, BlinkMacSystemFont, sans-serif;
background-color: #ffffff;
background-image: url(../../assets/images/secondBg.png);
}
.bd-center::-webkit-scrollbar {
display: none;
}
.salaryList::-webkit-scrollbar {
display: none;
}
.overflow-y-auto {
overflow-y: auto;
}
.overflow-y-auto::-webkit-scrollbar {
display: none;
}
* {
color: rgba(0, 0, 0, 0.8);
font-family: 'SF Pro Text';
font-weight: 700;
}
.contentTime {
font-size: 1.1em;
}
.contentText {
font-size: 1em;
}
.moreBt {
font-size: 1em;
}
@media screen and (max-width: 360px) {
* {
font-size: 10px;
}
}
@media screen and (min-width: 360px) {
* {
font-size: 12px;
}
}
@media screen and (min-width: 768px) {
* {
font-size: 24px;
}
}
/* RTL支持 */
[dir='rtl'] .avatar {
margin-right: 0;
margin-left: 12px;
}
[dir='rtl'] .user-info {
text-align: right;
}
[dir='rtl'] .flipImg {
transform: scaleX(-1);
}
</style>