diff --git a/apps/web-antd/src/components/stat-islands/stat-islands.vue b/apps/web-antd/src/components/stat-islands/stat-islands.vue index 6e765707..2792f88b 100644 --- a/apps/web-antd/src/components/stat-islands/stat-islands.vue +++ b/apps/web-antd/src/components/stat-islands/stat-islands.vue @@ -10,15 +10,22 @@ import { IconifyIcon as VbenIcon } from '@vben/icons'; import type { StatIslandItem } from './typing'; -withDefaults( +const props = withDefaults( defineProps<{ items: StatIslandItem[]; /** 每行列数(桌面端),默认 4;窄屏自动降为 2 列 */ columns?: number; + /** 点击统计岛时调用(只处理 clickable 或全部可点项) */ + onItemClick?: (item: StatIslandItem) => void; }>(), { columns: 4 }, ); +function handleItemClick(item: StatIslandItem) { + if (!item.clickable || !props.onItemClick) return; + props.onItemClick(item); +} + /** 金额展示为两位小数;非数字原样透出(如「—」占位) */ function formatValue(val: number | string) { const n = Number(val); @@ -32,8 +39,12 @@ function formatValue(val: number | string) { v-for="item in items" :key="item.key" class="stat-island" - :class="{ 'stat-island--emphasize': item.emphasize }" + :class="{ + 'stat-island--emphasize': item.emphasize, + 'stat-island--clickable': item.clickable, + }" :aria-label="item.label" + @click="handleItemClick(item)" >
@@ -79,6 +90,10 @@ function formatValue(val: number | string) { border-color 0.2s ease; } +.stat-island--clickable { + cursor: pointer; +} + .stat-island:hover { border-color: hsl(var(--primary) / 40%); box-shadow: diff --git a/apps/web-antd/src/components/stat-islands/typing.ts b/apps/web-antd/src/components/stat-islands/typing.ts index f32cc0b7..9c7f718d 100644 --- a/apps/web-antd/src/components/stat-islands/typing.ts +++ b/apps/web-antd/src/components/stat-islands/typing.ts @@ -16,4 +16,6 @@ export interface StatIslandItem { emphasize?: boolean; /** 值前缀,默认 ¥;传空串则不显示前缀 */ prefix?: string; + /** 是否可点击下钻;为 true 时用 pointer 并触发 onItemClick */ + clickable?: boolean; } diff --git a/apps/web-antd/src/views/finance/charge-cash-pay-record/index.vue b/apps/web-antd/src/views/finance/charge-cash-pay-record/index.vue index 7801391b..cbf48d04 100644 --- a/apps/web-antd/src/views/finance/charge-cash-pay-record/index.vue +++ b/apps/web-antd/src/views/finance/charge-cash-pay-record/index.vue @@ -13,6 +13,7 @@ import { TableAction } from '#/components/table-action'; import { getChargeCashPayRecordListApi } from '#/views/finance/charge-cash-pay-record/api'; import StatisticsReconciliation from '#/views/finance/reconciliation/components/statistics.vue'; import WithdrawalRelationDetail from '#/views/finance/withdrawal/components/withdrawal-relation-detail.vue'; +import { useWithdrawOrderDetailModals } from '#/views/finance/withdrawal/utils/use-withdraw-order-detail'; import { formOptions } from './config/search'; import { gridOptions } from './config/table'; @@ -24,6 +25,9 @@ const [Grid, gridApi] = useVbenVxeGrid({ const statistics = ref(); +const { OrderDetailModal, RegisterDetailModal, openOrderDetail } = + useWithdrawOrderDetailModals(); + const [RelationDetailModal, relationDetailApi] = useVbenModal({ connectedComponent: WithdrawalRelationDetail, }); @@ -59,13 +63,15 @@ initTableAjax(); /** 打开提现+代付互通详情 */ const openDetail = (id: number) => { - relationDetailApi.setData({ id, source: 'charge' }); + relationDetailApi.setData({ id, source: 'charge', openOrderDetail }); relationDetailApi.open(); };