feat 搭建架构骨架

This commit is contained in:
Ironsp
2026-09-24 09:09:47 +08:00
parent dd9f6b77a4
commit 7a2efa3fea
180 changed files with 18967 additions and 9 deletions

View File

@@ -0,0 +1,207 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
import type { PageResult } from '@/types/api'
import type {
Bill,
BillQuery,
FinanceStats,
Invoice,
InvoiceQuery,
InvoiceTitle,
InvoiceTitlePayload,
PayMethod,
Payment,
PaymentResult,
} from '@/types/business/finance'
import {
applyInvoice as applyInvoiceApi,
createInvoiceTitle,
createPayment as createPaymentApi,
deleteInvoiceTitle,
exportReport as exportReportApi,
getBillDetail,
getBillList,
getFinanceStats,
getInvoiceList,
getInvoiceTitles,
getPayResult,
setDefaultTitle as setDefaultTitleApi,
switchPaymentMethod as switchPaymentMethodApi,
updateInvoiceTitle,
} from '@/api/finance'
function createDefaultBillQuery(): BillQuery {
return { keyword: '', status: 'all', page: 1, pageSize: 6 }
}
function createDefaultInvoiceQuery(): InvoiceQuery {
return { keyword: '', status: 'all', page: 1, pageSize: 6 }
}
/** 财务中心数据(统计/账单/支付/发票/抬头) */
export const useFinanceStore = defineStore('finance', () => {
// —— 统计
const stats = ref<FinanceStats | null>(null)
// —— 账单列表
const list = ref<Bill[]>([])
const total = ref(0)
const query = ref<BillQuery>(createDefaultBillQuery())
const currentBill = ref<Bill | null>(null)
// —— 支付
const payment = ref<Payment | null>(null)
const result = ref<PaymentResult | null>(null)
// —— 发票
const invoices = ref<Invoice[]>([])
const invoiceTotal = ref(0)
const invoiceQuery = ref<InvoiceQuery>(createDefaultInvoiceQuery())
// —— 发票抬头
const titles = ref<InvoiceTitle[]>([])
// —— 统计
async function fetchStats(period?: string): Promise<void> {
stats.value = await getFinanceStats(period)
}
// —— 账单
async function fetchList(): Promise<void> {
const pageData: PageResult<Bill> = await getBillList(query.value)
list.value = pageData.list
total.value = pageData.total
}
function setQuery(next: BillQuery): void {
query.value = next
}
/** 确定筛选(重置页码后取数) */
async function search(): Promise<void> {
query.value = { ...query.value, page: 1 }
await fetchList()
}
/** 重置全部条件 */
async function resetQuery(): Promise<void> {
query.value = createDefaultBillQuery()
await fetchList()
}
async function changePage(page: number): Promise<void> {
query.value = { ...query.value, page }
await fetchList()
}
async function fetchDetail(id: string): Promise<void> {
currentBill.value = await getBillDetail(id)
}
// —— 支付
async function createPayment(billId: string, method: PayMethod): Promise<void> {
payment.value = await createPaymentApi(billId, method)
}
/** 切换支付方式(刷新二维码) */
async function switchPaymentMethod(billId: string, method: PayMethod): Promise<void> {
payment.value = await switchPaymentMethodApi(billId, method)
}
async function fetchResult(billId: string): Promise<void> {
result.value = await getPayResult(billId)
}
// —— 发票
async function fetchInvoices(): Promise<void> {
const pageData: PageResult<Invoice> = await getInvoiceList(invoiceQuery.value)
invoices.value = pageData.list
invoiceTotal.value = pageData.total
}
function setInvoiceQuery(next: InvoiceQuery): void {
invoiceQuery.value = next
}
/** 发票确定筛选(重置页码后取数) */
async function searchInvoices(): Promise<void> {
invoiceQuery.value = { ...invoiceQuery.value, page: 1 }
await fetchInvoices()
}
async function changeInvoicePage(page: number): Promise<void> {
invoiceQuery.value = { ...invoiceQuery.value, page }
await fetchInvoices()
}
/** 申请开票(状态 → 开票中) */
async function applyInvoice(id: string): Promise<void> {
const updated = await applyInvoiceApi(id)
const index = invoices.value.findIndex((item) => item.id === id)
if (index >= 0) invoices.value[index] = updated
}
// —— 发票抬头
async function fetchTitles(): Promise<void> {
titles.value = await getInvoiceTitles()
}
async function createTitle(payload: InvoiceTitlePayload): Promise<void> {
await createInvoiceTitle(payload)
await fetchTitles()
}
async function updateTitle(id: string, payload: InvoiceTitlePayload): Promise<void> {
await updateInvoiceTitle(id, payload)
await fetchTitles()
}
async function deleteTitle(id: string): Promise<void> {
await deleteInvoiceTitle(id)
await fetchTitles()
}
async function setDefaultTitle(id: string): Promise<void> {
titles.value = await setDefaultTitleApi(id)
}
// —— 报表导出
async function exportReport(): Promise<void> {
await exportReportApi()
}
return {
stats,
list,
total,
query,
currentBill,
payment,
result,
invoices,
invoiceTotal,
invoiceQuery,
titles,
fetchStats,
fetchList,
setQuery,
search,
resetQuery,
changePage,
fetchDetail,
createPayment,
switchPaymentMethod,
fetchResult,
fetchInvoices,
setInvoiceQuery,
searchInvoices,
changeInvoicePage,
applyInvoice,
fetchTitles,
createTitle,
updateTitle,
deleteTitle,
setDefaultTitle,
export: exportReport,
}
})