feat(@vben/web-antd): erp-stock-record 添加产品库存明细管理功能

- 实现了产品库存明细的查询、导出功能
- 添加了搜索表单和列表展示
- 集成了仓库和产品选择器
- 使用了 VxeTable 组件
pull/188/head
nehc 2025-07-31 14:33:16 +08:00
parent 8d660404dc
commit 2e6575f368
2 changed files with 217 additions and 25 deletions

View File

@ -0,0 +1,146 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { getProductSimpleList } from '#/api/erp/product/product';
import { getWarehouseSimpleList } from '#/api/erp/stock/warehouse';
import { DICT_TYPE, getDictOptions } from '#/utils';
/** 搜索表单 */
export function useGridFormSchema(): VbenFormSchema[] {
return [
{
fieldName: 'productId',
label: '产品',
component: 'ApiSelect',
componentProps: {
placeholder: '请选择产品',
allowClear: true,
showSearch: true,
api: getProductSimpleList,
labelField: 'name',
valueField: 'id',
filterOption: false,
},
},
{
fieldName: 'warehouseId',
label: '仓库',
component: 'ApiSelect',
componentProps: {
placeholder: '请选择仓库',
allowClear: true,
showSearch: true,
api: getWarehouseSimpleList,
labelField: 'name',
valueField: 'id',
filterOption: false,
},
},
{
fieldName: 'bizType',
label: '类型',
component: 'Select',
componentProps: {
placeholder: '请选择类型',
allowClear: true,
options: getDictOptions(DICT_TYPE.ERP_STOCK_RECORD_BIZ_TYPE, 'number'),
},
},
{
fieldName: 'bizNo',
label: '业务单号',
component: 'Input',
componentProps: {
placeholder: '请输入业务单号',
allowClear: true,
},
},
{
fieldName: 'createTime',
label: '创建时间',
component: 'RangePicker',
componentProps: {
placeholder: ['开始日期', '结束日期'],
showTime: true,
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
},
},
];
}
/** 列表的字段 */
export function useGridColumns(): VxeTableGridOptions['columns'] {
return [
{
field: 'productName',
title: '产品名称',
minWidth: 150,
},
{
field: 'categoryName',
title: '产品分类',
width: 120,
},
{
field: 'unitName',
title: '产品单位',
width: 100,
},
{
field: 'warehouseName',
title: '仓库',
width: 120,
},
{
field: 'bizType',
title: '类型',
width: 100,
cellRender: {
name: 'CellDict',
props: { type: DICT_TYPE.ERP_STOCK_RECORD_BIZ_TYPE },
},
},
{
field: 'bizNo',
title: '出入库单号',
width: 200,
showOverflow: 'tooltip',
},
{
field: 'createTime',
title: '出入库日期',
width: 180,
cellRender: {
name: 'CellDateTime',
},
},
{
field: 'count',
title: '出入库数量',
width: 120,
cellRender: {
name: 'CellAmount',
props: {
digits: 2,
},
},
},
{
field: 'totalCount',
title: '库存量',
width: 100,
cellRender: {
name: 'CellAmount',
props: {
digits: 2,
},
},
},
{
field: 'creatorName',
title: '操作人',
width: 100,
},
];
}

View File

@ -1,32 +1,78 @@
<script lang="ts" setup> <script lang="ts" setup>
import { DocAlert, Page } from '@vben/common-ui'; import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { ErpStockRecordApi } from '#/api/erp/stock/record';
import { Button } from 'ant-design-vue'; import { DocAlert, Page } from '@vben/common-ui';
import { downloadFileFromBlobPart } from '@vben/utils';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { exportStockRecord, getStockRecordPage } from '#/api/erp/stock/record';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
/** 产品库存明细管理 */
defineOptions({ name: 'ErpStockRecord' });
/** 导出库存明细 */
async function handleExport() {
const data = await exportStockRecord(await gridApi.formApi.getValues());
downloadFileFromBlobPart({ fileName: '产品库存明细.xls', source: data });
}
const [Grid, gridApi] = useVbenVxeGrid({
formOptions: {
schema: useGridFormSchema(),
},
gridOptions: {
columns: useGridColumns(),
height: 'auto',
keepSource: true,
proxyConfig: {
ajax: {
query: async ({ page }, formValues) => {
return await getStockRecordPage({
pageNo: page.currentPage,
pageSize: page.pageSize,
...formValues,
});
},
},
},
rowConfig: {
keyField: 'id',
},
toolbarConfig: {
refresh: true,
search: true,
},
} as VxeTableGridOptions<ErpStockRecordApi.StockRecord>,
});
</script> </script>
<template> <template>
<Page> <Page auto-content-height>
<DocAlert <template #doc>
title="【库存】产品库存、库存明细" <DocAlert
url="https://doc.iocoder.cn/erp/stock/" title="【库存】产品库存、库存明细"
/> url="https://doc.iocoder.cn/erp/stock/"
<Button />
danger </template>
type="link"
target="_blank" <Grid table-title="">
href="https://github.com/yudaocode/yudao-ui-admin-vue3" <template #toolbar-tools>
> <TableAction
该功能支持 Vue3 + element-plus 版本 :actions="[
</Button> {
<br /> label: $t('ui.actionTitle.export'),
<Button type: 'primary',
type="link" icon: ACTION_ICON.DOWNLOAD,
target="_blank" auth: ['erp:stock-record:export'],
href="https://github.com/yudaocode/yudao-ui-admin-vue3/blob/master/src/views/erp/stock/record/index" onClick: handleExport,
> },
可参考 ]"
https://github.com/yudaocode/yudao-ui-admin-vue3/blob/master/src/views/erp/stock/record/index />
代码pull request 贡献给我们 </template>
</Button> </Grid>
</Page> </Page>
</template> </template>