feat(stock): 优化出入库管理功能

- 在出库单页面添加仓库编码和仓库名称显示列
- 在入库单页面添加仓库选择功能和备注显示列
- 添加单据来源字段用于区分ERP/MES系统来源
- 优化物料管理页面的字段显示和表单布局
- 添加MES系统接口服务支持物料和单据传输
- 修复物料编码重复校验逻辑
- 优化入库单保存时的用户信息获取机制
- 添加安全配置支持MES/ERP接口访问权限
- 重构API控制器支持POST请求方式数据传输
- 优化库存物资视图显示仓库名称信息
This commit is contained in:
liuhanqing
2026-01-04 17:32:39 +08:00
parent cbefbf6129
commit a060574363
20 changed files with 453 additions and 226 deletions

View File

@@ -33,7 +33,7 @@
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="图号" prop="cargoNo">
<!-- <el-form-item label="图号" prop="cargoNo">
<el-input
v-model="queryParams.cargoNo"
placeholder="请输入图号"
@@ -48,7 +48,7 @@
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-form-item>-->
<el-form-item label="规格" prop="spec">
<el-input
v-model="queryParams.spec"
@@ -177,33 +177,16 @@
<el-table v-loading="loading" :data="BasProductList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="主键" align="center" prop="productGuid" />-->
<el-table-column label="合同号" align="center" prop="parentId" />
<el-table-column label="产品号" align="center" prop="cargoNo" />
<el-table-column label="代号" align="center" prop="unit" />
<el-table-column label="物料编码" align="center" prop="productId" />
<el-table-column label="物料名称" align="center" prop="productName" />
<el-table-column label="规格型号" align="center" prop="spec" />
<el-table-column label="图号" align="center" prop="cargoNo" />
<el-table-column label="常用编码" align="center" prop="parentId" />
<el-table-column label="物料状态" align="center" prop="spare1" >
<template slot-scope="scope">
<dict-tag :options="dict.type.product_type" :value="scope.row.spare1"/>
</template>
</el-table-column>
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="启用标识" align="center" prop="spare7" >
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.spare7"/>
</template>
</el-table-column>
<el-table-column label="是否系统项" align="center" prop="spare2" >
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.spare2"/>
</template>
</el-table-column>
<el-table-column label="创建用户" align="center" prop="spare1" />
<el-table-column label="创建时间" align="center" prop="spare3" />
<el-table-column label="创建用户" align="center" prop="spare4" />
<el-table-column label="库存上限" align="center" prop="spare5" />
<el-table-column label="库存下限" align="center" prop="spare6" />
<el-table-column label="单价" align="center" prop="price" />
<el-table-column label="库存下限" align="center" prop="spare5" />
<el-table-column label="库存上限" align="center" prop="spare6" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
@@ -236,81 +219,52 @@
<!-- 添加或修改物料管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="合同号" prop="parentId">
<el-input v-model="form.parentId" placeholder="请输入合同号" />
</el-form-item>
<el-form-item label="产品号" prop="cargoNo">
<el-input v-model="form.cargoNo" placeholder="请输入产品号" />
</el-form-item>
<el-form-item label="代号" prop="unit">
<el-input v-model="form.unit" placeholder="请输入代号" />
</el-form-item>
<el-form-item label="物料编码" prop="productId">
<el-input v-model="form.productId" placeholder="请输入物料编码" />
</el-form-item>
<el-form-item label="物料名称" prop="productName">
<el-input v-model="form.productName" placeholder="请输入物料名称" />
</el-form-item>
<el-form-item label="常用编码" prop="parentId">
<el-input v-model="form.parentId" placeholder="请输入常用编码" />
</el-form-item>
<el-form-item label="单价" prop="price">
<el-input v-model="form.price" placeholder="请输入单价" />
</el-form-item>
<el-form-item label="图号" prop="cargoNo">
<el-input v-model="form.cargoNo" placeholder="请输入图号" />
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位" />
</el-form-item>
<el-form-item label="规格型号" prop="spec">
<el-input v-model="form.spec" placeholder="请输入规格型号" />
</el-form-item>
<!-- <el-form-item label="创建用户" prop="spare1">-->
<!-- <el-input v-model="form.spare1" placeholder="请输入创建用户" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="创建时间" prop="spare3">-->
<!-- <el-date-picker-->
<!-- v-model="form.spare3"-->
<!-- type="datetime"-->
<!-- placeholder="请选择创建时间"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item label="库存下限" prop="spare5">
<el-input v-model="form.spare5" placeholder="请输入库存下限" />
</el-form-item>
<el-form-item label="库存上限" prop="spare6">
<el-input v-model="form.spare6" placeholder="请输入库存上限" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="物料状态" prop="spare1">
<el-select v-model="form.spare1" placeholder="请选择物料状态">
<el-option
v-for="dict in dict.type.product_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="是否系统项" prop="spare2">
<el-select v-model="form.spare2" placeholder="请选择是否系统项">
<el-option
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="创建时间" prop="spare3">-->
<!-- <el-input v-model="form.spare3" placeholder="请输入颜色" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="创建用户" prop="spare4">-->
<!-- <el-input v-model="form.spare4" placeholder="请输入创建用户" />-->
<!-- </el-form-item>-->
<el-form-item label="库存上限" prop="spare5">
<el-input v-model="form.spare5" placeholder="请输入库存上限" />
</el-form-item>
<el-form-item label="库存下限" prop="spare6">
<el-input v-model="form.spare6" placeholder="请输入库存下限" />
</el-form-item>
<el-form-item label="启用标识" prop="spare7">
<el-select v-model="form.spare7" placeholder="请选择启用标识">
<el-option
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

View File

@@ -6,6 +6,23 @@
</div>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row>
<el-col :span="4">
<el-form-item label="仓库" prop="warehouseId">
<el-select
v-model="form.warehouseId"
placeholder="请选择仓库"
clearable
>
<el-option
v-for="item in warehouseOptions"
:key="item.warehouseId"
:label="item.warehouseName"
:value="item.warehouseId"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="订单号" prop="erpBill">
<el-input v-model="form.erpBill" placeholder="请输入订单号"/>
@@ -28,9 +45,6 @@
<el-input v-model="form.remark" placeholder="请输入备注"/>
</el-form-item>
</el-col>
<el-col :span="4">
<!-- 供应商选择已移至表格中 -->
</el-col>
</el-row>
</el-form>
</div>
@@ -440,7 +454,8 @@ export default {
//仓库查询参数
queryWarehouseParams: {
pageNum: 1,
pageSize: 99
pageSize: 99,
warehouseType:1
},
//物料遮盖
productLoading: true,
@@ -630,11 +645,12 @@ export default {
// 构建请求数据
const data = {
warehouseId: "01",
warehouseId: this.form.warehouseId,
supplierId: this.form.supplierId,
remark: this.form.remark,
inType:this.form.inType,
erpBill:this.form.erpBill,
stockSource: "1",
productType:this.form.productType,
productVoList: this.productList.map(item => ({
productId: item.productId,

View File

@@ -166,6 +166,7 @@
<el-table-column label="部门" align="left" prop="departmentName"/><!--部门-->
<el-table-column label="建立时间" align="left" prop="createDate"/><!--建立时间-->
<el-table-column label="完成日期" align="left" prop="finishDate"/><!--完成日期-->
<el-table-column label="备注" align="left" prop="spare5"/><!--备注-->
</el-table>
<pagination

View File

@@ -43,11 +43,8 @@
<!-- 物资明细表格 -->
<el-table v-loading="loading" :data="materialList">
<el-table-column label="仓库" align="center" prop="warehouseId" >
<template slot-scope="scope">
<dict-tag :options="dict.type.warehouse" :value="scope.row.warehouseId"/>
</template>
</el-table-column>
<el-table-column label="仓库编码" align="center" prop="warehouseId" />
<el-table-column label="仓库" align="center" prop="warehouseName" />
<el-table-column label="合同号" align="center" prop="cargoNo" />
<el-table-column label="产品号" align="center" prop="phase" />
<el-table-column label="代号" align="center" prop="fid" />
@@ -189,11 +186,8 @@
<el-table v-loading="materialLoading" :data="materialOptions" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="onlyIdentity" />
<el-table-column label="仓库" align="center" prop="warehouseId" >
<template slot-scope="scope">
<dict-tag :options="dict.type.warehouse" :value="scope.row.warehouseId"/>
</template>
</el-table-column>
<el-table-column label="仓库编码" align="center" prop="warehouseId" />
<el-table-column label="仓库" align="center" prop="warehouseName" />
<el-table-column label="合同号" align="center" prop="orderId" />
<el-table-column label="代号" align="center" prop="distribution" />
<el-table-column label="产品号" align="center" prop="power" />
@@ -407,7 +401,8 @@ export default {
customerNo: null,
customerName: null, // 添加客户名称字段,用于显示
outType: null,
remark:null
remark:null,
stockoutSource:"1",
},
// 仓库选项
warehouseOptions: [],
@@ -655,6 +650,7 @@ export default {
price:item.spare6,
power:item.spare5,
warehouseId: item.warehouseId,
warehouseName: item.warehouseName,
lotNo: item.lotNo,
voltage:item.spare8,
onlyIdentity: item.onlyIdentity,

View File

@@ -154,7 +154,7 @@
<el-table v-loading="loading" :data="outStockoutList" @selection-change="handleSelectionChange" @row-click="handleRowClick" max-height="400">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="出库单编号" align="left" prop="stockoutId" /> <!-- 出库单编号 -->
<el-table-column label="仓库" align="left" prop="warehouseName" /><!-- 仓库名称 -->
<!-- <el-table-column label="仓库" align="left" prop="warehouseName" />&lt;!&ndash; 仓库名称 &ndash;&gt;-->
<el-table-column label="出库类型" align="left" prop="outType"> <!-- 出库类型 -->
<template slot-scope="scope">
<dict-tag :options="dict.type.out_bill_type" :value="scope.row.outType"/>
@@ -165,14 +165,21 @@
<dict-tag :options="dict.type.out_bill_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="单据来源" align="left" prop="stockoutSource"><!--单据来源-->
<template slot-scope="scope">
<dict-tag :options="dict.type.bill_resource" :value="scope.row.stockoutSource"/>
</template>
</el-table-column>
<el-table-column label="上位单号" align="left" prop="erpStockoutId" width="150"/><!--入库订单-->
<!-- <el-table-column :label="'出口'" align="left" prop="exitId" />-->
<!-- <el-table-column :label="'客户编码'" align="left" prop="customerNo" />&lt;!&ndash; 客户编码 &ndash;&gt;-->
<el-table-column label="客户名称" align="left" prop="customerName" />
<!-- <el-table-column label="客户名称" align="left" prop="customerName" />-->
<el-table-column label="建单人" align="left" prop="createManId" /> <!-- 建单人 -->
<el-table-column label="备注" align="center" prop="remark" /> <!-- 备注 -->
<el-table-column label="创建时间" align="left" prop="createDate" /><!-- 创建时间 -->
<el-table-column label="开始时间" align="left" prop="startDate" /><!-- 开始时间 -->
<el-table-column label="确认时间" align="left" prop="finishDate" /> <!-- 确认时间 -->
<el-table-column label="备注" align="center" prop="remark" /> <!-- 备注 -->
</el-table>
<pagination
@@ -407,7 +414,7 @@ import {listWarehouse} from "@/api/bas/warehouse";
export default {
name: "OutStockWithDetail",
dicts: ['out_bill_type', 'out_bill_status', 'product_type', 'quality_type', 'turnover_type', 'sys_yes_no','account_type','origin_type','purpose_type','warehouse'],
dicts: ['bill_resource','out_bill_type', 'out_bill_status', 'product_type', 'quality_type', 'turnover_type', 'sys_yes_no','account_type','origin_type','purpose_type','warehouse'],
data() {
return {
// 遮罩层