feat: 初始化

This commit is contained in:
George
2025-07-07 15:55:44 +08:00
commit 9b7bfcfe5a
969 changed files with 123036 additions and 0 deletions

View File

@ -0,0 +1,72 @@
::-webkit-scrollbar {
display: none;
}
.currentClient {
font-size: 18px;
font-weight: 600;
}
.clientDataWrapper {
padding: 12px 4px 30px;
display: flex;
overflow-y: auto;
.clientData {
display: flex;
column-gap: 10px;
.clientDataItem {
position: relative;
flex-shrink: 0;
width: 145px;
height: 129px;
padding: 14px 16px 5px;
box-shadow: -1px 0px 5px 1px rgba(0, 0, 0, 0.1);
.title {
display: flex;
flex-direction: column;
.label {
font-size: 14px;
line-height: 20px;
font-weight: 700;
color: #333333;
}
.value {
font-size: 20px;
font-weight: 600;
}
}
.bgIcon {
position: absolute;
right: 16px;
bottom: 5px;
width: 114px;
height: 65px;
}
}
}
}
.searchWrapper {
display: flex;
align-items: center;
column-gap: 8px;
height: 34px;
.filterButton {
display: flex;
justify-content: center;
align-items: center;
width: 80px;
height: 34px;
color: #fff;
background-color: rgba(41, 187, 228, 1);
white-space: nowrap;
}
}
.rebate-setting-btn {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 34px;
color: #fff;
background-color: rgba(15, 54, 117, 1);
white-space: nowrap;
}

View File

@ -0,0 +1,87 @@
<template>
<view class="currentClient" >
{{ $t('partner.myClient.currentClient') + (statCustomerData?Object.values(statCustomerData).reduce((a, b) => a + b, 0):0) + $t('common.unit.human') }}
</view>
<view class="clientDataWrapper">
<view class="clientData">
<view v-for="item in clientDataList" :key="item.dataIndex" class="clientDataItem">
<view class="title">
<view class="label">{{ item.title }}</view>
<view class="value" :style="{ color: item.color }">
{{ (statCustomerData[item.dataIndex] ?? '-') + $t('common.unit.human') }}
<image :src="item.bgSrc" mode="aspectFit" class="bgIcon"></image>
</view>
</view>
</view>
</view>
</view>
<view style="width: 100%;margin-bottom: 20upx;">
<view class="rebate-setting-btn" @click="goFundSetting">
<text class="filterText">{{ $t('ib.fundSetting') }}</text>
</view>
</view>
<view>
<ReportTable url="/app/partners/queryMyAgentList" timeRangeStart="create_time_start" timeRangeEnd="create_time_end" :visible="visible" :showTimeRangeSelector="false">
<template v-slot="{ showSearchDialog, searchFormData, handleSearch }">
<view class="searchWrapper">
<uni-easyinput primaryColor="#29BBE4" v-model="searchFormData.name" :placeholder="$t('ibTree.nameOrEmail')" />
<view class="filterButton" @click="handleSearch">
<text class="filterText">{{ $t('form.search') }}</text>
</view>
<image src="/static/partner/ibTree.png" mode="aspectFit" style="width: 21px; height: 21px" @click="navigateToIbTree"></image>
</view>
</template>
</ReportTable>
</view>
</template>
<script>
import ReportTable from '@/pages/components/reportTable/index.vue';
import { getstatCustomerNum } from '@/services/partner/myClient.ts';
export default {
name: 'MyClient',
props: {
visible: {
type: Boolean,
required: true,
default: false
}
},
data() {
return {
statCustomerData: {},
clientDataList: [
{ title: this.$t('partner.myClient.ibClient'), dataIndex: 'zs_ib_num', color: '#25BAE4', bgSrc: '/static/partner/blueLine.svg' },
{ title: this.$t('partner.myClient.directClient'), dataIndex: 'zs_kh_num', color: '#0F3675', bgSrc: '/static/partner/darkBlueLine.svg' },
{ title: this.$t('partner.myClient.indirectCustomer'), dataIndex: 'jj_kh_num', color: '#ABCF37', bgSrc: '/static/partner/greenLine.svg' }
]
};
},
methods: {
async getstatCustomerData() {
const res = await getstatCustomerNum();
if (res && res.code === 0) {
this.statCustomerData = res.data;
}
},
navigateToIbTree() {
uni.navigateTo({
url: '/pages/partner/ibTree/index'
});
},
goFundSetting() {
uni.navigateTo({
url: '/pages/partner/rebateSetting/index'
})
}
},
created() {
this.getstatCustomerData();
},
components: { ReportTable }
};
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

View File

@ -0,0 +1,17 @@
::-webkit-scrollbar {
display: none;
}
.filterButton {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 10px;
width: 100%;
height: 34px;
color: #fff;
background-color: rgba(41, 187, 228, 1);
.filterText {
white-space: nowrap;
margin: 0 8px 0 3px;
}
}

View File

@ -0,0 +1,37 @@
<template>
<view>
<ReportTable url="/app/partners/queryMyAgentList" timeRangeStart="create_time_start" timeRangeEnd="create_time_end" :visible="visible">
<template v-slot="{ showSearchDialog }">
<view class="filterButton" @click="showSearchDialog">
<image src="/static/filter.png" alt="" style="width: 12px; height: 13px" />
<text class="filterText">筛选</text>
<uni-icons type="right" size="20" color="#fff"></uni-icons>
</view>
</template>
</ReportTable>
</view>
</template>
<script>
import ReportTable from '@/pages/components/reportTable/index.vue';
import { getstatCustomerNum } from '@/services/partner/myClient.ts';
export default {
name: 'MyIB',
props: {
visible: {
type: Boolean,
required: true,
default: false
}
},
data() {
return {};
},
methods: {},
components: { ReportTable }
};
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

View File

@ -0,0 +1,73 @@
.overviewCard {
height: 187px;
padding: 20px 28px 15px;
box-sizing: border-box;
box-shadow: -1px 0px 5px 1px rgba(0, 0, 0, 0.1);
.field {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 12px;
color: #0f3675;
margin-top: 10px;
&.currentCommission {
margin-top: 0px;
font-size: 16px;
.valueWrapper {
font-size: 14px;
.value {
font-weight: 700;
font-size: 18px;
}
}
}
}
.overviewCardBtns {
display: flex;
column-gap: 12px;
margin-top: 20px;
.btn {
height: 31px;
}
}
}
.filter {
margin-top: 10px;
.datePreset {
margin-bottom: 10px;
::v-deep .checklist-group .checklist-box .radio__inner {
border-radius: 4px;
}
::v-deep .checklist-group .checklist-box .radio__inner .radio__inner-icon {
border-radius: 2px;
}
::v-deep .checklist-group .checklist-box.is--default.is-checked .radio__inner {
border-color: #e5e5e5 !important;
}
}
}
.overviewContent {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
row-gap: 16px;
column-gap: 11px;
margin-top: 20px;
.overviewItem {
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 8px 10px;
height: 84px;
box-sizing: border-box;
box-shadow: -1px 0px 5px 1px rgba(0, 0, 0, 0.1);
.label {
font-size: 14px;
color: #666666;
}
.value {
font-size: 20px;
color: #333333;
font-weight: 600;
}
}
}

View File

@ -0,0 +1,140 @@
<template>
<view class="overviewCard">
<view class="field currentCommission">
<text>{{ $t('partner.currentCommission') }}</text>
<view class="valueWrapper">
<text class="value">{{ ibFund.amount ?? '-' }}</text>
<text>{{ ' USD' }}</text>
</view>
</view>
<view class="field">
<text>{{ $t('partner.statCommission') }}</text>
<text>{{ ibFund.totalAmount ?? '-' }} USD</text>
</view>
<view class="field">
<text>{{ $t('partner.withdrawn') }}</text>
<text>{{ ibFund.fundOut ?? '-' }} USD</text>
</view>
<view class="field">
<text>{{ $t('partner.transferred') }}</text>
<text>{{ ibFund.fundTransfer ?? '-' }} USD</text>
</view>
<view class="overviewCardBtns">
<view class="btn primaryButton" @click="navigateTo('/pages/capital/ibWithdraw/index')">
{{ $t('home.goldout') }}
</view>
<view class="btn secondaryButton" @click="navigateTo('/pages/capital/ibTransfer/index')">
{{ $t('home.transfer') }}
</view>
</view>
</view>
<view class="filter">
<uni-data-checkbox v-model="daterangePreset" :localdata="daterangePresets" @change="handlePresetChange" selectedColor="#29BBE4" class="datePreset"></uni-data-checkbox>
<uni-datetime-picker type="daterange" v-model="timeRange" @change="handleDaterangeChange" />
</view>
<view class="overviewContent">
<view v-for="item in overviewList" :key="item.label" class="overviewItem" @click="() => showChart(item)">
<view class="label">
{{ item.label }}
</view>
<view class="value">
{{ overviewData[item.dataIndex]?.toFixed(2) }}
</view>
</view>
</view>
</template>
<script>
import { useUserStore } from '@/stores/user';
import { getPhaseSummarizing } from '@/services/partner/overview.ts';
import dayjs from 'dayjs';
export default {
name: 'Overview',
props: {
visible: {
type: Boolean,
required: true,
default: false
}
},
data() {
return {
ibFund: {
totalAmount: 123.123,
amount: 290.123,
fundOut: 123.0,
fundTransfer: 0.0
},
overviewList: [
{ label: this.$t('partner.overview.statPL'), dataIndex: 'my_yk', type: 8, clickable: true },
{ label: this.$t('partner.overview.statEquity'), dataIndex: 'my_jz', type: false, clickable: false },
{ label: this.$t('partner.overview.statEquity_fen'), dataIndex: 'mf_jz', type: false, clickable: false },
{ label: this.$t('partner.overview.IBCommission'), dataIndex: 'yj', type: 2, clickable: true },
{ label: this.$t('partner.overview.statDeposit'), dataIndex: 'rj', type: 3, clickable: true },
{ label: this.$t('partner.overview.statWithdraw'), dataIndex: 'mt_cj', type: 4, clickable: true },
{ label: this.$t('partner.overview.statIBWithdraw'), dataIndex: 'yj_cj', type: 9, clickable: true },
{ label: this.$t('partner.overview.volume'), dataIndex: 'my_jyl', type: 6, clickable: true },
{ label: this.$t('partner.overview.volume_cent'), dataIndex: 'mf_jyl', type: 7, clickable: true },
{ label: this.$t('partner.overview.statPL_cent'), dataIndex: 'mf_yk', type: 1, clickable: true }
],
overviewData: {},
timeRange: undefined,
daterangePreset: undefined,
daterangePresets: [
{ text: this.$t('common.yesterday'), value: 1 },
{ text: this.$t('common.threeDays'), value: 2 },
{ text: this.$t('common.7Days'), value: 6 },
{ text: this.$t('common.30Days'), value: 29 }
]
};
},
methods: {
async getOverviewData() {
let params = {};
if (this.timeRange) {
params.time_start = this.timeRange[0];
params.time_end = this.timeRange[1];
}
const res = await getPhaseSummarizing(params);
if (res && res.code === 0) {
this.overviewData = res.data;
}
},
handleDaterangeChange() {
this.daterangePreset = undefined;
this.getOverviewData();
},
handlePresetChange(e) {
this.daterangePreset = e.detail.value;
this.timeRange = [dayjs().subtract(Number(e.detail.value), 'day').format('YYYY-MM-DD'), dayjs().format('YYYY-MM-DD')];
this.getOverviewData();
},
showChart(overview) {
if (!overview.clickable) return;
this.navigateTo('/pages/partner/overviewChart/index', {
label: overview.label,
type: overview.type,
time_start: this.timeRange[0],
time_end: this.timeRange[1]
});
},
navigateTo(target, params) {
if (target) {
uni.navigateTo({
url: `${target}${params ? `?params=${JSON.stringify(params)}` : ''}`
});
}
}
},
created() {
const userStore = useUserStore();
this.ibFund = userStore.ibFund;
this.handlePresetChange({ detail: { value: 6 } });
this.getOverviewData();
}
};
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

View File

@ -0,0 +1,100 @@
.shareList {
display: flex;
flex-direction: column;
row-gap: 16px;
.shareCard {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
row-gap: 4px;
padding: 13px 23px 9px;
box-sizing: border-box;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.15);
.closeIcon {
position: absolute;
top: 16px;
right: 16px;
width: 16px;
height: 16px;
cursor: pointer;
}
.shareName {
font-size: 18px;
font-weight: 700;
line-height: 26px;
}
.shareLinkWrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
row-gap: 4px;
margin-top: 16px;
margin-bottom: 4px;
word-break: break-all;
font-size: 14px;
.shareLink {
display: flex;
align-items: center;
column-gap: 4px;
}
}
.btnWrapper {
display: flex;
column-gap: 12px;
width: 100%;
.downloadMore {
height: 30px;
font-size: 14px;
white-space: nowrap;
}
}
}
.addShareLink {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
row-gap: 8px;
height: 108px;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.15);
}
.materialCard {
height: 184px;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.15);
.sysShareImg {
display: block;
width: 100%;
height: 129px;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.15);
}
.materialCardBottom {
display: flex;
justify-content: center;
align-items: center;
column-gap: 24px;
margin-top: 10px;
color: #29bbe4;
.divider {
width: 2px;
height: 39px;
border-radius: 5px;
background-color: #c2c2c2;
}
}
}
}
.shareCodeWrapper {
display: flex;
align-items: flex-end;
column-gap: 12px;
}
.shareCodeContent {
display: flex;
justify-content: center;
align-items: center;
padding: 3px;
width: max-content;
background-image: linear-gradient(90deg, #103776 0%, #92dbed 100%);
}

View File

@ -0,0 +1,151 @@
<template>
<view class="shareList">
<view class="shareCard" v-for="share in shareList" :key="share.id">
<image src="/static/close.png" mode="aspectFit" class="closeIcon" @click="() => handleRemoveShareRecord(share)"></image>
<text class="shareName">{{ share.name }}</text>
<view class="shareCodeContent">
<l-qrcode :value="composeLink(share.share_code)" :size="94" :marginSize="1" bgColor="#fff" />
</view>
<view class="shareLinkWrapper">
<view class="shareLink">
{{ composeLink(share.share_code) }}
<CopyIcon :value="composeLink(share.share_code)" :size="16" />
</view>
<view class="shareLink">
{{ $t('form.shareCode.label') }}{{ share.share_code }}
<CopyIcon :value="share.share_code" :size="16" />
</view>
</view>
<view class="btnWrapper">
<button class="primaryButton downloadMore" @click="() => downloadMoreSize(share.share_code)">{{ $t('partner.promotionLink.downloadMoreSize') }}</button>
<button v-if="share.img_url" class="secondaryButton downloadMore" @click="() => downloadMaterial(share.img_url)">下载推广设计素材</button>
</view>
</view>
<view class="addShareLink">
<image @click="() => createShareLink()" src="/static/user/add.png" mode="aspectFit" style="width: 47px; height: 47px"></image>
<text>{{ $t('partner.promotionLink.addLink') }}</text>
</view>
<view class="materialCard" v-for="sysShare in sysShareList" :key="sysShare.id">
<image :src="sysShare.img_url?.split(',')?.[0]" mode="aspectFit" class="sysShareImg"></image>
<view class="materialCardBottom">
<text @click="() => createShareLink(sysShare)">{{ $t('partner.promotionLink.getLink') }}</text>
<div class="divider"></div>
<text @click="() => downloadMaterial(sysShare.img_url)">{{ $t('partner.promotionLink.downloadMaterials') }}</text>
</view>
</view>
</view>
</template>
<script>
import { getShareRecord, getSysShareList, removeShareRecord } from '@/services/partner/promotionLink.ts';
export default {
name: 'PromotionLink',
props: {
visible: {
type: Boolean,
required: true,
default: false
}
},
data() {
return {
currentShareCode: undefined,
shareList: [],
sysShareList: [],
image: undefined
};
},
methods: {
composeLink(shareCode) {
// #ifdef H5
return `${window.location.origin ?? 'https://user.htfx.co'}/api/promotion/${shareCode}`;
// #endif
// #ifndef H5
return `https://user.htfx.co/api/promotion/${shareCode}`;
// #endif
},
async getShareRecordData() {
const res = await getShareRecord();
if (res && res.code === 0) {
this.shareList = res.data;
}
},
async getSysShareListData() {
const res = await getSysShareList();
if (res && res.code === 0) {
this.sysShareList = res.data;
}
},
showDetailDialog() {
this.$refs.alertDialog.open();
},
closeDetailDialog() {
this.$refs.alertDialog.close();
},
createShareLink(sysShare) {
if (sysShare) {
uni.navigateTo({
url: `/pages/partner/createShareLink/index?sysId=${sysShare.id}&imgUrls=${sysShare.img_url}`
});
} else {
uni.navigateTo({
url: '/pages/partner/createShareLink/index'
});
}
},
handleRemoveShareRecord(share) {
uni.showModal({
content: this.$t('shareLink.confirmRemove'),
confirmColor: '#4DC0E5',
success: async (res) => {
if (res.confirm) {
const resp = await removeShareRecord({ id: share.id });
if (resp.code == 0) {
this.$nextTick(() => {
this.$cusModal.showModal({
type: 'message',
status: 'success',
contentText: this.$t('common.success.action')
});
})
this.getShareRecordData();
this.getSysShareListData();
} else {
this.$nextTick(() => {
this.$cusModal.showModal({
type: 'message',
status: 'warning',
contentText: resp.msg ?? this.$t('common.error.sysError')
});
})
}
}
}
});
},
downloadMoreSize(shareCode) {
uni.navigateTo({
url: `/pages/partner/downloadMoreSize/index?shareCode=${shareCode}`
});
},
downloadMaterial(imgUrl) {
uni.navigateTo({
url: `/pages/partner/downloadMaterial/index?imgUrl=${imgUrl}`
});
}
},
watch: {
visible(newValue, oldValue) {
if (newValue) {
this.getShareRecordData();
this.getSysShareListData();
}
}
}
};
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

View File

@ -0,0 +1,72 @@
::-webkit-scrollbar {
display: none;
}
.statDataWrapper {
padding: 12px 4px 30px;
display: flex;
overflow-y: auto;
.statData {
display: flex;
column-gap: 10px;
.statDataItem {
position: relative;
flex-shrink: 0;
min-width: 135px;
height: 80px;
padding: 6px 9px;
box-sizing: border-box;
box-shadow: -1px 0px 5px 1px rgba(0, 0, 0, 0.1);
.title {
display: flex;
flex-direction: column;
justify-content: flex-end;
height: 100%;
.label {
font-size: 14px;
line-height: 20px;
font-weight: 700;
color: #333333;
}
.value {
font-size: 18px;
font-weight: 700;
color: #25bae4;
line-height: 26px;
.unit {
color: #333333;
font-size: 12px;
font-weight: 400;
}
}
}
.bgIcon {
position: absolute;
right: 8px;
top: 6px;
width: 24px;
height: 24px;
}
}
}
}
.filterWrapper {
display: flex;
column-gap: 6px;
margin-bottom: 10px;
.filterSelector {
flex: 1;
}
.filterButton {
display: flex;
justify-content: center;
align-items: center;
width: 91px;
height: 34px;
color: #fff;
background-color: rgba(41, 187, 228, 1);
.filterText {
white-space: nowrap;
margin: 0 8px 0 3px;
}
}
}

View File

@ -0,0 +1,181 @@
<template>
<view class="statDataWrapper">
<view class="statData">
<view v-for="item in statDataList" :key="item.dataIndex" class="statDataItem">
<view class="title">
<view class="label">{{ item.title }}</view>
<view class="value">
{{ statData[item.dataIndex] ?? '-' }}
<text class="unit">USD</text>
<image :src="item.bgSrc" mode="aspectFit" class="bgIcon"></image>
</view>
</view>
</view>
</view>
</view>
<ReportTable
:title="reportList[currentReport].title"
:url="reportList[currentReport].url"
:defaultDateRangeKey="reportList[currentReport].defaultDateRangeKey ?? 'apply_time'"
:timeRangeStart="reportList[currentReport].timeRangeStart ?? 'apply_time_start'"
:timeRangeEnd="reportList[currentReport].timeRangeEnd ?? 'apply_time_end'"
:visible="visible"
>
<template v-slot="{ showSearchDialog }">
<view class="filterWrapper">
<uni-data-select
:localdata="reportOptions"
@change="handleReportSelectorChange"
:clear="false"
v-model="currentReport"
:placeholder="$t('form.pleaseSelect')"
:emptyTips="$t('common.empty')"
class="filterSelector"
></uni-data-select>
<view class="filterButton" @click="showSearchDialog">
<image src="/static/filter.png" alt="" style="width: 12px; height: 13px" />
<text class="filterText">{{ $t('common.filter') }}</text>
<uni-icons type="right" size="20" color="#fff"></uni-icons>
</view>
</view>
</template>
</ReportTable>
</template>
<script>
import { getStatReportInfo } from '@/services/partner/statReport';
import ReportTable from '@/pages/components/reportTable/index.vue';
export default {
name: 'StatReport',
props: {
visible: {
type: Boolean,
required: true,
default: false
}
},
data() {
return {
currentReport: 'deposit',
statData: {},
statDataList: [
// { title: this.$t('partner.statReport.statCommission'), dataIndex: 'yj', bgSrc: '/static/partner/statCommission.svg' },
{ title: this.$t('partner.statReport.statDeposit'), dataIndex: 'rj', bgSrc: '/static/partner/statDeposit.svg' },
{ title: this.$t('partner.statReport.statWithdrawal'), dataIndex: 'mt_cj', bgSrc: '/static/partner/statWithdrawal.svg' },
{ title: this.$t('partner.statReport.statTransaction'), dataIndex: 'jyl', bgSrc: '/static/partner/statTransaction.svg' },
{ title: this.$t('partner.statReport.currentPL'), dataIndex: 'profit', bgSrc: '/static/partner/currentPL.svg' }
],
reportList: {
// 入金报表
deposit: {
title: this.$t('report.goldIn'),
url: '/app/report/getReport16'
},
// 出金报表
withdrawal: {
title: this.$t('report.goldOut'),
url: '/app/report/getReport17'
},
// 挂单报表
pendingTrading: {
title: this.$t('report.pendingOrder'),
url: '/app/report/getReport14'
},
// 交易报表
trading: {
title: this.$t('report.trading'),
url: '/app/report/getReport20'
},
// 持仓报表
openPosition: {
title: this.$t('report.openPosition'),
url: '/app/report/getReport22',
defaultDateRangeKey: 'close_time'
},
// 账户综合报表
consolidatedAccount: {
title: this.$t('report.consolidatedAccount'),
url: '/app/report/getReport21',
defaultDateRangeKey: 'close',
timeRangeStart: 'close_start',
timeRangeEnd: 'close_end'
},
// 资金报表
fund: {
title: this.$t('report.fund'),
url: '/app/report/getReport24',
defaultDateRangeKey: 'close_time',
timeRangeStart: 'close_time_start',
timeRangeEnd: 'close_time_end'
},
// 佣金钱包报表
rebateWallet: {
title: this.$t('report.rebateWallet'),
url: '/app/report/getReport28',
defaultDateRangeKey: 'create_time',
timeRangeStart: 'create_time_start',
timeRangeEnd: 'create_time_end'
},
// 待定钱包报表
pendingWallet: {
title: this.$t('report.pendingWallet'),
url: '/app/report/getReport27',
defaultDateRangeKey: 'create_time',
timeRangeStart: 'create_time_start',
timeRangeEnd: 'create_time_end'
},
// 交易返佣报表
tradeRebate: {
title: this.$t('report.tradeRebate'),
url: '/app/report/getReport26',
defaultDateRangeKey: 'close_time'
},
// 业绩统计报表
performanceStatistics: {
title: this.$t('report.performanceStatistics'),
url: '/app/report/getReport81',
},
// MT账户统计
mtAccountStatistics: {
title: this.$t('report.mtAccountStatistics'),
url: '/app/report/getReport40',
defaultDateRangeKey: 'regdate'
}
}
};
},
computed: {
reportOptions() {
return Object.keys(this.reportList).map((key) => ({
text: this.reportList[key].title,
value: key
}));
}
},
methods: {
handleReportSelectorChange(e) {
this.currentReport = e;
},
async getStatData() {
const res = await getStatReportInfo();
if (res && res.code === 0) {
this.statData = res.data;
}
}
},
watch: {
visible(newValue, oldValue) {
if (newValue) {
this.getStatData();
}
}
},
components: {
ReportTable
}
};
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>