feat(@vben/web-antd): add finance cost management pages

This commit is contained in:
2026-03-04 15:58:42 +08:00
parent d98926aa3c
commit d92fc6a878
26 changed files with 2819 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
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,
};
}