From ad650b9a5787243a2faea923ae0c2d1ca476fb6f Mon Sep 17 00:00:00 2001 From: jhd <1684074631@qq.com> Date: Wed, 1 Jul 2026 09:11:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E5=AD=90=E8=AF=B7=E8=B4=AD=E5=8D=95?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20=20=20=20=E5=BA=93=E5=AD=98=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ErpPurchaseRequisitionController.java | 25 ++ .../IErpPurchaseRequisitionService.java | 9 + .../ErpPurchaseRequisitionServiceImpl.java | 75 ++++-- klp-ui/src/api/erp/purchaseRequisition.js | 24 ++ .../views/erp/purchaseRequisition/index.vue | 87 ++++++- klp-ui/src/views/wms/stock/detail.vue | 235 ++++++++++++++++++ 6 files changed, 434 insertions(+), 21 deletions(-) create mode 100644 klp-ui/src/views/wms/stock/detail.vue diff --git a/klp-erp/src/main/java/com/klp/erp/controller/ErpPurchaseRequisitionController.java b/klp-erp/src/main/java/com/klp/erp/controller/ErpPurchaseRequisitionController.java index 9b3d0f05a..ce26fa03a 100644 --- a/klp-erp/src/main/java/com/klp/erp/controller/ErpPurchaseRequisitionController.java +++ b/klp-erp/src/main/java/com/klp/erp/controller/ErpPurchaseRequisitionController.java @@ -10,6 +10,7 @@ import com.klp.common.core.validate.AddGroup; import com.klp.common.core.validate.EditGroup; import com.klp.common.enums.BusinessType; import com.klp.common.utils.poi.ExcelUtil; +import cn.dev33.satoken.annotation.SaCheckPermission; import com.klp.erp.domain.bo.ErpPurchaseRequisitionBo; import com.klp.erp.domain.vo.ErpPurchaseRequisitionVo; import com.klp.erp.service.IErpPurchaseRequisitionService; @@ -79,4 +80,28 @@ public class ErpPurchaseRequisitionController extends BaseController { public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] reqIds) { return toAjax(iErpPurchaseRequisitionService.deleteWithValidByIds(Arrays.asList(reqIds), true)); } + + /** 提交审批(草稿 → 审批中) */ + @Log(title = "请购及采购单", businessType = BusinessType.UPDATE) + @SaCheckPermission("erp:purchaseRequisition:approve") + @PutMapping("/{reqId}/submit") + public R submitApproval(@NotNull(message = "主键不能为空") @PathVariable Long reqId) { + return toAjax(iErpPurchaseRequisitionService.submitApproval(reqId)); + } + + /** 审批通过(审批中 → 已通过) */ + @Log(title = "请购及采购单", businessType = BusinessType.UPDATE) + @SaCheckPermission("erp:purchaseRequisition:approve") + @PutMapping("/{reqId}/approve") + public R approve(@NotNull(message = "主键不能为空") @PathVariable Long reqId) { + return toAjax(iErpPurchaseRequisitionService.approve(reqId)); + } + + /** 驳回(审批中 → 已驳回) */ + @Log(title = "请购及采购单", businessType = BusinessType.UPDATE) + @SaCheckPermission("erp:purchaseRequisition:approve") + @PutMapping("/{reqId}/reject") + public R reject(@NotNull(message = "主键不能为空") @PathVariable Long reqId) { + return toAjax(iErpPurchaseRequisitionService.reject(reqId)); + } } diff --git a/klp-erp/src/main/java/com/klp/erp/service/IErpPurchaseRequisitionService.java b/klp-erp/src/main/java/com/klp/erp/service/IErpPurchaseRequisitionService.java index 131ccc649..1049f5f0c 100644 --- a/klp-erp/src/main/java/com/klp/erp/service/IErpPurchaseRequisitionService.java +++ b/klp-erp/src/main/java/com/klp/erp/service/IErpPurchaseRequisitionService.java @@ -33,4 +33,13 @@ public interface IErpPurchaseRequisitionService { /** 校验并批量删除请购单 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** 提交审批(草稿 → 审批中) */ + Boolean submitApproval(Long reqId); + + /** 审批通过(审批中 → 已通过) */ + Boolean approve(Long reqId); + + /** 驳回(审批中 → 已驳回) */ + Boolean reject(Long reqId); } diff --git a/klp-erp/src/main/java/com/klp/erp/service/impl/ErpPurchaseRequisitionServiceImpl.java b/klp-erp/src/main/java/com/klp/erp/service/impl/ErpPurchaseRequisitionServiceImpl.java index c6a0ee473..ccf88c09b 100644 --- a/klp-erp/src/main/java/com/klp/erp/service/impl/ErpPurchaseRequisitionServiceImpl.java +++ b/klp-erp/src/main/java/com/klp/erp/service/impl/ErpPurchaseRequisitionServiceImpl.java @@ -83,22 +83,6 @@ public class ErpPurchaseRequisitionServiceImpl implements IErpPurchaseRequisitio return true; } - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean updateByBo(ErpPurchaseRequisitionBo bo) { - ErpPurchaseRequisition update = baseMapper.selectById(bo.getReqId()); - if (update == null) { - return false; - } - BeanUtil.copyProperties(bo, update, "reqId", "createBy", "createTime"); - baseMapper.updateById(update); - // 覆盖式重写明细 - itemMapper.delete(Wrappers.lambdaQuery(ErpPurchaseRequisitionItem.class) - .eq(ErpPurchaseRequisitionItem::getReqId, bo.getReqId())); - saveItems(bo.getReqId(), bo.getItems()); - return true; - } - private void saveItems(Long reqId, List items) { if (items == null || items.isEmpty()) { return; @@ -120,10 +104,69 @@ public class ErpPurchaseRequisitionServiceImpl implements IErpPurchaseRequisitio @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { for (Long reqId : ids) { + ErpPurchaseRequisition entity = baseMapper.selectById(reqId); + if (entity != null && !"0".equals(entity.getFormStatus())) { + throw new RuntimeException("仅草稿状态的请购单可删除"); + } itemMapper.delete(Wrappers.lambdaQuery(ErpPurchaseRequisitionItem.class) .eq(ErpPurchaseRequisitionItem::getReqId, reqId)); } return baseMapper.deleteBatchIds(ids) > 0; } + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(ErpPurchaseRequisitionBo bo) { + ErpPurchaseRequisition update = baseMapper.selectById(bo.getReqId()); + if (update == null) { + return false; + } + if (!"0".equals(update.getFormStatus())) { + throw new RuntimeException("仅草稿状态的请购单可修改"); + } + BeanUtil.copyProperties(bo, update, "reqId", "createBy", "createTime"); + baseMapper.updateById(update); + // 覆盖式重写明细 + itemMapper.delete(Wrappers.lambdaQuery(ErpPurchaseRequisitionItem.class) + .eq(ErpPurchaseRequisitionItem::getReqId, bo.getReqId())); + saveItems(bo.getReqId(), bo.getItems()); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean submitApproval(Long reqId) { + ErpPurchaseRequisition entity = baseMapper.selectById(reqId); + if (entity == null) return false; + if (!"0".equals(entity.getFormStatus())) { + throw new RuntimeException("仅草稿状态的请购单可提交审批"); + } + entity.setFormStatus("1"); + return baseMapper.updateById(entity) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean approve(Long reqId) { + ErpPurchaseRequisition entity = baseMapper.selectById(reqId); + if (entity == null) return false; + if (!"1".equals(entity.getFormStatus())) { + throw new RuntimeException("仅审批中状态的请购单可通过"); + } + entity.setFormStatus("2"); + return baseMapper.updateById(entity) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean reject(Long reqId) { + ErpPurchaseRequisition entity = baseMapper.selectById(reqId); + if (entity == null) return false; + if (!"1".equals(entity.getFormStatus())) { + throw new RuntimeException("仅审批中状态的请购单可驳回"); + } + entity.setFormStatus("5"); + return baseMapper.updateById(entity) > 0; + } + } diff --git a/klp-ui/src/api/erp/purchaseRequisition.js b/klp-ui/src/api/erp/purchaseRequisition.js index 77d9fdbc6..a3e88392d 100644 --- a/klp-ui/src/api/erp/purchaseRequisition.js +++ b/klp-ui/src/api/erp/purchaseRequisition.js @@ -35,6 +35,30 @@ export function updatePurchaseRequisition(data) { }) } +// 提交审批 +export function submitApproval(reqId) { + return request({ + url: '/erp/purchaseRequisition/' + reqId + '/submit', + method: 'put' + }) +} + +// 审批通过 +export function approvePurchase(reqId) { + return request({ + url: '/erp/purchaseRequisition/' + reqId + '/approve', + method: 'put' + }) +} + +// 驳回 +export function rejectPurchase(reqId) { + return request({ + url: '/erp/purchaseRequisition/' + reqId + '/reject', + method: 'put' + }) +} + // 删除请购单 export function delPurchaseRequisition(reqIds) { return request({ diff --git a/klp-ui/src/views/erp/purchaseRequisition/index.vue b/klp-ui/src/views/erp/purchaseRequisition/index.vue index 4d94fce08..370504921 100644 --- a/klp-ui/src/views/erp/purchaseRequisition/index.vue +++ b/klp-ui/src/views/erp/purchaseRequisition/index.vue @@ -59,11 +59,15 @@ {{ parseTime(scope.row.createTime) }} - + @@ -355,10 +359,42 @@ + + +
+ + + + {{ approvalReq.reqDept || '—' }} + + + {{ approvalReq.itemName || '—' }} + + + + + {{ approvalReq.specification || '—' }} + + + {{ approvalReq.quantity || '—' }} + + + + + + +
+ +
+
@@ -515,7 +551,10 @@ import { getPurchaseRequisition, addPurchaseRequisition, updatePurchaseRequisition, - delPurchaseRequisition + delPurchaseRequisition, + submitApproval, + approvePurchase, + rejectPurchase } from '@/api/erp/purchaseRequisition' export default { @@ -545,6 +584,11 @@ export default { viewForm: {}, inspectionChecks: [], printData: {}, + // 审批 + approvalOpen: false, + approvalReq: {}, + approvalRemark: '', + approvalLoading: false, rules: {} } }, @@ -630,6 +674,39 @@ export default { this.viewForm = res.data || {} }) }, + // 提交审批(单个操作列) + handleSubmitOne(row) { + this.$modal.confirm('确认提交该请购单进行审批?').then(() => { + return submitApproval(row.reqId) + }).then(() => { + this.$modal.msgSuccess('已提交审批') + this.getList() + }).catch(() => {}) + }, + // 打开审批弹窗 + openApproval(row) { + this.approvalReq = { ...row } + this.approvalRemark = '' + this.approvalOpen = true + }, + // 审批通过 + doApprove() { + this.approvalLoading = true + approvePurchase(this.approvalReq.reqId).then(() => { + this.$modal.msgSuccess('审批通过') + this.approvalOpen = false + this.getList() + }).finally(() => { this.approvalLoading = false }) + }, + // 驳回 + doReject() { + this.approvalLoading = true + rejectPurchase(this.approvalReq.reqId).then(() => { + this.$modal.msgSuccess('已驳回') + this.approvalOpen = false + this.getList() + }).finally(() => { this.approvalLoading = false }) + }, cancel() { this.open = false }, diff --git a/klp-ui/src/views/wms/stock/detail.vue b/klp-ui/src/views/wms/stock/detail.vue new file mode 100644 index 000000000..d3fcfb6fb --- /dev/null +++ b/klp-ui/src/views/wms/stock/detail.vue @@ -0,0 +1,235 @@ + + + + +