feat(M08-B): 补结算转账状态筛选
This commit is contained in:
+9
-2
@@ -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
@@ -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
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user