<script lang="ts" setup>
|
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
|
import type { FinLedgerApi } from '#/api/erp/finance/ledger';
|
|
import { Page } from '@vben/common-ui';
|
import { downloadFileFromBlobPart } from '@vben/utils';
|
|
import { Tag } from 'ant-design-vue';
|
|
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
|
import {
|
exportGeneralLedger,
|
getGeneralLedger,
|
} from '#/api/erp/finance/ledger';
|
import { DictTag } from '#/components/dict-tag';
|
import { $t } from '#/locales';
|
|
import {
|
LEDGER_DIRECTION_DICT,
|
LEDGER_ROW_TYPE_COLOR,
|
LEDGER_ROW_TYPE_LABEL,
|
useGeneralColumns,
|
useLedgerFormSchema,
|
} from '../data';
|
|
/** 总账 */
|
defineOptions({ name: 'FinGeneralLedger' });
|
|
/** 导出表格 */
|
async function handleExport() {
|
const data = await exportGeneralLedger({
|
...((await gridApi.formApi.getValues()) as FinLedgerApi.LedgerParams),
|
});
|
downloadFileFromBlobPart({ fileName: '总账.xls', source: data });
|
}
|
|
const [Grid, gridApi] = useVbenVxeGrid({
|
formOptions: {
|
schema: useLedgerFormSchema(),
|
},
|
gridOptions: {
|
columns: useGeneralColumns(),
|
height: 'auto',
|
keepSource: true,
|
pagerConfig: {
|
enabled: false,
|
},
|
proxyConfig: {
|
ajax: {
|
query: async (_params, formValues) => {
|
// 科目为必填,未选科目时直接返回空表,避免无意义的脏查询
|
if (!formValues.subjectCode) {
|
return [];
|
}
|
return await getGeneralLedger(formValues as FinLedgerApi.LedgerParams);
|
},
|
},
|
},
|
rowConfig: {
|
isHover: true,
|
},
|
toolbarConfig: {
|
refresh: true,
|
search: true,
|
},
|
} as VxeTableGridOptions<FinLedgerApi.LedgerRow>,
|
});
|
</script>
|
|
<template>
|
<Page auto-content-height>
|
<Grid table-title="总账(仅统计已过账凭证)">
|
<template #toolbar-tools>
|
<TableAction
|
:actions="[
|
{
|
label: $t('ui.actionTitle.export'),
|
type: 'primary',
|
icon: ACTION_ICON.DOWNLOAD,
|
auth: ['finance:ledger:export'],
|
onClick: handleExport,
|
},
|
]"
|
/>
|
</template>
|
|
<template #rowType="{ row }">
|
<Tag :color="LEDGER_ROW_TYPE_COLOR[row.rowType] ?? 'default'">
|
{{ LEDGER_ROW_TYPE_LABEL[row.rowType] ?? row.rowType }}
|
</Tag>
|
</template>
|
|
<template #direction="{ row }">
|
<DictTag
|
v-if="row.direction"
|
:type="LEDGER_DIRECTION_DICT"
|
:value="row.direction"
|
/>
|
<span v-else>--</span>
|
</template>
|
</Grid>
|
</Page>
|
</template>
|