feat(M08-B): 补结算转账状态筛选

This commit is contained in:
Codex
2026-07-05 14:55:22 +08:00
parent 983966561f
commit 08c152aecc
12 changed files with 94 additions and 18 deletions
+9 -2
View File
@@ -236,6 +236,7 @@ import type {
CleaningTask,
ManagedUser,
PageResult,
PayoutStateFilter,
SettlementStatus,
TaskStatus,
TransferMode,
@@ -262,7 +263,11 @@ const settlements = reactive<PageResult<CleaningSettlement>>({
});
const cleaners = reactive<PageResult<ManagedUser>>({ items: [], total: 0, page: 1, pageSize: 20 });
const taskFilters = reactive({ storeId: '', cleanerUserId: '' });
const settlementFilters = reactive({ storeId: '', cleanerUserId: '' });
const settlementFilters = reactive<{ storeId: string; cleanerUserId: string; payoutState: PayoutStateFilter | '' }>({
storeId: '',
cleanerUserId: '',
payoutState: ''
});
const statisticsFilters = reactive({ from: '', to: '', storeId: '', cleanerUserId: '' });
const statistics = reactive<CleaningStatistics>({
summary: {
@@ -326,6 +331,7 @@ async function loadSettlements() {
page: settlements.page,
pageSize: settlements.pageSize,
status: settlementStatus.value || undefined,
payoutState: settlementFilters.payoutState || undefined,
storeId: settlementFilters.storeId || undefined,
cleanerUserId: settlementFilters.cleanerUserId || undefined
});
@@ -401,11 +407,12 @@ function changeSettlementStatus(status: SettlementStatus | '') {
function jumpToSettlementStatus(status: SettlementStatus) {
activeTab.value = 'settlements';
settlementStatus.value = status;
settlementFilters.payoutState = '';
settlements.page = 1;
void loadSettlements();
}
function changeSettlementFilters(input: { storeId: string; cleanerUserId: string }) {
function changeSettlementFilters(input: { storeId: string; cleanerUserId: string; payoutState: PayoutStateFilter | '' }) {
Object.assign(settlementFilters, input);
settlements.page = 1;
void loadSettlements();
+10 -1
View File
@@ -7,6 +7,7 @@ import type {
CleaningTaskMember,
ManagedUser,
PageResult,
PayoutStateFilter,
StaffRole,
SettlementStatus,
TaskStatus,
@@ -221,13 +222,21 @@ export function reclaimCleaningTimeouts(
export function listCleaningSettlements(
session: ApiSession,
input: { page: number; pageSize: number; status?: SettlementStatus; storeId?: string; cleanerUserId?: string }
input: {
page: number;
pageSize: number;
status?: SettlementStatus;
payoutState?: PayoutStateFilter;
storeId?: string;
cleanerUserId?: string;
}
) {
const params = new URLSearchParams({
page: String(input.page),
pageSize: String(input.pageSize)
});
if (input.status) params.set('status', input.status);
if (input.payoutState) params.set('payoutState', input.payoutState);
if (input.storeId) params.set('storeId', input.storeId);
if (input.cleanerUserId) params.set('cleanerUserId', input.cleanerUserId);
return request<PageResult<CleaningSettlement>>(session, `/cleaning/settlements?${params}`);
@@ -31,6 +31,21 @@
:value="cleaner.id"
/>
</el-select>
<el-select
v-model="filterDraft.payoutState"
class="filter-select"
clearable
placeholder="转账状态"
@change="submitFilters"
@clear="submitFilters"
>
<el-option
v-for="option in payoutStateOptions"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
<el-button :icon="Search" @click="submitFilters">筛选</el-button>
</div>
<div class="toolbar-actions">
@@ -386,6 +401,7 @@ import type {
CleaningTask,
ManagedUser,
PageResult,
PayoutStateFilter,
SettlementStatus,
TransferMode,
WechatTransferPreflight
@@ -400,13 +416,13 @@ const props = defineProps<{
page: number;
pageSize: number;
status: SettlementStatus | '';
filters: { storeId: string; cleanerUserId: string };
filters: { storeId: string; cleanerUserId: string; payoutState: PayoutStateFilter | '' };
}>();
const emit = defineEmits<{
refresh: [];
'status-change': [SettlementStatus | ''];
filter: [{ storeId: string; cleanerUserId: string }];
filter: [{ storeId: string; cleanerUserId: string; payoutState: PayoutStateFilter | '' }];
'page-change': [number];
generate: [{ cleanerUserId: string; storeId?: string; note?: string }];
confirm: [{ settlementId: string; note?: string }];
@@ -423,7 +439,18 @@ const statusOptions = [
{ label: '已发', value: 'PAID' },
{ label: '取消', value: 'CANCELLED' }
];
const filterDraft = reactive({ storeId: props.filters.storeId, cleanerUserId: props.filters.cleanerUserId });
const payoutStateOptions: Array<{ label: string; value: PayoutStateFilter }> = [
{ label: '未发起', value: 'NONE' },
{ label: '处理中', value: 'PROCESSING' },
{ label: '待确认', value: 'WAIT_USER_CONFIRM' },
{ label: '成功', value: 'SUCCESS' },
{ label: '失败', value: 'FAIL' }
];
const filterDraft = reactive({
storeId: props.filters.storeId,
cleanerUserId: props.filters.cleanerUserId,
payoutState: props.filters.payoutState
});
const selectedSettlements = ref<CleaningSettlement[]>([]);
const generateDialog = reactive({ open: false, cleanerUserId: '', storeId: '', note: '' });
const transferDialog = reactive({
@@ -513,7 +540,8 @@ function cleanerLabel(cleaner: ManagedUser) {
function submitFilters() {
emit('filter', {
storeId: filterDraft.storeId.trim(),
cleanerUserId: filterDraft.cleanerUserId
cleanerUserId: filterDraft.cleanerUserId,
payoutState: filterDraft.payoutState
});
}
+1
View File
@@ -10,6 +10,7 @@ export type TaskStatus =
| 'CANCELLED';
export type SettlementStatus = 'DRAFT' | 'CONFIRMED' | 'PAID' | 'CANCELLED';
export type PayoutStateFilter = 'NONE' | 'SUCCESS' | 'FAIL' | 'PROCESSING' | 'WAIT_USER_CONFIRM';
export type TransferMode = 'API' | 'MOCK';
export type UserStatus = 'ACTIVE' | 'DISABLED';
export type StaffRole = 'CLEANER' | 'STAFF' | 'STORE_ADMIN' | 'TENANT_ADMIN';