From d98b9bd93c46d2fa6924900153a9ffa95f01dc47 Mon Sep 17 00:00:00 2001 From: woody Date: Thu, 12 Jun 2025 20:21:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(bonus):=20=E5=A5=96=E9=87=91=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/region-select/index.vue | 2 +- config/bonus.js | 4 + config/login.js | 4 - pages.json | 14 + pages/bonus/index.vue | 123 ++----- pages/mine/index.vue | 5 +- pages/mine/marketDynamic/achievement-list.vue | 301 +++++++++++++++++ pages/mine/marketDynamic/box-list.vue | 304 ++++++++++++++++++ 8 files changed, 659 insertions(+), 98 deletions(-) create mode 100644 pages/mine/marketDynamic/achievement-list.vue create mode 100644 pages/mine/marketDynamic/box-list.vue diff --git a/components/region-select/index.vue b/components/region-select/index.vue index 014e94a..04d3d51 100644 --- a/components/region-select/index.vue +++ b/components/region-select/index.vue @@ -79,7 +79,7 @@ export default { methods: { async open() { return new Promise(async (resolve, reject) => { - if (this.areaTree.length === 0) { + if (this.areaTree?.length === 0) { await this.loadAreaTree() } this.popupVisible = true diff --git a/config/bonus.js b/config/bonus.js index 4984744..4132071 100644 --- a/config/bonus.js +++ b/config/bonus.js @@ -20,3 +20,7 @@ export const nextRound = params => export const realTimeBonus = () => http.post('/bonus/api/bonus/query-current-bonus') + +//奖金明细列表 +export const queryBonusList = params => + http.post('/bonus/api/bonus/query-bonus-first/', { params }) diff --git a/config/login.js b/config/login.js index b1d4858..07318e8 100644 --- a/config/login.js +++ b/config/login.js @@ -53,10 +53,6 @@ export const updateData = data => export const queryBonusDetail = (data, data1) => http.post('/bonus/api/bonus/query-bonus-detail/' + data1, data) -//首购收益 -export const queryBonusFirst = (data, data1) => - http.post('/bonus/api/bonus/query-bonus-first/' + data1, data) - //复购收益 export const queryBonusRepurchase = (data, data1) => http.post('/bonus/api/bonus/query-bonus-repurchase/' + data1, data) diff --git a/pages.json b/pages.json index 62d1951..f87a66e 100644 --- a/pages.json +++ b/pages.json @@ -302,6 +302,20 @@ "navigationBarBackgroundColor": "#fff" } }, + { + "path": "pages/mine/marketDynamic/achievement-list", + "style": { + "navigationBarTitleText": "市场动态", + "navigationBarBackgroundColor": "#fff" + } + }, + { + "path": "pages/mine/marketDynamic/box-list", + "style": { + "navigationBarTitleText": "市场盒数", + "navigationBarBackgroundColor": "#fff" + } + }, { "path": "pages/shareRegist/success", "style": { diff --git a/pages/bonus/index.vue b/pages/bonus/index.vue index 35ad318..ec5acc3 100644 --- a/pages/bonus/index.vue +++ b/pages/bonus/index.vue @@ -5,9 +5,7 @@ 今日实发合计: - {{ - formatAmount(todayTotal) - }}{{ todayTotal }} @@ -58,16 +56,12 @@ class="bonus-item" > {{ fieldName }}(¥) - {{ - formatAmount(dailyBonus[fieldKey]) - }} + {{ dailyBonus[fieldKey] }} 小计(¥) - {{ - formatAmount(dailyBonus.subtotal) - }} + {{ dailyBonus.subtotal }} @@ -100,7 +94,7 @@ // 注意: 后端API需要支持按日期范围查询奖金明细 // import { getBonusDetailsByDate, getTodayBonusTotal } from '@/config/bonus.js'; import dayjs from 'dayjs' - +import { queryBonusTotal, queryBonusList } from '@/config/bonus' export default { data() { return { @@ -119,26 +113,21 @@ export default { pageSize: 10, }, BONUS_FIELD_MAP: { - levelGapIncome: '直推收益', - peerIncome: '平级收益', - regionalIncome: '区域收益', - welfareLevelGapIncome: '福利级差收益', - welfareDividendIncome: '福利分红收益', - repeatConsumptionIncome: '重消收益', + retailRangeIncome: '直推收益', + retailSameLevelIncome: '平级收益', + retailAreaIncome: '区域收益', + // welfareLevelGapIncome: '福利级差收益', + // welfareDividendIncome: '福利分红收益', + backPoints: '重消收益', }, } }, onLoad() { this.setDefaultDateRange() this.handleSearch() + this.getBonusTotal() }, methods: { - formatAmount(amount) { - if (typeof amount !== 'number') { - return '0.00' - } - return amount.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',') - }, setDefaultDateRange() { const end = new Date() const start = new Date() @@ -189,80 +178,34 @@ export default { this.page.pageNum++ this.fetchBonusData() }, - // 模拟数据获取 + getBonusTotal() { + queryBonusTotal().then(res => { + this.todayTotal = res.data.todayTotal + }) + }, async fetchBonusData() { if (this.loading) return this.loading = true - // 模拟API调用延时 - await new Promise(resolve => setTimeout(resolve, 800)) - - // TODO: 当后端API就绪时,替换下面的模拟数据逻辑 - // 实际调用: - // try { - // const params = { startDate: this.startDate, endDate: this.endDate, pageNum: this.page.pageNum, pageSize: this.page.pageSize }; - // const res = await getBonusDetailsByDate(params); - // if (res.data.list.length < this.page.pageSize) { - // this.hasMore = false; - // } - // this.bonusList = [...this.bonusList, ...res.data.list]; - // } catch (error) { - // console.error("Failed to fetch bonus data:", error); - // uni.showToast({ title: '数据加载失败', icon: 'none' }); - // } finally { - // this.loading = false; - // } - - // --- 模拟数据生成 --- - this.todayTotal = Math.random() * 1000 - const mockData = [] - // 模拟 "没有更多数据" - if (this.page.pageNum > 3) { - this.hasMore = false - this.loading = false - return - } - - if (this.startDate && this.endDate) { - // 在模拟中,我们基于页码创建伪随机数据,而不是日期 - for (let i = 0; i < this.page.pageSize; i++) { - const dayOffset = (this.page.pageNum - 1) * this.page.pageSize + i - const date = dayjs(this.endDate).subtract(dayOffset, 'day') - if (date.isBefore(dayjs(this.startDate))) { - this.hasMore = false - break - } - - const bonusDetails = { - levelGapIncome: Math.random() * 100, - peerIncome: Math.random() * 200, - regionalIncome: 0, - welfareLevelGapIncome: 0, - welfareDividendIncome: 0, - repeatConsumptionIncome: Math.random() * 50, - } - - const subtotal = Object.values(bonusDetails).reduce( - (sum, value) => sum + value, - 0 - ) - - mockData.push({ - date: date.format('YYYY-MM-DD'), - ...bonusDetails, - subtotal: subtotal, - }) + try { + const params = { + startDate: this.startDate, + endDate: this.endDate, + pageNum: this.page.pageNum, + pageSize: this.page.pageSize, } + const res = await queryBonusList(params) + console.log(res) + if (res.rows.length < this.page.pageSize) { + this.hasMore = false + } + this.bonusList = [...this.bonusList, ...res.rows] + } catch (error) { + console.error('Failed to fetch bonus data:', error) + uni.showToast({ title: '数据加载失败', icon: 'none' }) + } finally { + this.loading = false } - - if (mockData.length < this.page.pageSize) { - this.hasMore = false - } - - this.bonusList = [...this.bonusList, ...mockData] - // --- 模拟数据结束 --- - - this.loading = false }, }, } diff --git a/pages/mine/index.vue b/pages/mine/index.vue index a8b66a9..07b825f 100644 --- a/pages/mine/index.vue +++ b/pages/mine/index.vue @@ -269,7 +269,7 @@ @@ -302,7 +302,7 @@ @@ -746,7 +746,6 @@ export default { } }, getMarketDynamicBoxCount() { - console.log('🌈ad', this.userInfo) getMarketDynamicBoxCount({ pkBigMember: this.userInfo.memberCode, }).then(res => { diff --git a/pages/mine/marketDynamic/achievement-list.vue b/pages/mine/marketDynamic/achievement-list.vue new file mode 100644 index 0000000..5ed4208 --- /dev/null +++ b/pages/mine/marketDynamic/achievement-list.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/pages/mine/marketDynamic/box-list.vue b/pages/mine/marketDynamic/box-list.vue new file mode 100644 index 0000000..a60e18d --- /dev/null +++ b/pages/mine/marketDynamic/box-list.vue @@ -0,0 +1,304 @@ + + + + +