diff --git a/frontend/components.d.ts b/frontend/components.d.ts
index 90947ac..44cd6b9 100644
--- a/frontend/components.d.ts
+++ b/frontend/components.d.ts
@@ -77,6 +77,8 @@ declare module 'vue' {
VanNoticeBar: typeof import('vant/es')['NoticeBar']
VanPopup: typeof import('vant/es')['Popup']
VanPullRefresh: typeof import('vant/es')['PullRefresh']
+ VanRadio: typeof import('vant/es')['Radio']
+ VanRadioGroup: typeof import('vant/es')['RadioGroup']
VanSearch: typeof import('vant/es')['Search']
VanStepper: typeof import('vant/es')['Stepper']
VanSwipe: typeof import('vant/es')['Swipe']
diff --git a/frontend/src/features/auth/views/MobileProfileView.vue b/frontend/src/features/auth/views/MobileProfileView.vue
index 06304c7..af5896c 100644
--- a/frontend/src/features/auth/views/MobileProfileView.vue
+++ b/frontend/src/features/auth/views/MobileProfileView.vue
@@ -136,10 +136,7 @@ async function openPostRentalNotice() {
}
function handleWithdraw() {
- showDialog({
- title: '提现提示',
- message: '为了您的资金安全,提现请前往电脑端网页版进行操作。',
- })
+ router.push('/m/wallet/withdrawal')
}
function goOrders(tabKey: string) {
@@ -364,7 +361,7 @@ function resolveAvatarURL(url: string | undefined | null) {
+
diff --git a/frontend/src/features/wallet/views/MobileWithdrawalView.vue b/frontend/src/features/wallet/views/MobileWithdrawalView.vue
new file mode 100644
index 0000000..9f53967
--- /dev/null
+++ b/frontend/src/features/wallet/views/MobileWithdrawalView.vue
@@ -0,0 +1,886 @@
+
+
+
+
+
+
+
+ 可用余额
+ ¥{{ formatCent(availableBalanceCent) }}
+ 冻结余额 ¥{{ formatCent(account?.frozen_balance_cent) }}
+
+
+
+
+
申请提现
+
+
+
+
+
+
+
+
还没有收款账号
+
+ 添加收款账号
+
+
+
+
+
+
+
+
+
+ ¥
+
+
+
+ 单笔限额 ¥{{ MIN_AMOUNT }} - ¥{{ MAX_AMOUNT }}
+
+
+
+
+ 预计到账
+ ¥{{ formatMoney(amountValue) }}
+
+
+
+
+
+ 提交申请
+
+
+
+
+
+
+
提现记录
+ {{ withdrawals.length }} 条
+
+
+
+
+
+
+
+ ¥{{ formatCent(item.amount_cent) }}
+ {{ item.withdraw_no }}
+
+
{{ statusLabel(item.status) }}
+
+
+ {{ accountTypeLabel(item.account_type) }} · {{ item.account_no }}
+ {{ formatDateMinute(item.created_at) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/router/mobileHost.ts b/frontend/src/router/mobileHost.ts
index d9ab2c6..8c6c208 100644
--- a/frontend/src/router/mobileHost.ts
+++ b/frontend/src/router/mobileHost.ts
@@ -41,6 +41,8 @@ export function getMobilePath(path: string): string {
}
// PC-only views that don't have mobile counterparts go to mobile profile as fallback
+ if (path === '/wallet/withdrawal') return '/m/wallet/withdrawal'
+
if (path === '/wallet' || path === '/notifications' || path.startsWith('/seller')) {
return '/m/profile'
}
@@ -68,6 +70,7 @@ export function getPcPath(path: string): string {
if (subPath === '/login') return '/login'
if (subPath === '/register') return '/login' // PC uses /login for both auth actions
if (subPath === '/realname') return '/realname'
+ if (subPath === '/wallet/withdrawal') return '/wallet/withdrawal'
if (subPath === '/seller/listings/create') return '/seller/listings/create'
if (subPath.startsWith('/seller/listings/') && subPath.endsWith('/edit')) return subPath
diff --git a/frontend/src/router/mobileRoutes.ts b/frontend/src/router/mobileRoutes.ts
index e55a730..f53f46e 100644
--- a/frontend/src/router/mobileRoutes.ts
+++ b/frontend/src/router/mobileRoutes.ts
@@ -67,6 +67,12 @@ export const mobileRoutes: RouteRecordRaw[] = [
component: () => import('@/features/auth/views/MobileProfileView.vue'),
meta: { layout: 'blank', requiresAuth: true },
},
+ {
+ path: '/m/wallet/withdrawal',
+ name: 'mobile-withdrawal',
+ component: () => import('@/features/wallet/views/MobileWithdrawalView.vue'),
+ meta: { layout: 'blank', requiresAuth: true },
+ },
{
path: '/m/orders',
name: 'mobile-orders',