This commit is contained in:
wujinliang
2026-08-27 21:48:15 +08:00
parent 550d8add97
commit b47323edf3
53 changed files with 624 additions and 82 deletions
@@ -49,6 +49,7 @@ const router = useRouter()
const access = useAccessPreviewStore()
const customers = ref<PlatformTenantResource[]>([])
const filters = ref<QueryModel>({ customerId: '', supplierName: '', settlementNo: '', status: '' })
const appliedFilters = ref<QueryModel>({ ...filters.value })
const rows = ref<SettlementRow[]>([])
const page = ref(1)
const pageSize = ref(20)
@@ -113,9 +114,9 @@ const fields = computed<QueryField[]>(() => [
{ key: 'settlementNo', type: 'input', label: '结算单号', width: 220, placeholder: '请输入结算单号' },
])
const filteredRows = computed(() => {
const status = String(filters.value.status || '')
const settlementNo = String(filters.value.settlementNo || '').trim().toLowerCase()
const supplierName = String(filters.value.supplierName || '')
const status = String(appliedFilters.value.status || '')
const settlementNo = String(appliedFilters.value.settlementNo || '').trim().toLowerCase()
const supplierName = String(appliedFilters.value.supplierName || '')
return rows.value.filter((item) => (!status || item.status === status)
&& (!settlementNo || item.settlementNo.toLowerCase().includes(settlementNo))
&& (!supplierName || ('supplierName' in item && item.supplierName === supplierName)))
@@ -233,13 +234,14 @@ async function loadCustomers() {
async function load(model?: QueryModel) {
if (model) {
filters.value = { ...model }
appliedFilters.value = { ...model }
page.value = 1
}
rows.value = []
error.value = null
loading.value = true
try {
const customerId = String(filters.value.customerId || '').trim() || undefined
const customerId = String(appliedFilters.value.customerId || '').trim() || undefined
rows.value = props.kind === 'receivable'
? await listFinanceReceivableSettlements(customerId)
: await listFinancePayableSettlements(customerId)
@@ -304,8 +306,13 @@ async function refreshCreateDependencies(customerId?: string) {
return
}
const fees = await listFinanceFeePool(selectedCustomerId, 'PAYABLE')
feeOptions.value = fees.filter((item) => item.feeSourceId && item.status === 'AVAILABLE')
const selectedSupplierId = String(createForm.value.supplierId || '').trim() || undefined
if (!selectedSupplierId) {
createForm.value.feeSourceIds = []
return
}
const fees = await listFinanceFeePool(selectedCustomerId, 'PAYABLE', selectedSupplierId)
feeOptions.value = fees.filter((item) => item.feeSourceId && item.status === 'AVAILABLE' && item.settlementMode?.toUpperCase() !== 'DIRECT_PAID')
if (createForm.value.supplierId && !supplierOptions.value.find((supplier) => String(supplier.id) === String(createForm.value.supplierId))) {
createForm.value.supplierId = ''
}
@@ -321,6 +328,12 @@ async function refreshCreateDependencies(customerId?: string) {
watch(() => createForm.value.customerId, (customerId) => {
if (createOpen.value) void refreshCreateDependencies(customerId)
})
watch(() => createForm.value.supplierId, () => {
if (!createOpen.value) return
createForm.value.feeSourceIds = []
feeOptions.value = []
if (createForm.value.customerId) void refreshCreateDependencies(createForm.value.customerId)
})
async function submitCreate() {
const customerId = String(createForm.value.customerId || '')
@@ -580,7 +593,7 @@ onMounted(() => {
</DetailPageLayout>
<ListPageLayout v-else :aria-label="title">
<template #toolbar>
<QueryToolbar v-model="filters" class="surface-panel" :ariaLabel="`${title}筛选`" :fields="fields" :preference-key="`finance-settlement-${kind}-query`" @search="load" />
<QueryToolbar v-model="filters" class="surface-panel" :ariaLabel="`${title}筛选`" :fields="fields" :preference-key="`finance-settlement-${kind}-query`" :search-on-clear="false" @search="load" />
</template>
<template v-if="customerError || error" #state>
<LoadErrorState :title="`${title}加载失败`" :message="(customerError || error)?.message || ''" :loading="loading" @retry="customerError ? loadCustomers() : load()"><template #details><ApiErrorMeta :details="(customerError || error)!" /></template></LoadErrorState>