consumer模块完成90%,前端完成supabase对接

This commit is contained in:
2026-02-03 17:11:50 +08:00
parent b6200cda28
commit 8a535e3f38
69 changed files with 5020 additions and 33273 deletions

View File

@@ -0,0 +1,75 @@
# Payment Page Documentation
**File Path:** `pages/mall/consumer/payment.uvue`
## 1. Overview
The Payment Page is the final step in the checkout process. It presents the user with the order total, allows selection of a payment method, and processes the transaction. It is fully integrated with the Supabase backend to ensure order status consistency.
## 2. Page Parameters (`onLoad`)
The page expects the following parameters when navigating to it:
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `orderId` | String | **Yes** | The UUID of the order created in the previous step. |
| `amount` | Number | No | The total amount to pay. Defaults to fetching from DB if omitted. |
| `productAmount` | Number | No | Subtotal for products (for display). |
| `deliveryFee` | Number | No | Shipping cost (for display). |
| `discountAmount` | Number | No | Any discounts applied (for display). |
## 3. Data Integration (Supabase)
The page uses `supabaseService.uts` to interact with the database.
### 3.1 Loading Order Information
- **Method:** `supabaseService.getOrderDetail(orderId)`
- **Behavior:** Fetches `ml_orders` data.
- **Failover:** If DB load fails, falls back to `options.amount` or generates a mock Order No.
### 3.2 Loading User Balance
- **Method:** `supabaseService.getUserBalance()`
- **Behavior:** Fetches the current user's wallet balance to determine if "Balance Payment" is viable.
### 3.3 Processing Payment
- **Method:** `supabaseService.payOrder(orderId, method, amount)`
- **Updates Performed:**
- Sets `order_status` to `2` (Pending Delivery / Paid).
- Sets `payment_status` to `1` (Success).
- Sets `payment_method` (e.g., 'wechat', 'balance').
- Sets `payment_time`.
## 4. Key Features
### 4.1 Payment Methods
Supported methods (configured in `loadPaymentMethods`):
1. **WeChat Pay** (Simulated SDK)
2. **Alipay** (Simulated SDK)
3. **Balance Payment**
- Checks if `userBalance >= amount`.
- Requires 6-digit password input.
- Password verification is currently simulated.
4. **Bank Card** (Simulated)
### 4.2 User Interaction
- **Password Input:** A custom 6-digit dot display and numeric keypad overlay appear when "Balance Payment" is selected.
- **Interception:** `onBackPress` is intercepted to warn the user that cancelling will save the order as "Pending Payment".
## 5. State Management
- **Success Flow:**
1. `confirmPayment` validates inputs (balance, password).
2. Calls `payOrder` API.
3. Updates local storage `orders` cache (backup).
4. Emits `orderUpdated` global event (for Profile page refresh).
5. Redirects to `/pages/mall/consumer/payment-success`.
- **Cancellation Flow:**
1. User attempts to go back.
2. Modal prompts for confirmation.
3. On confirm, acts as "Pending Payment" (Status remains `1`).
4. Returns to previous page.
## 6. Future Improvements (TODO)
- **Real Payment SDK:** Integrate actual `uni.requestPayment` for WeChat/Alipay.
- **Server-Side Verification:** Move password verification to a Supabase Edge Function instead of frontend simulation.
- **Inventory Lock:** Ensure inventory is deducted atomically on the server side (currently simulated or implicit).