90 lines
2.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
import type { CostDeleteModalState, CostDetailDrawerState } from '../../types';
|
|
|
|
/**
|
|
* 文件职责:成本明细抽屉与删除弹窗动作。
|
|
*/
|
|
import type {
|
|
FinanceCostCategoryCode,
|
|
FinanceCostEntryDetailDto,
|
|
} from '#/api/finance/cost';
|
|
|
|
interface DrawerActionOptions {
|
|
deleteModalState: CostDeleteModalState;
|
|
drawerState: CostDetailDrawerState;
|
|
removeDetailItem: (
|
|
category: FinanceCostCategoryCode,
|
|
itemId: string | undefined,
|
|
) => void;
|
|
upsertDetailItem: (
|
|
category: FinanceCostCategoryCode,
|
|
detail: FinanceCostEntryDetailDto,
|
|
mode: 'create' | 'edit',
|
|
) => void;
|
|
}
|
|
|
|
/** 创建抽屉与弹窗动作。 */
|
|
export function createDrawerActions(options: DrawerActionOptions) {
|
|
function openCreateDrawer(category: FinanceCostCategoryCode) {
|
|
options.drawerState.open = true;
|
|
options.drawerState.mode = 'create';
|
|
options.drawerState.category = category;
|
|
options.drawerState.sourceItem = undefined;
|
|
}
|
|
|
|
function openEditDrawer(
|
|
category: FinanceCostCategoryCode,
|
|
item: FinanceCostEntryDetailDto,
|
|
) {
|
|
options.drawerState.open = true;
|
|
options.drawerState.mode = 'edit';
|
|
options.drawerState.category = category;
|
|
options.drawerState.sourceItem = { ...item };
|
|
}
|
|
|
|
function closeDrawer() {
|
|
options.drawerState.open = false;
|
|
options.drawerState.sourceItem = undefined;
|
|
}
|
|
|
|
function submitDrawer(detail: FinanceCostEntryDetailDto) {
|
|
options.upsertDetailItem(
|
|
options.drawerState.category,
|
|
detail,
|
|
options.drawerState.mode,
|
|
);
|
|
closeDrawer();
|
|
}
|
|
|
|
function openDeleteModal(
|
|
category: FinanceCostCategoryCode,
|
|
item: FinanceCostEntryDetailDto,
|
|
) {
|
|
options.deleteModalState.open = true;
|
|
options.deleteModalState.category = category;
|
|
options.deleteModalState.item = item;
|
|
}
|
|
|
|
function closeDeleteModal() {
|
|
options.deleteModalState.open = false;
|
|
options.deleteModalState.item = undefined;
|
|
}
|
|
|
|
function confirmDelete() {
|
|
options.removeDetailItem(
|
|
options.deleteModalState.category,
|
|
options.deleteModalState.item?.itemId,
|
|
);
|
|
closeDeleteModal();
|
|
}
|
|
|
|
return {
|
|
closeDeleteModal,
|
|
closeDrawer,
|
|
confirmDelete,
|
|
openCreateDrawer,
|
|
openDeleteModal,
|
|
openEditDrawer,
|
|
submitDrawer,
|
|
};
|
|
}
|