diff --git a/src/views/usergold/gold/clientCountBalance.vue b/src/views/usergold/gold/clientCountBalance.vue index faba17e..abf9088 100644 --- a/src/views/usergold/gold/clientCountBalance.vue +++ b/src/views/usergold/gold/clientCountBalance.vue @@ -14,6 +14,7 @@ const { adminData, menuTree, flag } = storeToRefs(adminStore) } }) import { onMounted, ref, watch, nextTick } from 'vue' +import { useRouter } from 'vue-router' import { ElMessage } from 'element-plus' import moment from 'moment' import API from '@/util/http.js' @@ -21,6 +22,7 @@ import { reverseMarketMapping } from "@/utils/marketMap.js"; // 国际化 import { useI18n } from 'vue-i18n' const { t } = useI18n() +const router = useRouter() //新增员工数据复选框 // const showEmployeeData = ref(false) @@ -76,6 +78,38 @@ const getObj = ref({ const sortField = ref('') const sortOrder = ref('') +// 获取单用户的钱包详情 (直接展示后端返回的 walletList) +const getUserWalletDetail = (row) => { + // 后端返回的钱包列表 (可能为空) + const walletList = row.walletList || []; + + if (walletList.length === 0) { + return []; + } + + // 直接映射后端数据 + return walletList.map(item => { + // 移除 "钱包" 后缀,保持简洁展示 + let displayName = item.walletName || ''; + if (displayName.endsWith('钱包')) { + displayName = displayName.slice(0, -2); + } + + return { + wallet: displayName, + amount: (item.permanentGold || 0).toFixed(2) + }; + }); +} + +// 跳转到钱包详情页 +const goToWalletDetail = (row) => { + router.push({ + name: 'clientCountWallet', + query: { jwcode: row.jwcode } + }) +} + // 方法 // 搜索=========================================================================== // 搜索方法 @@ -398,6 +432,21 @@ const format3 = (num) => { return num.toLocaleString('en-US') } +// 虚拟 Popover 逻辑 +const popoverVisible = ref(false) +const popoverData = ref(null) +const virtualRef = ref(null) + +const handleMouseEnter = (row, e) => { + popoverData.value = row + popoverVisible.value = true + virtualRef.value = e.currentTarget +} + +const handleMouseLeave = () => { + popoverVisible.value = false +} + - @@ -560,9 +568,115 @@ const format3 = (num) => { + + +
+
+ 永久金币 + {{ popoverData.currentPermanentGold || 0 }} +
+
+
+ {{ item.wallet }} + {{ item.amount }} +
+
+
+
+ + \ No newline at end of file + diff --git a/src/views/usergold/gold/clientCountWallet.vue b/src/views/usergold/gold/clientCountWallet.vue index e0bd87a..fe3a13d 100644 --- a/src/views/usergold/gold/clientCountWallet.vue +++ b/src/views/usergold/gold/clientCountWallet.vue @@ -31,78 +31,29 @@ const markets = ref([]) // 充值明细表格 // 替换你代码中的 tableData 初始化部分 -const tableData = ref([ - { - name: "张三", - jwcode: "100001", - market: "香港总部", - hkGold: 15800.50, - sgHcGold: 8900.00, - myGold: 5600.75, - sgGold: 7800.20, - caGold: 3200.00, - thHsGold: 1800.50, - thHaGold: 2500.80, - vnGold: 950.30, - bjGold: 4500.00 - }, - { - name: "李四", - jwcode: "100002", - market: "新加坡分部", - hkGold: 9800.00, - sgHcGold: 12500.80, - myGold: 7800.00, - sgGold: 15600.90, - caGold: 4200.50, - thHsGold: 3600.00, - thHaGold: 1900.20, - vnGold: 1200.75, - bjGold: 3800.00 - }, - { - name: "王五", - jwcode: "100003", - market: "马来西亚分部", - hkGold: 6500.30, - sgHcGold: 4800.50, - myGold: 18900.00, - sgGold: 5600.80, - caGold: 2100.00, - thHsGold: 2800.60, - thHaGold: 3200.00, - vnGold: 1800.50, - bjGold: 2900.75 - }, - { - name: "赵六", - jwcode: "100004", - market: "加拿大分部", - hkGold: 4200.00, - sgHcGold: 3600.80, - myGold: 2900.50, - sgGold: 4100.00, - caGold: 25800.90, - thHsGold: 1500.30, - thHaGold: 1800.00, - vnGold: 850.20, - bjGold: 1800.50 - }, - { - name: "孙七", - jwcode: "100005", - market: "泰国HS分部", - hkGold: 7800.75, - sgHcGold: 6500.00, - myGold: 4200.80, - sgGold: 5900.50, - caGold: 1800.00, - thHsGold: 32500.20, - thHaGold: 8900.00, - vnGold: 2500.80, - bjGold: 3600.30 - } -]); +const tableData = ref([]); +const walletMap = { + 2: 'hkGold', + 3: 'sgHcGold', + 4: 'myGold', + 5: 'sgGold', + 6: 'caGold', + 7: 'thHsGold', + 8: 'thHaGold', + 9: 'vnGold', + 10: 'bjGold' +}; +const propToWalletId = { + hkGold: 2, + sgHcGold: 3, + myGold: 4, + sgGold: 5, + caGold: 6, + thHsGold: 7, + thHaGold: 8, + vnGold: 9, + bjGold: 10 +}; const tableRef = ref(null) const scrollTableTop = () => { tableRef.value?.setScrollTop?.(0) @@ -152,28 +103,65 @@ const get = async function (val) { } console.log('搜索参数', getObj.value, selectData.value) - // const result = await API({ - // url: '/goldDetail/getGold', - // method: 'post', - // data: { ...getObj.value, selectData: { ...selectData.value, flag: flag.value } } - // }) - // console.log('响应数据', result) - // tableData.value = result.data.list - // total.value = result.data.total - - // 获取合计数 - // const resultGoldTotal = await API({ - // url: '/goldDetail/goldTotal', - // data: { - // jwcode: selectData.value.jwcode, - // markets: selectData.value.markets, - // flag: flag.value - // } - // }) - // 判断精网号是否存在,假设精网号不存在时 result.data.list 为空数组 + + // 构建请求参数 + const params = { + pageNum: getObj.value.pageNum, + pageSize: getObj.value.pageSize + } + + // 只有当有值时才加入参数,且转换类型 + if (selectData.value.jwcode) { + params.jwcode = Number(selectData.value.jwcode) + } + + if (selectData.value.markets && selectData.value.markets.length > 0) { + // 确保市场代码也是正确类型(根据示例是字符串) + params.market = String(selectData.value.markets[0]) + } + + console.log('最终请求参数', params) + + const result = await API({ + url: '/cashCollection/selectUserWallets', + method: 'post', + data: params + }) + console.log('响应数据', result) + + if (result.code === 200) { + tableData.value = result.data.list.map(item => { + const row = { + name: item.userName, + jwcode: item.jwcode, + market: item.marketName, + hkGold: 0, + sgHcGold: 0, + myGold: 0, + sgGold: 0, + caGold: 0, + thHsGold: 0, + thHaGold: 0, + vnGold: 0, + bjGold: 0 + }; + + if (item.walletList && Array.isArray(item.walletList)) { + item.walletList.forEach(wallet => { + const prop = walletMap[wallet.walletId]; + if (prop) { + row[prop] = wallet.currentPermanentGold; + } + }); + } + return row; + }); + total.value = result.data.total; + } else { + ElMessage.error(result.msg || '获取数据失败'); + } } catch (error) { console.log('请求失败', error) - // 在这里可以处理错误逻辑,比如显示错误提示等 } } // 精网号去空格,同时处理 selectData 和 putExcel 中的 jwcode @@ -204,8 +192,8 @@ const reset = function () { } const cellClick = function (row, column) { console.log('cellClick', column) - - const propToMarketName = { + const walletId = propToWalletId[column.property]; + const propToMarketName = { hkGold: '香港', sgHcGold: '新加坡HC', myGold: '马来西亚', @@ -215,20 +203,22 @@ const cellClick = function (row, column) { thHaGold: '泰国HA', vnGold: '越南', bjGold: '北京' - } - const marketName = propToMarketName[column.property] - if (marketName) { + } + const marketName = propToMarketName[column.property] + + if (marketName && walletId) { currentWalletInfo.value = { userName: row.name, jwcode: row.jwcode, marketName: row.market, // 用户所属地区 walletName: marketName + '钱包', // 钱包名称 - currentBalance: row[column.property] || 0 + currentBalance: row[column.property] || 0, + walletId: walletId } walletDetailQuery.value.pageNum = 1 getWalletDetail() walletDetailVisible.value = true - } + } } // 钱包明细弹窗相关 @@ -245,20 +235,34 @@ const walletDetailQuery = ref({ const getWalletDetail = async () => { walletDetailLoading.value = true try { - // 模拟数据,实际应调用接口 - // const res = await API({ url: '/goldDetail/getWalletDetail', data: { ...walletDetailQuery.value, jwcode: currentWalletInfo.value.jwcode, walletType: currentWalletInfo.value.walletName } }) - // 模拟延迟 - await new Promise(resolve => setTimeout(resolve, 500)) + const params = { + pageNum: walletDetailQuery.value.pageNum, + pageSize: walletDetailQuery.value.pageSize, + userWalletRecord: { + jwcode: Number(currentWalletInfo.value.jwcode), + walletId: currentWalletInfo.value.walletId + } + } - walletDetailList.value = Array(10).fill(0).map((_, index) => ({ - time: '2026-01-02 12:00:00', - type: index % 2 === 0 ? '充值' : '消耗', - amount: index % 2 === 0 ? 5000 : -5000, - desc: index % 2 === 0 ? 'Stripe充值' : '购买大黄蜂', - orderNo: 'CZLINKXXXXXXXXX' + index, - status: index % 2 === 0 ? 1 : 2, - })) - walletDetailTotal.value = 400 + const result = await API({ + url: '/cashCollection/selectWalletRecords', + method: 'post', + data: params + }) + + if (result.code === 200) { + walletDetailList.value = result.data.list.map(item => ({ + time: item.createTime, + type: item.type === 0 ? '充值' : '消耗', + amount: item.type === 1 ? -Math.abs(item.amount) : Math.abs(item.amount), + desc: item.description, + orderNo: item.orderCode, + status: item.status === 0 ? 1 : 2 + })) + walletDetailTotal.value = result.data.total + } else { + ElMessage.error(result.msg || '获取明细失败') + } } catch (error) { console.error(error) } finally { @@ -534,8 +538,8 @@ const format3 = (num) => { -
- +