From 3ba39d0f647f36491c97f74a04eafe21362bdcf9 Mon Sep 17 00:00:00 2001 From: "zhonghua.li" Date: Thu, 30 Apr 2026 20:23:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=91=E5=BD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/lb-daily-user-trade-report.js | 18 + src/views/lb-business/daily-report/index.vue | 426 ++++++++++++++++++- src/views/lb-business/daily-trade/index.vue | 1 - 3 files changed, 432 insertions(+), 13 deletions(-) diff --git a/src/api/lb-daily-user-trade-report.js b/src/api/lb-daily-user-trade-report.js index dae4d75..0dc7c09 100644 --- a/src/api/lb-daily-user-trade-report.js +++ b/src/api/lb-daily-user-trade-report.js @@ -97,3 +97,21 @@ export function statsUserTradeWithTeamByDateRangeAndTenant(startDate, endDate, t timeout: 120000 }) } + +/** 按用户ID和日期范围分页查询父节点交易明细 */ +export function listDailyUserTradeByParentIdOfUserAndDateRange(params) { + return request({ + url: '/lbDailyUserTradeReport/list/daily-user-trade/by-parent-id-of-user-and-date-range', + method: 'get', + params + }) +} + +/** 按用户ID和日期范围分页查询本人交易明细 */ +export function listDailyUserTradeByUserIdAndDateRange(params) { + return request({ + url: '/lbDailyUserTradeReport/list/daily-user-trade/by-user-id-and-date-range', + method: 'get', + params + }) +} diff --git a/src/views/lb-business/daily-report/index.vue b/src/views/lb-business/daily-report/index.vue index e686d13..5e04a58 100644 --- a/src/views/lb-business/daily-report/index.vue +++ b/src/views/lb-business/daily-report/index.vue @@ -63,6 +63,7 @@ + @@ -142,12 +143,30 @@ class="dept-stats-tree-table" style="width: 100%" > - + @@ -196,11 +215,6 @@ - - - - - @@ -326,6 +340,168 @@ 确定导出 + + + + + + + + + + + 查询 + + + +
+ 查询用户:{{ myTradeQueryUserLabel || '-' }};区间:{{ myTradeQueryRangeLabel || '-' }} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + 查询 + + + +
+ 查询用户:{{ parentTradeQueryUserLabel || '-' }};区间:{{ parentTradeQueryRangeLabel || '-' }} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -337,6 +513,8 @@ import { deleteLbDailyUserTradeReport, exportLbDailyUserTradeReportByDateAndTenant, getLbDailyUserTradeReportList, + listDailyUserTradeByParentIdOfUserAndDateRange, + listDailyUserTradeByUserIdAndDateRange, listYestodayBuyPositiveAndDailySellZero, statsUserTradeWithTeamByDateRangeAndTenant, updateLbDailyUserTradeReport @@ -443,6 +621,8 @@ export default { exportLoading: false, checkUnsoldLoading: false, deptStatsLoading: false, + parentTradeLoading: false, + myTradeLoading: false, activeTab: 'list', deptStatsForm: { startDate: '', @@ -450,6 +630,32 @@ export default { }, deptStatsTreeData: [], deptStatsSummaryText: '', + parentTradeDialogVisible: false, + myTradeDialogVisible: false, + parentTradeList: [], + myTradeList: [], + parentTradeTotal: 0, + myTradeTotal: 0, + parentTradeQueryUserLabel: '', + myTradeQueryUserLabel: '', + parentTradeQueryRangeLabel: '', + myTradeQueryRangeLabel: '', + parentTradeQuery: { + userId: '', + startDate: '', + endDate: '', + current: 1, + size: 10 + }, + myTradeQuery: { + userId: '', + startDate: '', + endDate: '', + current: 1, + size: 10 + }, + parentTradeLoadingByUserId: {}, + myTradeLoadingByUserId: {}, list: [], total: 0, dialogVisible: false, @@ -467,7 +673,6 @@ export default { }, form: { id: '', - tenantId: '', userId: '', nickname: '', yestodayBuyAmt: '', @@ -481,7 +686,6 @@ export default { descContent: '' }, formRules: { - tenantId: [{ required: true, message: '请输入租户ID', trigger: 'blur' }], userId: [{ required: true, message: '请输入用户ID', trigger: 'blur' }] }, deleteByDateForm: { @@ -656,7 +860,6 @@ export default { this.isEdit = true this.form = { id: row.id, - tenantId: row.tenantId || '', userId: row.userId || '', nickname: row.nickname || '', yestodayBuyAmt: this.toInputString(row.yestodayBuyAmt), @@ -753,7 +956,7 @@ export default { this.deptStatsTreeData = buildDeptTradeStatsTree(rows, deptList) const rangeLabel = `${startDate} ~ ${endDate}` this.deptStatsSummaryText = - `统计区间:${rangeLabel};租户:${tenantId};共 ${total} 人(树按部门上下级展示,同级按合计差额降序)` + `统计区间:${rangeLabel};共 ${total} 人(树按部门上下级展示,同级按合计差额降序)` if (!rows.length) { this.$message.success((statsRes && statsRes.message) || '暂无数据') } @@ -765,6 +968,184 @@ export default { this.deptStatsLoading = false }) }, + handleQueryParentTrade(row) { + const userId = row && row.userId ? String(row.userId).trim() : '' + const startDate = this.deptStatsForm.startDate + const endDate = this.deptStatsForm.endDate + if (!userId) { + this.$message.warning('当前行缺少用户ID,无法查询父交易') + return + } + if (!startDate || !endDate) { + this.$message.warning('请先选择统计开始日期和结束日期') + return + } + this.$set(this.parentTradeLoadingByUserId, userId, true) + this.parentTradeQuery = { + userId, + startDate, + endDate, + current: 1, + size: 10 + } + this.parentTradeQueryUserLabel = `${row.name || '-'} (${userId})` + this.parentTradeQueryRangeLabel = `${startDate} ~ ${endDate}` + this.parentTradeDialogVisible = true + this.fetchParentTradeList() + .finally(() => { + this.$set(this.parentTradeLoadingByUserId, userId, false) + }) + }, + handleQueryMyTrade(row) { + const userId = row && row.userId ? String(row.userId).trim() : '' + const startDate = this.deptStatsForm.startDate + const endDate = this.deptStatsForm.endDate + if (!userId) { + this.$message.warning('当前行缺少用户ID,无法查询我的交易') + return + } + if (!startDate || !endDate) { + this.$message.warning('请先选择统计开始日期和结束日期') + return + } + this.$set(this.myTradeLoadingByUserId, userId, true) + this.myTradeQuery = { + userId, + startDate, + endDate, + current: 1, + size: 10 + } + this.myTradeQueryUserLabel = `${row.name || '-'} (${userId})` + this.myTradeQueryRangeLabel = `${startDate} ~ ${endDate}` + this.myTradeDialogVisible = true + this.fetchMyTradeList() + .finally(() => { + this.$set(this.myTradeLoadingByUserId, userId, false) + }) + }, + handleParentTradeSearch() { + const { startDate, endDate } = this.parentTradeQuery + if (!startDate || !endDate) { + this.$message.warning('请选择开始日期和结束日期') + return + } + this.parentTradeQuery.current = 1 + this.parentTradeQueryRangeLabel = `${startDate} ~ ${endDate}` + this.fetchParentTradeList() + }, + handleMyTradeSearch() { + const { startDate, endDate } = this.myTradeQuery + if (!startDate || !endDate) { + this.$message.warning('请选择开始日期和结束日期') + return + } + this.myTradeQuery.current = 1 + this.myTradeQueryRangeLabel = `${startDate} ~ ${endDate}` + this.fetchMyTradeList() + }, + fetchParentTradeList() { + const { userId, startDate, endDate, current, size } = this.parentTradeQuery + this.parentTradeLoading = true + return listDailyUserTradeByParentIdOfUserAndDateRange({ + userId, + startDate, + endDate, + current, + size + }) + .then((res) => { + const ok = res && (res.success === true || res.code === 200 || res.code === 20000) + if (!ok) { + this.parentTradeList = [] + this.parentTradeTotal = 0 + this.$message.error((res && res.message) || '查询父交易失败') + return + } + this.parentTradeList = Array.isArray(res.data) ? res.data : [] + this.parentTradeTotal = typeof res.total === 'number' ? res.total : this.parentTradeList.length + }) + .catch(() => { + this.parentTradeList = [] + this.parentTradeTotal = 0 + }) + .finally(() => { + this.parentTradeLoading = false + }) + }, + fetchMyTradeList() { + const { userId, startDate, endDate, current, size } = this.myTradeQuery + this.myTradeLoading = true + return listDailyUserTradeByUserIdAndDateRange({ + userId, + startDate, + endDate, + current, + size + }) + .then((res) => { + const ok = res && (res.success === true || res.code === 200 || res.code === 20000) + if (!ok) { + this.myTradeList = [] + this.myTradeTotal = 0 + this.$message.error((res && res.message) || '查询我的交易失败') + return + } + this.myTradeList = Array.isArray(res.data) ? res.data : [] + this.myTradeTotal = typeof res.total === 'number' ? res.total : this.myTradeList.length + }) + .catch(() => { + this.myTradeList = [] + this.myTradeTotal = 0 + }) + .finally(() => { + this.myTradeLoading = false + }) + }, + handleParentTradeSizeChange(size) { + this.parentTradeQuery.size = size + this.parentTradeQuery.current = 1 + this.fetchParentTradeList() + }, + handleParentTradeCurrentChange(current) { + this.parentTradeQuery.current = current + this.fetchParentTradeList() + }, + handleMyTradeSizeChange(size) { + this.myTradeQuery.size = size + this.myTradeQuery.current = 1 + this.fetchMyTradeList() + }, + handleMyTradeCurrentChange(current) { + this.myTradeQuery.current = current + this.fetchMyTradeList() + }, + resetParentTradeDialog() { + this.parentTradeList = [] + this.parentTradeTotal = 0 + this.parentTradeQueryUserLabel = '' + this.parentTradeQueryRangeLabel = '' + this.parentTradeQuery = { + userId: '', + startDate: '', + endDate: '', + current: 1, + size: 10 + } + }, + resetMyTradeDialog() { + this.myTradeList = [] + this.myTradeTotal = 0 + this.myTradeQueryUserLabel = '' + this.myTradeQueryRangeLabel = '' + this.myTradeQuery = { + userId: '', + startDate: '', + endDate: '', + current: 1, + size: 10 + } + }, formatDeptAmt(val) { if (val === null || val === undefined || val === '') return '-' const n = Number(val) @@ -884,8 +1265,9 @@ export default { }) }, buildPayload() { + const tenantId = this.getTenantIdFromBusinessHeaders() const payload = { - tenantId: this.form.tenantId, + tenantId: tenantId || undefined, userId: this.form.userId, nickname: this.form.nickname || undefined, yestodayBuyAmt: this.parseDecimal(this.form.yestodayBuyAmt), @@ -929,7 +1311,6 @@ export default { resetFormData() { this.form = { id: '', - tenantId: '', userId: '', nickname: '', yestodayBuyAmt: '', @@ -1060,6 +1441,12 @@ export default { text-overflow: ellipsis; } + .dept-stats-parent-trade-btn { + flex: 0 0 auto; + margin-left: 2px; + padding: 0; + } + .dept-stats-tree-table ::v-deep td:first-child .cell { white-space: nowrap; } @@ -1180,5 +1567,20 @@ export default { font-weight: 400; } } + + .parent-trade-dialog-tip { + margin-bottom: 12px; + color: #606266; + font-size: 13px; + } + + .parent-trade-filter { + margin-bottom: 8px; + } + + .parent-trade-pagination { + margin-top: 16px; + text-align: right; + } } diff --git a/src/views/lb-business/daily-trade/index.vue b/src/views/lb-business/daily-trade/index.vue index d08f897..adb9cc5 100644 --- a/src/views/lb-business/daily-trade/index.vue +++ b/src/views/lb-business/daily-trade/index.vue @@ -38,7 +38,6 @@ -