zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java
@@ -181,23 +181,10 @@ * @author jyy */ @RequestMapping(value = "/toBj") public String toBj(Long id, HttpServletRequest request) { public String toBj(Long id) { // 根据id查到对应的订单信息 SysOrder order = orderService.findById(id); WebUtil.getRequest().setAttribute("order", order); SysOrderItem item = new SysOrderItem(); item.setOrderId(order.getId()); item.setStatus(Dictionary.ORDER_STATU_QK); order.setItems(orderItemService.findByModel(item)); MoneyCardUse moneyCardUse = new MoneyCardUse(); moneyCardUse.setVipId(order.getVipId()); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); List<MoneyCardUse> cards = cardUseService.findByModel(moneyCardUse); WebUtil.getRequest().setAttribute("cards", cards); return "admin/hive/beautySalon/bj-form"; } zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrderFlow.java
@@ -11,7 +11,18 @@ public class SysOrderFlow implements Serializable { private static final long serialVersionUID = 7519131902836023680L; public static final String PAY_METHOD_CARD = "会员卡"; public static final String PAY_METHOD_CARD = "储值卡"; public static final String PAY_METHOD_ARREARS = "欠款"; public static final String FLOW_TYPE_BUY = "购买"; public static final String FLOW_TYPE_REPAY = "还款"; public static final String FLOW_TYPE_REFUND = "退款"; public static final String IS_GIFT_Y = "Y"; public static final String IS_GIFT_N = "N"; private String createBy; zq-erp/src/main/java/com/matrix/system/hive/service/CodeService.java
@@ -24,6 +24,8 @@ * @throws */ public String getOrderCode(); public String getFlowCode(); /** * 根据一定的规则返回一个随机编号。 zq-erp/src/main/java/com/matrix/system/hive/service/imp/CodeServiceImpl.java
@@ -95,4 +95,8 @@ return fmt.format(date); } @Override public String getFlowCode() { return "F" + getNowTimeString(); } } zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -154,21 +154,10 @@ @Override public SysOrder checkAndSaveOrder(SysOrder sysOrder) { // 收款改变订单状态 /** * 判断订单条目的一个付款情况 */ // 计算现金支付金额 double xjMoney = 0.0; // 计算卡支付总额 double cardMoney = 0.0; // 计算订单折扣金额,收款情况下 计算订单总额 double zkTotal = 0.0; /** * 记录本次消费的卡,防止扣除多次消费记录 */ ArrayList<Long> userCard = new ArrayList<Long>(); // 页面的pageOrder 参数只包含支付金额信息,不带有购买商品 for (SysOrderItem item : sysOrder.getItems()) { @@ -179,43 +168,14 @@ item.setIsFree(Dictionary.FLAG_YES); } // 如果支付方式是非现金则记录现金支付金额 if (!item.getPayMethod().equals(PayMethodEnum.VIP_CARD.getCode())) { xjMoney = MoneyUtil.add(xjMoney, item.getPayMoney()); // item.setCashPay(item.getPayMoney()); } else { cardMoney = MoneyUtil.add(cardMoney, item.getPayMoney()); // item.setCardPay(item.getPayMoney()); } // 订单欠款减去支付金额 设置实际欠款 Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount())); zkTotal=MoneyUtil.add(zkTotal, itemZkTotal); // item.setArrears(MoneyUtil.sub(itemZkTotal, item.getPayMoney())); // 如果存在欠款,将条目状态设置为欠款 // if (item.getArrears() > 0) { // item.setStatus(Dictionary.ORDER_STATU_QK); // } else if (item.getArrears() < 0) { // item.setPayMoney(item.getZkPrice()); // item.setStatus(Dictionary.ORDER_STATU_DFK); // } else { // item.setStatus(Dictionary.ORDER_STATU_DFK); // } item.setStatus(Dictionary.ORDER_STATU_DFK); } double arrears; SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); // 如果是收款,收款可以改变订单价格,所以需要求和出 订单折后价来计算本次欠款 arrears = MoneyUtil.sub(zkTotal, MoneyUtil.add(cardMoney, xjMoney)); sysOrder.setZkTotal(zkTotal); // sysOrder.setArrears(arrears); // sysOrder.setCardPay(cardMoney); // sysOrder.setCashPay(xjMoney); sysOrder.setStatu(Dictionary.ORDER_STATU_DFK); sysOrder.setStaffId(user.getSuId()); sysOrder.setCompanyId(user.getCompanyId()); @@ -502,47 +462,36 @@ * @author:姜友瑶 */ private void changeOrderStatu(SysOrder sourceOrder) { int i = 1; String orderStatus = Dictionary.ORDER_STATU_YFK; for (SysOrderFlow flow : sourceOrder.getFlows()) { flow.setFlowNo(codeService.getFlowCode() + "-" + i); Long goodsId = sourceOrder.getItems().get(0).getGoodsId(); ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId); flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品"); flow.setOrderId(sourceOrder.getId()); flow.setVipId(sourceOrder.getVipId()); flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY); // 若使用储值卡付款 if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) { if (flow.getCardId() != null) { MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId()); cardPaySk(moneyCardUse, sourceOrder, flow); } } // boolean haQk=false; // // for(SysOrderItem sysOrderItem:sourceOrder.getItems()){ // // if(!sysOrderItem.getStatus().equals(Dictionary.ORDER_STATU_QK)){ // SysOrderItem updateItem=new SysOrderItem(); // updateItem.setId(sysOrderItem.getId()); // updateItem.setStatus(Dictionary.ORDER_STATU_YFK); // // if (sysOrderItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY_CARD ) ) { // // if(sysOrderItem.getPayMethodDetail()!=null){ // // 查询要支付的充值卡 // MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(Long.parseLong(sysOrderItem.getPayMethodDetail())); // // 扣除付款卡金额并添加流水 // cardPaySk(moneyCardUse, sourceOrder, sysOrderItem); // }else{ // throw new GlobleException("请选择支付的会员卡"); // } // // // } // orderItemDao.update(updateItem); // }else { // haQk=true; // } // } if (SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod())) { orderStatus = Dictionary.ORDER_STATU_QK; sourceOrder.setArrears(flow.getAmount().doubleValue()); } sysOrderFlowDao.insert(flow); i++; } // 更新收款状态 sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK); sourceOrder.setStatu(orderStatus); sysOrderDao.update(sourceOrder); } @@ -581,43 +530,38 @@ * 使用充值卡付款操作 * * @param sourceOrder * @param userCard * @param orderItem * @param temp 设置是否扣除使用次数 true 扣除 * @param moneyCardUse * @param flow */ private void cardPaySk(MoneyCardUse moneyCardUse, SysOrder sourceOrder, SysOrderItem orderItem) { private void cardPaySk(MoneyCardUse moneyCardUse, SysOrder sourceOrder, SysOrderFlow flow) { // 判断商品是否在充值卡的限制购买,判断分类 if (!isInBangding(moneyCardUse, orderItem.getGoodsId())) { throw new GlobleException(shoppingGoodsDao.selectById(orderItem.getGoodsId()).getName() + "不在" + moneyCardUse.getCardName() + "优惠中"); sourceOrder.getItems().forEach(item -> { if (!isInBangding(moneyCardUse, item.getGoodsId())) { throw new GlobleException(shoppingGoodsDao.selectById(item.getGoodsId()).getName() + "不在" + moneyCardUse.getCardName() + "优惠中"); } }); SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); Double balance = moneyCardUse.getRealMoney(); if (moneyCardUse.getGiftMoney() != null) { balance = MoneyUtil.add(balance, moneyCardUse.getGiftMoney()); } // 判断金额是否足够支付 if (balance >= orderItem.getPayMoney()) { MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow(); if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) { if(moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) { double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue()); moneyCardUse.setGiftMoney(surplus); // 余额充足先从本金中扣除 if (moneyCardUse.getRealMoney() >= orderItem.getPayMoney()) { double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), orderItem.getPayMoney()); moneyCardUse.setRealMoney(surplus); moneyCardUseFlow.setTotal(0-orderItem.getPayMoney()); moneyCardUseFlow.setGiftMoney(0D - flow.getAmount().doubleValue()); } else { // 本金不够 double surplus = MoneyUtil.sub(orderItem.getPayMoney(), moneyCardUse.getRealMoney()); moneyCardUseFlow.setTotal(0- moneyCardUse.getRealMoney()); // 扣除所有本金 moneyCardUse.setRealMoney(0D); moneyCardUse.setGiftMoney(MoneyUtil.sub(moneyCardUse.getGiftMoney(), surplus)); // 只要是用了赠送金额购买的就视为赠送套餐 18-12-01 jyy orderItem.setIsFree(Dictionary.FLAG_YES); moneyCardUseFlow.setGiftMoney(0-surplus); throw new GlobleException(moneyCardUse.getCardName() + "余额不足"); } } else { if(moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) { double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue()); moneyCardUse.setRealMoney(surplus); moneyCardUseFlow.setTotal(0 - flow.getAmount().doubleValue()); } else { throw new GlobleException(moneyCardUse.getCardName() + "余额不足"); } } //设置卡项使用流水 @@ -630,10 +574,6 @@ moneyCardUseFlow.setOperationId(user.getSuId()); moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney()+moneyCardUse.getRealMoney()); moneyCardUseFlowDao.insert(moneyCardUseFlow); } else { throw new GlobleException(moneyCardUse.getCardName() + "余额不足"); } // 达到使用次数后自动清空余额 if (!moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y) @@ -810,8 +750,8 @@ if (!pageItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY)) { // 查询要支付的充值卡 MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(Long.parseLong(pageItem.getPayMethod())); // 扣除付款卡金额并添加流水 cardPaySk(moneyCardUse, sourceOrder, pageItem); // 扣除付款卡金额并添加流水 TODO 补交卡支付 // cardPaySk(moneyCardUse, sourceOrder, pageItem); sourceItem.setCardPay((sourceItem.getCardPay()==null?0:sourceItem.getCardPay())+pageItem.getPayMoney()); cardPayTotal+=pageItem.getPayMoney(); }else{ zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/bj-form-bak.html
New file @@ -0,0 +1,348 @@ <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <meta name="renderer" content="webkit|ie-comp|ie-stand"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <LINK rel="Bookmark" href="../images/favicon.ico"> <!-- 本框架基本脚本和样式 --> <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MBase.js}"></script> <title></title> </head> <div class="panel-body"> <div class="form-group"> <label class="col-sm-2 control-label">订单号</label> <div class="col-sm-4"> <span class="form-control-static" th:text="${order.orderNo}"></span> </div> <label class="col-sm-2 control-label">订单总价</label> <div class="col-sm-4"> <span class="form-control-static" id="total" th:text="${order.total}"></span> </div> </div> <br> <div class="form-group"> <label class="col-sm-2 control-label">客户编号</label> <div class="col-sm-4"> <span class="form-control-static" th:text="${order.vipNo}"></span> </div> <label class="col-sm-2 control-label">客户姓名</label> <div class="col-sm-4"> <span class="form-control-static" th:text="${order.vipName}"></span> </div> </div> <br> <div class="form-group"> <label class="col-sm-2 control-label">折后价</label> <div class="col-sm-4"> <span class="form-control-static" id="zkTotal" th:text="${order.zkTotal}"></span> </div> <label class="col-sm-2 control-label">欠款</label> <div class="col-sm-4"> <span class="form-control-static" id="zkTotal" th:text="${order.arrears}"></span> </div> </div> <br> <div class="form-group"> <label class="col-sm-2 control-label">卡付金额</label> <div class="col-sm-4"> <span class="form-control-static" id="zkTotal" th:text="${order.cardPay}"></span> </div> <label class="col-sm-2 control-label">现金付款</label> <div class="col-sm-4"> <span class="form-control-static" id="zkTotal" th:text="${order.cashPay}"></span> </div> </div> <br> <div class="form-group"> <label class="col-sm-2 control-label">顾问姓名</label> <div class="col-sm-4"> <span class="form-control-static" th:text="${order.staffName}"></span> </div> </div> </div> <div class="row "> <div class="col-sm-10 pd-20 col-sm-offset-1"> <form class="form-horizontal" id="dataform" onsubmit="javascripr:return false;"> <div class="tabs-container "> <ul class="nav nav-tabs"> <li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">收款</a></li> <li class=""><a data-toggle="tab" href="#tab-2" aria-expanded="false">业绩</a></li> </ul> <div class="tab-content"> <div id="tab-1" class="tab-pane active"> <div class="panel-body"> <div class="col-sm-12 form-group"> <!-- 改变折扣后的总价 --> <input autocomplete="off" type="hidden" name="zkTotal" th:value="${order.zkTotal}" id="zkTotalInput"> <div class="panel-body"> <table class="table table-striped table-condensed table-hover"> <thead> <tr> <th>序号</th> <th>商品名称</th> <th>单价</th> <th>购买数量</th> <th>折扣单价</th> <th>支付方式</th> <th>支付金额</th> </tr> </thead> <tbody id="tbody"> <tr th:each="item,count:${order.items }"> <td th:text="${count.index}+1"></td> <td> <span th:text=" ${item.shoppingGoods.name }"></span> <span th:if="${item.isFree eq '是' }" th:text="赠"></span> </td> <td th:text="${item.price }"></td> <td th:text="${item.count}"></td> <td th:text="${item.zkPrice}"></td> <td><input autocomplete="off" type="hidden" th:name="'items['+${count.index}+'].id'" th:value="${item.id }"> <input autocomplete="off" type="hidden" th:name="'items['+${count.index}+'].goodsId'" th:value="${item.goodsId }"> <input autocomplete="off" type="hidden" th:name="'items['+${count.index}+'].count'" th:value="${item.count}"> <select class="form-control" th:name="'items['+${count.index}+'].payMethod'"> <option th:if="${item.type eq '充值卡'}" value="现金">现金</option> <option value="现金">现金</option> <th:block th:if="${item.type ne '充值卡'}"> <th:block th:each="cardItem:${cards }" > <option th:value="${cardItem.id }" th:text="${cardItem.cardName }+'-余:'+${cardItem.realMoney+cardItem.giftMoney}"></option> </th:block> </th:block> </select></td> <td><input autocomplete="off" type="text" class="form-control" th:onchange="'changePayMoney(\'p'+${item.id}+'\',this)'" onchange="reckonTotal()" dataType="price" nullmsg="请填写金额" errormsg="金额可为两位小数的正数" th:value="${item.arrears}" th:name="'items['+${count.index}+'].payMoney'" > <div class="Validform_checktip"></div></td> </tr> </th> </tbody> </table> </div> </div> <div class="col-sm-12 form-group"> <div class="form-group"> <div class="form-group"> <label class="col-sm-2 control-label">实收金额</label> <div class="col-sm-4"> <input autocomplete="off" type="text" class="form-control" name="actualPay" id="money" readonly="readonly" th:value="${order.arrears}" datatype="/^(([0-9]\d{0,9})|0)(\.\d{1,2})?$/" ignore="ignore"> <div class="Validform_checktip"></div> </div> <label class="col-sm-2 control-label">备注</label> <div class="col-sm-4"> <input autocomplete="off" type="text" class="form-control" name="remark" th:value="${order.remark}" datatype="*0-200" ignore="ignore"> <div class="Validform_checktip"></div> </div> </div> </div> <input autocomplete="off" type="hidden" id="id" name="id" th:value="${order.id}" /> </div> </div> </div> <div id="tab-2" class="tab-pane"> <div class="panel-body"> <table class="table table-condensed "> <thead> <tr> <th>序号</th> <th>商品名称</th> <th>分配金额</th> <th>美疗师业绩</th> <th>操作</th> </tr> </thead> <tbody id="tbody2"> <th:block th:each="item,count:${order.items }" > <tr th:id="'p'+${item.id}"> <td th:text="${count.index}+1"></td> <td th:text="${item.shoppingGoods.name }"> <span th:if="${item.isFree eq '是' }" th:text="赠"></span> </td> <td th:text="${item.arrears }"></td> <td> <table class="table table-condensed "> <tr th:each="achaeve,count2:${item.achaeveList }"> <td><select class="autoFull select2 input-sm" data-value="suId" data-filed="suName" th:data-def="${achaeve.staffId }" th:name="'items['+${count.index}+'].achaeveList['+${count2.index}'].beaultId'" th:data-url="@{/admin/getShopStaffByRoleName?roleName=美疗师}" > </select></td> <td><input autocomplete="off" type="text" class="form-control input-sm" style="width: 80px" th:name="'items['+${count.index}+'].achaeveList['+${count2.index}'].t1"></td> <td><button class="btn btn-danger btn-sm" onclick="deleteBeaute(this)">删除</button></td> </tr> </table> </td> <td><a class="btn btn-default btn-sm" th:onclick="'addBeaute(\'p'+${item.id}+'\','+${count.index}+')'">添加</a></td> </tr> </tbody> </table> </div> </div> </div> <div class="form-group mt-20 "> <div class="col-sm-12 text-center"> <a href="javascript:;" onclick="myForm.submit()" class="btn btn-success radius">确认</a> <button onclick="MTools.closeForm()" class="btn btn-danger radius" type="button">取消</button> </div> </div> </div> </form> </div> </div> <script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script><script type="text/javascript"> var myForm = MForm.initForm({ invokeUrl : basePath+"/admin/moneyCardUse/bj", beforeSubmit : function() { //校验业绩 var ifAchieveOk=true; $("#tbody2").children("tr").each(function(){ var tr=$(this); var pay=parseFloat(tr.find("td").eq(2).html()); var achieveSum=0; tr.find("td").eq(3).find("table").find("tr").each(function(){ var achieve= parseFloat($(this).find("td").eq(1).find("input").val()); achieveSum+=achieve; }); if(achieveSum>pay){ ifAchieveOk=false; } }); if(!ifAchieveOk){ layer.msg("业绩金额不能大于支付金额",{icon:2}) return false; } var money = parseFloat($("#money").val()); var total = parseFloat($("#zkTotal").html()); }, afterSubmit : function() { if(parent.myGrid) { parent.myGrid.serchData(); } if (parent.app) { parent.app.orderQuery(); } }, }); //添加一个美疗师 function addBeaute(trId,itemIndex){ if(!itemIndex){ itemIndex=0; } var id=MTools.randomStr(); var table=$("#"+trId).find("td").eq(3).find("table") var achieveIndex=$("#"+trId).find("td").eq(3).find("table").find("tr").length; var html= '<tr> <td><select class="autoFull select2 input-sm" id="'+id+'" name="items['+itemIndex+'].achaeveList['+achieveIndex+'].beaultId" ' +'data-url="'+basePath+'/admin/getShopStaffByRoleName?roleName=美疗师" data-value="suId" data-filed="suName" data-def=""' +'name="beatuyId"> </select></td> <td><input autocomplete="off" type="text" class="form-control input-sm" style="width: 80px" name="items['+itemIndex+'].achaeveList['+achieveIndex+'].t1" ' +'name="items['+itemIndex+'].zkPrice" ></td> <td><button class="btn btn-danger btn-sm" onclick="deleteBeaute(this)" >删除</button></td> </tr>'; $("#"+trId).find("td").eq(3).find("table").append(html); $('#'+id).select2({'width':'80px'}); MTools.autoFullSelect({selecteder:'#'+id}); }; //删除一个美疗师 function deleteBeaute(node){ $(node).closest("tr").remove(); } //修改收款金额 function changePayMoney(trId,node){ console.log(trId,node); $("#"+trId).find("td").eq(2).html($(node).val()); }; //改变折扣单价 function changeZkprice() { var sum = 0; $("#tbody").find("tr").each(function() { var $tds = $(this).find("td"); var count = $tds.eq(3).html(); var zkprice = $tds.eq(4).find("input").eq(0).val(); totalMoney = parseFloat(count) * parseFloat(zkprice); $tds.eq(6).find("input").eq(0).val(totalMoney); sum += totalMoney; }); $("#money").val(sum); $("#zkTotal").html(sum); $("#zkTotalInput").val(sum); } //计算实收 function reckonTotal() { var sum = 0; $("#tbody").find("tr").each(function() { var $tds = $(this).find("td"); var count = $tds.eq(6).find("input").eq(0).val(); sum += parseFloat(count) }); $("#money").val(sum); } </script> </body> </html> zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/bj-form.html
@@ -1,8 +1,4 @@ <!DOCTYPE HTML> <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> @@ -14,335 +10,277 @@ <meta http-equiv="Cache-Control" content="no-siteapp" /> <LINK rel="Bookmark" href="../images/favicon.ico"> <!-- 本框架基本脚本和样式 --> <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MBase.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/> <title></title> <style> .paymethod ul { padding: 0; margin: 0; height: 50px; } .paymethod ul li { padding: 10px; margin: 5px; list-style:none; float: left; display: block; cursor: pointer; position: relative; border: white 1px solid; } .paymethod ul li:hover { border: #409EFF 1px solid; } .paymethod .active { border: #409EFF 1px solid; } .paymethod .active::after { content: ''; display: block; height: 0px; width: 0px; position: absolute; bottom: 0; right: 0; color:#fff; /**对号大小*/ font-size: 10px; line-height: 8px; border: 3px solid; border-color: transparent #4884ff #4884ff transparent; } .el-dialog__body { padding-top: 10px !important; } </style> </head> <div class="panel-body" id="app"> <el-dialog title="还款" :visible.sync="dialogSettleVisible" show-close> <el-row type="flex" align="middle" style="padding: 0 0 10px 0;"> <el-col :span="5" style="text-align: center;">还款金额</el-col> <el-col :span="10" style="text-align: center; line-height: 50px;"><span style="color: red; font-size: 20px;">¥ {{order.arrears}}</span></el-col> </el-row> <div class="panel-body"> <div class="form-group"> <label class="col-sm-2 control-label">订单号</label> <div class="col-sm-4"> <span class="form-control-static" th:text="${order.orderNo}"></span> </div> <label class="col-sm-2 control-label">订单总价</label> <div class="col-sm-4"> <span class="form-control-static" id="total" th:text="${order.total}"></span> </div> </div> <br> <div class="form-group"> <label class="col-sm-2 control-label">客户编号</label> <div class="col-sm-4"> <span class="form-control-static" th:text="${order.vipNo}"></span> </div> <label class="col-sm-2 control-label">客户姓名</label> <div class="col-sm-4"> <span class="form-control-static" th:text="${order.vipName}"></span> </div> </div> <br> <div class="form-group"> <label class="col-sm-2 control-label">折后价</label> <div class="col-sm-4"> <span class="form-control-static" id="zkTotal" th:text="${order.zkTotal}"></span> </div> <label class="col-sm-2 control-label">欠款</label> <div class="col-sm-4"> <span class="form-control-static" id="zkTotal" th:text="${order.arrears}"></span> </div> </div> <br> <div class="form-group"> <label class="col-sm-2 control-label">卡付金额</label> <div class="col-sm-4"> <span class="form-control-static" id="zkTotal" th:text="${order.cardPay}"></span> </div> <label class="col-sm-2 control-label">现金付款</label> <div class="col-sm-4"> <span class="form-control-static" id="zkTotal" th:text="${order.cashPay}"></span> </div> </div> <br> <div class="form-group"> <label class="col-sm-2 control-label">顾问姓名</label> <div class="col-sm-4"> <span class="form-control-static" th:text="${order.staffName}"></span> </div> </div> </div> <div class="row "> <div class="col-sm-10 pd-20 col-sm-offset-1"> <form class="form-horizontal" id="dataform" onsubmit="javascripr:return false;"> <div class="tabs-container "> <ul class="nav nav-tabs"> <li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">收款</a></li> <li class=""><a data-toggle="tab" href="#tab-2" aria-expanded="false">业绩</a></li> <el-row type="flex" align="middle" style="padding: 10px 0;"> <el-col :span="5" style="text-align: center;">收款方式</el-col> <el-col class="paymethod" :span="15"> <el-row> <ul> <span v-for="(item, index) in payMethods"> <el-popover :disabled="item.type != '储值卡'" placement="bottom" trigger="hover" @hide="popoverHide(item)"> <el-row style="text-align: center;"><span style="padding: 0 0 10px 0; display: block; font-size: 12px;">选择储值卡支付方式</span></el-row> <el-tree :data="moneyCards" show-checkbox default-expand-all node-key="id" ref="tree" check-strictly highlight-current @check="(click, checked,$item)=>{handleCheckChange(click, checked,$item)}" :props="defaultProps"> </el-tree> <li :class="{active : item.isActive}" v-if="item.value != '欠款'" slot="reference" @click="payMethodSelect(item, index)">{{item.value}}</li> </el-popover> </span> </ul> <div class="tab-content"> <div id="tab-1" class="tab-pane active"> <div class="panel-body"> <div class="col-sm-12 form-group"> <!-- 改变折扣后的总价 --> <input autocomplete="off" type="hidden" name="zkTotal" th:value="${order.zkTotal}" id="zkTotalInput"> <div class="panel-body"> <table class="table table-striped table-condensed table-hover"> <thead> <tr> <th>序号</th> <th>商品名称</th> <th>单价</th> <th>购买数量</th> <th>折扣单价</th> <th>支付方式</th> <th>支付金额</th> </tr> </thead> <tbody id="tbody"> <tr th:each="item,count:${order.items }"> <td th:text="${count.index}+1"></td> <td> <span th:text=" ${item.shoppingGoods.name }"></span> </el-row> </el-col> </el-row> <span th:if="${item.isFree eq '是' }" th:text="赠"></span> </td> <td th:text="${item.price }"></td> <td th:text="${item.count}"></td> <td th:text="${item.zkPrice}"></td> <el-row type="flex" align="middle" style="padding: 10px 0 50px 0;"> <el-col :span="5" style="text-align: center;">支付金额</el-col> <el-col :span="15"> <el-row style="line-height: 50px;" v-for="(item, index) in payMoneys"> <el-col :span="6" style="text-align: right; padding-right: 10px; font-size: 12px;">{{item.value}}</el-col> <el-col :span="8"><el-input v-model.number="item.money"></el-input></el-col> <el-col :span="6" style="margin-left: 10px;" v-if="item.type == '储值卡'">{{item.isGift == 1 ? '赠送余额' : '余额' }}:<span class="arrears">¥ {{item.balance}}</span></el-col> </el-row> </el-col> </el-row> <td><input autocomplete="off" type="hidden" th:name="'items['+${count.index}+'].id'" th:value="${item.id }"> <el-row style="text-align: center; margin: 20px 0 10px 0"> <el-checkbox v-model="printPaper">打印小票</el-checkbox> </el-row> <input autocomplete="off" type="hidden" th:name="'items['+${count.index}+'].goodsId'" th:value="${item.goodsId }"> <input autocomplete="off" type="hidden" th:name="'items['+${count.index}+'].count'" th:value="${item.count}"> <select class="form-control" th:name="'items['+${count.index}+'].payMethod'"> <option th:if="${item.type eq '充值卡'}" value="现金">现金</option> <option value="现金">现金</option> <th:block th:if="${item.type ne '充值卡'}"> <th:block th:each="cardItem:${cards }" > <option th:value="${cardItem.id }" th:text="${cardItem.cardName }+'-余:'+${cardItem.realMoney+cardItem.giftMoney}"></option> </th:block> </th:block> </select></td> <td><input autocomplete="off" type="text" class="form-control" th:onchange="'changePayMoney(\'p'+${item.id}+'\',this)'" onchange="reckonTotal()" dataType="price" nullmsg="请填写金额" errormsg="金额可为两位小数的正数" th:value="${item.arrears}" th:name="'items['+${count.index}+'].payMoney'" > <div class="Validform_checktip"></div></td> </tr> </th> </tbody> </table> </div> <el-row style="text-align: center; margin: 10px 0 0 0"> <el-button type="primary" @click="">确认收款</el-button> </el-row> </el-dialog> </div> <div class="col-sm-12 form-group"> <div class="form-group"> <div class="form-group"> <label class="col-sm-2 control-label">实收金额</label> <div class="col-sm-4"> <input autocomplete="off" type="text" class="form-control" name="actualPay" id="money" readonly="readonly" th:value="${order.arrears}" datatype="/^(([0-9]\d{0,9})|0)(\.\d{1,2})?$/" ignore="ignore"> <div class="Validform_checktip"></div> </div> <label class="col-sm-2 control-label">备注</label> <div class="col-sm-4"> <input autocomplete="off" type="text" class="form-control" name="remark" th:value="${order.remark}" datatype="*0-200" ignore="ignore"> <div class="Validform_checktip"></div> </div> </div> </div> <input autocomplete="off" type="hidden" id="id" name="id" th:value="${order.id}" /> </div> </div> </div> <div id="tab-2" class="tab-pane"> <div class="panel-body"> <table class="table table-condensed "> <thead> <tr> <th>序号</th> <th>商品名称</th> <th>分配金额</th> <th>美疗师业绩</th> <th>操作</th> </tr> </thead> <tbody id="tbody2"> <th:block th:each="item,count:${order.items }" > <tr th:id="'p'+${item.id}"> <td th:text="${count.index}+1"></td> <td th:text="${item.shoppingGoods.name }"> <span th:if="${item.isFree eq '是' }" th:text="赠"></span> </td> <td th:text="${item.arrears }"></td> <td> <table class="table table-condensed "> <tr th:each="achaeve,count2:${item.achaeveList }"> <td><select class="autoFull select2 input-sm" data-value="suId" data-filed="suName" th:data-def="${achaeve.staffId }" th:name="'items['+${count.index}+'].achaeveList['+${count2.index}'].beaultId'" th:data-url="@{/admin/getShopStaffByRoleName?roleName=美疗师}" > </select></td> <td><input autocomplete="off" type="text" class="form-control input-sm" style="width: 80px" th:name="'items['+${count.index}+'].achaeveList['+${count2.index}'].t1"></td> <td><button class="btn btn-danger btn-sm" onclick="deleteBeaute(this)">删除</button></td> </tr> </table> </td> <td><a class="btn btn-default btn-sm" th:onclick="'addBeaute(\'p'+${item.id}+'\','+${count.index}+')'">添加</a></td> </tr> </tbody> </table> </div> </div> </div> <div class="form-group mt-20 "> <div class="col-sm-12 text-center"> <a href="javascript:;" onclick="myForm.submit()" class="btn btn-success radius">确认</a> <button onclick="MTools.closeForm()" class="btn btn-danger radius" type="button">取消</button> </div> </div> </div> </form> </div> </div> <script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script><script type="text/javascript"> var myForm = MForm.initForm({ invokeUrl : basePath+"/admin/moneyCardUse/bj", beforeSubmit : function() { //校验业绩 var ifAchieveOk=true; $("#tbody2").children("tr").each(function(){ var tr=$(this); var pay=parseFloat(tr.find("td").eq(2).html()); var achieveSum=0; tr.find("td").eq(3).find("table").find("tr").each(function(){ var achieve= parseFloat($(this).find("td").eq(1).find("input").val()); achieveSum+=achieve; }); if(achieveSum>pay){ ifAchieveOk=false; } }); if(!ifAchieveOk){ layer.msg("业绩金额不能大于支付金额",{icon:2}) return false; } var money = parseFloat($("#money").val()); var total = parseFloat($("#zkTotal").html()); <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> <script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script> <script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script> <script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> <script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> <script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> <script type="text/javascript" th:inline="javascript"> //<![CDATA[ var vue = new Vue({ el: '#app', data : { order : "", payMethods: [{ value: '现金支付', isActive: false, type: '现金支付' }, { value: '微信', isActive: false, type: '微信' }, { value: '支付宝', isActive: false, type: '支付宝' }, { value: '银行卡', isActive: false, type: '银行卡' }, { value: '团购', isActive: false, type: '团购' }, { value: '储值卡', isActive: false, type: '储值卡' }, { value: '欠款', isActive: false, type: '欠款' },], moneyCards : [], dialogSettleVisible : true, defaultProps: { children: 'children', label: 'showLable' }, afterSubmit : function() { if(parent.myGrid) { parent.myGrid.serchData(); treeSelect : [], payMoneys : [], printPaper : true, }, created : function() { this.order = /*[[${order}]]*/ this.getVipMoneyCards(); console.log(this.order) }, methods : { getVipMoneyCards() { let _this = this; if (_this.order.vipId) { AjaxProxy.requst({ app: _this, data: {vipId: _this.order.vipId}, contentType: 'application/x-www-form-urlencoded', url: basePath + '/admin/moneyCardUse/getUseMoneyCard', callback: function (data) { if (data.rows.length > 0) { data.rows.forEach(function (item, index, input) { item.showLable = item.cardName + "-余额:" + (item.realMoney) item.uuid = MTools.uuid(); if (item.giftMoney != 0) { var children = []; var gift = {}; gift.id = item.id; gift.giftMoney = item.giftMoney; gift.showLable = item.cardName + '-赠送金额' + item.giftMoney; gift.cardName = item.cardName; gift.isGift = 1; gift.uuid = MTools.uuid(); children.push(gift); item.children = children; } }); _this.moneyCards = data.rows; } if (parent.app) { parent.app.orderQuery(); } }); } }, payMethodSelect(item, index) { let _this = this; let payMoneys = _this.payMoneys; if (item.type != '储值卡') { this.$nextTick(function () { if (item.isActive) { Vue.set(item,'isActive',false); var index = -1; for (var i = 0; i < payMoneys.length; i++) { let payMoney = payMoneys[i]; if (payMoney.value == item.value) { index = i; break; } } if (index > -1) { _this.payMoneys.splice(index, 1) } } else { Vue.set(item,'isActive',true); _this.payMoneys.push(item); } }); //添加一个美疗师 function addBeaute(trId,itemIndex){ if(!itemIndex){ itemIndex=0; } var id=MTools.randomStr(); }, popoverHide(item) { if(this.treeSelect.length <= 0) { Vue.set(item, 'isActive', false) } else { Vue.set(item, 'isActive', true) } }, handleCheckChange(clickNode, checked) { let _this = this; var table=$("#"+trId).find("td").eq(3).find("table") var achieveIndex=$("#"+trId).find("td").eq(3).find("table").find("tr").length; var html= '<tr> <td><select class="autoFull select2 input-sm" id="'+id+'" name="items['+itemIndex+'].achaeveList['+achieveIndex+'].beaultId" ' +'data-url="'+basePath+'/admin/getShopStaffByRoleName?roleName=美疗师" data-value="suId" data-filed="suName" data-def=""' +'name="beatuyId"> </select></td> <td><input autocomplete="off" type="text" class="form-control input-sm" style="width: 80px" name="items['+itemIndex+'].achaeveList['+achieveIndex+'].t1" ' +'name="items['+itemIndex+'].zkPrice" ></td> <td><button class="btn btn-danger btn-sm" onclick="deleteBeaute(this)" >删除</button></td> </tr>'; $("#"+trId).find("td").eq(3).find("table").append(html); $('#'+id).select2({'width':'80px'}); MTools.autoFullSelect({selecteder:'#'+id}); }; //删除一个美疗师 function deleteBeaute(node){ $(node).closest("tr").remove(); let nodes = checked.checkedNodes; _this.treeSelect = nodes; var index = -1; // 判断点击节点是否在已展示支付方式中 for(var i = 0; i < _this.payMoneys.length; i++) { let node = _this.payMoneys[i]; if (node.uuid === clickNode.uuid) { index = i; break; } } //修改收款金额 function changePayMoney(trId,node){ console.log(trId,node); $("#"+trId).find("td").eq(2).html($(node).val()); }; // 若点击节点在选中节点中,且已展示支付方式不存在,则添加 if (nodes.indexOf(clickNode) > -1 && index === -1) { var node = clickNode; var item = {}; if (node.isGift) { item.value = node.cardName; item.balance = node.giftMoney; item.isGift = 'Y'; } else { item.value = node.cardName; item.balance = node.realMoney; item.isGift = 'N'; } item.type = '储值卡'; item.id = node.id; item.uuid = clickNode.uuid; _this.payMoneys.push(item); } //改变折扣单价 function changeZkprice() { var sum = 0; $("#tbody").find("tr").each(function() { var $tds = $(this).find("td"); var count = $tds.eq(3).html(); var zkprice = $tds.eq(4).find("input").eq(0).val(); totalMoney = parseFloat(count) * parseFloat(zkprice); $tds.eq(6).find("input").eq(0).val(totalMoney); sum += totalMoney; // 若点击节点不存在选中节点中,且已展示支付方式中存在,则移除 if (nodes.indexOf(clickNode) === -1 && index > -1) { _this.payMoneys.splice(index, 1); } }, } }); $("#money").val(sum); $("#zkTotal").html(sum); $("#zkTotalInput").val(sum); } //计算实收 function reckonTotal() { var sum = 0; $("#tbody").find("tr").each(function() { var $tds = $(this).find("td"); var count = $tds.eq(6).find("input").eq(0).val(); sum += parseFloat(count) }); $("#money").val(sum); } //]]> </script> </body> </html> zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/order-form.html
@@ -320,9 +320,9 @@ <!-- <el-table-column--> <!-- label="会员卡">--> <!-- label="储值卡">--> <!-- <template slot-scope="scope">--> <!-- <el-select :disabled="scope.row.payMethod!='会员卡'" v-model="scope.row.payMethodDetail"--> <!-- <el-select :disabled="scope.row.payMethod!='储值卡'" v-model="scope.row.payMethodDetail"--> <!-- placeholder="请选择支付卡">--> <!-- <el-option--> <!-- v-for="item in moneyCards"--> @@ -354,7 +354,7 @@ <li>订单总金额:{{order.total}}</li> <li>整单折扣:<span class="arrears">{{order.total - order.zkTotal}}</span></li> <li>整单折扣:<span class="arrears" v-if="order.zkTotal != null">{{order.total - order.zkTotal}}</span></li> <!-- <li v-if="order.arrears>0">订单欠款:<span class="arrears">{{order.arrears}}</span></li>--> <!-- <li v-if="order.arrears<0">找零:<span class="arrears">{{order.arrears}}</span></li>--> </ul> @@ -370,7 +370,7 @@ <el-button type="primary" @click="print()">打印</el-button> <el-button type="primary" @click="drawer = true">业绩设置</el-button> <!-- <el-button type="success" @click="confirmSubmit()" class="bigbtn"> 结算</el-button>--> <el-button type="success" @click="dialogSettleVisible = true" class="bigbtn">收款</el-button> <el-button type="success" @click="openPayMoney" class="bigbtn">收款 ¥{{order.payMoney}}</el-button> </el-col> </el-row> @@ -467,11 +467,11 @@ <ul> <span v-for="(item, index) in payMethods"> <el-popover :disabled="item.type != '会员卡'" :disabled="item.type != '储值卡'" placement="bottom" trigger="hover" @hide="popoverHide(item)"> <el-row style="text-align: center;"><span style="padding: 0 0 10px 0; display: block; font-size: 12px;">选择会员卡支付方式</span></el-row> <el-row style="text-align: center;"><span style="padding: 0 0 10px 0; display: block; font-size: 12px;">选择储值卡支付方式</span></el-row> <el-tree :data="moneyCards" show-checkbox default-expand-all @@ -496,17 +496,17 @@ <el-row style="line-height: 50px;" v-for="(item, index) in payMoneys"> <el-col :span="6" style="text-align: right; padding-right: 10px; font-size: 12px;">{{item.value}}</el-col> <el-col :span="8"><el-input v-model.number="item.money"></el-input></el-col> <el-col :span="6" style="margin-left: 10px;" v-if="item.type == '会员卡'">{{item.isGift == 1 ? '赠送余额' : '余额' }}:<span class="arrears">¥ {{item.balance}}</span></el-col> <el-col :span="6" style="margin-left: 10px;" v-if="item.type == '储值卡'">{{item.isGift == 1 ? '赠送余额' : '余额' }}:<span class="arrears">¥ {{item.balance}}</span></el-col> </el-row> </el-col> </el-row> <el-row style="text-align: center; margin: 20px 0 10px 0"> <el-checkbox>打印小票</el-checkbox> <el-checkbox v-model="printPaper">打印小票</el-checkbox> </el-row> <el-row style="text-align: center; margin: 10px 0 0 0"> <el-button type="primary" @click="submitPay">确认收款</el-button> <el-button type="primary" @click="confirmSubmit">确认收款</el-button> </el-row> </el-dialog> @@ -574,9 +574,9 @@ isActive: false, type: '团购' }, { value: '会员卡', value: '储值卡', isActive: false, type: '会员卡' type: '储值卡' }, { value: '欠款', isActive: false, @@ -602,13 +602,14 @@ loading: false, /******搜索表格数据END********/ dialogSettleVisible : true, dialogSettleVisible : false, defaultProps: { children: 'children', label: 'showLable' }, treeSelect : [], payMoneys : [] payMoneys : [], printPaper : true, }, @@ -697,7 +698,7 @@ changePayMethod(item) { console.log("changePayMethod", item); if (item.payMethod != '会员卡') { if (item.payMethod != '储值卡') { item.payMethodDetail = ''; } }, @@ -868,39 +869,38 @@ */ submitOrder(submitType) { if (this.checkSubmitOrder()) { let _this = this; //检查支付方式 // let hasPayMethod=true; // _this.order.items.forEach(item=>{ // if(!item.payMethod){ // hasPayMethod=false; // return; // } // }); // if(!hasPayMethod){ // this.$message.warning("请选择支付方式"); // return false; // } if(submitType == 1) { if (_this.payMoneys.length > 0) { let flows = [] var total = 0; _this.payMoneys.forEach(item=>{ let flow = {}; flow.payMethod = item.type; if (!item.money) { this.$message.warning("请输入" + item.type + "的付款金额"); return false; } flow.amount = item.money; if (item.type == 6) { if (item.type == '储值卡'){ flow.isGift = item.isGift; flow.cardId = item.id; } total += item.money; flows.push(flow) }) if (total != _this.order.payMoney) { this.$message.warning("输入付款总金额与应付金额不符"); return false; } _this.order.flows = flows; } else { this.$message.warning("请选择支付方式"); return false; } } //匹配业绩 _this.achieveList.forEach(achieve => { @@ -937,16 +937,20 @@ _this.order.orderNo = order.orderNo; //结算打印提示 if (submitType == 1) { _this.$confirm('结算成功,是否立刻打印小票?', '提示', { confirmButtonText: '打印', cancelButtonText: '取消', type: 'warning' }).then(() => { if (_this.printPaper) { _this.print(); }).catch(() => { } _this.closeFram(); }); // _this.$confirm('结算成功,是否立刻打印小票?', '提示', { // confirmButtonText: '打印', // cancelButtonText: '取消', // type: 'warning' // }).then(() => { // _this.print(); // // }).catch(() => { // _this.closeFram(); // }); } else { _this.$message.success(data.info); } @@ -969,7 +973,7 @@ */ checkAchieve() { /* //TODO 前端展示不检测,因为考虑到会员卡支付问题 //TODO 前端展示不检测,因为考虑到储值卡支付问题 let _this = this; for (let i = 0; i < _this.order.items.length; i++) { if (_this.achieveList.length > 0) { @@ -1008,10 +1012,10 @@ this.$message.warning("折扣单价填写不正确"); return false; } if (!(MTools.isRealNum(item.payMoney) && item.payMoney >= 0)) { this.$message.warning("实付金额填写不正确"); return false; } // if (!(MTools.isRealNum(item.payMoney) && item.payMoney >= 0)) { // this.$message.warning("实付金额填写不正确"); // return false; // } }) } else { this.$message.warning("请选择要购买的产品"); @@ -1051,6 +1055,9 @@ } }); this.achieveList = achieveListNew; this.order.zkTotal = 0; this.order.total = 0; this.order.payMoney = 0; this.calculationTotal(); }, @@ -1155,7 +1162,7 @@ payMethodSelect(item, index) { let _this = this; let payMoneys = _this.payMoneys; if (item.type != 6) { if (item.type != '储值卡') { this.$nextTick(function () { if (item.isActive) { Vue.set(item,'isActive',false); @@ -1207,13 +1214,13 @@ if (node.isGift) { item.value = node.cardName; item.balance = node.giftMoney; item.isGift = 1; item.isGift = 'Y'; } else { item.value = node.cardName; item.balance = node.realMoney; item.isGift = 0; item.isGift = 'N'; } item.type = '会员卡'; item.type = '储值卡'; item.id = node.id; item.uuid = clickNode.uuid; _this.payMoneys.push(item); @@ -1224,7 +1231,14 @@ _this.payMoneys.splice(index, 1); } }, submitPay() { openPayMoney() { let _this = this; if (!_this.order.items.length > 0) { this.$message.warning("请选择要购买的产品"); return false; } _this.dialogSettleVisible = true; } }