diff --git a/apps/web-antd/src/api/erp/stock/out/index.ts b/apps/web-antd/src/api/erp/stock/out/index.ts
index 2224e2ddbfe4ee7c9db5c7199c41bc299047e975..a3873f94841c62ec7b3b5a9f38db035a7beb6656 100644
--- a/apps/web-antd/src/api/erp/stock/out/index.ts
+++ b/apps/web-antd/src/api/erp/stock/out/index.ts
@@ -2,7 +2,7 @@ import type { PageParam, PageResult } from '@vben/request';
 
 import { requestClient } from '#/api/request';
 
-namespace ErpStockOutApi {
+export namespace ErpStockOutApi {
   /** 其它出库单信息 */
   export interface StockOut {
     id?: number; // 出库编号
@@ -13,6 +13,24 @@ namespace ErpStockOutApi {
     totalPrice: number; // 合计金额,单位:元
     status: number; // 状态
     remark: string; // 备注
+    fileUrl?: string; // 附件
+    items?: StockOutItem[]; // 出库产品清单
+  }
+
+  /** 其它出库单产品信息 */
+  export interface StockOutItem {
+    id?: number; // 编号
+    warehouseId?: number; // 仓库编号
+    productId?: number; // 产品编号
+    productName?: string; // 产品名称
+    productUnitId?: number; // 产品单位编号
+    productUnitName?: string; // 产品单位名称
+    productBarCode?: string; // 产品条码
+    count: number; // 数量
+    productPrice: number; // 产品单价
+    totalPrice: number; // 总价
+    stockCount?: number; // 库存数量
+    remark?: string; // 备注
   }
 
   /** 其它出库单分页查询参数 */
diff --git a/apps/web-antd/src/views/erp/stock/in/modules/form.vue b/apps/web-antd/src/views/erp/stock/in/modules/form.vue
index fffca0978d272ec564a3177eed6ab07a93f5e74e..a18f6c1ce918f224226c71db2733f62fa9fd0896 100644
--- a/apps/web-antd/src/views/erp/stock/in/modules/form.vue
+++ b/apps/web-antd/src/views/erp/stock/in/modules/form.vue
@@ -88,7 +88,10 @@ const [Modal, modalApi] = useVbenModal({
     modalApi.lock();
     // 提交表单
     const data = (await formApi.getValues()) as ErpStockInApi.StockIn;
-    data.items = formData.value?.items;
+    data.items = formData.value?.items?.map((item) => ({
+      ...item,
+      id: undefined,
+    }));
     // 将文件数组转换为字符串
     if (data.fileUrl && Array.isArray(data.fileUrl)) {
       data.fileUrl = data.fileUrl.length > 0 ? data.fileUrl[0] : '';
diff --git a/apps/web-antd/src/views/erp/stock/out/data.ts b/apps/web-antd/src/views/erp/stock/out/data.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ca2095c34ca2595f0d42c0af596e45d795977eaa
--- /dev/null
+++ b/apps/web-antd/src/views/erp/stock/out/data.ts
@@ -0,0 +1,329 @@
+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 { getCustomerSimpleList } from '#/api/erp/sale/customer';
+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: '出库单号',
+      disabled: formType === 'detail',
+    },
+    {
+      component: 'DatePicker',
+      componentProps: {
+        placeholder: '选择出库时间',
+        showTime: true,
+        format: 'YYYY-MM-DD HH:mm:ss',
+        valueFormat: 'x',
+        style: { width: '100%' },
+      },
+      disabled: formType === 'detail',
+      fieldName: 'outTime',
+      label: '出库时间',
+      rules: 'required',
+    },
+    {
+      component: 'ApiSelect',
+      componentProps: {
+        placeholder: '请选择客户',
+        allowClear: true,
+        showSearch: true,
+        api: getCustomerSimpleList,
+        fieldNames: {
+          label: 'name',
+          value: 'id',
+        },
+      },
+      disabled: formType === 'detail',
+      fieldName: 'customerId',
+      label: '客户',
+    },
+
+    {
+      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 useStockInItemTableColumns(
+  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: '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: 'outTime',
+      label: '出库时间',
+      component: 'RangePicker',
+      componentProps: {
+        placeholder: ['开始日期', '结束日期'],
+        showTime: true,
+        format: 'YYYY-MM-DD HH:mm:ss',
+        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+      },
+    },
+    {
+      fieldName: 'customerId',
+      label: '客户',
+      component: 'ApiSelect',
+      componentProps: {
+        placeholder: '请选择客户',
+        allowClear: true,
+        showSearch: true,
+        api: getCustomerSimpleList,
+        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: 'customerName',
+      title: '客户',
+      minWidth: 120,
+    },
+    {
+      field: 'outTime',
+      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/out/index.vue b/apps/web-antd/src/views/erp/stock/out/index.vue
index afbf0c8a5141ff552f8cfc2d63abecf23c6c7f47..b42896b3735dfac98f5c9d9a431193877d629e5a 100644
--- a/apps/web-antd/src/views/erp/stock/out/index.vue
+++ b/apps/web-antd/src/views/erp/stock/out/index.vue
@@ -1,34 +1,219 @@
 
 
 
-  
+  
     
       
     
-    
-    
-    
+    
+      
+        
+      
+
+      
+        
+      
+    
+
+    
+    
   
 
diff --git a/apps/web-antd/src/views/erp/stock/out/modules/form.vue b/apps/web-antd/src/views/erp/stock/out/modules/form.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7e8a840318dc721f2006b3200b690c3cedb82825
--- /dev/null
+++ b/apps/web-antd/src/views/erp/stock/out/modules/form.vue
@@ -0,0 +1,196 @@
+
+
+
+  
+    
+  
+
diff --git a/apps/web-antd/src/views/erp/stock/out/modules/stock-out-item-form.vue b/apps/web-antd/src/views/erp/stock/out/modules/stock-out-item-form.vue
new file mode 100644
index 0000000000000000000000000000000000000000..14ff4fe1389e8e5db3552c0cc04ddde3efe7600b
--- /dev/null
+++ b/apps/web-antd/src/views/erp/stock/out/modules/stock-out-item-form.vue
@@ -0,0 +1,367 @@
+
+
+
+  
+    
+      
+    
+
+    
+      
+        
+
+      
+        
+
+      
+         handlePriceChange(row)"
+          class="w-full"
+        />
+      
+
+      
+         handlePriceChange(row)"
+          class="w-full"
+        />
+      
+
+      
+        
+      
+
+      
+        
+      
+
+      
+        
+      
+    
+