动态增加行和减少行(table表格)
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %> <%@ include file="/WEB-INF/jsp/sys/css.jsp"%> <%@ include file="/WEB-INF/jsp/sys/uploader.jsp"%> <script type="text/javascript" src="${pageContext.request.contextPath}/modules/oa/expenseManage/expense/ctrl/expense-info.js"></script> <html lang="zh-cmn-Hans"> <head> <title></title> <style type="text/css"> .layui-textarea{ min-height: 55px !important; } #baoxiao th input{ width: 100%; border-radius: 5px; outline: none; border: 1px solid #9999; padding: 0 10px; box-sizing: border-box; min-height: 40px; } #baoxiao1 th input{ width: 100%; border-radius: 5px; outline: none; border: 1px solid #9999; padding: 0 10px; box-sizing: border-box; min-height: 40px; } .addinput{ display: flex; align-items: center; justify-content: center; } .stream-main-upload-box { border: none; } </style> </head> <form class="layui-form" action="" style="padding: 10px;" id="updateform"> <input hidden id="recId" name="recId" value="${object.recId}" > <input hidden id="expenseType" name="expenseType" value="${object.expenseType}" > <c:if test="${object.expenseType=='0'}"> <span class="header_title">费用报销</span> </c:if> <c:if test="${object.expenseType=='1'}"> <span class="header_title">差旅报销</span> </c:if> <table class="viewTable" > <tbody> <tr> <th>申请人</th> <td > <div class="layui-input-inline tdcontent" > <input type="hidden" id="applyUserId" name="applyUserId" class="layui-input" value="${object.applyUserId}" > <input type="text" disabled class="layui-input" value="${object.applyUserName}" > </div> </td> <th>所属部门</th> <td > <div class="layui-input-inline tdcontent" > <input type="hidden" id="applyUnitCode" name="applyUnitCode" class="layui-input" value="${object.applyUnitCode}" > <input type="text" disabled class="layui-input" value="${object.applyUnitName}" > </div> </td> </tr> <tr> <th>职务</th> <td > <div class="layui-input-inline tdcontent" > <input type="hidden" id="zwCode" name="zwCode" class="layui-input" value="${object.zwCode}" > <input type="text" disabled class="layui-input" value="${object.zwName}" > </div> </td> <th class="required">申请时间</th> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="applyTime" placeholder="请输入申请时间" name="applyTime" lay-verify="required" class="layui-input" autocomplete="off" value="<fmt:formatDate value='${object.applyTime}' pattern='yyyy-MM-dd' />" > </div> </td> </tr> <tr> <th class="required">开户行</th> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="openBank" placeholder="请输入开户行" lay-verify="required" name="openBank" class="layui-input" value="${object.openBank}" > </div> </td> <th class="required">银行账户</th> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="bankAccount" placeholder="请输入银行账户" lay-verify="required" name="bankAccount" class="layui-input" value="${object.bankAccount}" > </div> </td> </tr> <tr> <th class="required">计入部门</th> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="jrUnitCode" placeholder="请输入计入部门" lay-verify="required" name="jrUnitCode" class="layui-input" value="${object.jrUnitCode}" > </div> </td> <th>计入项目</th> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="jrProject" placeholder="请输入计入项目" name="jrProject" class="layui-input" value="${object.jrProject}" > </div> </td> </tr> <tr> <th class="required">报销事由</th> <td colspan="3"> <textarea name="reason" placeholder="请输入报销事由" class="layui-textarea" maxlength="1000" autocomplete="off">${object.reason}</textarea> </td> </tr> </tbody> </table> <br> <%------------------------------------------------------费用报销start------------------------------------------------------------------%> <c:if test="${object.expenseType=='0'}"> <table class="viewTable" id="baoxiao" lay-filter="baoxiao"> <tbody> <tr ><%--头部--%> <th class="td1 afterTitle" style="text-align: center;background: #9F9F9F">报销费用类型</th> <th class="td1 afterTitle" style="text-align: center;background: #9F9F9F">实际费用类型</th> <th class="td1 afterTitle" style="text-align: center;background: #9F9F9F">金额(元)</th> <th class="td1 afterTitle" style="text-align: center;background: #9F9F9F">单据张数</th> <th class="td1 afterTitle" style="text-align: center;background: #9F9F9F">报销用途</th> </tr> <tr> <td > <select lay-filter="bxfyType1" id="bxfyType1" lay-verify="required" > <option value="">请选择报销费用</option> <c:forEach items="${cp:DICTIONARY('bxfyType')}" var="row"> <c:if test="${row.extraCode eq null }" > <option value="${row.dataCode }">${row.dataValue }</option> </c:if> </c:forEach> </select> </td> <td > <select lay-filter="sjfyType1" id="sjfyType1" lay-verify="required"> <option value="">请选择实际费用</option> </select> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="costs1" class="layui-input" value="" onkeyup="checkNum(this,'FYBX')" onfocus='this.select()' onchange="toDecimal(this)" lay-verify="required"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="documnetNumber1" onkeyup="checkNumDj(this)" lay-verify="required" class="layui-input" value="" > </div> </td> <td > <textarea type="text" id="remark1" name="remark1" class="layui-textarea" maxlength="1000" placeholder="可输入1000字"></textarea> </td> </tr> <tr> <td > <select lay-filter="bxfyType2" id="bxfyType2" > <option value="">请选择报销费用</option> <c:forEach items="${cp:DICTIONARY('bxfyType')}" var="row"> <c:if test="${row.extraCode eq null }" > <option value="${row.dataCode }">${row.dataValue }</option> </c:if> </c:forEach> </select> </td> <td > <select lay-filter="sjfyType2" id="sjfyType2" lay-verify="required"> <option value="">请选择实际费用</option> </select> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="costs2" class="layui-input" onkeyup="checkNum(this,'FYBX')"<%--onkeyup="this.value= this.value.match(/\d+(\.\d{0,2})?/) ? this.value.match(/\d+(\.\d{0,2})?/)[0] : ''"--%> onfocus='this.select()' onchange="toDecimal(this)" value="" lay-verify="required"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="documnetNumber2" onkeyup="checkNumDj(this)" lay-verify="required" class="layui-input" value="" > </div> </td> <td > <textarea type="text" id="remark2" name="remark2" class="layui-textarea" maxlength="1000" placeholder="可输入1000字"></textarea> </td> </tr> <tr> <td > <select lay-filter="bxfyType3" id="bxfyType3" lay-verify="required" > <option value="">请选择报销费用</option> <c:forEach items="${cp:DICTIONARY('bxfyType')}" var="row"> <c:if test="${row.extraCode eq null }" > <option value="${row.dataCode }">${row.dataValue }</option> </c:if> </c:forEach> </select> </td> <td > <select lay-filter="sjfyType3" id="sjfyType3" lay-verify="required"> <option value="">请选择实际费用</option> </select> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="costs3" class="layui-input" onkeyup="checkNum(this,'FYBX')" onfocus='this.select()' onchange="toDecimal(this)" value="" lay-verify="required"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="documnetNumber3" onkeyup="checkNumDj(this)" lay-verify="required" class="layui-input" value="" > </div> </td> <td > <textarea type="text" id="remark3" name="remark3" class="layui-textarea" maxlength="1000" placeholder="可输入1000字"></textarea> </td> </tr> <tr> <td > <div class="addinput"> <img alt="" style="width: 30px;" src="${pageContext.request.contextPath}/ui/images/add.png" onclick="add('')"> <img alt="" style="width: 30px;" src="${pageContext.request.contextPath}/ui/images/remove.png" onclick="remove('')"> </div> </td> <td style="text-align: center;"> 小计 </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="jeXj" name="jeXj" class="layui-input" value="${object.jeXj}" disabled placeholder="系统自动计算金额"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="djNum" name="djNum" class="layui-input" value="${object.djNum}" disabled placeholder="系统自动计算单据张数"> </div> </td> <td > </td> </tr> <tr> <td style="text-align: center;"> 合计(大写) </td> <td colspan="4"> <div class="layui-input-inline tdcontent" > <input type="text" id="hjDx" name="hjDx" class="layui-input" value="${object.hjDx}" disabled> </div> </td> </tr> <tr> <td style="text-align: center;"> 合计(小写) </td> <td colspan="4"> <div class="layui-input-inline tdcontent" > <input type="text" id="hjXx" name="hjXx" class="layui-input" value="${object.hjXx}" disabled> </div> </td> </tr> </tbody> </table> </c:if> <%------------------------------------------------------费用报销end------------------------------------------------------------------%> <%------------------------------------------------------差旅报销start------------------------------------------------------------------%> <c:if test="${object.expenseType=='1'}"> <table class="viewTable" id="baoxiaoT"> <tbody> <tr > <td class="afterTitle required" >起止日期</td> <td colspan="2"> <div class = "layui-inline" > <label class = "layui-form-label" >开始时间:</label > <div class = "layui-input-inline" > <input type="text" name="startTime" id="startTime" class="layui-input" placeholder="创建时间" autocomplete="off" lay-verify="required" value="<fmt:formatDate value='${object.startTime}' pattern='yyyy-MM-dd' />"> </div > </div > </td> <td colspan="3" class="afterTitle required"> 至 <div class = "layui-inline" > <label class = "layui-form-label" >结束时间:</label > <div class = "layui-input-inline" > <input type="text" name="endTime" id="endTime" class="layui-input" placeholder="创建时间" autocomplete="off" lay-verify="required" value="<fmt:formatDate value='${object.endTime}' pattern='yyyy-MM-dd' />"> </div > </div > </td> <td class="afterTitle required"> <div class="layui-input-inline tdcontent" > 单据张数 </div> </td> <td class="afterTitle"> <div class="layui-input-inline tdcontent" > <input type="text" name="djNum" class="layui-input" value="${object.djNum}" onkeyup="checkNumDjOne(this)"> </div> </td> <td class="afterTitle required">出差类型</td> <td class="afterTitle"> <select lay-filter="ccType" id="ccType" name="ccType" lay-verify="required"> <option value="">请选择出差类型</option> <c:forEach items="${cp:DICTIONARY('OA_CCLX')}" var="row"> <option value="${row.dataCode }">${row.dataValue }</option> </c:forEach> </select> </td> </tr> <tr > <th rowspan="2" class="afterTitle">日期</th> <th colspan="2" rowspan="2" class="afterTitle">起止地点</th> <th rowspan="2" class="afterTitle">天数</th> <th colspan="2" class="afterTitle">差旅费</th> <th rowspan="2" class="afterTitle">交通费</th> <th rowspan="2" class="afterTitle">住宿费</th> <th rowspan="2" class="afterTitle">出差补助</th> <th rowspan="2" class="afterTitle">说明</th> </tr> <tr > <th class="afterTitle">交通工具</th> <th class="afterTitle">金额(元)</th> </tr> <tr> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="travelTime3" lay-verify="required" placeholder="请选择日期" class="layui-input" autocomplete="off" > </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="startSite3" placeholder="出发地" lay-verify="required" class="layui-input" value="" > </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="endSite3" class="layui-input" lay-verify="required" value="" placeholder="到达地"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="days3" lay-verify="required" class="layui-input" onkeyup="checkNumTs(this)" value="" placeholder="天数"> </div> </td> <td > <select lay-filter="travelTool" id="travelTool3" name="travelTool" lay-verify="required" > <option value="">请选择交通工具</option> <c:forEach items="${cp:DICTIONARY('JTGJ')}" var="row"> <option value="${row.dataCode }">${row.dataValue }</option> </c:forEach> </select> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="travelCosts3" class="layui-input" value=""lay-verify="required" onkeyup="checkNum(this,'CLFJE')" onfocus='this.select()' onchange="toDecimal(this)" placeholder="差旅费金额" > </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="jtCosts3" name="travelCosts" lay-verify="required" onkeyup="checkNum(this,'JTF')" onfocus='this.select()' onchange="toDecimal(this)" class="layui-input" value="" placeholder="交通费"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="zsCosts3" name="zsCosts" lay-verify="required" onkeyup="checkNum(this,'ZSF')" onfocus='this.select()' onchange="toDecimal(this)" class="layui-input" value="" placeholder="住宿费"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="ccbz3" lay-verify="required" class="layui-input" onkeyup="checkNum(this,'CCBZ')" onfocus='this.select()' onchange="toDecimal(this)" value="" placeholder="出差补助"> </div> </td> <td > <textarea type="text" id="remark3" name="remark3" class="layui-textarea" maxlength="1000" placeholder="可输入1000字"></textarea> </td> </tr> <tr> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="travelTime4" lay-verify="required" placeholder="请选择日期" class="layui-input" autocomplete="off" > </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="startSite4" placeholder="出发地" lay-verify="required" class="layui-input" value="" > </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="endSite4" class="layui-input" lay-verify="required" value="" placeholder="到达地"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="days4" lay-verify="required" class="layui-input" onkeyup="checkNumTs(this)" value="" placeholder="天数"> </div> </td> <td > <select lay-filter="travelTool" id="travelTool4" name="travelTool" lay-verify="required" > <option value="">请选择交通工具</option> <c:forEach items="${cp:DICTIONARY('JTGJ')}" var="row"> <option value="${row.dataCode }">${row.dataValue }</option> </c:forEach> </select> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="travelCosts4" class="layui-input" value=""lay-verify="required" onkeyup="checkNum(this,'CLFJE')" onfocus='this.select()' onchange="toDecimal(this)" placeholder="差旅费金额"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="jtCosts4" name="travelCosts" lay-verify="required" onkeyup="checkNum(this,'JTF')" onfocus='this.select()' onchange="toDecimal(this)" class="layui-input" value="" placeholder="交通费"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="zsCosts4" name="zsCosts" lay-verify="required" onkeyup="checkNum(this,'ZSF')" onfocus='this.select()' onchange="toDecimal(this)" class="layui-input" value="" placeholder="住宿费"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="ccbz4" lay-verify="required" class="layui-input" onkeyup="checkNum(this,'CCBZ')" onfocus='this.select()' onchange="toDecimal(this)" value="" placeholder="出差补助"> </div> </td> <td > <textarea type="text" id="remark4" name="remark4" class="layui-textarea" maxlength="1000" placeholder="可输入1000字"></textarea> </td> </tr> <tr> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="travelTime5" lay-verify="required" placeholder="请选择日期" class="layui-input" autocomplete="off" > </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="startSite5" placeholder="出发地" lay-verify="required" class="layui-input" value="" > </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="endSite5" class="layui-input" lay-verify="required" value="" placeholder="到达地"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="days5" lay-verify="required" class="layui-input" onkeyup="checkNumTs(this)" value="" placeholder="天数"> </div> </td> <td > <select lay-filter="travelTool" id="travelTool5" name="travelTool" lay-verify="required" > <option value="">请选择交通工具</option> <c:forEach items="${cp:DICTIONARY('JTGJ')}" var="row"> <option value="${row.dataCode }">${row.dataValue }</option> </c:forEach> </select> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="travelCosts5" class="layui-input" value=""lay-verify="required" onkeyup="checkNum(this,'CLFJE')" onfocus='this.select()' onchange="toDecimal(this)" placeholder="差旅费金额"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="jtCosts5" name="travelCosts" lay-verify="required" onkeyup="checkNum(this,'JTF')" onfocus='this.select()' onchange="toDecimal(this)" class="layui-input" value="" placeholder="交通费"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="zsCosts5" name="zsCosts" lay-verify="required" onkeyup="checkNum(this,'ZSF')" onfocus='this.select()' onchange="toDecimal(this)" class="layui-input" value="" placeholder="住宿费"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="ccbz5" lay-verify="required" class="layui-input" onkeyup="checkNum(this,'CCBZ')" onfocus='this.select()' onchange="toDecimal(this)" value="" placeholder="出差补助"> </div> </td> <td > <textarea type="text" id="remark5" name="remark5" class="layui-textarea" maxlength="1000" placeholder="可输入1000字"></textarea> </td> </tr> <tr> <td > <div class="addinput"> <img alt="" style="width: 30px;" src="${pageContext.request.contextPath}/ui/images/add.png" onclick="add('T')"> <img alt="" style="width: 30px;" src="${pageContext.request.contextPath}/ui/images/remove.png" onclick="remove('T')"> </div> </td> <td colspan="2"> 小计 </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="tsXjT" name="tsXj" class="layui-input" value="${object.tsXj}" disabled placeholder="系统自动计算天数"> </div> </td> <td > </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="jeXjT" name="jeXj" class="layui-input" value="" disabled placeholder="系统自动计算金额" > </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="jtfXjT" name="jtfXj" class="layui-input" value="" disabled placeholder="系统自动计算交通费"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="zsfXjT" name="zsfXj" class="layui-input" value="" disabled placeholder="系统自动计算住宿费"> </div> </td> <td > <div class="layui-input-inline tdcontent" > <input type="text" id="ccbzXjT" name="ccbzXj" class="layui-input" value="" disabled placeholder="系统自动计算出差补助"> </div> </td> <td > </td> </tr> <tr> <td > 合计(大写) </td> <td colspan="9"> <div class="layui-input-inline tdcontent" > <input type="text" id="hjDxT" name="hjDx" class="layui-input" value="${object.hjDx}" disabled> </div> </td> </tr> <tr> <td > 合计(小写) </td> <td colspan="9"> <div class="layui-input-inline tdcontent" > <input type="text" id="hjXxT" name="hjXx" class="layui-input" value="${object.hjXx}" disabled> </div> </td> </tr> </tbody> </table> </c:if> <%------------------------------------------------------差旅报销end------------------------------------------------------------------%> <br> <table class="viewTable" > <tbody> <tr> <th>附件</th> <td colspan="4"> <div style="width: 100%;"> <input type="hidden" id="files" name="files" value="${object.files}"/> </div> </td> </tr> </tbody> </table> <div style="text-align: center;margin-top: 20px" > <button class="layui-btn" lay-submit="" lay-filter="formSubmitZc" type="button">暂存</button> <button class="layui-btn" lay-submit="" lay-filter="formSubmit" type="button">提交</button> <%--<button class="layui-btn layui-btn-primary" onclick="CloseWin()">关闭</button>--%> </div> </form> <script type="text/javascript"> var basePath= "${pageContext.request.contextPath}"; var sxfgythpath = "${cp:SYS_VALUE('sxfgythpath')}"; setTimeout(function(){},'1000'); index = setInterval(setUpload, '1000'); function setUpload() { //判断是否为函数 try { if (typeof $('#files', null).uploader === "function") { //是函数 其中 FunName 为函数名称 clearInterval(index);//调用成功之后清除掉定时器(js加载顺序有点随机,以定时器去保证调用成功) $('#files', null).uploader({ UploaderPath: window.UploaderPath, // 文件服务器路径 ViewContextPath: window.UploaderPath, info: { optId: 'expense-info' // 业务模块ID(对应的业务功能模块,比如 :收件箱) ,osId:'oa' }, //extFilters: [".docx", ".doc", ".png", ".jpeg", ".jpg", ".pdf"] }); } else { //不是函数 console.log("not is function"); } } catch (e) { } } </script> </html>
layui.config({ base: "/oa/modules/util/"//自定义加载的模块 }).use(['form','layer','jquery','layedit','laydate','laypage','table','commUtil','element'],function(){ var form = layui.form, layer = parent.layer === undefined ? layui.layer : parent.layer, curlayer = layui.layer, laypage = layui.laypage, layedit = layui.layedit, laydate = layui.laydate, $ = layui.jquery; var table = layui.table; var commUtil = layui.commUtil; var element = layui.element; var year = new Date().getFullYear(); var month = new Date().getMonth() + 1; var day = new Date().getDate(); var todayTime = year + '-' + appendZero(month) + '-' + appendZero(day);//当前时间出来 var rownum=0; var allnum=0; var coluum=0; /** *差旅的开始和结束时间 * @type {number} */ var nowTime = new Date().valueOf(); var start = laydate.render({ elem: '#startTime', type: 'date', //max: nowTime, btns: ['clear', 'confirm'], done: function(value, date){ //endMax = end.config.max; end.config.min = date; end.config.min.month = date.month -1; } }); var end = laydate.render({ elem: '#endTime', type: 'date', // max: nowTime, done: function(value, date){ if($.trim(value) == ''){ var curDate = new Date(); date = {'date': curDate.getDate(), 'month': curDate.getMonth()+1, 'year': curDate.getFullYear()}; } start.config.max = date; start.config.max.month = date.month -1; } }); //申请时间 var start = laydate.render({ elem: '#applyTime', type: 'date', trigger: 'click', value:todayTime, calendar: true, done: function(value, date, endDate){ } }); //TODO 差旅报销校验单据数 window.checkNumDjOne = function (date) { var totalDj=0; var num=date.value; if(num!=0){ //var reg = /^(?!(0[0-9]{0,}$))[0-9]{1,}[.]{0,}[0-9]{0,}$/; //>0不包括0的整数正则 var reg = /^[1-9]\d*$/; if (reg.test(num)) { $("#djNum").val(""); }else{ date.value=""; layer.msg("请输入正整数!", {icon: 0}); } } } //TODO 费用报销计算单据总数 window.checkNumDj = function (date) { var totalDj=0; var num=date.value; if(num!=0){ //var reg = /^(?!(0[0-9]{0,}$))[0-9]{1,}[.]{0,}[0-9]{0,}$/; //>0不包括0的整数正则 var reg = /^[1-9]\d*$/; if (reg.test(num)) { var tableObj = document.getElementById("baoxiao"); //-3是因为后边三行不计算 for (var i = 1; i < tableObj.rows.length-3; i++) { //遍历Table的所有Row if(tableObj.rows[i].cells[3].getElementsByTagName("input")[0].value!=""){ totalDj += parseFloat(tableObj.rows[i].cells[3].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } /*alert(tableObj.rows[i].cells[3].innerHTML);*/ } $("#djNum").val(totalDj); }else{ date.value=""; layer.msg("请输入正整数!", {icon: 0}); } } } //TODO 差旅报销计算天数总数 window.checkNumTs = function (date) { var totalDj=0; var num=date.value; if(num!=0){ var reg = /^(?!(0[0-9]{0,}$))[0-9]{1,}[.]{0,}[0-9]{0,}$/; //>0不包括0的整数正则 /*var reg = /^[1-9]\d*$/;*/ if (reg.test(num)) { var tableObj = document.getElementById("baoxiaoT"); //-3是因为后边三行不计算 for (var i = 3; i < tableObj.rows.length-3; i++) { //遍历Table的所有Row 第四列天数计算总和 /*alert(tableObj.rows[i].cells[3].innerHTML);*/ if(tableObj.rows[i].cells[3].getElementsByTagName("input")[0].value!=""){ totalDj += parseFloat(tableObj.rows[i].cells[3].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } } $("#tsXjT").val(totalDj); }else{ date.value=""; layer.msg("请输入正数!", {icon: 0}); } } } //TODO 合计小写转大写 将数字自动转换成保留两位小数的金额 计算金额 window.checkNum = function (date,types) { if('FYBX'==types){//费用报销计算小计合计 var tmpVal = date.value; var totalXj=0; if (tmpVal) { var tmpVal = tmpVal.replace(/[^\d\.]/g, ''); var reg = /^(0|([1-9]\d*))(\.\d{1,2})?$/; //正则验证保留 最多允许后输入两位小数 if (!reg.test(tmpVal)) { tmpVal = tmpVal + ""; tmpVal = tmpVal.substring(0, tmpVal.indexOf(".") + 3); var n = (tmpVal.split('.')).length - 1; if (n > 1) { tmpVal = tmpVal.substring(0, tmpVal.indexOf(".")); } } date.value = tmpVal; var tableObj = document.getElementById("baoxiao"); //-3是因为后边三行不计算 for (var i = 1; i < tableObj.rows.length-3; i++) { //遍历Table的所有Row if(tableObj.rows[i].cells[2].getElementsByTagName("input")[0].value!=""){ totalXj += parseFloat(tableObj.rows[i].cells[2].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } } var f = Math.round(totalXj * 100) / 100; var s = f.toString(); var rs = s.indexOf('.'); if (rs < 0) { rs = s.length; s += '.'; } while (s.length <= rs + 2) { s += '0'; } $("#jeXj").val(s); $("#hjXx").val(s); $("#hjDx").val( changeNumMoneyToChinese(s)); } else { date.value = ""; } }else{//报销填写自动计算 var tmpVal = date.value; var totalXj=0; if (tmpVal) { var tmpVal = tmpVal.replace(/[^\d\.]/g, ''); var reg = /^(0|([1-9]\d*))(\.\d{1,2})?$/; //正则验证保留 最多允许后输入两位小数 if (!reg.test(tmpVal)) { tmpVal = tmpVal + ""; tmpVal = tmpVal.substring(0, tmpVal.indexOf(".") + 3); var n = (tmpVal.split('.')).length - 1; if (n > 1) { tmpVal = tmpVal.substring(0, tmpVal.indexOf(".")); } } date.value = tmpVal; var tableObj = document.getElementById("baoxiaoT"); //-3是因为后边三行不计算 i=3表示从第二行开始 for (var i = 3; i < tableObj.rows.length-3; i++) { //遍历Table的所有Row if('CLFJE'==types){//差旅费金额 if(tableObj.rows[i].cells[5].getElementsByTagName("input")[0].value!=""){ totalXj += parseFloat(tableObj.rows[i].cells[5].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } }else if('JTF'==types){//交通费 if(tableObj.rows[i].cells[6].getElementsByTagName("input")[0].value!=""){ totalXj += parseFloat(tableObj.rows[i].cells[6].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } }else if('ZSF'==types){//住宿费 if(tableObj.rows[i].cells[7].getElementsByTagName("input")[0].value!=""){ totalXj += parseFloat(tableObj.rows[i].cells[7].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } }else if('CCBZ'==types){//出差补助 if(tableObj.rows[i].cells[8].getElementsByTagName("input")[0].value!=""){ totalXj += parseFloat(tableObj.rows[i].cells[8].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } } } if('CLFJE'==types){//差旅费金额 $("#jeXjT").val(appendZeroNew(totalXj)); }else if('JTF'==types){//交通费 $("#jtfXjT").val(appendZeroNew(totalXj)); }else if('ZSF'==types){//住宿费 $("#zsfXjT").val(appendZeroNew(totalXj)); }else if('CCBZ'==types){//出差补助 $("#ccbzXjT").val(appendZeroNew(totalXj)); } var jeXjT=$("#jeXjT").val()==""?"0":$("#jeXjT").val(); var jtfXjT=$("#jtfXjT").val()==""?"0":$("#jtfXjT").val(); var zsfXjT=$("#zsfXjT").val()==""?"0":$("#zsfXjT").val(); var ccbzXjT=$("#ccbzXjT").val()==""?"0":$("#ccbzXjT").val(); var heJi=parseFloat(jeXjT)+parseFloat(jtfXjT)+parseFloat(zsfXjT)+parseFloat(ccbzXjT) $("#hjXxT").val(heJi); $("#hjDxT").val( changeNumMoneyToChinese(heJi)); } else { date.value = ""; } } } //补零 function appendZeroNew(obj) { var f = Math.round(obj * 100) / 100; var s = f.toString(); var rs = s.indexOf('.'); if (rs < 0) { rs = s.length; s += '.'; } while (s.length <= rs + 2) { s += '0'; } return s; } //费用报销表单报销费用类型和实际费用类型关联 字段处理 form.on('select', function(obj){ var selectId=obj.elem.getAttribute("id"); //报销费用类型 和实际费用类型级联,选实际费用类型之前,必须选报销费用类型 var text=selectId.substring(selectId.length-1,selectId.length); var text1=selectId.substring(0,selectId.length-1); //如果选择的是实际费用类型,需要判断对应行的报销费用类型是否选择,没有选择就提示 if($("#bxfyType"+text).val()=="" && text1.indexOf("sjfyType")>-1){ layer.msg("请先选择报销费用类型", {icon: 0}); }else{ //如果是实际费用类型 if(text1.indexOf("bxfyType")>-1){ //如果选择的是报销费用类型,需要对应的加载实际费用类型 var extraCode=$("#"+selectId).val(); $.get(basePath+'/service/commomGetInfo/getDictionary/bxfyType', function(data){ var jsonArr = new Array(); jsonArr=data.data; var html="<option value=''>请选择实际费用</option>"; for(var i=0;i<jsonArr.length;i++){ if(extraCode==jsonArr[i].extraCode){ html+="<option value='"+jsonArr[i].dataCode+"'>"+jsonArr[i].dataValue+"</option>"; } } $('#sjfyType'+text).html(html); form.render('select'); }); } } }); //费用报销表单 字段处理 form.on('select(bxfyType)', function(obj){ var rows = $(_this).closest("tr").index(); var extraCode=$("#bxfyType").val(); $.get(basePath+'/service/commomGetInfo/getDictionary/bxfyType', function(data){ var jsonArr = new Array(); jsonArr=data.data; var html="<option value=''>请选择实际费用</option>"; for(var i=0;i<jsonArr.length;i++){ if(extraCode==jsonArr[i].extraCode){ html+="<option value='"+jsonArr[i].dataCode+"'>"+jsonArr[i].dataValue+"</option>"; } } $('#sjfyType').html(html); form.render('select'); }); }); form.on('select(sjfyType)', function(obj){ var extraCode=$("#bxfyType").val(); if(extraCode==""){ layer.msg("请先选择报销费用类型", {icon: 0}); } }); //添加行 window.add = function (a) { if(a=='T'){//差旅报销表单添加行 allnum = $("#baoxiaoT").find("tr").length; //给当前行后边加一行 在小计上边添加行 var i=allnum-4; //获取table第一行 $("#tab tr").eq(0) //获取table倒数第二行 $("#tab tr").eq(-2) var $tr=$("#baoxiaoT tr").eq(i); var num=allnum-3;//最后三行不计算在内 if(allnum<12){ //获取字典项的值 $.get(basePath+'/service/commomGetInfo/getDictionary/JTGJ', function(data){ var jsonArr = new Array(); jsonArr=data.data; var html1="<option value=''>请选择交通工具</option>"; for(var i=0;i<jsonArr.length;i++){ html1+="<option value='"+jsonArr[i].dataCode+"'>"+jsonArr[i].dataValue+"</option>"; } //添加行 var trHtml="<tr>" + " <td ><div class='layui-input-inline tdcontent' >" + " <input type=\"text\" id='travelTime"+num+"' lay-verify=\"required\" placeholder=\"请选择日期\" class=\"layui-input\" autocomplete=\"off\" ></div>" + " </td>" + " <td ><div class='layui-input-inline tdcontent'>" + " <input type=\"text\" id='startSite"+num+"' placeholder=\"出发地\" lay-verify=\"required\" class=\"layui-input\" value=\"\" ></div>" + " </td>" + " <td ><div class=\"layui-input-inline tdcontent\" >" + " <input type=\"text\" id='endSite"+num+"' class=\"layui-input\" lay-verify=\"required\" value=\"\" placeholder=\"到达地\"> </div>" + " </td>" + " <td ><div class=\"layui-input-inline tdcontent\" >" + " <input type=\"text\" id='days"+num+"' lay-verify=\"required\" class=\"layui-input\" value=\"\" placeholder=\"天数\"" + " onkeyup=\"checkNumTs(this)\" > </div>" + " </td>" + " <td ><select id='travelTool"+num+"' lay-filter=\"travelTool\" name=\"travelTool\" lay-verify=\"required\" > " +html1+"</select>" + " </td> " + " <td ><div class=\"layui-input-inline tdcontent\" >" + " <input type=\"text\" id='travelCosts"+num+"' lay-verify=\"required\" class=\"layui-input\" value=\"\" placeholder=\"差旅费金额\"" + " onkeyup=\"checkNum(this,'CLFJE')\" onfocus=\"this.select()\" onchange=\"toDecimal(this)\" > </div>" + " </td>" + " <td ><div class=\"layui-input-inline tdcontent\" >" + " <input type=\"text\" id='jtCosts"+num+"' lay-verify=\"required\" class=\"layui-input\" value=\"\" placeholder=\"交通费\"" + " onkeyup=\"checkNum(this,'JTF')\" onfocus=\"this.select()\" onchange=\"toDecimal(this)\" > </div>" + " </td>" + " <td ><div class=\"layui-input-inline tdcontent\" >" + " <input type=\"text\" id='zsCosts"+num+"' lay-verify=\"required\" class=\"layui-input\" value=\"\" placeholder=\"住宿费\"" + " onkeyup=\"checkNum(this,'ZSF')\" onfocus=\"this.select()\" onchange=\"toDecimal(this)\" > </div>" + " </td>" + " <td ><div class=\"layui-input-inline tdcontent\" >" + " <input type=\"text\" id='ccbz"+num+"' lay-verify=\"required\" class=\"layui-input\" value=\"\" placeholder=\"出差补助\"" + " onkeyup=\"checkNum(this,'CCBZ')\" onfocus=\"this.select()\" onchange=\"toDecimal(this)\"> </div>" + " </td>" + " <td ><textarea type=\"text\" id='remark"+num+"' name='remark"+num+"' class=\"layui-textarea\" maxlength=\"1000\" placeholder=\"可输入1000字\"></textarea> " + " </td>"+ " </tr>"; //当前行之后插入一行 $tr.after(trHtml); form.render(); var start = laydate.render({ elem: '#travelTime'+num, type: 'date', trigger: 'click', /*value:todayTime,*/ calendar: true, done: function(value, date, endDate){ } }); }); }else{ top.layer.msg("最多只能添加6条明细!", {icon: 0}); } }else{//费用表单添加行 allnum = $("#baoxiao").find("tr").length; //给当前行后边加一行 var i=allnum-4; //获取table第一行 $("#tab tr").eq(0) //获取table倒数第二行 $("#tab tr").eq(-2) var $tr=$("#baoxiao tr").eq(i); var html=""; var num=allnum-3; if(allnum<10){ //获取字典项的值 $.get(basePath+'/service/commomGetInfo/getDictionary/bxfyType', function(data){ var jsonArr = new Array(); jsonArr=data.data; html="<option value=''>请选择报销费用</option>"; var html1="<option value=''>请选择实际费用</option>"; for(var i=0;i<jsonArr.length;i++){ if(jsonArr[i].extraCode==undefined){ html+="<option value='"+jsonArr[i].dataCode+"'>"+jsonArr[i].dataValue+"</option>"; } } //添加行 var trHtml="<tr>" + " <td ><select lay-filter='bxfyType"+num+"' id='bxfyType"+num+"' lay-verify=\"required\">" +html+ " </select></td>" + " <td ><select lay-filter='sjfyType"+num+"' id='sjfyType"+num+"' lay-verify=\"required\" >"+html1+"</select></td>" + " <td ><div class=\"layui-input-inline tdcontent\" >" + " <input type=\"text\" id='costs"+num+"' class=\"layui-input\" value=\"\" lay-verify=\"required\" " + " onkeyup=\"checkNum(this,'FYBX')\" onfocus=\"this.select()\" onchange=\"toDecimal(this)\" placeholder=\"金额\"></div>" + " <td ><div class=\"layui-input-inline tdcontent\" ><input type=\"text\" id='documnetNumber"+num+"' onkeyup=\"checkNumDj(this)\" placeholder=\"单据张数\" class=\"layui-input\" value=\"\" lay-verify=\"required\">" + " </div></td><td ><textarea type=\"text\" id='remark"+num+"' name='remark"+num+"' class=\"layui-textarea\" maxlength=\"1000\" placeholder=\"可输入1000字\"></textarea> " + " </td></tr>"; //当前行之后插入一行 $tr.after(trHtml); form.render(); }); }else{ top.layer.msg("最多只能添加6条明细!", {icon: 0}); } } if(typeof frameWH != 'undefined' && frameWH instanceof Function){ frameWH(); } } //删除行 window.remove = function (a) { if(a=='T') {//差旅报销表单添删除行 //allnum-3 因为后三行固定必须有,第一行也必须有不能删 allnum = $("#baoxiaoT").find("tr").length; var i=allnum-4; if(i==3){ top.layer.msg("第一行不能删除!", {icon: 0}); }else{ $("#baoxiaoT tr:eq(" + i + ")").remove(); i--; } var totalTs=0; //删除后重新计算单据数据 var tableObj = document.getElementById("baoxiaoT"); //-3是因为后边三行不计算 for (var i = 3; i < tableObj.rows.length-3; i++) { //遍历Table的所有Row 第四列天数计算总和 if(tableObj.rows[i].cells[3].getElementsByTagName("input")[0].value!=""){ totalTs += parseFloat(tableObj.rows[i].cells[3].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } } $("#tsXjT").val(totalTs); //删除行重新计算合计小写 var totalXj=0; var CLFJEXj=0; var JTFXj=0; var ZSFXj=0; var CCBZXj=0; //-3是因为后边三行不计算 i=3表示从第二行开始 for (var i = 3; i < tableObj.rows.length-3; i++) { //遍历Table的所有Row //差旅费金额 if(tableObj.rows[i].cells[5].getElementsByTagName("input")[0].value!=""){ CLFJEXj += parseFloat(tableObj.rows[i].cells[5].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } //交通费 if(tableObj.rows[i].cells[6].getElementsByTagName("input")[0].value!=""){ JTFXj += parseFloat(tableObj.rows[i].cells[6].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } //住宿费 if(tableObj.rows[i].cells[7].getElementsByTagName("input")[0].value!=""){ ZSFXj += parseFloat(tableObj.rows[i].cells[7].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } //出差补助 if(tableObj.rows[i].cells[8].getElementsByTagName("input")[0].value!=""){ CCBZXj += parseFloat(tableObj.rows[i].cells[8].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } } $("#jeXjT").val(appendZeroNew(CLFJEXj)); $("#jtfXjT").val(appendZeroNew(JTFXj)); $("#zsfXjT").val(appendZeroNew(ZSFXj)); $("#ccbzXjT").val(appendZeroNew(CCBZXj)); var jeXjT=$("#jeXjT").val()==""?"0":$("#jeXjT").val(); var jtfXjT=$("#jtfXjT").val()==""?"0":$("#jtfXjT").val(); var zsfXjT=$("#zsfXjT").val()==""?"0":$("#zsfXjT").val(); var ccbzXjT=$("#ccbzXjT").val()==""?"0":$("#ccbzXjT").val(); var heJi=parseFloat(jeXjT)+parseFloat(jtfXjT)+parseFloat(zsfXjT)+parseFloat(ccbzXjT) $("#hjXxT").val(heJi); $("#hjDxT").val( changeNumMoneyToChinese(heJi)); }else{ //allnum-3 因为后三行固定必须有,第一行也必须有不能删 allnum = $("#baoxiao").find("tr").length; var i=allnum-4; if(i==1){ top.layer.msg("第一行不能删除!", {icon: 0}); }else{ $("#baoxiao tr:eq(" + i + ")").remove(); i--; } var totalDj=0; //删除后重新计算单据数据 var tableObj = document.getElementById("baoxiao"); //-3是因为后边三行不计算 for (var i = 1; i < tableObj.rows.length-3; i++) { //遍历Table的所有Row if(tableObj.rows[i].cells[3].getElementsByTagName("input")[0].value!=""){ totalDj += parseFloat(tableObj.rows[i].cells[3].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } /*alert(tableObj.rows[i].cells[3].innerHTML);*/ } $("#djNum").val(totalDj); //删除行重新计算合计小写 var totalXj=0; var tableObjHj = document.getElementById("baoxiao"); //-3是因为后边三行不计算 for (var i = 1; i < tableObj.rows.length-3; i++) { //遍历Table的所有Row if(tableObjHj.rows[i].cells[2].getElementsByTagName("input")[0].value!=""){ totalXj += parseFloat(tableObj.rows[i].cells[2].getElementsByTagName("input")[0].value); //获取Table中单元格的内容 } } var f = Math.round(totalXj * 100) / 100; var s = f.toString(); var rs = s.indexOf('.'); if (rs < 0) { rs = s.length; s += '.'; } while (s.length <= rs + 2) { s += '0'; } $("#jeXj").val(s); $("#hjXx").val(s); $("#hjDx").val( changeNumMoneyToChinese(s)); } if(typeof frameWH != 'undefined' && frameWH instanceof Function){ frameWH(); } } //监听提交 form.on('submit(formSubmit)', function(data){ var loading = curlayer.load(2, {offset: ['40%', '50%'], shade: [0.1, '#3595CC'], area: ['10%', '10%']}); var recId='0'; var tableValues = []; if(data.field.recId!=''){ recId=data.field.recId; } data.field.states='2';// 0审批完成 1驳回待处理 2待审批 3暂存 if(data.field.expenseType=="0"){//费用报销 var table=document.getElementById("baoxiao"); var rows=table.rows; for(var i=1;i<rows.length-3;i++) { var rowobj = {}; for(var j=0;j<rows[i].cells.length;j++) { //alert(); if(j==0){//第一列 bxfyType1 var val = $("#bxfyType"+i).val(); rowobj['bxfyType'] = val; }else if(j==1){ var val = $("#sjfyType"+i).val(); rowobj['sjfyType'] = val; }else if(j==2){ var val = $("#costs"+i).val(); rowobj['costs'] = val; }else if(j==3){ var val = $("#documnetNumber"+i).val(); rowobj['documnetNumber'] = val; }else if(j==4){ /*var val = $("#remark"+i).text();*/ var val =$("textarea[name='remark"+i+"']").val(); rowobj['remark'] = val; } } tableValues.push(rowobj); } }else{//差旅报销 var table=document.getElementById("baoxiaoT"); var rows=table.rows; for(var i=3;i<rows.length-3;i++) { var rowobj = {}; for(var j=0;j<rows[i].cells.length;j++) { //alert(); if(j==0){//第一列 travelTime var val = $("#travelTime"+i).val(); rowobj['travelTime'] = val; }else if(j==1){ var val = $("#startSite"+i).val(); rowobj['startSite'] = val; }else if(j==2){ var val = $("#endSite"+i).val(); rowobj['endSite'] = val; }else if(j==3){ var val = $("#days"+i).val(); rowobj['days'] = val; }else if(j==4){ var val = $("#travelTool"+i).val(); rowobj['travelTool'] = val; }else if(j==5){ var val = $("#travelCosts"+i).val(); rowobj['travelCosts'] = val; }else if(j==6){ var val = $("#jtCosts"+i).val(); rowobj['jtCosts'] = val; }else if(j==7){ var val = $("#zsCosts"+i).val(); rowobj['zsCosts'] = val; }else if(j==8){ var val = $("#ccbz"+i).val(); rowobj['ccbz'] = val; }else if(j==9){ var val =$("textarea[name='remark"+i+"']").val(); rowobj['remark'] = val; } } tableValues.push(rowobj); } } var expenseList=JSON.stringify(tableValues) data.field.lists=expenseList; $.ajax({ type: "PUT", url: basePath+'/service/expenseManage/expense/'+recId, data: data.field, /*async:false,*/ dataType: "json", success: function(data){ if(data.code=='0'){ curlayer.close(loading); layer.msg("操作成功", {icon: 1}); parent.location.reload(); } else { curlayer.close(loading); layer.msg("操作失败", {icon: 0}); } } }); }); //监听暂存 form.on('submit(formSubmitZc)', function(data){ var loading = curlayer.load(2, {offset: ['40%', '50%'], shade: [0.1, '#3595CC'], area: ['10%', '10%']}); var recId='0'; var tableValues = []; if(data.field.recId!=''){ recId=data.field.recId; } if(data.field.expenseType=="0"){//费用报销 var table=document.getElementById("baoxiao"); var rows=table.rows; for(var i=1;i<rows.length-3;i++) { var rowobj = {}; for(var j=0;j<rows[i].cells.length;j++) { //alert(); if(j==0){//第一列 bxfyType1 var val = $("#bxfyType"+i).val(); rowobj['bxfyType'] = val; }else if(j==1){ var val = $("#sjfyType"+i).val(); rowobj['sjfyType'] = val; }else if(j==2){ var val = $("#costs"+i).val(); rowobj['costs'] = val; }else if(j==3){ var val = $("#documnetNumber"+i).val(); rowobj['documnetNumber'] = val; }else if(j==4){ /*var val = $("#remark"+i).text();*/ var val =$("textarea[name='remark"+i+"']").val(); rowobj['remark'] = val; } } tableValues.push(rowobj); } }else{//差旅报销 var table=document.getElementById("baoxiaoT"); var rows=table.rows; for(var i=3;i<rows.length-3;i++) { var rowobj = {}; for(var j=0;j<rows[i].cells.length;j++) { //alert(); if(j==0){//第一列 travelTime var val = $("#travelTime"+i).val(); rowobj['travelTime'] = val; }else if(j==1){ var val = $("#startSite"+i).val(); rowobj['startSite'] = val; }else if(j==2){ var val = $("#endSite"+i).val(); rowobj['endSite'] = val; }else if(j==3){ var val = $("#days"+i).val(); rowobj['days'] = val; }else if(j==4){ var val = $("#travelTool"+i).val(); rowobj['travelTool'] = val; }else if(j==5){ var val = $("#travelCosts"+i).val(); rowobj['travelCosts'] = val; }else if(j==6){ var val = $("#jtCosts"+i).val(); rowobj['jtCosts'] = val; }else if(j==7){ var val = $("#zsCosts"+i).val(); rowobj['zsCosts'] = val; }else if(j==8){ var val = $("#ccbz"+i).val(); rowobj['ccbz'] = val; }else if(j==9){ var val =$("textarea[name='remark"+i+"']").val(); rowobj['remark'] = val; } } tableValues.push(rowobj); } } var expenseList=JSON.stringify(tableValues) data.field.lists=expenseList; data.field.states='3';// 0审批完成 1驳回待处理 2待审批 3暂存 $.ajax({ type: "PUT", url: basePath+'/service/expenseManage/expense/'+recId, data: data.field, /*async:false,*/ dataType: "json", success: function(data){ if(data.code=='0'){ curlayer.close(loading); layer.msg("操作成功", {icon: 1}); parent.location.reload(); } else { curlayer.close(loading); layer.msg("操作失败", {icon: 0}); } } }); }); //退回重新提交流程 form.on('submit(revertFormSubmit)', function(data){ Loading(); var recId='0'; var tableValues = []; if(data.field.recId!=''){ recId=data.field.recId; } data.field.states='2';// 0审批完成 1驳回待处理 2待审批 3暂存 if(data.field.expenseType=="0"){//费用报销 var table=document.getElementById("baoxiao"); var rows=table.rows; for(var i=1;i<rows.length-3;i++) { var rowobj = {}; for(var j=0;j<rows[i].cells.length;j++) { //alert(); if(j==0){//第一列 bxfyType1 var val = $("#bxfyType"+i).val(); rowobj['bxfyType'] = val; }else if(j==1){ var val = $("#sjfyType"+i).val(); rowobj['sjfyType'] = val; }else if(j==2){ var val = $("#costs"+i).val(); rowobj['costs'] = val; }else if(j==3){ var val = $("#documnetNumber"+i).val(); rowobj['documnetNumber'] = val; }else if(j==4){ /*var val = $("#remark"+i).text();*/ var val =$("textarea[name='remark"+i+"']").val(); rowobj['remark'] = val; } } tableValues.push(rowobj); } }else{//差旅报销 var table=document.getElementById("baoxiaoT"); var rows=table.rows; for(var i=3;i<rows.length-3;i++) { var rowobj = {}; for(var j=0;j<rows[i].cells.length;j++) { //alert(); if(j==0){//第一列 travelTime var val = $("#travelTime"+i).val(); rowobj['travelTime'] = val; }else if(j==1){ var val = $("#startSite"+i).val(); rowobj['startSite'] = val; }else if(j==2){ var val = $("#endSite"+i).val(); rowobj['endSite'] = val; }else if(j==3){ var val = $("#days"+i).val(); rowobj['days'] = val; }else if(j==4){ var val = $("#travelTool"+i).val(); rowobj['travelTool'] = val; }else if(j==5){ var val = $("#travelCosts"+i).val(); rowobj['travelCosts'] = val; }else if(j==6){ var val = $("#jtCosts"+i).val(); rowobj['jtCosts'] = val; }else if(j==7){ var val = $("#zsCosts"+i).val(); rowobj['zsCosts'] = val; }else if(j==8){ var val = $("#ccbz"+i).val(); rowobj['ccbz'] = val; }else if(j==9){ var val =$("textarea[name='remark"+i+"']").val(); rowobj['remark'] = val; } } tableValues.push(rowobj); } } var expenseList=JSON.stringify(tableValues) data.field.lists=expenseList; $.ajax({ type: "PUT", url: basePath+'/service/expenseManage/expense/resubmit', data: data.field, /*async:false,*/ dataType: "json", success: function(data){ /*if(data.code=='0'){ curlayer.close(loading); layer.msg("操作成功", {icon: 1}); parent.location.reload(); } else { layer.close(index); layer.msg("操作失败", {icon: 0}); }*/ var currentlayer=parent.parent.layer; var currentparent=parent.parent; if(parent.parent.parent[0].ContextPath!=undefined){ currentlayer=parent.parent.parent.layer; currentparent=parent.parent.parent; }else{ currentlayer=parent.parent.layer; currentparent=parent.parent; } if(data.code!='0'){ layer.msg(data.data.msg, {icon:0,time: 2000}, function () { layer.closeAll(); currentparent.location.reload(); }); } else { top.layer.msg("操作成功", {icon:1}, function () { layer.closeAll(); currentparent.location.reload(); }); } } }); }); //自动补全小数点后两位 window.toDecimal = function (date) { var num=date.value; var f = Math.round(num * 100) / 100; var s = f.toString(); var rs = s.indexOf('.'); if (rs < 0) { rs = s.length; s += '.'; } while (s.length <= rs + 2) { s += '0'; } date.value=s; } //补零 function appendZero(obj) { if(obj<10) return "0" +""+ obj; else return obj; } function changeNumMoneyToChinese(money) { var cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //汉字的数字 var cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位 var cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位 var cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位 var cnInteger = "整"; //整数金额时后面跟的字符 var cnIntLast = "元"; //整型完以后的单位 var maxNum = 999999999999999.9999; //最大处理的数字 var IntegerNum; //金额整数部分 var DecimalNum; //金额小数部分 var ChineseStr = ""; //输出的中文金额字符串 var parts; //分离金额后用的数组,预定义 var Symbol="";//正负值标记 if (money == "") { return ""; } money = parseFloat(money); if (money >= maxNum) { alert('超出最大处理数字'); return ""; } if (money == 0) { ChineseStr = cnNums[0] + cnIntLast + cnInteger; return ChineseStr; } if(money<0) { money=-money; Symbol="负 "; } money = money.toString(); //转换为字符串 if (money.indexOf(".") == -1) { IntegerNum = money; DecimalNum = ''; } else { parts = money.split("."); IntegerNum = parts[0]; DecimalNum = parts[1].substr(0, 4); } if (parseInt(IntegerNum, 10) > 0) { //获取整型部分转换 var zeroCount = 0; var IntLen = IntegerNum.length; for (var i = 0; i < IntLen; i++) { var n = IntegerNum.substr(i, 1); var p = IntLen - i - 1; var q = p / 4; var m = p % 4; if (n == "0") { zeroCount++; } else { if (zeroCount > 0) { ChineseStr += cnNums[0]; } zeroCount = 0; //归零 ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } if (m == 0 && zeroCount < 4) { ChineseStr += cnIntUnits[q]; } } ChineseStr += cnIntLast; //整型部分处理完毕 } if (DecimalNum != '') { //小数部分 var decLen = DecimalNum.length; for (var i = 0; i < decLen; i++) { var n = DecimalNum.substr(i, 1); if (n != '0') { ChineseStr += cnNums[Number(n)] + cnDecUnits[i]; } } } if (ChineseStr == '') { ChineseStr += cnNums[0] + cnIntLast + cnInteger; } else if (DecimalNum == '') { ChineseStr += cnInteger; } ChineseStr = Symbol +ChineseStr; return ChineseStr; } /** * 差旅时间 */ var start = laydate.render({ elem: '#travelTime3', type: 'date', trigger: 'click', /*value:todayTime,*/ calendar: true, done: function(value, date, endDate){ } }); var start = laydate.render({ elem: '#travelTime4', type: 'date', trigger: 'click', /*value:todayTime,*/ calendar: true, done: function(value, date, endDate){ } }); var start = laydate.render({ elem: '#travelTime5', type: 'date', trigger: 'click', /*value:todayTime,*/ calendar: true, done: function(value, date, endDate){ } }); })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界