jquery 动态增加table元素

jsp页面


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

<c:set scope="request" var="sysModule" value="product" />
<c:set scope="request" var="sysPage" value="allocate_order" />


<c:set var="pageTitle" value="${gto.id == null?'添加调拨单':'编辑调拨单'}" />
<tiles:insertDefinition name="metronicTemplate">
<tiles:putAttribute name="title">${pageTitle }</tiles:putAttribute>
<tiles:putAttribute name="page-content">
<div class="row">
<div class="col-md-12">
<div class="portlet light">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-cogs font-green-sharp"></i> <span class="caption-subject font-green-sharp bold uppercase">${pageTitle }</span>
</div>
<div class="tools">
<a href="javascript:;" class="collapse"></a>
</div>
</div>
<div class="portlet-body">
<%@include file="/WEB-INF/view/include/message.jsp" %>


<form:form cssClass="form-horizontal" role="form" method="post" action="${pageContext.request.contextPath}/allocateOrder/save" id="io_order_form" modelAttribute="gto">
<input type="hidden" name="id" value="${gto.id }" />
<fieldset>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label class="control-label col-md-4">调拨单号</label>
<div class="col-md-8">
<input type="text" readonly="readonly" class="form-control" name="orderNo" value="${gto.orderNo}">
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label class="control-label col-md-4">调拨日期</label>
<div class="col-md-8">
<div class="input-group date date-picker" data-date-format="yyyy-mm-dd">
<form:input path="transferDate" maxlength="10" cssClass="form-control" />
<span class="input-group-btn">
<button class="btn default" type="button"><i class="fa fa-calendar"></i></button>
</span>
</div>
</div>
</div>
</div>
</div>

<div class="row">

<div class="col-md-4">
<div class="form-group">
<label class="control-label col-md-4">调拨出库日期</label>
<div class="col-md-8">
<input type="text" class="form-control" readonly="readonly" value="<fmt:formatDate value="${gto.ocTime}" pattern="yyyy-MM-dd HH:mm:ss" />">
</div>
</div>
</div>

<div class="col-md-4">
<div class="form-group">
<label class="control-label col-md-4">调拨入库日期</label>
<div class="col-md-8">
<input type="text" class="form-control" readonly="readonly" value="<fmt:formatDate value="${gto.orTime}" pattern="yyyy-MM-dd HH:mm:ss" />">
</div>
</div>
</div>



<div class="col-md-4">
<div class="form-group">
<label class="control-label col-md-4">备注</label>
<div class="col-md-8">
<input type="text" class="form-control" name="note" id="note" value="${gto.note}">
</div>
</div>
</div>
</div>
</fieldset>
<fieldset>
<legend>
物品信息
<c:if test="${gto.status != 2}">
<button type="button" class="btn btn-primary" data-dismiss="alert" onclick="addEditRow();">添加</button>
</c:if>
</legend>
<table class="table table-hover table-bordered table-condensed" id="IoOrder_add_table">
<thead>
<tr id="info_tr">
<th>SKU</th>
<th>名称</th>
<th>库存</th>
<th>锁定库存</th>
<th>数量</th>
<th>调出仓库</th>
<th>调出货位</th>
<th>调入仓库</th>
<th>调入货位</th>
<c:if test="${not empty gto.orTime}">
<th>实际入库数量</th>
</c:if>
<c:if test="${not empty gto.ocTime}">
<th>实际出库数量</th>
</c:if>
<th></th>
</tr>
</thead>
<tbody id="info_tb">
<c:forEach items="${gto.items}" var="item" varStatus="status">
<tr>
<td><input name="goodsSku" value="${item.goodsSku }" class="form-control input-sm" id="goodsSku_${status.index }" readonly="readonly" size="11" /></td>
<td><input name="goodsName" value="${item.goodsName }" class="form-control input-sm" id="goodsName_${status.index }" readonly="readonly" /></td>

<td><input name="inventory" value="" class="form-control input-sm" id="" readonly="readonly" size="5" /></td>
<td><input name="inventoryLock" value="" class="form-control input-sm" id="" readonly="readonly" size="5" /></td>

<td>
<input name="goodsCount" value="${item.goodsCount }" class="form-control input-sm" id="goodsCount_${status.index }" size="5" />
</td>
<!--start 出库 -->
<td>

<select class="form-control input-sm" name="fromStoreId" id="fromStoreId_${status.index }" shelfId="${item.fromStoreShelfId }">
<option value="">请选择...</option>
<c:forEach var="ss" items="${store}">
<option value="${ss.id}" ${item.fromStoreId == ss.id ? 'selected' : '' }>${ss.name}</option>
</c:forEach>
</select>

</td>
<td>
<input type="text" name="fromStoreShelf" value="${item.fromStoreShelf }" class="form-control input-sm" size="10" />
<input type="hidden" name="fromStoreShelfId" value="${item.fromStoreShelfId }" />
</td>
<!-- end 出库 -->

<!--start 入库 -->
<td>

<select class="form-control input-sm" name="toStoreId" id="toStoreId_${status.index }" shelfId="${item.toStoreShelfId }">
<option value="">请选择...</option>
<c:forEach var="ss" items="${store}">
<option value="${ss.id}" ${item.toStoreId == ss.id ? 'selected' : '' }>${ss.name}</option>
</c:forEach>
</select>

</td>
<td>
<input type="text" name="toStoreShelf" value="${item.toStoreShelf }" class="form-control input-sm" size="10" />
<input type="hidden" name="toStoreShelfId" value="${item.toStoreShelfId }" />
</td>
<!--start 入库 -->

<c:if test="${not empty gto.orTime }">
<td>
<input type="text" value="${item.orNum }" class="form-control input-sm" size="10" />
</td>
</c:if>

<c:if test="${not empty gto.ocTime }">
<td>
<input type="text" value="${item.ocNum }" class="form-control input-sm" size="10" />
</td>
</c:if>

<td>
<c:if test="${gto.status != 2}">

<a href="javascript:;" class="btn default btn-xs black c-row-del-btns">
<i class="fa fa-trash-o"></i> <spring:message code="g.label.delete"/>
</a>

</c:if>
</td>
</tr>
</c:forEach>
</tbody>
<tbody>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td class="text-right">总数量:</td>
<td id="sum_count_td"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td colspan="3"> </td>
</tr>
</tbody>
</table>
</fieldset>
<fieldset>
<legend>操作</legend>
<c:if test="${gto.id != null }">
<div class="row">
<div class="col-md-12">
制单时间: <fmt:formatDate value="${gto.createdTime}" pattern="yyyy-MM-dd HH:mm:ss" />
制单人: ${gto.userName}
</div>
</div>
<c:if test="${gto.status == 2 }">
<div class="row">
<div class="col-md-12">
审核时间: <fmt:formatDate value="${gto.auditTime}" pattern="yyyy-MM-dd HH:mm:ss" />
审核人: ${gto.auditUserName}
</div>
</div>
</c:if>
</c:if>
<div class="row text-center">
<%-- 新建或者未审核时可保存 --%>
<c:if test="${gto.id == null || gto.status == 1}">
<button type="submit" id="sub_id" class="btn btn-primary"><spring:message code="g.label.save"/></button>
</c:if>
<%-- 未审核才能审核 --%>
<c:if test="${gto.id != null && gto.status == 1}">
<a href="${pageContext.request.contextPath }/allocateOrder/approve?id=${gto.id}" class="btn btn-primary c-confirm-link"><spring:message code="g.label.approved"/></a>
</c:if>
</div>
</fieldset>

</form:form>
</div>
</div>
</div>
</div>
</tiles:putAttribute>
<%-- 页面级别的 JS --%>
<tiles:putAttribute name="js-page">
<script src="${pageContext.request.contextPath }/resources/assets/global/plugins/datatables/media/js/jquery.dataTables.min.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath }/resources/assets/global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath }/resources/assets/global/plugins/bootstrap-datepicker/js/bootstrap-datepicker.js" type="text/javascript"></script>

<script>
var trHtmlPattern =
'<tr>' +
' <td><input name="goodsSku" class="form-control input-sm" id="goodsSku_{0}" size="11" /></td>'+
' <td><input name="goodsName" class="form-control input-sm" id="goodsName_{0}" readonly="readonly" /></td>' +
' <td><input name="inventory" class="form-control input-sm" id="inventory_{0}" readonly="readonly" size="5" /></td>'+
' <td><input name="inventoryLock" class="form-control input-sm" id="inventoryLock_{0}" readonly="readonly" size="5" /></td>'+
' <td><input name="goodsCount" class="form-control input-sm" id="goodsCount_{0}" size="5" /></td>' +
//出库
' <td>' +
' <select class="form-control input-sm" name="fromStoreId" id="fromStoreId_{0}">' +
' <option value="">请选择...</option>' +
' <c:forEach var="ss" items="${store}">' +
' <option value="${ss.id}">${ss.name}</option>' +
' </c:forEach>' +
' </select>' +
' </td>' +
' <td>' +
' <input type="text" name="fromStoreShelf" id="fromStoreShelf_{0}" class="form-control input-sm" size="10" />' +
' <input type="hidden" name="fromStoreShelfId" id="fromStoreShelfId_{0}" value="${item.fromStoreShelfId }" />' +
' </td>'
+
//入库
' <td>' +
' <select class="form-control input-sm" name="toStoreId" id="toStoreId_{0}">' +
' <option value="">请选择...</option>' +
' <c:forEach var="ss" items="${store}">' +
' <option value="${ss.id}">${ss.name}</option>' +
' </c:forEach>' +
' </select>' +
' </td>' +
' <td>' +
' <input type="text" name="toStoreShelf" id="toStoreShelf_{0}" class="form-control input-sm" size="10" />' +
' <input type="hidden" name="toStoreShelfId" id="toStoreShelfId_{0}" value="${item.toStoreShelfId }" />' +
' </td>'

+
' <td>' +
' <a href="javascript:;" class="btn default btn-xs black c-row-del-btns">' +
' <i class="fa fa-trash-o"></i> <spring:message code="g.label.delete"/>' +
' </a>' +
' </td>' +
'</tr>';

$(function() {
$(document).on('blur', 'input[name=goodsSku]', function() {
var $this = $(this);
var sku = $.trim($this.val());
$this.val(sku);
if (sku == '')
return false;

var skuCounter = 0;
$('input[name=goodsSku]').each(function() {
if ($(this).val() == sku) {
skuCounter++;
}
});

if (skuCounter > 1) {
alert('已经存在相同SKU行,请在同一行编辑');
$this.val('');
$this.blur();
return;
}

// 查询商品信息
$.get('${pageContext.request.contextPath }/goods/load-by-sku.json?sku=' + sku, function(goods) {

if (goods == null) {
$this.parents('tr').find('input[name=goodsName], input[name=goodsCost]').val('');
alert(sku + '不存在!')
return;
}

var $tr = $this.closest('tr');
$tr.find('input[name=goodsName]').val(goods.name);
$tr.find('select[name=fromStoreId]').val(goods.storeId);
$tr.find('input[name=fromStoreShelfId]').val(goods.storeShelfId);
$tr.find('input[name=fromStoreShelf]').val(goods.storeShelfCode);

$.get('${pageContext.request.contextPath }/store/find-storeId-and-shelfCode-and-sku.json?code=' +goods.storeShelfCode+'&storeId='+goods.storeId+'&sku='+sku ,function(data){
$this.parents('tr').find('input[name=inventory]').val((data.inventory==null||data.inventory==''?0:data.inventory));
$this.parents('tr').find('input[name=inventoryLock]').val((data.inventoryLock==null||data.inventoryLock==''?0:data.inventoryLock));

},'json');


$($this.parents('tr').find('input[name=goodsCount]')).change(function(){
var $tr = $this.parents('tr');
var salecount = parseInt($tr.find('input[name=inventory]').val()) - parseInt($tr.find('input[name=inventoryLock]').val());
var goodsCount = $(this).val();
if(goodsCount > salecount){
alert("调拨数量不能大于可用数");
$this.focus();
$this.parents('tr').find('input[name=goodsCount]').val('');
return false;
}
});


}, 'json');
});




$(document).on('click', '.c-row-del-btns', function() {
$(this).parents('tr').remove();
});


$('#io_order_form').validate({
errorElement : 'span', //default input error message container
errorClass : 'help-block help-block-error', // default input error message class
focusInvalid : false, // do not focus the last invalid input
ignore : "", // validate all fields including form hidden input
messages: {
fromStoreShelfId: '必须输入或输入不正确',
toStoreShelfId: '必须输入或输入不正确',
goodsCount:{remote:"不能大于调拨数量"}
},
rules : {
transferDate : { required : true },
goodsSku : { required : true },
//goodsName : { required : true },
goodsCount : { required : true, digits: true, min : 1},
goodsCost : { required : true, number: true },
fromStoreId : { required : true },
fromStoreShelf : { required : true },
fromStoreShelfId : { required : true },
toStoreId : { required : true },
toStoreShelf: { required : true },
toStoreShelfId: { required : true }
},

highlight : function(element) { // hightlight error inputs
$(element).parent().addClass('has-error'); // set error class to the control group
},
unhighlight : function(element) { // revert the change done by hightlight
$(element).parent().removeClass('has-error'); // set error class to the control group
},
success : function(label) {
label.parent().removeClass('has-error'); // set success class to the control group
}
});

$('#io_order_form').submit(function() {

if ($('input[name=goodsSku]').length == 0) {
alert('请添加SKU信息');
return false;
}
var f=false;
$('select[name=fromStoreId]').each(function(){
var $this = $(this);
var fromStoreId=$this.val();
var toStoreId = $this.closest('tr').find('select[name=toStoreId]').val();
//alert(fromStoreId+"--------"+(toStoreId==""));
if(fromStoreId!=""&&fromStoreId==toStoreId){
f=true;
$this.focus();
alert('调出仓库与调入仓库不能相同');
return false;
}
});

if(f){return false;}

return true;
});

$(document).on('change', 'select[name=fromStoreId]', function() {
var $this = $(this);
$tr = $this.closest('tr');console.log('$tr.length - ' + $tr.length);
$tr.find('input[name=fromStoreShelf]').val('');
$tr.find('input[name=fromStoreShelfId]').val('');
});

$(document).on('change', 'select[name=toStoreId]', function() {
var $this = $(this);
$tr = $this.closest('tr');console.log('$tr.length - ' + $tr.length);
$tr.find('input[name=toStoreShelf]').val('');
$tr.find('input[name=toStoreShelfId]').val('');
});


$(document).on('change','input[name=goodsCount]', function() {
var $this = $(this);
var $tr = $this.parents('tr');
var salecount = parseInt($tr.find('input[name=inventory]').val()) - parseInt($tr.find('input[name=inventoryLock]').val());
var goodsCount = $(this).val();
if(goodsCount > salecount){
alert("出货数不能大于可用数");
$this.focus();
$this.parents('tr').find('input[name=goodsCount]').val('');
return false;
}
});

$(document).on('change', 'input[name=goodsCount], input[name=goodsCost]', function() {
sumCount();
});

//出库
$(document).on('change', 'input[name=fromStoreShelf]', function() {
var $this = $(this);
$this.siblings('input[name=fromStoreShelfId]').val('');
var fromStoreId = $this.closest('tr').find('select[name=fromStoreId]').val();
var goodsSku = $this.closest('tr').find('input[name=goodsSku]').val();
if (fromStoreId == '') {
alert('请先选择出库仓库');
return;
}

var code = $.trim($this.val());
if (code == '') {
return;
}
var url = '${pageContext.request.contextPath}/store/find-storeId-and-shelfCode-and-sku.json?code=' + code+'&storeId='+fromStoreId+'&sku='+goodsSku;
$.getJSON(url).done(function(result){
console.log(result);
var $storeShelfIdInput = $this.siblings('input[name=fromStoreShelfId]');
var inventory = $this.closest('tr').find('input[name=inventory]');
var inventoryLock = $this.closest('tr').find('input[name=inventoryLock]');
if (result == null) {
$this.focus();
$storeShelfIdInput.val('');
alert('出库仓位号输入错误,请重新输入');
return;
}

if (fromStoreId == result.storeId) {
$storeShelfIdInput.val(result.id);
inventory.val((result.inventory==null||result.inventory==''?0:result.inventory));
inventoryLock.val((result.inventoryLock==null||result.inventoryLock==''?0:result.inventoryLock));
} else {
$storeShelfIdInput.val('');
$this.val('');
alert('出库仓位号输入错误,请重新输入');
}
});
});

//入库
$(document).on('change', 'input[name=toStoreShelf]', function() {
var $this = $(this);
$this.siblings('input[name=toStoreShelfId]').val('');
var toStoreId = $this.closest('tr').find('select[name=toStoreId]').val();
if (toStoreId == '') {
alert('请先选择入库仓库');
return;
}

var code = $.trim($this.val());
if (code == '') {
return;
}
var url = '${pageContext.request.contextPath}/store/find-StoreId-and-shelfCode.json?code=' + code+"&storeId="+toStoreId;
$.getJSON(url).done(function(result){
console.log(result);
var $storeShelfIdInput = $this.siblings('input[name=toStoreShelfId]');
if (result == null) {
$this.focus();
$storeShelfIdInput.val('');
alert('入库仓位号输入错误,请重新输入');
return;
}

if (toStoreId == result.storeId) {
$storeShelfIdInput.val(result.id);
} else {
$storeShelfIdInput.val('');
$this.val('');
alert('入库仓位号输入错误,请重新输入');
}
});
});
});

var rowNum = 10000;
function addEditRow() {
rowNum ++;
var html = trHtmlPattern.format(rowNum);

$("#info_tb").append(html);
}


function subFrom(){
$('#io_order_form').submit();
}

function dropHtml(rowNum) {
$('#' + rowNum).remove();
}

function requestShelfList($tr, selectedValue, shelfId) {
$.get('${pageContext.request.contextPath }/store/shelf-json?id=' + selectedValue, function(data) {
xfy.fillSelect($tr.find('select[name=storeShelfId]'), data, 'id', 'code');
if (shelfId != '') {
$tr.find('select[name=fromStoreShelfId]').val(shelfId);
}
}, 'json');
}

$('.date-picker').datepicker({
orientation: "right",
autoclose: true
});

function sumCount() {
var sumCount = 0;

$('input[name=goodsCount]').each(function() {
var $this = $(this);
var goodsCountStr = $.trim($this.val());
if (goodsCountStr == '') {
return;
}

var goodsCountFloat = parseFloat(goodsCountStr);
sumCount += goodsCountFloat;

});

$('#sum_count_td').html(sumCount);
}

sumCount();

</script>
</tiles:putAttribute>
</tiles:insertDefinition>




Controller层


@RequestMapping("edit")
public ModelAndView edit(@RequestParam(value="id", required=false) Long id){
ModelAndView mv = new ModelAndView();
GoodsTransferOrder gto=null;
if (id != null) {
gto=goodsTransferOrderService.get(id);
List<GoodsTransferOrderItem> items=goodsTransferOrderItemDao.findItem(gto.getOrderNo());
gto.setItems(items);
}else{
gto=new GoodsTransferOrder();
gto.setOrderNo(xxNoGenerateService.generate(XxNoType.DB));
}
mv.addObject("gto",gto);
List<Store> listStore = storeService.findStroe();
mv.addObject("store", listStore);
mv.setViewName("goods/allocateorder-edit");
return mv;
}



/**
* 添加调拨单
* @param attr
* @param sessionUser
* @param goodsSku
* @param goodsName
* @param goodsCount
* @param fromStoreId
* @param fromStoreShelfId
* @param toStoreId
* @param toStoreShelfId
* @param fromStoreShelf
* @param toStoreShelf
* @param order
* @return
*/
@RequestMapping("save")
public String save(RedirectAttributes attr,
@ModelAttribute(App.SESSION_USER_KEY) SessionUser sessionUser,
@RequestParam("goodsSku") List<String> goodsSku,
@RequestParam("goodsName") List<String> goodsName,
@RequestParam("goodsCount") List<Integer> goodsCount,
@RequestParam("fromStoreId") List<Integer> fromStoreId,
@RequestParam("fromStoreShelfId") List<Integer> fromStoreShelfId,
@RequestParam("toStoreId") List<Integer> toStoreId,
@RequestParam("toStoreShelfId") List<Integer> toStoreShelfId,
@RequestParam("fromStoreShelf") List<String> fromStoreShelf,
@RequestParam("toStoreShelf") List<String> toStoreShelf,
GoodsTransferOrder order){

List<GoodsTransferOrderItem> items = new ArrayList<>(3);
order.setItems(items);
try {

for (int i = 0; i < goodsSku.size(); i++) {
GoodsTransferOrderItem item = new GoodsTransferOrderItem();
item.setGoodsSku(goodsSku.get(i));
item.setGoodsName(goodsName.get(i));
item.setFromStoreId(fromStoreId.get(i));
item.setFromStoreShelfId(fromStoreShelfId.get(i));
item.setGoodsCount(goodsCount.get(i));
item.setToStoreId(toStoreId.get(i));
item.setToStoreShelfId(toStoreShelfId.get(i));
item.setFromStoreShelf(fromStoreShelf.get(i));
item.setToStoreShelf(toStoreShelf.get(i));
items.add(item);

if(item.getFromStoreId().equals(item.getToStoreId())){
if(order.getOrderNo()!=null){
operateLogService.insert("update","调拨单号:"+order.getOrderNo()+"sku:"+item.getGoodsSku()+"---->调出仓库与调入仓库不能相同",sessionUser.getUserId(),"库存管理","调拨单");
}
throw new DuplicateDataExcepption("sku:"+item.getGoodsSku()+"---->调出仓库与调入仓库不能相同");
}

}

if (order.getId() == null) {
order.setStatus(1);
String dateStr = dft.format(Calendar.getInstance().getTime());
String fmt =String.format("LS-%s-",dateStr)+"%d";
order.setSerialNumber(tableKeyService.nextSerialNumber("goods_transfer_order",fmt));
// 制单人
order.setOperatorId(sessionUser.getUserId());
this.goodsTransferOrderService.save(order);
attr.addFlashAttribute("successMessage", "g.tips.success");
operateLogService.insert("insert","调拨单 ->添加: 调拨单号="+order.getOrderNo(),sessionUser.getUserId(),"库存管理","调拨单");
}else {
this.goodsTransferOrderService.update(order);
attr.addFlashAttribute("successMessage", "g.tips.success");
try{
GoodsTransferOrder gtoOld=goodsTransferOrderService.get(order.getId().longValue());
String editMsg= CommonUtil.getEditMsg(gtoOld,order,order.getClass().getName());
operateLogService.insert("update","调拨单 ->更新: 调拨单号="+order.getOrderNo()+"["+editMsg+"]",sessionUser.getUserId(),"库存管理","调拨单");
}catch(Exception e){
e.printStackTrace();
}
}
} catch (InventoryShortageException e) {
attr.addFlashAttribute("errorMessage", e.getGoodsInventory().getGoodsSku() + "库存不足");
}catch(DuplicateDataExcepption e){
attr.addFlashAttribute("errorMessage", e.getMessage());
}

return "redirect:/allocateOrder/list";
}


/**
* 审核
* @param attr
* @param sessionUser
* @param id
* @return
*/
@RequestMapping("approve")
public String approve(RedirectAttributes attr,
@ModelAttribute(App.SESSION_USER_KEY) SessionUser sessionUser,
@RequestParam(value="id") Long id) {
GoodsTransferOrder gto=goodsTransferOrderService.get(id);
synchronized (gto.getOrderNo().intern()){
try {
if(gto.getStatus()==1){
this.goodsTransferOrderService.approve(id, sessionUser.getUserId());
}
attr.addFlashAttribute("successMessage", "g.tips.success");
operateLogService.insert("update","调拨单 ->审核: 调拨单号="+gto.getOrderNo(),sessionUser.getUserId(),"库存管理","调拨单");
} catch (InventoryShortageException e) {
attr.addFlashAttribute("errorMessage", e.getGoodsInventory().getGoodsSku() + "库存不足");
operateLogService.insert("update","调拨单 ->审核: 调拨单号="+gto.getOrderNo()+"----"+e.getGoodsInventory().getGoodsSku() + "库存不足",sessionUser.getUserId(),"库存管理","调拨单");
}

return "redirect:/allocateOrder/list";
}
}

/**
* 删除调拨单
* @param attr
* @param id
* @return
*/
@RequestMapping("delete")
public String delete(RedirectAttributes attr,
@ModelAttribute(App.SESSION_USER_KEY) SessionUser sessionUser,
@RequestParam(value="id") Long id) {
GoodsTransferOrder gto=goodsTransferOrderService.get(id);
if(gto.getStatus()==1){
this.goodsTransferOrderService.delete(id);
operateLogService.insert("delete","调拨单 ->删除: 调拨单号="+gto.getOrderNo(),sessionUser.getUserId(),"库存管理","调拨单");
attr.addFlashAttribute("successMessage", "g.tips.success");
}else{
attr.addFlashAttribute("errorMessage",gto.getOrderNo()+":末审核调拨单才能删除操作");
}
return "redirect:/allocateOrder/list";
}


@RequestMapping("pageJson")
@ResponseBody
public DataTableResponse<GoodsTransferOrder> GoodsTransferOrderPageJson(@RequestBody DataTableRequest<GoodsTransferOrderParam> dtr) {
PageRequest pageRequest = WebHelper.assemblePageRequest(dtr);
Page<GoodsTransferOrder> page = this.goodsTransferOrderService.findPage(pageRequest,dtr.getParams());
return WebHelper.assembleDataTableResponse(dtr, page);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用jQuery可以通过以下步骤动态table添加行: 1. 创建一个新的行元素,可以使用jQuery的`$('<tr>')`方法来创建一个新的行元素。 2. 在新的行元素添加需要显示的数据,可以使用jQuery的`append()`方法来添加数据。 3. 将新的行元素添加table中,可以使用jQuery的`append()`方法将新的行元素添加table中。 示例代码如下: ``` // 获取table元素 var table = $('#myTable'); // 创建新的行元素 var newRow = $('<tr>'); // 在新的行元素添加数据 newRow.append($('<td>').text('John')); newRow.append($('<td>').text('Doe')); newRow.append($('<td>').text('25')); // 将新的行元素添加tabletable.append(newRow); ``` 以上代码会在名为`myTable`的table添加一行数据,该行数据包含三列,分别为`John`、`Doe`和`25`。 ### 回答2: jQuery是一种非常流行的JavaScript库,它为网页开发带来了许多便利,包括动态向HTML表格中添加行。下面将介绍如何使用jQuery动态添加表格行。 首先,我们需要创建一个空的HTML表格,并指定一个ID。例如: ```html <table id="myTable"> <thead> <tr> <th>列名1</th> <th>列名2</th> <th>列名3</th> </tr> </thead> <tbody> </tbody> </table> ``` 接下来,在JavaScript中使用jQuery选择器来选择我们新建的表格: ```javascript var table = $("#myTable"); ``` 然后,我们可以使用jQuery的append()方法向表格中添加行。例如,下面代码将向表格中添加一行: ```javascript table.find('tbody').append('<tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>'); ``` 在这个例子中,我们使用了jQuery的find()方法来选择表格的tbody元素,因为我们只想向表格的主体中添加行(即忽略表头)。然后,使用append()方法来向tbody元素添加一个包含三个单元格的行,每个单元格中包含一些内容。 如果我们需要每次添加多行,可以使用一个for循环来迭代添加: ```javascript for (var i = 0; i < data.length; i++) { table.find('tbody').append('<tr><td>' + data[i].value1 + '</td><td>' + data[i].value2 + '</td><td>' + data[i].value3 + '</td></tr>'); } ``` 在这个例子中,我们假设data是一个包含多行数据的数组,并迭代使用一个for循环将每个数据行添加到表格中。 最后,我们可以把所有这些代码放在一个函数中,以方便随时调用: ```javascript function addTableRow(table, rowData) { table.find('tbody').append('<tr><td>' + rowData.value1 + '</td><td>' + rowData.value2 + '</td><td>' + rowData.value3 + '</td></tr>'); } ``` 现在,每当我们需要向表格中添加新行,只需调用这个函数,并将tabe和rowData作为参数传入即可。 总之,使用jQuery动态向表格中添加行非常容易,只需使用jQuery的append()方法即可实现。但是,我们需要指定正确的表格和行数据,在此之前请确保正确地理解了以上例子。 ### 回答3: jQuery是一种非常流行的JavaScript库,可以方便地操作HTML文档,动态地向table添加行也是jQuery的强项之一。 动态table添加行通常分为两个步骤:首先是创建一行添加table中,然后是设置这行中单元格的内容。 首先,我们可以使用jQuery的append()方法,将一个新的行添加table中。具体步骤如下: 1. 选择table标签的jQuery对象。 例如,如果我们的表格id为“myTable”,可以使用如下代码选择它: var table = $('#myTable'); 2. 创建一个新的行元素。 我们可以使用jQuery的.createElement()方法来创建一个新的tr元素: var row = $('<tr>'); 3. 将该行元素添加table中。 可以使用jQuery的.append()方法,将这个新行添加到表格中: table.append(row); 这样就完成了添加新行的第一步,接下来我们需要向表格中的新行添加单元格。 1. 创建一个新的单元格元素。 可以使用jQuery的.createElement()方法来创建一个新的td元素: var cell1 = $('<td>'); var cell2 = $('<td>'); 2. 设置单元格内的内容。 使用jQuery的.text()方法设置单元格内的文本,例如: cell1.text('This is cell 1'); cell2.text('This is cell 2'); 3. 将单元格元素添加到行元素中。 可以使用jQuery的.append()方法将单元格元素添加到行元素中: row.append(cell1); row.append(cell2); 现在,我们已经完成了动态table添加行的全部步骤。完整的代码如下所示: var table = $('#myTable'); var row = $('<tr>'); var cell1 = $('<td>'); var cell2 = $('<td>'); cell1.text('This is cell 1'); cell2.text('This is cell 2'); row.append(cell1); row.append(cell2); table.append(row); 通过这些简单的操作,我们可以轻松地向table添加任意数量的行和单元格。当然,我们也可以在代码中使用循环来动态地生成多个行,从而更加灵活地应对不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值