feat(inventory): 增强出库单和相关表单的功能与稳定性
- 在多个组件中添加 `:close-on-click-modal="false"` 属性以防止误触关闭 - 设置 `el-drawer` 的 `:wrapper-closable="false"` 来增强用户体验 - 为 GenerateDeliveryForm 中的表格增加 row-key 和 reserve-selection 以支持选择状态保留 - 添加 isInitialLoad 标志优化 SN 列表初始化加载逻辑 - 更新 delivery.js 接口请求头以支持 multipart/form-data 类型数据传输 - 修改 Vue 配置中的后端接口地址从 28081 到 28080 端口 - Java 后端控制器方法参数调整并加入防重复发货注释提醒 - 强化前端产品信息校验逻辑,确保提交前完成所有必填字段 - 统一处理弹窗及抽屉类组件的行为一致性,提升交互体验master
parent
d5b8b0ca68
commit
d3832d0ceb
|
|
@ -75,6 +75,7 @@ export function listProductSn(query) {
|
|||
return request({
|
||||
url: '/inventory/info/vue/list',
|
||||
method: 'post',
|
||||
headers: { 'Content-Type': 'multipart/form-data' },
|
||||
data: query
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改制造商信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
|
||||
<el-dialog :title="title" :visible.sync="open" width="70%" :close-on-click-modal="false" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="200px" style="max-height: 70vh;overflow-y: auto;padding: 10px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-drawer title="发货单详情" :visible.sync="visible" direction="rtl" size="60%" @close="handleClose" append-to-body>
|
||||
<el-drawer title="发货单详情" :wrapper-closable="false" :visible.sync="visible" direction="rtl" size="60%" @close="handleClose" append-to-body>
|
||||
<div class="app-container">
|
||||
<el-form :model="detail" label-width="100px" disabled>
|
||||
<div
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@
|
|||
@pagination="getList"/>
|
||||
|
||||
<!-- 新增/修改对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body @close="cancel" class="checkout-dialog">
|
||||
<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="80%" append-to-body @close="cancel" class="checkout-dialog">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-drawer :title="title" :visible.sync="open" size="70%" append-to-body @close="cancel">
|
||||
<el-drawer :wrapper-closable="false" :title="title" :visible.sync="open" size="70%" append-to-body @close="cancel">
|
||||
<el-form ref="form" :model="form" label-width="140px">
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@
|
|||
/>
|
||||
|
||||
<!-- 编辑订单执行对话框 -->
|
||||
<el-dialog title="编辑订单执行" :visible.sync="editDialogVisible" width="70vw" append-to-body destroy-on-close>
|
||||
<el-dialog title="编辑订单执行" :close-on-click-modal="false" :visible.sync="editDialogVisible" width="70vw" append-to-body destroy-on-close>
|
||||
<edit
|
||||
v-if="editDialogVisible"
|
||||
:order-id="currentEditOrderId"
|
||||
|
|
@ -173,7 +173,7 @@
|
|||
</el-dialog>
|
||||
|
||||
<!-- 签收文件上传对话框 -->
|
||||
<el-dialog title="上传签收文件" :visible.sync="upload.open" width="400px" append-to-body>
|
||||
<el-dialog :close-on-click-modal="false" title="上传签收文件" :visible.sync="upload.open" width="400px" append-to-body>
|
||||
<el-upload
|
||||
ref="upload"
|
||||
:limit="1"
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@
|
|||
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<!-- 新增/修改对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="680px" append-to-body>
|
||||
<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="680px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
|
|
@ -196,12 +196,12 @@
|
|||
</el-drawer>
|
||||
|
||||
<!-- 入库记录对话框 -->
|
||||
<el-dialog title="入库记录" :visible.sync="innerLogVisible" width="70%" append-to-body>
|
||||
<el-dialog :close-on-click-modal="false" title="入库记录" :visible.sync="innerLogVisible" width="70%" append-to-body>
|
||||
<inner-log v-if="innerLogVisible" :product-code="currentLogProductCode" :warehouse-id="currentLogWarehouseId" />
|
||||
</el-dialog>
|
||||
|
||||
<!-- 出库记录对话框 -->
|
||||
<el-dialog title="出库记录" :visible.sync="outerLogVisible" width="70%" append-to-body>
|
||||
<el-dialog :close-on-click-modal="false" title="出库记录" :visible.sync="outerLogVisible" width="70%" append-to-body>
|
||||
<outer-log v-if="outerLogVisible" :product-code="currentLogProductCode" :warehouse-id="currentLogWarehouseId" />
|
||||
</el-dialog>
|
||||
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@
|
|||
<order-select-dialog :visible.sync="orderSelectVisible" @select="handleOrderSelect"/>
|
||||
|
||||
<!-- 新增/修改 Dialog -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body :close-on-click-modal="false">
|
||||
<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="80%" append-to-body >
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px" style="max-height: 70vh;overflow-y: auto">
|
||||
<el-row>
|
||||
<el-col :span="24"><h3>入库信息</h3></el-col>
|
||||
|
|
@ -224,7 +224,7 @@
|
|||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :title="snTitle" :visible.sync="snOpen">
|
||||
<el-dialog :close-on-click-modal="false" :title="snTitle" :visible.sync="snOpen">
|
||||
<el-row>
|
||||
<el-col :span="8"><span>{{ snLabel }}</span><span style="color: red">*</span></el-col>
|
||||
<el-col :span="16">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog title="生成发货单" :visible.sync="visible" width="85%" top="5vh" append-to-body @close="handleCancel">
|
||||
<el-dialog title="生成发货单" :close-on-click-modal="false" :visible.sync="visible" width="85%" top="5vh" append-to-body @close="handleCancel">
|
||||
<div class="required-delivery-time">
|
||||
要求发货时间: {{ requiredDeliveryTime }}
|
||||
</div>
|
||||
|
|
@ -59,8 +59,8 @@
|
|||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-table ref="snTable" :data="snList" @selection-change="handleSelectionChange" height="400px">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table ref="snTable" :data="snList" @selection-change="handleSelectionChange" height="400px" row-key="productSn">
|
||||
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"/>
|
||||
<el-table-column label="SN码" prop="productSn" />
|
||||
<el-table-column label="产品编码" prop="productCode" />
|
||||
<el-table-column label="产品型号" prop="model" />
|
||||
|
|
@ -121,6 +121,7 @@ export default {
|
|||
warehouseId: undefined,
|
||||
},
|
||||
isImported: false, // Flag to track if data is from import
|
||||
isInitialLoad: false,
|
||||
purchaseOrderSelectVisible: false,
|
||||
queryProductType: ['1', '2', '99'],
|
||||
price: null,
|
||||
|
|
@ -147,6 +148,7 @@ export default {
|
|||
this.queryParams.warehouseId = productRow.warehouseId;
|
||||
this.queryParams.pageSize = productRow.quantity - productRow.deliveryGenerateQuantity - productRow.deliveryConfirmQuantity;
|
||||
|
||||
this.isInitialLoad = true;
|
||||
this.getSnList();
|
||||
this.visible = true;
|
||||
},
|
||||
|
|
@ -154,11 +156,14 @@ export default {
|
|||
listProductSn(this.queryParams).then(response => {
|
||||
this.snList = response.rows;
|
||||
this.total = response.total;
|
||||
this.$nextTick(() => {
|
||||
if (this.isInitialLoad) {
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.snTable) {
|
||||
this.$refs.snTable.toggleAllSelection();
|
||||
this.$refs.snTable.toggleAllSelection();
|
||||
}
|
||||
});
|
||||
});
|
||||
this.isInitialLoad = false;
|
||||
}
|
||||
});
|
||||
},
|
||||
handleSelectionChange(selection) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-drawer :visible.sync="drawerVisible" title="出库单详情" direction="rtl" size="70%">
|
||||
<el-drawer :visible.sync="drawerVisible" :wrapper-closable="false" title="出库单详情" direction="rtl" size="70%">
|
||||
<div style="padding: 20px;">
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="出库单号">{{ details.outerCode }}</el-descriptions-item>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog :title="title" :visible.sync="visible" width="80%" append-to-body @close="handleCancel">
|
||||
<el-dialog :title="title" :visible.sync="visible" :close-on-click-modal="false" width="80%" append-to-body @close="handleCancel">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<!-- 基础信息 -->
|
||||
<div class="section-title" style="justify-content: center">基础信息</div>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
direction="rtl"
|
||||
size="70%"
|
||||
@close="handleClose"
|
||||
:wrapper-closable="false"
|
||||
:with-header="true"
|
||||
>
|
||||
<div class="drawer-container">
|
||||
|
|
@ -467,4 +468,4 @@ export default {
|
|||
.el-drawer__header {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -371,6 +371,7 @@ import SelectCustomer from "../../system/customer/selectCustomer.vue";
|
|||
import SelectPartner from "../../system/partner/selectPartner.vue";
|
||||
import SelectUser from "@/views/system/user/selectUser";
|
||||
import ProductConfig from "./ProductConfig.vue";
|
||||
import {isNaN} from "@riophae/vue-treeselect/src/utils";
|
||||
|
||||
export default {
|
||||
name: "ProjectForm",
|
||||
|
|
@ -648,8 +649,26 @@ export default {
|
|||
|
||||
if (this.form.productConfig) {
|
||||
this.form.softwareProjectProductInfoList = this.form.productConfig.softwareProjectProductInfoList || [];
|
||||
let ts = this.form.softwareProjectProductInfoList.filter(item=> item.productBomCode=='');
|
||||
if (ts.length>0){
|
||||
this.$modal.msgWarning("请完善产品配置信息");
|
||||
return
|
||||
|
||||
}
|
||||
this.form.hardwareProjectProductInfoList = this.form.productConfig.hardwareProjectProductInfoList || [];
|
||||
let hp = this.form.hardwareProjectProductInfoList.filter(item=> item.productBomCode=='');
|
||||
if (hp.length>0){
|
||||
this.$modal.msgWarning("请完善产品配置信息");
|
||||
return
|
||||
|
||||
}
|
||||
this.form.maintenanceProjectProductInfoList = this.form.productConfig.maintenanceProjectProductInfoList || [];
|
||||
let mp = this.form.maintenanceProjectProductInfoList.filter(item=> item.productBomCode=='');
|
||||
if (mp.length>0){
|
||||
this.$modal.msgWarning("请完善产品配置信息");
|
||||
return
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (this.form.id != null) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div>
|
||||
<!-- 添加或修改订单管理对话框 -->
|
||||
<el-dialog :title="dialogTitle" :visible.sync="internalVisible" width="1400px" append-to-body @close="handleClose">
|
||||
<el-dialog :close-on-click-modal="false" :title="dialogTitle" :visible.sync="internalVisible" width="1400px" append-to-body @close="handleClose">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px" :disabled="isOrderApprovedOrInReview">
|
||||
<el-tabs v-model="activeTab">
|
||||
<el-tab-pane label="基础信息" name="basic">
|
||||
|
|
@ -465,6 +465,11 @@ export default {
|
|||
this.$modal.msgError("折扣不能大于100%");
|
||||
return;
|
||||
}
|
||||
const checkProduct=(list)=>list.every(item => item.productBomCode!=='')
|
||||
if (!checkProduct(this.form.softwareProjectProductInfoList) || !checkProduct(this.form.hardwareProjectProductInfoList) || !checkProduct(this.form.maintenanceProjectProductInfoList)) {
|
||||
this.$modal.msgError("请完善产品信息");
|
||||
return;
|
||||
}
|
||||
this.form.orderStatus = '0';
|
||||
this._performSubmit();
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div>
|
||||
<!-- 订单详情抽屉 -->
|
||||
<el-drawer :title="title" :visible.sync="internalVisible" direction="rtl" size="70%" @close="handleClose">
|
||||
<el-drawer :title="title" :wrapper-closable="false" :visible.sync="internalVisible" direction="rtl" size="70%" @close="handleClose">
|
||||
<div style="padding: 20px;">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px" :disabled="true">
|
||||
<el-tabs v-model="activeTab">
|
||||
|
|
|
|||
|
|
@ -329,7 +329,7 @@ export default {
|
|||
/** 查看审批历史 */
|
||||
viewApproveLog(row) {
|
||||
// this.$router.push({ path: '/project/order/approveLog/' + row.id });
|
||||
this.msgWarning("查看审批历史功能待实现");
|
||||
this.$modal.msgWarning("查看审批历史功能待实现");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog :title="title" :visible.sync="visible" width="80%" append-to-body @close="handleClose">
|
||||
<el-dialog :title="title" :close-on-click-modal="false" :visible.sync="visible" width="80%" append-to-body @close="handleClose">
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px">
|
||||
<el-form-item label="采购单号" prop="purchaseNo">
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改采购单主表对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="80vw" append-to-body >
|
||||
<el-dialog :title="title" :close-on-click-modal="false" :visible.sync="open" width="80vw" append-to-body >
|
||||
<purchase-order-detail ref="purchaseOrderDetail" :order-data="currentOrderData"
|
||||
@close="open = false"
|
||||
@success="getList">
|
||||
|
|
@ -204,6 +204,7 @@
|
|||
<!-- 流程类型选择对话框 -->
|
||||
<el-dialog
|
||||
title="选择流程类型"
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="openFlowTypeDialog"
|
||||
width="30%"
|
||||
append-to-body
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改办事处信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
|
||||
<el-dialog :title="title" :close-on-click-modal="false" :visible.sync="open" width="800px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog title="选择代表处" :visible.sync="visible" width="800px" append-to-body @close="handleClose">
|
||||
<el-dialog title="选择代表处" :visible.sync="visible" :close-on-click-modal="false" width="800px" append-to-body @close="handleClose">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
|
||||
<el-form-item label="代表处名称" prop="agentName">
|
||||
<el-input
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改客户信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
|
||||
<el-dialog :title="title" :visible.sync="open" width="800px" :close-on-click-modal="false" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog title="选择客户" :visible.sync="visible" width="800px" append-to-body @close="handleClose">
|
||||
<el-dialog title="选择客户" :close-on-click-modal="false" :visible.sync="visible" width="800px" append-to-body @close="handleClose">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
|
||||
<el-form-item label="客户名称" prop="customerName">
|
||||
<el-input
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改代理商管理对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
|
||||
<el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="800px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog title="选择进货商" :visible.sync="visible" width="800px" append-to-body @close="handleClose">
|
||||
<el-dialog title="选择进货商" :close-on-click-modal="false" :visible.sync="visible" width="800px" append-to-body @close="handleClose">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
|
||||
<el-form-item label="进货商名称" prop="partnerName">
|
||||
<el-input
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改产品管理对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-dialog :title="title" :close-on-click-modal="false" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog title="选择产品" :visible.sync="visible" width="60%" append-to-body @close="handleClose">
|
||||
<el-dialog title="选择产品" :close-on-click-modal="false" :visible.sync="visible" width="60%" append-to-body @close="handleClose">
|
||||
<div style="max-height: 60vh; overflow-y: auto;">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
|
||||
<el-form-item label="产品编码" prop="productCode">
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
|
|
@ -152,7 +152,7 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改仓库基础信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-dialog :title="title" :close-on-click-modal="false" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
|
||||
<el-form-item label="仓库名称" prop="warehouseName">
|
||||
<el-input v-model="form.warehouseName" placeholder="请输入仓库名称" />
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ public class VueInventoryInfoController extends BaseController {
|
|||
}
|
||||
@PostMapping("/list")
|
||||
@ResponseBody
|
||||
public TableDataInfo list(@RequestBody InventoryInfo inventoryInfo)
|
||||
public TableDataInfo list( InventoryInfo inventoryInfo)
|
||||
{
|
||||
|
||||
if (!inventoryAuthService.authAll()) {
|
||||
|
|
|
|||
|
|
@ -136,6 +136,8 @@ public class InventoryDeliveryServiceImpl implements IInventoryDeliveryService {
|
|||
inventoryOuterDetail.setId(inventoryDelivery.getDetailId());
|
||||
inventoryOuterDetail.setWarehouseId(inventoryDelivery.getWarehouseId());
|
||||
inventoryOuterDetailMapper.updateInventoryOuterDetail(inventoryOuterDetail);
|
||||
|
||||
//todo 限制只能发一次货 防止重复发货
|
||||
int i = inventoryDeliveryMapper.insertInventoryDelivery(inventoryDelivery);
|
||||
if (CollUtil.isNotEmpty(detailList)){
|
||||
for (OmsInventoryDeliveryDetail detail : detailList) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue