基于Jeecgboot前后端分离的ERP系统开发系列--出库单(3)
继续对销售出库单进行完善与处理
一、列表显示状态
目前先给出库表单两种状态,未审核与审核通过状态,前端通过下面调整
{
title:'状态',
align:"center",
dataIndex: 'status',
customRender:function (text) {
if(text==1){
return "未审核";
}else if(text==2){
return "审核通过";
}else{
return text;
}
}
},
二、对按钮显示进行处理,已经审核的表单只显示详情
<span slot="action" slot-scope="text, record"><a @click="handleDetail(record)">详情</a><a-divider type="vertical" /><a v-if="record.status != 2" @click="handleEdit(record)">编辑</a><a-divider type="vertical" /><a v-if="record.status != 2" @click="handleApprove(record)">审核</a><a-divider type="vertical" /><a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"><a v-if="record.status != 2">删除</a></a-popconfirm></span>
三、对批量删除进行处理,有审核的单据不能进行删除,对NbcioListMixin里的下面函数修改如下
batchDel: function () {if(!this.url.deleteBatch){this.$message.error("请设置url.deleteBatch属性!")return}if (this.selectedRowKeys.length <= 0) {this.$message.warning('请选择一条记录!');return;} else {var ids = "";for (var a = 0; a < this.selectedRowKeys.length; a++) {ids += this.selectedRowKeys[a] + ",";if(this.selectionRows[a].hasOwnProperty('status') && this.selectionRows[a].status === 2) {this.$message.warning(`第${a+1}行单据已经审核,不能删除!`)return}}
四、因为审核单据界面与编辑单据界面使用相同的窗口,所以需要做一些逻辑处理
1、首先ErpSaleOutModal文件进行调整如下
审核与编辑分开处理,同时增加两个变量okText和approve,增加一个handleApprove函数
<template><j-modal v-if = "approve":title="title":width="1200":okText="okText":visible="visible":maskClosable="false"switchFullscreen@ok="handleApprove"@cancel="handleCancel"><erp-sale-out-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"/></j-modal><j-modal v-else:title="title":width="1200":visible="visible":maskClosable="false"switchFullscreen@ok="handleOk":okButtonProps="{ class:{'jee-hidden': disableSubmit} }"@cancel="handleCancel"><erp-sale-out-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"/></j-modal>
</template><script>import ErpSaleOutForm from './ErpSaleOutForm'export default {name: 'ErpSaleOutModal',components: {ErpSaleOutForm},data() {return {title:'',width:800,visible: false,disableSubmit: false,okText: "确定",approve: false,//审核}},methods:{add () {this.visible=truethis.$nextTick(()=>{this.$refs.realForm.add();})},edit (record) {this.visible=truethis.$nextTick(()=>{this.$refs.realForm.edit(record);})},close () {this.$emit('close');this.visible = false;},handleOk () {this.$refs.realForm.handleOk();},handleApprove () {this.$refs.realForm.handleApprove();},submitCallback(){this.$emit('ok');this.visible = false;},handleCancel () {this.close()}}}
</script><style scoped>
</style>
2、在ErpSaleOutForm增加审核的url如下:
url: {
add: "/sale/erpSaleOut/add",
edit: "/sale/erpSaleOut/edit",
approvePass:"/sale/erpSaleOut/approvePass",
3、NbcioListMixin里的handleApprove加入下面代码
handleApprove:function(record){if(record.status === 2) {this.$message.warning("单据已经审核,不能再次审核!")return}this.$refs.modalForm.approve=true;this.$refs.modalForm.edit(record);this.$refs.modalForm.title="审核详情";this.$refs.modalForm.okText="审核通过"this.$refs.modalForm.disableSubmit = true;},
同时对增加,新建处理需要设置this.$refs.modalForm.approve=false;
4、同时在NbcioTableModelMixin下面增加下面代码
/** 审核通过按钮点击事件 */handleApprove() {let url = this.url.approvePass, method = 'post'console.log("handleApprove this.model.id=",this.model.id)this.confirmLoading = truehttpAction(url, this.model.id, method).then((res) => {if (res.success) {this.$message.success(res.message)this.$emit('ok')this.close()} else {this.$message.warning(res.message)}}).finally(() => {this.confirmLoading = false})},
五、后端调用审核通过代码
/*** 审核** @param id* @return* @throws Exception */@AutoLog(value = "销售出库单-审核通过")@ApiOperation(value="销售出库单-审核通过", notes="销售出库单-审核通过")@PostMapping(value = "/approvePass")public Result<?> approvePass(@RequestBody String id) throws Exception {return erpSaleOutService.approvePass(id);}@Override@Transactional(rollbackFor = Exception.class)public Result<?> approvePass(String id) throws Exception {ErpSaleOut erpSaleOut = erpSaleOutMapper.selectById(id);if (erpSaleOut == null) {return Result.error("销售出库单不存在!");}if (erpSaleOut.getStatus() == 2 ) {return Result.error("销售出库单已审核通过,不能再次审核!");}SysUser loginUser = iErpThirdService.getLoginUser();LambdaUpdateWrapper<ErpSaleOut> updateOrderWrapper = Wrappers.lambdaUpdate(ErpSaleOut.class).set(ErpSaleOut::getApproveBy, loginUser.getUsername()).set(ErpSaleOut::getApproveTime, LocalDateTime.now()).eq(ErpSaleOut::getId, erpSaleOut.getId());erpSaleOut.setStatus(2); //审核通过标志 2代表通过 if(erpSaleOutMapper.update(erpSaleOut, updateOrderWrapper) != 1) {return Result.error("销售出库单信息已过期,请刷新重试!");}Wrapper<ErpSaleOutDetail> queryDetailWrapper = Wrappers.lambdaQuery(ErpSaleOutDetail.class).eq(ErpSaleOutDetail::getSheetId, erpSaleOut.getId()).orderByAsc(ErpSaleOutDetail::getOrderNo);List<ErpSaleOutDetail> details = erpSaleOutDetailService.list(queryDetailWrapper);for (ErpSaleOutDetail detail : details) {ErpGoodsStockVo erpGoodsStockVo = new ErpGoodsStockVo();erpGoodsStockVo.setScId(erpSaleOut.getScId());erpGoodsStockVo.setGoodsId(detail.getGoodsId());erpGoodsStockVo.setStockNum(detail.getOrderNum());erpGoodsStockVo.setTaxAmount(NumberUtil.mul(detail.getTaxPrice(), detail.getOrderNum()));erpGoodsStockVo.setUnTaxAmount(NumberUtil.mul(NumberUtil.calcUnTaxPrice(detail.getTaxPrice(), detail.getTaxRate()), detail.getOrderNum()));erpGoodsStockVo.setTaxPrice(detail.getTaxPrice());erpGoodsStockVo.setUnTaxPrice(NumberUtil.calcUnTaxPrice(detail.getTaxPrice(), detail.getTaxRate()));erpGoodsStockVo.setBizCode(erpSaleOut.getCode());erpGoodsStockVo.setBizDetailId(detail.getId());erpGoodsStockVo.setBizId(erpSaleOut.getId());erpGoodsStockVo.setBizType(GoodsStockType.SALE.getCode());erpGoodsStockService.outStock(erpGoodsStockVo);}return Result.OK("审核通过完成");}@Override@Transactional(rollbackFor = Exception.class)public void outStock(ErpGoodsStockVo erpGoodsStockVo) throws Exception {Wrapper<ErpGoodsStock> queryWrapper = Wrappers.lambdaQuery(ErpGoodsStock.class).eq(ErpGoodsStock::getGoodsId, erpGoodsStockVo.getGoodsId()).eq(ErpGoodsStock::getScId, erpGoodsStockVo.getScId());ErpGoodsStock outerpGoodsStock = erpGoodsStockMapper.selectOne(queryWrapper);ErpGoodsStockLog erpGoodsStockLog = new ErpGoodsStockLog();if(outerpGoodsStock == null) {//第一次出库,新增记录outerpGoodsStock = new ErpGoodsStock();outerpGoodsStock.setScId(erpGoodsStockVo.getScId());outerpGoodsStock.setGoodsId(erpGoodsStockVo.getGoodsId());outerpGoodsStock.setStockNum(0-erpGoodsStockVo.getStockNum());outerpGoodsStock.setTaxPrice(erpGoodsStockVo.getTaxPrice());outerpGoodsStock.setTaxAmount(NumberUtil.sub(BigDecimal.ZERO, erpGoodsStockVo.getTaxAmount()));outerpGoodsStock.setUnTaxPrice(erpGoodsStockVo.getUnTaxPrice());outerpGoodsStock.setUnTaxAmount(NumberUtil.sub(BigDecimal.ZERO, erpGoodsStockVo.getUnTaxAmount()));erpGoodsStockMapper.insert(outerpGoodsStock);erpGoodsStockLog.setOriStockNum(0);erpGoodsStockLog.setOriUnTaxPrice(BigDecimal.ZERO);erpGoodsStockLog.setOriTaxPrice(BigDecimal.ZERO);}else {//已有库存数量金额更新LambdaUpdateWrapper<ErpGoodsStock> updateWrapper = Wrappers.lambdaUpdate(ErpGoodsStock.class).eq(ErpGoodsStock::getScId, erpGoodsStockVo.getScId()).eq(ErpGoodsStock::getGoodsId, erpGoodsStockVo.getGoodsId());erpGoodsStockLog.setOriStockNum(outerpGoodsStock.getStockNum());erpGoodsStockLog.setOriUnTaxPrice(outerpGoodsStock.getUnTaxPrice());erpGoodsStockLog.setOriTaxPrice(outerpGoodsStock.getTaxPrice());outerpGoodsStock.setScId(erpGoodsStockVo.getScId());outerpGoodsStock.setGoodsId(erpGoodsStockVo.getGoodsId());outerpGoodsStock.setStockNum(outerpGoodsStock.getStockNum() - erpGoodsStockVo.getStockNum());if(outerpGoodsStock.getStockNum() == 0) {outerpGoodsStock.setTaxPrice(NumberUtil.div(NumberUtil.add(erpGoodsStockVo.getTaxPrice(),outerpGoodsStock.getTaxPrice()),2));outerpGoodsStock.setUnTaxPrice(NumberUtil.div(NumberUtil.add(erpGoodsStockVo.getUnTaxPrice(),outerpGoodsStock.getUnTaxPrice()),2));outerpGoodsStock.setTaxAmount(BigDecimal.ZERO);outerpGoodsStock.setUnTaxAmount(BigDecimal.ZERO);}else {outerpGoodsStock.setTaxAmount(NumberUtil.sub(erpGoodsStockVo.getTaxAmount(),outerpGoodsStock.getTaxAmount()));outerpGoodsStock.setUnTaxAmount(NumberUtil.sub(erpGoodsStockVo.getUnTaxAmount(),outerpGoodsStock.getUnTaxAmount()));outerpGoodsStock.setTaxPrice(NumberUtil.div(outerpGoodsStock.getTaxAmount(), outerpGoodsStock.getStockNum()));outerpGoodsStock.setUnTaxPrice(NumberUtil.div(outerpGoodsStock.getUnTaxAmount(), outerpGoodsStock.getStockNum()));}if(erpGoodsStockMapper.update(outerpGoodsStock, updateWrapper) != 1) {throw new Exception("出库更新信息已过期,请刷新重试!");}}erpGoodsStockLog.setGoodsId(erpGoodsStockVo.getGoodsId());erpGoodsStockLog.setScId(erpGoodsStockVo.getScId());erpGoodsStockLog.setStockNum(erpGoodsStockVo.getStockNum());erpGoodsStockLog.setTaxAmount(erpGoodsStockVo.getTaxAmount());erpGoodsStockLog.setUnTaxAmount(erpGoodsStockVo.getUnTaxAmount());erpGoodsStockLog.setCurStockNum(outerpGoodsStock.getStockNum());erpGoodsStockLog.setStockNum(outerpGoodsStock.getStockNum());erpGoodsStockLog.setCurTaxPrice(outerpGoodsStock.getTaxPrice());erpGoodsStockLog.setCurUnTaxPrice(outerpGoodsStock.getUnTaxPrice());erpGoodsStockLog.setBizCode(erpGoodsStockVo.getBizCode());erpGoodsStockLog.setBizDetailId(erpGoodsStockVo.getBizDetailId());erpGoodsStockLog.setBizId(erpGoodsStockVo.getBizId());erpGoodsStockLog.setBizType(erpGoodsStockVo.getBizType());erpGoodsStockLogService.save(erpGoodsStockLog);}
六、效果图:
基于Jeecgboot前后端分离的ERP系统开发系列--出库单(3)相关推荐
- 基于Jeecgboot前后端分离的ERP系统开发系列--出库单(1)
这次从出库单开始进行整个单据录入显示的模板,不再采用默认的online表单代码生成的方式,以满足实际的业务需要,当然刚开始做,以后还需要进行改进. 一.首先单号生成 采用系统开发里的代码编码规则,相应 ...
- 基于Jeecgboot前后端分离的ERP系统开发数据库设计(二)
-- ---------------------------- -- Table structure for erp_goods -- ---------------------------- DRO ...
- 基于SpringBoot前后端分离的众筹系统(附源码)
基于SpringBoot前后端分离的众筹系统源码下载链接: https://download.csdn.net/download/weixin_47367099/85441573 一.运行步骤 1.环 ...
- 基于Jeecgboot前后端分离的流程管理平台演示系统安装(二)
三.手动发布与测试 后端: 修改application-prod.yml文件,根据自己的发布机器的相关参数进行修改,再进行编译,处出来nbcio-boot\nbcio-boot-module-syst ...
- 基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统
一.基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统 基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统,主要分为用户端和管理端两个模块. ...
- 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...
- 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...
- 安居客住房系统-基于Python-Django前后端分离开发(一)——初始化项目及ORM关系映射
"安居客"住房系统-基于Python-Django前后端分离开发 作者:代昌松 项目详情代码请参加我的代码仓库:https://gitee.com/dcstempt_ping/iz ...
- “安居客“住房系统-基于Python-Django前后端分离开发(二)——基于RESTful架构的数据接口配置以及Redis高速缓存
"安居客"住房系统-基于Python-Django前后端分离开发(二) 基于Django-Rest-Framework创建接口数据(二) 文章目录 "安居客"住 ...
最新文章
- 8_用opencv调用深度学习框架tenorflow、Pytorch、Torch、caffe训练好的模型(20190212)
- 什么是URL?协议头、路径和端口是什么意思?
- ASP.NET MVC (五、HttpClient接口解析)
- Android开发之ADB常用命令
- PV PVC - 每天5分钟玩转 Docker 容器技术(150)
- NetApp集群模式Data ONTAP展露新颜
- 点击高德地图标注没法弹窗_如何在地图上标注我的店铺
- 22. linux 日志分析
- foreach进不去报错java_为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作...
- 机器学习Normal Equation的推导(不要求矩阵求导)
- C/C++操作注册表键值添加/查询/删除详解
- 大华 解码器上大屏代码事例
- kettle下载安装使用教程
- win10下如何快速安装迷你迅雷
- 查询论文SCI/EI检索及引用报告
- 新浪导航栏下拉菜单案例展示
- matlab 基于拉依达检验法(3σ准则) 实现多类别多参数的批量检验异常值与异常样本
- STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记三(1):Cortex-M3指令集概要
- kubectl源码分析之config delete-context
- 角度,弧度,三角函数