继续对销售出库单进行完善与处理

一、列表显示状态

目前先给出库表单两种状态,未审核与审核通过状态,前端通过下面调整

{
            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)相关推荐

  1. 基于Jeecgboot前后端分离的ERP系统开发系列--出库单(1)

    这次从出库单开始进行整个单据录入显示的模板,不再采用默认的online表单代码生成的方式,以满足实际的业务需要,当然刚开始做,以后还需要进行改进. 一.首先单号生成 采用系统开发里的代码编码规则,相应 ...

  2. 基于Jeecgboot前后端分离的ERP系统开发数据库设计(二)

    -- ---------------------------- -- Table structure for erp_goods -- ---------------------------- DRO ...

  3. 基于SpringBoot前后端分离的众筹系统(附源码)

    基于SpringBoot前后端分离的众筹系统源码下载链接: https://download.csdn.net/download/weixin_47367099/85441573 一.运行步骤 1.环 ...

  4. 基于Jeecgboot前后端分离的流程管理平台演示系统安装(二)

    三.手动发布与测试 后端: 修改application-prod.yml文件,根据自己的发布机器的相关参数进行修改,再进行编译,处出来nbcio-boot\nbcio-boot-module-syst ...

  5. 基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统

    一.基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统 基于Springboot+MybatisPlus+Vue的前后端分离电子商城系统,主要分为用户端和管理端两个模块. ...

  6. 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...

  7. 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...

  8. 安居客住房系统-基于Python-Django前后端分离开发(一)——初始化项目及ORM关系映射

    "安居客"住房系统-基于Python-Django前后端分离开发 作者:代昌松 项目详情代码请参加我的代码仓库:https://gitee.com/dcstempt_ping/iz ...

  9. “安居客“住房系统-基于Python-Django前后端分离开发(二)——基于RESTful架构的数据接口配置以及Redis高速缓存

    "安居客"住房系统-基于Python-Django前后端分离开发(二) 基于Django-Rest-Framework创建接口数据(二) 文章目录 "安居客"住 ...

最新文章

  1. 8_用opencv调用深度学习框架tenorflow、Pytorch、Torch、caffe训练好的模型(20190212)
  2. 什么是URL?协议头、路径和端口是什么意思?
  3. ASP.NET MVC (五、HttpClient接口解析)
  4. Android开发之ADB常用命令
  5. PV PVC - 每天5分钟玩转 Docker 容器技术(150)
  6. NetApp集群模式Data ONTAP展露新颜
  7. 点击高德地图标注没法弹窗_如何在地图上标注我的店铺
  8. 22. linux 日志分析
  9. foreach进不去报错java_为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作...
  10. 机器学习Normal Equation的推导(不要求矩阵求导)
  11. C/C++操作注册表键值添加/查询/删除详解
  12. 大华 解码器上大屏代码事例
  13. kettle下载安装使用教程
  14. win10下如何快速安装迷你迅雷
  15. 查询论文SCI/EI检索及引用报告
  16. 新浪导航栏下拉菜单案例展示
  17. matlab 基于拉依达检验法(3σ准则) 实现多类别多参数的批量检验异常值与异常样本
  18. STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记三(1):Cortex-M3指令集概要
  19. kubectl源码分析之config delete-context
  20. 角度,弧度,三角函数

热门文章

  1. python黑的调白的_Python实现PS图像调整黑白效果示例
  2. JS 事件大全及详解
  3. Cell Biolabs丨艾美捷——细胞选择 24孔细胞共培养系统
  4. 3Dmax怎么切换成中文模式?
  5. html5看上去很美!
  6. php输出熊猫图案,如何用CSS实现一只带帽子的大熊猫(附代码)
  7. java数据库完成增删改查
  8. python获取字符串首字母_Python字符串常用操作命令
  9. Linux配置JDK1.8环境
  10. 2020年4月份所有文章汇总