项目中心-支付模块

This commit is contained in:
wangzzpeng
2026-09-30 08:04:16 +08:00
parent 6b88c3805f
commit ce8210fb3f
35 changed files with 2618 additions and 175 deletions

View File

@@ -10,20 +10,25 @@ import type {
InvoiceTitle,
InvoiceTitlePayload,
PayMethod,
PayOrderResponse,
Payment,
PaymentResult,
} from '@/types/business/finance'
import {
applyInvoice as applyInvoiceApi,
createAlipayPageOrder as createAlipayPageOrderApi,
createInvoiceTitle,
createPayment as createPaymentApi,
createWechatNativeOrder as createWechatNativeOrderApi,
deleteInvoiceTitle,
exportReport as exportReportApi,
getBillDetail,
getBillList,
getCheckoutBills,
getFinanceStats,
getInvoiceList,
getInvoiceTitles,
getPlanPayResult,
getPayResult,
setDefaultTitle as setDefaultTitleApi,
switchPaymentMethod as switchPaymentMethodApi,
@@ -53,6 +58,13 @@ export const useFinanceStore = defineStore('finance', () => {
const payment = ref<Payment | null>(null)
const result = ref<PaymentResult | null>(null)
// —— 收银台(确认支付页)
/** 收银台待支付账单(由路由 `?ids=` 拉取) */
const checkoutBills = ref<Bill[]>([])
const checkoutLoading = ref(false)
/** 最近一次下单响应(微信 codeUrl / 支付宝跳转地址) */
const payOrder = ref<PayOrderResponse | null>(null)
// —— 发票
const invoices = ref<Invoice[]>([])
const invoiceTotal = ref(0)
@@ -108,8 +120,48 @@ export const useFinanceStore = defineStore('finance', () => {
payment.value = await switchPaymentMethodApi(billId, method)
}
async function fetchResult(billId: string): Promise<void> {
result.value = await getPayResult(billId)
async function fetchResult(billId: string, requirementId = ''): Promise<void> {
result.value = requirementId
? await getPlanPayResult(requirementId, billId)
: await getPayResult(billId)
}
// —— 收银台(确认支付)
/**
* 拉取收银台订单明细。
*
* <p>入参是**需求 id**(项目详情路由 `:id`):数据走项目详情那个现成接口
* `GET /web/requirementPool/get/finance/{需求id}` 的 `billPlans`,不另开端点。
* `ids` 为可选的期次 id(`vm_bill_plan.id`),用于精确指定付哪一期;
* 不传则取该需求下状态为「待支付」的期。</p>
*/
async function loadCheckout(requirementId: string, ids: string[] = []): Promise<void> {
checkoutLoading.value = true
try {
checkoutBills.value = await getCheckoutBills(requirementId, ids)
} finally {
checkoutLoading.value = false
}
}
/**
* 微信 Native 下单(拿到 codeUrl 后由页面渲染二维码)。
*
* @param billIds 本笔支付覆盖的账单 id。后端据此落 `vm_finance_payment` 并把它写进
* `request_payload`,支付成功回调再为每张账单落 `vm_finance_payment_bill`。
*/
async function payByWechatNative(orderNo: string, amount: number, billIds: string[]): Promise<void> {
payOrder.value = await createWechatNativeOrderApi(orderNo, amount, billIds)
}
/** 支付宝电脑网站支付下单(拿到跳转地址后由页面跳转) */
async function payByAlipayPage(orderNo: string, amount: number, billIds: string[]): Promise<void> {
payOrder.value = await createAlipayPageOrderApi(orderNo, amount, billIds)
}
/** 清空下单响应(关闭二维码弹窗时调用) */
function clearPayOrder(): void {
payOrder.value = null
}
// —— 发票
@@ -178,6 +230,9 @@ export const useFinanceStore = defineStore('finance', () => {
currentBill,
payment,
result,
checkoutBills,
checkoutLoading,
payOrder,
invoices,
invoiceTotal,
invoiceQuery,
@@ -192,6 +247,10 @@ export const useFinanceStore = defineStore('finance', () => {
createPayment,
switchPaymentMethod,
fetchResult,
loadCheckout,
payByWechatNative,
payByAlipayPage,
clearPayOrder,
fetchInvoices,
setInvoiceQuery,
searchInvoices,