77 lines
1.9 KiB
TypeScript
77 lines
1.9 KiB
TypeScript
import type {
|
|
FinanceSettlementDetailStateMap,
|
|
FinanceSettlementExpandAction,
|
|
} from '../../types';
|
|
|
|
/**
|
|
* 文件职责:到账查询展开明细动作。
|
|
*/
|
|
import { getFinanceSettlementDetailApi } from '#/api/finance';
|
|
|
|
import { getSettlementRowKey } from './helpers';
|
|
|
|
interface DetailActionOptions {
|
|
detailStates: FinanceSettlementDetailStateMap;
|
|
expandedRowKeys: { value: string[] };
|
|
selectedStoreId: { value: string };
|
|
}
|
|
|
|
/** 创建展开明细动作。 */
|
|
export function createDetailActions(options: DetailActionOptions) {
|
|
function clearDetailStates() {
|
|
options.expandedRowKeys.value = [];
|
|
for (const key of Object.keys(options.detailStates)) {
|
|
Reflect.deleteProperty(options.detailStates, key);
|
|
}
|
|
}
|
|
|
|
async function handleExpand(action: FinanceSettlementExpandAction) {
|
|
const key = getSettlementRowKey(action.row);
|
|
|
|
if (!action.expanded) {
|
|
options.expandedRowKeys.value = options.expandedRowKeys.value.filter(
|
|
(item) => item !== key,
|
|
);
|
|
return;
|
|
}
|
|
|
|
if (!options.selectedStoreId.value) {
|
|
return;
|
|
}
|
|
|
|
if (!options.expandedRowKeys.value.includes(key)) {
|
|
options.expandedRowKeys.value = [...options.expandedRowKeys.value, key];
|
|
}
|
|
|
|
const currentState = options.detailStates[key] ?? {
|
|
loading: false,
|
|
items: [],
|
|
};
|
|
|
|
if (currentState.loading || currentState.items.length > 0) {
|
|
options.detailStates[key] = currentState;
|
|
return;
|
|
}
|
|
|
|
currentState.loading = true;
|
|
options.detailStates[key] = currentState;
|
|
|
|
try {
|
|
const result = await getFinanceSettlementDetailApi({
|
|
storeId: options.selectedStoreId.value,
|
|
arrivedDate: action.row.arrivedDate,
|
|
channel: action.row.channel,
|
|
});
|
|
|
|
currentState.items = result.items;
|
|
} finally {
|
|
currentState.loading = false;
|
|
}
|
|
}
|
|
|
|
return {
|
|
clearDetailStates,
|
|
handleExpand,
|
|
};
|
|
}
|