Files
TakeoutSaaS.TenantUI/apps/web-antd/src/views/finance/cost/composables/cost-page/drawer-actions.ts

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,
};
}