Merge branch 'refs/heads/master' into dev_1.0.0

dev_1.0.1
chenhao 2025-12-22 14:39:26 +08:00
commit 6ec773ce3d
35 changed files with 126 additions and 51 deletions

View File

@ -74,8 +74,9 @@ export function exportDeliveryDetail(id) {
export function listProductSn(query) { export function listProductSn(query) {
return request({ return request({
url: '/inventory/info/vue/list', url: '/inventory/info/vue/list',
method: 'get', method: 'post',
params: query headers: { 'Content-Type': 'multipart/form-data' },
data: query
}) })
} }

View File

@ -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-form ref="form" :model="form" :rules="rules" label-width="200px" style="max-height: 70vh;overflow-y: auto;padding: 10px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">

View File

@ -1,5 +1,5 @@
<template> <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"> <div class="app-container">
<el-form :model="detail" label-width="100px" disabled> <el-form :model="detail" label-width="100px" disabled>
<div <div

View File

@ -81,7 +81,7 @@
@pagination="getList"/> @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-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">

View File

@ -1,5 +1,5 @@
<template> <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-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-card class="box-card"> <el-card class="box-card">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">

View File

@ -1,5 +1,5 @@
<template> <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-form ref="form" :model="form" label-width="140px">
<el-card class="box-card"> <el-card class="box-card">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">

View File

@ -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 <edit
v-if="editDialogVisible" v-if="editDialogVisible"
:order-id="currentEditOrderId" :order-id="currentEditOrderId"
@ -173,7 +173,7 @@
</el-dialog> </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 <el-upload
ref="upload" ref="upload"
:limit="1" :limit="1"

View File

@ -74,7 +74,7 @@
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> <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-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@ -196,12 +196,12 @@
</el-drawer> </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" /> <inner-log v-if="innerLogVisible" :product-code="currentLogProductCode" :warehouse-id="currentLogWarehouseId" />
</el-dialog> </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" /> <outer-log v-if="outerLogVisible" :product-code="currentLogProductCode" :warehouse-id="currentLogWarehouseId" />
</el-dialog> </el-dialog>

View File

@ -127,7 +127,7 @@
<order-select-dialog :visible.sync="orderSelectVisible" @select="handleOrderSelect"/> <order-select-dialog :visible.sync="orderSelectVisible" @select="handleOrderSelect"/>
<!-- 新增/修改 Dialog --> <!-- 新增/修改 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-form ref="form" :model="form" :rules="rules" label-width="100px" style="max-height: 70vh;overflow-y: auto">
<el-row> <el-row>
<el-col :span="24"><h3>入库信息</h3></el-col> <el-col :span="24"><h3>入库信息</h3></el-col>
@ -224,7 +224,7 @@
</div> </div>
</el-dialog> </el-dialog>
<el-dialog :title="snTitle" :visible.sync="snOpen"> <el-dialog :close-on-click-modal="false" :title="snTitle" :visible.sync="snOpen">
<el-row> <el-row>
<el-col :span="8"><span>{{ snLabel }}</span><span style="color: red">*</span></el-col> <el-col :span="8"><span>{{ snLabel }}</span><span style="color: red">*</span></el-col>
<el-col :span="16"> <el-col :span="16">

View File

@ -1,5 +1,5 @@
<template> <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"> <div class="required-delivery-time">
要求发货时间: {{ requiredDeliveryTime }} 要求发货时间: {{ requiredDeliveryTime }}
</div> </div>
@ -66,8 +66,8 @@
</el-col> </el-col>
</el-row> </el-row>
<el-table ref="snTable" :data="snList" @selection-change="handleSelectionChange" height="400px"> <el-table ref="snTable" :data="snList" @selection-change="handleSelectionChange" height="400px" row-key="productSn">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" :reserve-selection="true"/>
<el-table-column label="SN码" prop="productSn" /> <el-table-column label="SN码" prop="productSn" />
<el-table-column label="产品编码" prop="productCode" /> <el-table-column label="产品编码" prop="productCode" />
<el-table-column label="产品型号" prop="model" /> <el-table-column label="产品型号" prop="model" />
@ -128,6 +128,7 @@ export default {
warehouseId: undefined, warehouseId: undefined,
}, },
isImported: false, // Flag to track if data is from import isImported: false, // Flag to track if data is from import
isInitialLoad: false,
purchaseOrderSelectVisible: false, purchaseOrderSelectVisible: false,
queryProductType: ['1', '2', '99'], queryProductType: ['1', '2', '99'],
price: null, price: null,
@ -154,6 +155,7 @@ export default {
this.queryParams.warehouseId = productRow.warehouseId; this.queryParams.warehouseId = productRow.warehouseId;
this.queryParams.pageSize = productRow.quantity - productRow.deliveryGenerateQuantity - productRow.deliveryConfirmQuantity; this.queryParams.pageSize = productRow.quantity - productRow.deliveryGenerateQuantity - productRow.deliveryConfirmQuantity;
this.isInitialLoad = true;
this.getSnList(); this.getSnList();
this.visible = true; this.visible = true;
}, },
@ -161,11 +163,14 @@ export default {
listProductSn(this.queryParams).then(response => { listProductSn(this.queryParams).then(response => {
this.snList = response.rows; this.snList = response.rows;
this.total = response.total; this.total = response.total;
if (this.isInitialLoad) {
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs.snTable) { if (this.$refs.snTable) {
this.$refs.snTable.toggleAllSelection(); this.$refs.snTable.toggleAllSelection();
} }
}); });
this.isInitialLoad = false;
}
}); });
}, },
handleSelectionChange(selection) { handleSelectionChange(selection) {
@ -184,7 +189,7 @@ export default {
}); });
}, },
handleSelectPurchaseBeforeImport() { handleSelectPurchaseBeforeImport() {
if (((this.productData.orderType || '1') === '1' ) && !(this.outerData.vendorName.startsWith('新华三') && this.productData.productType==='2')) { if (((this.productData.orderType || '1') === '1' ) && !this.outerData.vendorName.startsWith('新华三') ) {
this.purchaseOrderSelectVisible = true; this.purchaseOrderSelectVisible = true;
}else{ }else{
this.handleImport() this.handleImport()
@ -229,6 +234,7 @@ export default {
this.isImported = true; this.isImported = true;
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs.snTable) { if (this.$refs.snTable) {
this.$refs.snTable.clearSelection();
this.$refs.snTable.toggleAllSelection(); this.$refs.snTable.toggleAllSelection();
this.selectedSnList = this.snList; this.selectedSnList = this.snList;
} }

View File

@ -1,5 +1,5 @@
<template> <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;"> <div style="padding: 20px;">
<el-descriptions :column="2" border> <el-descriptions :column="2" border>
<el-descriptions-item label="出库单号">{{ details.outerCode }}</el-descriptions-item> <el-descriptions-item label="出库单号">{{ details.outerCode }}</el-descriptions-item>

View File

@ -1,5 +1,5 @@
<template> <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="wrapper wrapper-content animated fadeInRight ibox-content">
<!-- 基础信息 --> <!-- 基础信息 -->
<div class="section-title" style="justify-content: center">基础信息</div> <div class="section-title" style="justify-content: center">基础信息</div>
@ -82,7 +82,7 @@
<delivery-detail :delivery-id="deliveryId" :visible.sync="viewOpen" /> <delivery-detail :delivery-id="deliveryId" :visible.sync="viewOpen" />
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button v-if="showReturn" type="danger" @click="handleStatusChange(this.form, '4')">退 </el-button> <el-button v-if="showReturn" type="danger" @click="handleStatusChange(form, '4')">退 </el-button>
<el-button @click="handleCancel"> </el-button> <el-button @click="handleCancel"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
@ -117,6 +117,7 @@ export default {
getOuter(id).then(response => { getOuter(id).then(response => {
this.visible = true; this.visible = true;
this.form = response.data.inventoryOuter; this.form = response.data.inventoryOuter;
console.log(this.form)
this.productList = response.data.productVoList || []; this.productList = response.data.productVoList || [];
this.deliveryList = response.data.deliveryList || []; this.deliveryList = response.data.deliveryList || [];
this.showReturn=this.deliveryList.length<=0; this.showReturn=this.deliveryList.length<=0;
@ -192,7 +193,8 @@ export default {
return changeOuterStatus(row.id, status, row.orderCode); return changeOuterStatus(row.id, status, row.orderCode);
}).then(() => { }).then(() => {
this.$message.success(`${actionText}成功`); this.$message.success(`${actionText}成功`);
this.getList(); this.visible=false;
this.$emit('returnSuccess');
}).catch(() => {}); }).catch(() => {});
} }
} }

View File

@ -72,7 +72,7 @@
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/> <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
<!-- 新增/编辑弹窗 --> <!-- 新增/编辑弹窗 -->
<outer-form ref="form" @success="getList"></outer-form> <outer-form ref="form" @returnSuccess="getList" @success="getList"></outer-form>
<!-- 详情抽屉 --> <!-- 详情抽屉 -->
<outer-details ref="details"></outer-details> <outer-details ref="details"></outer-details>

View File

@ -5,6 +5,7 @@
direction="rtl" direction="rtl"
size="70%" size="70%"
@close="handleClose" @close="handleClose"
:wrapper-closable="false"
:with-header="true" :with-header="true"
> >
<div class="drawer-container"> <div class="drawer-container">

View File

@ -371,6 +371,7 @@ import SelectCustomer from "../../system/customer/selectCustomer.vue";
import SelectPartner from "../../system/partner/selectPartner.vue"; import SelectPartner from "../../system/partner/selectPartner.vue";
import SelectUser from "@/views/system/user/selectUser"; import SelectUser from "@/views/system/user/selectUser";
import ProductConfig from "./ProductConfig.vue"; import ProductConfig from "./ProductConfig.vue";
import {isNaN} from "@riophae/vue-treeselect/src/utils";
export default { export default {
name: "ProjectForm", name: "ProjectForm",
@ -648,8 +649,26 @@ export default {
if (this.form.productConfig) { if (this.form.productConfig) {
this.form.softwareProjectProductInfoList = this.form.productConfig.softwareProjectProductInfoList || []; 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 || []; 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 || []; 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) { if (this.form.id != null) {

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <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-form ref="form" :model="form" :rules="rules" label-width="120px" :disabled="isOrderApprovedOrInReview">
<el-tabs v-model="activeTab"> <el-tabs v-model="activeTab">
<el-tab-pane label="基础信息" name="basic"> <el-tab-pane label="基础信息" name="basic">
@ -465,6 +465,11 @@ export default {
this.$modal.msgError("折扣不能大于100%"); this.$modal.msgError("折扣不能大于100%");
return; 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.form.orderStatus = '0';
this._performSubmit(); this._performSubmit();
}, },

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <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;"> <div style="padding: 20px;">
<el-form ref="form" :model="form" :rules="rules" label-width="120px" :disabled="true"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" :disabled="true">
<el-tabs v-model="activeTab"> <el-tabs v-model="activeTab">

View File

@ -329,7 +329,7 @@ export default {
/** 查看审批历史 */ /** 查看审批历史 */
viewApproveLog(row) { viewApproveLog(row) {
// this.$router.push({ path: '/project/order/approveLog/' + row.id }); // this.$router.push({ path: '/project/order/approveLog/' + row.id });
this.msgWarning("查看审批历史功能待实现"); this.$modal.msgWarning("查看审批历史功能待实现");
} }
} }
}; };

View File

@ -1,5 +1,5 @@
<template> <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"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px">
<el-form-item label="采购单号" prop="purchaseNo"> <el-form-item label="采购单号" prop="purchaseNo">

View File

@ -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" <purchase-order-detail ref="purchaseOrderDetail" :order-data="currentOrderData"
@close="open = false" @close="open = false"
@success="getList"> @success="getList">
@ -204,6 +204,7 @@
<!-- 流程类型选择对话框 --> <!-- 流程类型选择对话框 -->
<el-dialog <el-dialog
title="选择流程类型" title="选择流程类型"
:close-on-click-modal="false"
:visible.sync="openFlowTypeDialog" :visible.sync="openFlowTypeDialog"
width="30%" width="30%"
append-to-body append-to-body

View File

@ -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-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">

View File

@ -1,5 +1,5 @@
<template> <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 :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="代表处名称" prop="agentName"> <el-form-item label="代表处名称" prop="agentName">
<el-input <el-input

View File

@ -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-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">

View File

@ -1,5 +1,5 @@
<template> <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 :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="客户名称" prop="customerName"> <el-form-item label="客户名称" prop="customerName">
<el-input <el-input

View File

@ -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-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">

View File

@ -1,5 +1,5 @@
<template> <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 :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="进货商名称" prop="partnerName"> <el-form-item label="进货商名称" prop="partnerName">
<el-input <el-input

View File

@ -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-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">

View File

@ -1,5 +1,5 @@
<template> <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;"> <div style="max-height: 60vh; overflow-y: auto;">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="产品编码" prop="productCode"> <el-form-item label="产品编码" prop="productCode">

View File

@ -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 ref="form" :model="form" :rules="rules" label-width="110px">
<el-form-item label="仓库名称" prop="warehouseName"> <el-form-item label="仓库名称" prop="warehouseName">
<el-input v-model="form.warehouseName" placeholder="请输入仓库名称" /> <el-input v-model="form.warehouseName" placeholder="请输入仓库名称" />

View File

@ -9,7 +9,7 @@ const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || 'UNISSENSE-OMS' // 网页标题 const name = process.env.VUE_APP_TITLE || 'UNISSENSE-OMS' // 网页标题
const baseUrl = 'http://localhost:28080' // 后端接口 const baseUrl = 'http://localhost:28081' // 后端接口
const port = process.env.port || process.env.npm_config_port || 80 // 端口 const port = process.env.port || process.env.npm_config_port || 80 // 端口

View File

@ -71,9 +71,9 @@ public class VueInventoryInfoController extends BaseController {
List<ProductInfo> list = productInfoService.listInventory(info); List<ProductInfo> list = productInfoService.listInventory(info);
return getDataTable(list); return getDataTable(list);
} }
@GetMapping("/list") @PostMapping("/list")
@ResponseBody @ResponseBody
public TableDataInfo list(InventoryInfo inventoryInfo) public TableDataInfo list( InventoryInfo inventoryInfo)
{ {
if (!inventoryAuthService.authAll()) { if (!inventoryAuthService.authAll()) {

View File

@ -147,6 +147,8 @@ public class InventoryDeliveryServiceImpl implements IInventoryDeliveryService {
inventoryOuterDetail.setId(inventoryDelivery.getDetailId()); inventoryOuterDetail.setId(inventoryDelivery.getDetailId());
inventoryOuterDetail.setWarehouseId(inventoryDelivery.getWarehouseId()); inventoryOuterDetail.setWarehouseId(inventoryDelivery.getWarehouseId());
inventoryOuterDetailMapper.updateInventoryOuterDetail(inventoryOuterDetail); inventoryOuterDetailMapper.updateInventoryOuterDetail(inventoryOuterDetail);
//todo 限制只能发一次货 防止重复发货
int i = inventoryDeliveryMapper.insertInventoryDelivery(inventoryDelivery); int i = inventoryDeliveryMapper.insertInventoryDelivery(inventoryDelivery);
if (CollUtil.isNotEmpty(detailList)){ if (CollUtil.isNotEmpty(detailList)){
for (OmsInventoryDeliveryDetail detail : detailList) { for (OmsInventoryDeliveryDetail detail : detailList) {
@ -318,6 +320,9 @@ public class InventoryDeliveryServiceImpl implements IInventoryDeliveryService {
public List<DeliveryInfoVo> getNumberInfo(ApiDataQueryDto dto) { public List<DeliveryInfoVo> getNumberInfo(ApiDataQueryDto dto) {
List<DeliveryInfoVo> resultList = inventoryDeliveryMapper.listSn(dto); List<DeliveryInfoVo> resultList = inventoryDeliveryMapper.listSn(dto);
List<String> orderCodeList = resultList.stream().map(DeliveryInfoVo::getOrderCode).collect(Collectors.toList()); List<String> orderCodeList = resultList.stream().map(DeliveryInfoVo::getOrderCode).collect(Collectors.toList());
if (CollUtil.isEmpty(orderCodeList)){
return Collections.emptyList();
}
// 根据订单ID查询合同信息 // 根据订单ID查询合同信息
List<ProjectProductInfo> projectProductInfos = projectProductInfoService.selectProjectProductInfoListByOrderCode(orderCodeList); List<ProjectProductInfo> projectProductInfos = projectProductInfoService.selectProjectProductInfoListByOrderCode(orderCodeList);

View File

@ -291,7 +291,7 @@ public class OmsInventoryInnerServiceImpl implements IOmsInventoryInnerService {
throw new ServiceException("产品编码对应产品未找到"); throw new ServiceException("产品编码对应产品未找到");
} }
Map<String, OmsWarehouseInfo> warehouseInfoMap=Collections.emptyMap(); Map<String, OmsWarehouseInfo> warehouseInfoMap=Collections.emptyMap();
if ("2".equalsIgnoreCase(orderType) || (("2".equalsIgnoreCase(productInfos.get(0).getType()) && productInfos.get(0).getVendorName().startsWith("新华三"))) ){ if ("2".equalsIgnoreCase(orderType) || (productInfos.get(0).getVendorName().startsWith("新华三")) ){
List<String> warehouseNameList = inventoryInfoExcelDtoList.stream().map(InventoryInfoExcelDto::getWarehouseName).distinct().collect(Collectors.toList()); List<String> warehouseNameList = inventoryInfoExcelDtoList.stream().map(InventoryInfoExcelDto::getWarehouseName).distinct().collect(Collectors.toList());
if (warehouseNameList.size() > 1){ if (warehouseNameList.size() > 1){
throw new ServiceException("导入清单只能有一个仓库"); throw new ServiceException("导入清单只能有一个仓库");
@ -312,7 +312,7 @@ public class OmsInventoryInnerServiceImpl implements IOmsInventoryInnerService {
info.setModel(productInfos.get(0).getModel()); info.setModel(productInfos.get(0).getModel());
info.setProductDesc(productInfos.get(0).getDescription()); info.setProductDesc(productInfos.get(0).getDescription());
info.setInnerPrice(item.getInnerPrice()); info.setInnerPrice(item.getInnerPrice());
if ("2".equalsIgnoreCase(orderType)|| (("2".equalsIgnoreCase(productInfos.get(0).getType()) && productInfos.get(0).getVendorName().startsWith("新华三"))) ){ if ("2".equalsIgnoreCase(orderType)|| ((productInfos.get(0).getVendorName().startsWith("新华三"))) ){
OmsWarehouseInfo omsWarehouseInfo = finalWarehouseInfoMap.get(item.getWarehouseName()); OmsWarehouseInfo omsWarehouseInfo = finalWarehouseInfoMap.get(item.getWarehouseName());
info.setWarehouseId(omsWarehouseInfo.getId()); info.setWarehouseId(omsWarehouseInfo.getId());
info.setWarehouseName(omsWarehouseInfo.getWarehouseName()); info.setWarehouseName(omsWarehouseInfo.getWarehouseName());

View File

@ -42,6 +42,7 @@ import com.ruoyi.sip.flowable.domain.Todo;
import com.ruoyi.sip.dto.HomepageQueryDto; import com.ruoyi.sip.dto.HomepageQueryDto;
import com.ruoyi.sip.dto.OrderExcelNumStaticsDto; import com.ruoyi.sip.dto.OrderExcelNumStaticsDto;
import com.ruoyi.sip.dto.StatisticsDetailDto; import com.ruoyi.sip.dto.StatisticsDetailDto;
import com.ruoyi.sip.flowable.service.IBuApproveConfigService;
import com.ruoyi.sip.mapper.OmsStockInfoMapper; import com.ruoyi.sip.mapper.OmsStockInfoMapper;
import com.ruoyi.sip.mapper.ProjectInfoMapper; import com.ruoyi.sip.mapper.ProjectInfoMapper;
import com.ruoyi.sip.service.*; import com.ruoyi.sip.service.*;
@ -50,6 +51,7 @@ import com.ruoyi.sip.flowable.service.TodoCommonTemplate;
import com.ruoyi.sip.flowable.service.TodoService; import com.ruoyi.sip.flowable.service.TodoService;
import com.ruoyi.common.utils.mail.TemplateMailUtil; import com.ruoyi.common.utils.mail.TemplateMailUtil;
import com.ruoyi.sip.vo.OrderInfoVo; import com.ruoyi.sip.vo.OrderInfoVo;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
@ -61,6 +63,7 @@ import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.sip.mapper.ProjectOrderInfoMapper; import com.ruoyi.sip.mapper.ProjectOrderInfoMapper;
import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.core.text.Convert;
@ -131,6 +134,13 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To
private Integer endHour; private Integer endHour;
@Value("${unis.mail.businessRoleId:103}") @Value("${unis.mail.businessRoleId:103}")
private String businessRoleId; private String businessRoleId;
@Autowired
private ISysConfigService configService;
@Autowired
@Lazy
private IBuApproveConfigService approveConfigService;
/** /**
* *
* *
@ -430,12 +440,15 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To
String orderFlowKey = ProjectOrderInfo.ProcessTypeEnum.ONLINE.getCode().equals(projectOrderInfo.getProcessType()) ? String orderFlowKey = ProjectOrderInfo.ProcessTypeEnum.ONLINE.getCode().equals(projectOrderInfo.getProcessType()) ?
orderOnlineFlowKey : orderOfflineFlowKey; orderOnlineFlowKey : orderOfflineFlowKey;
String amountConfig = configService.selectConfigByKey("order.approve.amount.config");
BigDecimal amountConfigNumber = new BigDecimal(amountConfig);
//启动流程 //启动流程
todoService.startProcess(getFlowBusinessKey(existProjectOrderInfo.getOrderCode(), projectOrderInfo.getProcessType()), new HashMap<String, Object>() {{ todoService.startProcess(getFlowBusinessKey(existProjectOrderInfo.getOrderCode(), projectOrderInfo.getProcessType()), new HashMap<String, Object>() {{
put("processTemplate", projectOrderInfo.getProcessTemplate()); put("processTemplate", projectOrderInfo.getProcessTemplate());
put("processType", projectOrderInfo.getProcessType()); put("processType", projectOrderInfo.getProcessType());
put("applyUserName", ShiroUtils.getSysUser().getUserName()); put("applyUserName", ShiroUtils.getSysUser().getUserName());
put("applyUser", ShiroUtils.getUserId()); put("applyUser", ShiroUtils.getUserId());
put("skipLeader",projectOrderInfo.getShipmentAmount().compareTo(amountConfigNumber)<0);
put("partnerUser",partnerInfos.get(0).getSystemUserId()); put("partnerUser",partnerInfos.get(0).getSystemUserId());
put("extendField1", projectOrderInfo.getVersionCode()); put("extendField1", projectOrderInfo.getVersionCode());
}}, orderFlowKey); }}, orderFlowKey);
@ -1174,7 +1187,26 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To
handleBusinessApproval(businessKey); handleBusinessApproval(businessKey);
} else if ("省代".equals(taskName)) { } else if ("省代".equals(taskName)) {
handlePartnerApproval(businessKey); handlePartnerApproval(businessKey);
} else if ("公司领导".equals(taskName)) { } else if ("领导1".equals(taskName) && todo.getApplyTime().compareTo(DateUtils.parseDate("2025-12-19"))>0){
ProjectOrderInfo orderInfo = selectProjectOrderInfoByOrderCode(businessKey);
String amountConfig = configService.selectConfigByKey("order.approve.amount.config");
BigDecimal amountConfigNumber = new BigDecimal(amountConfig);
if (orderInfo.getShipmentAmount().compareTo(amountConfigNumber)<0){
handleCompanyLeaderApproval(businessKey);
//查询对应的数据 插入已办数据
List<Long> approveUserList = approveConfigService.listByProcessKeyAndTaskName(todo.getProcessKey(), "公司领导");
for (Long l : approveUserList) {
todoService.completed(new HashMap<>(), todo.getTaskId(), businessKey);
todo.setApproveUser(l.toString());
todo.setTaskName("公司领导");
todo.setApproveUserName(userService.selectUserById(l).getUserName());
todo.setApproveOpinion("默认审批");
todo.setNextAllApproveUserName(null);
todo.setAllApproveUserName(null);
todoService.insertTodoCompleted(Arrays.asList(todo));
}
}
}else if ("公司领导".equals(taskName)) {
//黄雪秋处理 流程状态更改 //黄雪秋处理 流程状态更改
if (ShiroUtils.getUserId().equals(118L)) { if (ShiroUtils.getUserId().equals(118L)) {
@ -1559,8 +1591,11 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To
query.setProcessKeyList(Arrays.asList(orderOnlineFlowKey,orderOfflineFlowKey)); query.setProcessKeyList(Arrays.asList(orderOnlineFlowKey,orderOfflineFlowKey));
List<Todo> list = todoService.selectTodoList(query); List<Todo> list = todoService.selectTodoList(query);
for (Todo todo1 : list) { for (Todo todo1 : list) {
Map<String, Object> temp = new HashMap<>();
todo1.setVariables(new HashMap<>(todo.getVariables())); for (Map.Entry<String, Object> entry : todo.getVariables().entrySet()) {
temp.put(entry.getKey(), new String(entry.getValue().toString()));
}
todo1.setVariables(temp);
approveOrder(todo1); approveOrder(todo1);
} }
} }

View File

@ -39,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach> </foreach>
</if> </if>
<if test="productSn != null and productSn != ''">and t1.product_sn = #{productSn}</if> <if test="productSn != null and productSn != ''">and t1.product_sn = #{productSn}</if>
<if test="productSnList != null and productSnList != ''">and t1.product_sn in <if test="productSnList != null and productSnList.size>0">and t1.product_sn in
<foreach item="item" index="index" collection="productSnList" separator="," open="(" close=")"> <foreach item="item" index="index" collection="productSnList" separator="," open="(" close=")">
#{item} #{item}
</foreach> </foreach>