diff --git a/apps/web-antd/src/api/erp/stock/check/index.ts b/apps/web-antd/src/api/erp/stock/check/index.ts
index 090d87867..3c31a5e8f 100644
--- a/apps/web-antd/src/api/erp/stock/check/index.ts
+++ b/apps/web-antd/src/api/erp/stock/check/index.ts
@@ -2,7 +2,7 @@ import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
-namespace ErpStockCheckApi {
+export namespace ErpStockCheckApi {
/** 库存盘点单信息 */
export interface StockCheck {
id?: number; // 盘点编号
@@ -12,8 +12,27 @@ namespace ErpStockCheckApi {
totalPrice: number; // 合计金额,单位:元
status: number; // 状态
remark: string; // 备注
+ fileUrl?: string; // 附件
+ productNames?: string; // 产品信息
+ creatorName?: string; // 创建人
+ items?: StockCheckItem[]; // 盘点产品清单
+ }
+ // 库存盘点单产品信息
+ export interface StockCheckItem {
+ id?: number; // 编号
+ warehouseId?: number; // 仓库编号
+ productId?: number; // 产品编号
+ productName?: string; // 产品名称
+ productUnitId?: number; // 产品单位编号
+ productUnitName?: string; // 产品单位名称
+ productBarCode?: string; // 产品条码
+ count?: number; // 盈亏数量
+ actualCount?: number; // 实际库存
+ productPrice?: number; // 产品单价
+ totalPrice?: number; // 总价
+ stockCount?: number; // 账面库存
+ remark?: string; // 备注
}
-
/** 库存盘点单分页查询参数 */
export interface StockCheckPageParams extends PageParam {
no?: string;
diff --git a/apps/web-antd/src/views/erp/stock/check/data.ts b/apps/web-antd/src/views/erp/stock/check/data.ts
new file mode 100644
index 000000000..a0d75ea7d
--- /dev/null
+++ b/apps/web-antd/src/views/erp/stock/check/data.ts
@@ -0,0 +1,313 @@
+import type { VbenFormSchema } from '#/adapter/form';
+import type { VxeTableGridOptions } from '#/adapter/vxe-table';
+
+import { createRequiredValidation } from '#/adapter/vxe-table';
+import { getProductSimpleList } from '#/api/erp/product/product';
+import { getWarehouseSimpleList } from '#/api/erp/stock/warehouse';
+import { getSimpleUserList } from '#/api/system/user';
+import { DICT_TYPE, getDictOptions } from '#/utils';
+
+/** 表单的配置项 */
+export function useFormSchema(formType: string): VbenFormSchema[] {
+ return [
+ {
+ component: 'Input',
+ componentProps: {
+ style: { display: 'none' },
+ },
+ fieldName: 'id',
+ label: 'ID',
+ hideLabel: true,
+ formItemClass: 'hidden',
+ },
+ {
+ component: 'Input',
+ componentProps: {
+ placeholder: '系统自动生成',
+ disabled: true,
+ },
+ fieldName: 'no',
+ label: '盘点单号',
+ },
+ {
+ component: 'DatePicker',
+ componentProps: {
+ placeholder: '选择盘点时间',
+ showTime: true,
+ format: 'YYYY-MM-DD HH:mm:ss',
+ valueFormat: 'x',
+ style: { width: '100%' },
+ },
+ disabled: formType === 'detail',
+ fieldName: 'checkTime',
+ label: '盘点时间',
+ rules: 'required',
+ },
+ {
+ component: 'Textarea',
+ componentProps: {
+ placeholder: '请输入备注',
+ autoSize: { minRows: 2, maxRows: 4 },
+ class: 'w-full',
+ },
+ disabled: formType === 'detail',
+ fieldName: 'remark',
+ label: '备注',
+ formItemClass: 'col-span-3',
+ },
+ {
+ component: 'FileUpload',
+ disabled: formType === 'detail',
+ componentProps: {
+ maxNumber: 1,
+ maxSize: 10,
+ accept: [
+ 'pdf',
+ 'doc',
+ 'docx',
+ 'xls',
+ 'xlsx',
+ 'txt',
+ 'jpg',
+ 'jpeg',
+ 'png',
+ ],
+ showDescription: true,
+ },
+ fieldName: 'fileUrl',
+ label: '附件',
+ formItemClass: 'col-span-3',
+ },
+ {
+ fieldName: 'product',
+ disabled: formType === 'detail',
+ label: '产品清单',
+ component: 'Input',
+ formItemClass: 'col-span-3',
+ },
+ ];
+}
+
+/** 库存盘点清单表格列定义 */
+export function useStockCheckItemTableColumns(
+ isValidating?: any,
+): VxeTableGridOptions['columns'] {
+ return [
+ { type: 'seq', title: '序号', minWidth: 50, fixed: 'left' },
+ {
+ field: 'warehouseId',
+ title: '仓库名称',
+ minWidth: 150,
+ slots: { default: 'warehouseId' },
+ className: createRequiredValidation(isValidating, 'warehouseId'),
+ },
+ {
+ field: 'productId',
+ title: '产品名称',
+ minWidth: 200,
+ slots: { default: 'productId' },
+ className: createRequiredValidation(isValidating, 'productId'),
+ },
+ {
+ field: 'stockCount',
+ title: '账面库存',
+ minWidth: 100,
+ },
+ {
+ field: 'productBarCode',
+ title: '条码',
+ minWidth: 120,
+ },
+ {
+ field: 'productUnitName',
+ title: '单位',
+ minWidth: 80,
+ },
+ {
+ field: 'actualCount',
+ title: '实际库存',
+ minWidth: 120,
+ slots: { default: 'actualCount' },
+ className: createRequiredValidation(isValidating, 'actualCount'),
+ },
+ {
+ field: 'count',
+ title: '盈亏数量',
+ minWidth: 120,
+ slots: { default: 'count' },
+ className: createRequiredValidation(isValidating, 'count'),
+ },
+ {
+ field: 'productPrice',
+ title: '产品单价',
+ minWidth: 120,
+ slots: { default: 'productPrice' },
+ },
+ {
+ field: 'totalPrice',
+ title: '合计金额',
+ minWidth: 120,
+ formatter: 'formatAmount2',
+ },
+ {
+ field: 'remark',
+ title: '备注',
+ minWidth: 150,
+ slots: { default: 'remark' },
+ },
+ {
+ title: '操作',
+ width: 50,
+ fixed: 'right',
+ slots: { default: 'actions' },
+ },
+ ];
+}
+
+/** 列表的搜索表单 */
+export function useGridFormSchema(): VbenFormSchema[] {
+ return [
+ {
+ fieldName: 'no',
+ label: '盘点单号',
+ component: 'Input',
+ componentProps: {
+ placeholder: '请输入盘点单号',
+ allowClear: true,
+ },
+ },
+ {
+ fieldName: 'productId',
+ label: '产品',
+ component: 'ApiSelect',
+ componentProps: {
+ placeholder: '请选择产品',
+ allowClear: true,
+ showSearch: true,
+ api: getProductSimpleList,
+ labelField: 'name',
+ valueField: 'id',
+ filterOption: false,
+ },
+ },
+ {
+ fieldName: 'checkTime',
+ label: '盘点时间',
+ component: 'RangePicker',
+ componentProps: {
+ placeholder: ['开始日期', '结束日期'],
+ showTime: true,
+ format: 'YYYY-MM-DD HH:mm:ss',
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ },
+ },
+ {
+ fieldName: 'warehouseId',
+ label: '仓库',
+ component: 'ApiSelect',
+ componentProps: {
+ placeholder: '请选择仓库',
+ allowClear: true,
+ showSearch: true,
+ api: getWarehouseSimpleList,
+ labelField: 'name',
+ valueField: 'id',
+ filterOption: false,
+ },
+ },
+ {
+ fieldName: 'status',
+ label: '状态',
+ component: 'Select',
+ componentProps: {
+ placeholder: '请选择状态',
+ allowClear: true,
+ options: getDictOptions(DICT_TYPE.ERP_AUDIT_STATUS, 'number'),
+ },
+ },
+ {
+ fieldName: 'remark',
+ label: '备注',
+ component: 'Input',
+ componentProps: {
+ placeholder: '请输入备注',
+ allowClear: true,
+ },
+ },
+ {
+ fieldName: 'creator',
+ label: '创建人',
+ component: 'ApiSelect',
+ componentProps: {
+ placeholder: '请选择创建人',
+ allowClear: true,
+ showSearch: true,
+ api: getSimpleUserList,
+ labelField: 'nickname',
+ valueField: 'id',
+ filterOption: false,
+ },
+ },
+ ];
+}
+
+/** 列表的字段 */
+export function useGridColumns(): VxeTableGridOptions['columns'] {
+ return [
+ {
+ type: 'checkbox',
+ width: 50,
+ fixed: 'left',
+ },
+ {
+ field: 'no',
+ title: '盘点单号',
+ minWidth: 180,
+ },
+ {
+ field: 'productNames',
+ title: '产品信息',
+ minWidth: 200,
+ showOverflow: 'tooltip',
+ },
+ {
+ field: 'checkTime',
+ title: '出库时间',
+ minWidth: 180,
+ cellRender: {
+ name: 'CellDateTime',
+ },
+ },
+ {
+ field: 'creatorName',
+ title: '创建人',
+ minWidth: 100,
+ },
+ {
+ field: 'totalCount',
+ title: '数量',
+ minWidth: 100,
+ },
+ {
+ field: 'totalPrice',
+ title: '金额',
+ minWidth: 100,
+ },
+ {
+ field: 'status',
+ title: '状态',
+ minWidth: 90,
+ fixed: 'right',
+ cellRender: {
+ name: 'CellDict',
+ props: { type: DICT_TYPE.ERP_AUDIT_STATUS },
+ },
+ },
+ {
+ title: '操作',
+ width: 300,
+ fixed: 'right',
+ slots: { default: 'actions' },
+ },
+ ];
+}
diff --git a/apps/web-antd/src/views/erp/stock/check/index.vue b/apps/web-antd/src/views/erp/stock/check/index.vue
index 3b9a7ec5c..941f8eba8 100644
--- a/apps/web-antd/src/views/erp/stock/check/index.vue
+++ b/apps/web-antd/src/views/erp/stock/check/index.vue
@@ -1,34 +1,219 @@
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/erp/stock/check/modules/form.vue b/apps/web-antd/src/views/erp/stock/check/modules/form.vue
new file mode 100644
index 000000000..7c7eaa07b
--- /dev/null
+++ b/apps/web-antd/src/views/erp/stock/check/modules/form.vue
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/erp/stock/check/modules/stock-check-item-form.vue b/apps/web-antd/src/views/erp/stock/check/modules/stock-check-item-form.vue
new file mode 100644
index 000000000..739d4f4fe
--- /dev/null
+++ b/apps/web-antd/src/views/erp/stock/check/modules/stock-check-item-form.vue
@@ -0,0 +1,373 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ handlePriceChange(row)"
+ class="w-full"
+ />
+
+
+
+
+
+
+
+ handlePriceChange(row)"
+ class="w-full"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+