function sendForm() { var invOrderModelWrapper = {}; // 頭 var objHeader = $('#invOrderForm').serializeObject(); invOrderModelWrapper.invOrderModel = objHeader; // 明細 var objDetail = { id: "", invId: "", skuId: "", // sku skuCode: "", factoryId: "", price: "", // stockNum: "", //庫存數量 stockAmount: "", // 總成本 lossNum: "",//報損量 lossAmount: "", //報 invNum: "", //盤點量 invAmount: "", //盤點 invLossNum: "", //盤點報 invLossAmount: "", // remarks: "" //備注 } var objArrDetail = constructObjectFromTable(objDetail, $('#invOrderDetailForm .table-row-cell')); if (objArrDetail.length == 0) { $.alert({ title: '提示', content: "盤點明細不能為空!", buttons: {"好的": {btnClass: 'btn-blue'}} }); return false; } invOrderModelWrapper.invOrderDetailModels = objArrDetail; $.ajax({ type: "POST", dataType: "json", cache: false, contentType: "application/json; charset=utf-8", url: "/storage/invOrder/saveInvOrderModel", data: JSON.stringify(invOrderModelWrapper), success: function (data) { if (data.code) { $.alert({ title: '提示', content: "操作成功!", buttons: { "好的": { btnClass: 'btn-blue', action: function () { var invIdTemp = $('#invId').val(); var invTypeTemp = $('#invType').val(); window.location.href = "/storage/invOrder/viewInvOrder?id=" + invIdTemp + "&invType=" + invTypeTemp + "&viewTypeTo=view&modelType=guanli"; } } } }); return; } else { $.alert({ title: '提示', content: "操作失敗!", buttons: {"好的": {btnClass: 'btn-blue'}} }); } } }) }
function save() {
sendForm("");
<section class="content">
<div class="row box box-primary" id="viewDiv">
<div class="col-md-16">
<div class="box-body">
<input type="hidden" id="info" value="${info!}">
<form id="invOrderForm" class="form-horizontal"
data-validator-option="{theme:'bootstrap', timely:2, stopOnError:true}" method="post">
<div class="form-inline">
<input type="hidden" id="invId" name="id" value="${invOrderModel.id}"/>
<input type="hidden" id="invType" name="invType"
value="${invOrderModel.invType}"
placeholder="標記是基礎盤點還是庫存盤點"/>
<input type="hidden" id="creator" name="creator" value="${invOrderModel.creator}"
placeholder="登陸人">
<input type="hidden" id="auditState" name="auditState" value="${invOrderModel.auditState}"
placeholder="審核狀態 0:待提交 1:待審核 2:已審核 3:已駁回">
<label for="invCode">盤點單編碼:</label>
<input type="text" id="invCode" name="invCode" class="form-control"
value="${(invOrderModel.invCode)!}" readonly="true">
<label for="storageName">盤點倉庫:</label>
<input type="hidden" id="storageId" name="storageId" class="form-control"
value="${(invOrderModel.storageId)!}" readonly="true">
<input type="text" id="storageName" name="storageName" class="form-control"
value="${(invOrderModel.storageName)!}" readonly="true">
<!--添加SKU-->
<a class="btn btn-primary pull-right" href="javascript:addSKU();"><i
class="fa fa-plus"></i> 添加SKU
</a>
</div>
</form>
<div class="form-group">
<div class="box-body table-responsive no-padding col-sm-16">
<form id="invOrderDetailForm" class="form-horizontal"
data-validator-option="{theme:'bootstrap', timely:2, stopOnError:true}" method="post">
<table class="table table-hover tdnowrap">
<thead>
<tr>
<th>系列</th>
<th>產品型號</th>
<th>尺寸</th>
<th>材質</th>
<th>顏色</th>
<th>結構</th>
<th>配套件1</th>
<th>配套件2</th>
<th>sku碼</th>
<th>生產部</th>
<th>單價</th>
<th>庫存量</th>
<th>總成本(元)</th>
<th>報損量</th>
<th>總報損(元)</th>
<th>盤點量</th>
<th>盤點額(元)</th>
<th>盤點報損量</th>
<th>盤點報損額(元)</th>
<th>備注</th>
<th>刪除</th>
</tr>
</thead>
<tbody>
<#list invOrderDetailForm as detail>
<tr id="tr_${(detail.skuId)!}" class="table-row-cell">
// <td><input id="gvDataList_CheckAll" type="checkbox" name="gvData"/></td>
<td>${detail.seriesName}</td>
<td>${detail.productModel}</td>
<td>${detail.size}</td>
<td>${detail.material}</td>
<td>${detail.color}</td>
<td>${detail.structure}</td>
<td>${detail.suite1}</td>
<td>${detail.suite2}</td>
<td>
<input type="hidden" name="id" value="${(detail.id)!}"/>
<input type="hidden" id="skuId" name="skuId" value="${(detail.skuId)!}"/>
<input type="hidden" name="invId"
value="${invOrderModel.id}"/>
<input type="text" id="skuCode" name="skuCode" readonly
value="${(detail.skuCode)!}"/>
</td>
<td>
<input type="hidden" id="factoryId" name="factoryId"
value="${(detail.factoryId)!}"/>
<input type="text" id="factoryName" name="factoryName" readonly
value="${(detail.factoryName)!}"/>
</td>
<td>
<input type="text" id="price_${(detail.skuId)}" name="price" readonly
value="${(detail.price)!}"/>
</td>
<td>
<input type="text" id="stockNum" name="stockNum" readonly
value="${(detail.stockNum)!}" placeholder="庫存量"/>
</td>
<td>
<input type="text" id="stockAmount" name="stockAmount" readonly
value="${(detail.stockAmount)!}" placeholder="總成本(元)"/>
</td>
<td>
<input type="text" id="lossNum" name="lossNum" readonly
value="${(detail.lossNum)!}" placeholder="報損量"/>
</td>
<td>
<input type="text" id="lossAmount" name="lossAmount" readonly
value="${(detail.lossAmount)!}" placeholder="總報損(元)"/>
</td>
<td>
<input type="text" id="invNum" name="invNum" class="form-control"
value="${(detail.invNum)!}" placeholder="盤點量"
onblur="numChange(this.value,'${(detail.skuId)}','#invAmount_${(detail.skuId)}_${(detail.factoryId)}')"/>
</td>
<td>
<input type="text" id="invAmount_${(detail.skuId)}_${(detail.factoryId)}"
style="width: 100px;"
name="invAmount"
readonly
value="${(detail.invAmount)}"/>
</td>
<td>
<input type="text" id="invLossNum"
name="invLossNum"
value="${(detail.invLossNum)}" class="form-control"
placeholder="盤點報損量"
onblur="numChange(this.value,'${(detail.skuId)}','#invLossAmount_${(detail.skuId)}_${(detail.factoryId)}')"/>
</td>
<td>
<input type="text"
id="invLossAmount_${(detail.skuId)}_${(detail.factoryId)}"
name="invLossAmount" readonly style="width: 100px;"
value="${(detail.invLossAmount)}"
placeholder="盤點報損量金額">
</td>
<td>
<input type="text" id="remarks" class="form-control" style="width:200px;"
name="remarks"
placeholder="備注" value="${(detail.remarks)}">
</td>
<td><input type="button" onclick="$('#tr_${(detail.skuId)}').remove()"
value="刪除"></td>
</tr>
</#list>
</tbody>
<tbody id="invOrderDetailList">
</tbody>
</table>
</form>
</div><!-- /.box-body -->
</div>
<div class="form-group">
<label class="col-sm-4 control-label"> </label>
<div class="col-sm-6">
<input type="button" id="save_btn" onclick="save()" class="btn btn-primary" value="保存">
<input type="button" id="submitAudit_btn" onclick="submitAudit()" class="btn btn-primary"
value="提交審核">
<a class="btn btn-danger" href="/storage/invOrder/list/1"> 返回</a>
</div>
</div>
</div>
</div><!--/.col (left) -->
</div>
</section><!-- /.content -->
//表單封裝json
function constructObjectFromTable(object, $object) {
var javaObjArray = [];
$object.each(function(i) {
// var $ck = $(this).find('input[name^=gvdata]');
// if($ck.length != 0){
// if(!$ck.attr('checked')){
// return true;
// }
// }
var javaObj = {};
for (var p in object) {
var $val = $(this).find('input[name="'+p+'"]');
if ($val.length === 0) {
javaObj[p] = $(this).find('select[name="'+p+'"]').val();
} else {
javaObj[p] = $val.val();
}
}
javaObjArray.push(javaObj);
});
return javaObjArray;
}
/**
* 保存/提交審核
*
* @param invOrderModelWrapper
* @return
*/
@RequestMapping(value = "/saveInvOrderModel")
@ResponseBody
public Map saveInvOrderModel(@RequestBody InvOrderModelWrapper invOrderModelWrapper) {
boolean code = invOrderDetailModelService.saveInvOrderModelWrapper(invOrderModelWrapper);
Map returnMap = new HashMap();
returnMap.put("code", code);
return returnMap;
}
/**
* 保存頭和明細/提交審核
*
* @param invOrderModelWrapper
*/
@Override
public boolean saveInvOrderModelWrapper(InvOrderModelWrapper invOrderModelWrapper) {
boolean retflag = false;
// 頭信息
InvOrderModel invOrderModel = invOrderModelWrapper.getInvOrderModel();
Integer counts = invOrderModelMapper.searchCountInvOrder(invOrderModel.getId());
if (counts > 0) { // 表中已經存在,說明是 編輯
retflag = this.doEdit(invOrderModelWrapper);
} else { // 表中不存在,是新增
retflag = this.doSave(invOrderModelWrapper);
}
return retflag;
}
importorg.codehaus.jackson.annotate.JsonIgnoreProperties;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public class InvOrderModelWrapper {
private InvOrderModel invOrderModel;
private List<InvOrderDetailModel> invOrderDetailModels;
public InvOrderModel getInvOrderModel() {
return invOrderModel;
}
public void setInvOrderModel(InvOrderModel invOrderModel) {
this.invOrderModel = invOrderModel;
}
public List<InvOrderDetailModel> getInvOrderDetailModels() {
return invOrderDetailModels;
}
public void setInvOrderDetailModels(List<InvOrderDetailModel> invOrderDetailModels) {
this.invOrderDetailModels = invOrderDetailModels;
}
}
<script src="/plugins/jQuery/serializeObject.js"></script>
/*
* .serializeObject (c) Dan Heberden
* danheberden.com
*
* Gives you a pretty object for your form elements
*/
(function ($) {
$.fn.serializeObject = function () {
if (!this.length) {
return false;
}
var $el = this,
data = {},
lookup = data; //current reference of data
$el.find(':input[type!="checkbox"][type!="radio"], input:checked').each(function () {
// data[a][b] becomes [ data, a, b ]
var named = this.name.replace(/([^]+)?\]/g, ',$1').split(','),
cap = named.length - 1,
i = 0;
for (; i < cap; i++) {
// move down the tree - create objects or array if necessary
lookup = lookup[named[i]] = lookup[named[i]] ||
( named[i + 1] == "" ? [] : {} );
}
// at the end, psuh or assign the value
if (lookup.length != undefined) {
lookup.push($(this).val());
} else {
lookup[named[cap]] = $(this).val();
}
// assign the reference back to root
lookup = data;
});
return data;
};
})(jQuery);
