Commit eb01a724 by anxiaohe

入库信息表单

parent 154651c3
......@@ -75,6 +75,7 @@ public class TagController extends BaseController {
model.addAttribute("url", url);
model.addAttribute("searchLabels", searchLabels.split("\\|"));
model.addAttribute("searchKeys", searchKeys.split("\\|"));
model.addAttribute("gridSelectTableDataHandle", request.getParameter("gridSelectTableDataHandle"));
return "modules/common/gridselect";
}
......
......@@ -234,10 +234,10 @@ public class ShelvesController extends BaseController {
/**
* 货架信息列表页面
*/
@RequestMapping(value = "shelvesSelect")
public String shelvesSelect(Shelves shelves, Model model) {
public String shelvesSelect(HttpServletRequest request, Shelves shelves, Model model) {
model.addAttribute("shelves", shelves);
model.addAttribute("isMultiSelect", request.getParameter("isMultiSelected"));
return "modules/common/shelvesSelect";
}
}
......@@ -45,7 +45,7 @@
}
</c:if>
}
})
}, "${isMultiSelected}")
});
......
......@@ -45,7 +45,7 @@
}
</c:if>
}
})
}, "${isMultiSelected}")
});
......
......@@ -263,14 +263,15 @@ function delRow(obj, prefix){
});
},
/**货架选择框**/
openShelvesSelectDialog:function(yesFuc){
openShelvesSelectDialog:function(yesFuc, isMultiSelected){
isMultiSelected = isMultiSelected ? isMultiSelected.toString() : '';
top.layer.open({
type: 2,
area: ['900px', '560px'],
title:"选择货架",
auto:true,
maxmin: true, //开启最大化最小化按钮
content: ctx+"/warehouse/shelves/shelves/shelvesSelect",
content: ctx+"/warehouse/shelves/shelves/shelvesSelect?isMultiSelected=" + isMultiSelected,
btn: ['确定', '关闭'],
yes: function(index, layero){
var items = layero.find("iframe")[0].contentWindow.getSelections();
......@@ -324,17 +325,17 @@ function delRow(obj, prefix){
},
openStorageSelectDialog:function(params, yesFuc){
var url = ctx+"/warehouse/storage/storage/findByPcTypeModel?goodsInfo.goods.batchNum="+params.batchNum+"&qrCode.state="+params.state;
var fieldLabels = "物资编码|名称|品名代码|型号";
var fieldKeys = "qrCode.code|name|type.name|model";
var fieldLabels = "物资编码|品名|代码|单价|单位|数量|总价|型号";
var fieldKeys = "qrCode.code|type.name|type.code|type.amount|type.unit|num|infoSum|model";
var searchLabels = "品名代码|型号";
var searchKeys = "goodsInfo.type|goodsInfo.model";
top.layer.open({
type: 2,
area: ['800px', '500px'],
area: ['1100px', '600px'],
title:"选择入库明细",
auto:true,
name:'friend',
content: ctx+"/tag/gridselect?url="+encodeURIComponent(url)+"&fieldLabels="+encodeURIComponent(fieldLabels)+"&fieldKeys="+encodeURIComponent(fieldKeys)+"&searchLabels="+encodeURIComponent(searchLabels)+"&searchKeys="+encodeURIComponent(searchKeys)+"&isMultiSelected="+params.isMultiSelect,
content: ctx+"/tag/gridselect?url="+encodeURIComponent(url)+"&fieldLabels="+encodeURIComponent(fieldLabels)+"&fieldKeys="+encodeURIComponent(fieldKeys)+"&searchLabels="+encodeURIComponent(searchLabels)+"&searchKeys="+encodeURIComponent(searchKeys)+"&isMultiSelected="+params.isMultiSelect+"&gridSelectTableDataHandle="+params.gridSelectTableDataHandleName,
btn: ['确定', '关闭'],
yes: function(index, layero){
var iframeWin = layero.find('iframe')[0].contentWindow; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
......
......@@ -35,7 +35,11 @@ $(document).ready(function() {
return item !== null && typeof item !== "undefined" && item !== "";
})
}
return res;
var list = res;
if ("${gridSelectTableDataHandle}" && top["${gridSelectTableDataHandle}"] && typeof top["${gridSelectTableDataHandle}"] === 'function') {
list = top["${gridSelectTableDataHandle}"](res);
}
return list;
},
//默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
//queryParamsType:'',
......
......@@ -50,6 +50,7 @@
$("#jstree").jstree('open_all');
});
console.log("${isMultiSelect}")
//初始化表格
$('#table').bootstrapTable({
......
......@@ -73,40 +73,40 @@
}
},
{
field: 'model',
title: '型号',
field: 'amount',
title: '单价',
formatter: function (value,row,index){
return Mustache.render($("#modelTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
return Mustache.render($("#amountTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'num',
title: '数量',
field: 'type.unit',
title: '单位',
formatter: function (value,row,index){
return Mustache.render($("#numTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
return Mustache.render($("#unitTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'amount',
title: '单价',
field: 'model',
title: '型号',
formatter: function (value,row,index){
return Mustache.render($("#amountTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
return Mustache.render($("#modelTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'unit',
title: '单位',
field: 'num',
title: '数量',
formatter: function (value,row,index){
return Mustache.render($("#unitTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
return Mustache.render($("#numTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
......@@ -161,12 +161,15 @@
name: '',
type: {
id: '',
name: ''
name: '',
unit: '',
code: ''
},
model: '',
num: null,
amount: null,
remarks: ''
remarks: '',
infoSum: ''
}
$(selector).bootstrapTable('append', [
......@@ -260,10 +263,10 @@
type: {
id: node.id,
name: node.text,
code: node.original.code
code: node.original.code,
unit: node.original.unit
},
amount: node.original.amount,
unit: node.original.unit
};
if ($("#goodsInfoList" + rowIndex + "_num").val()) {
obj.infoSum = new Big($("#goodsInfoList" + rowIndex + "_num").val()).times(obj.amount).toNumber();
......@@ -288,10 +291,10 @@
type: {
id: '',
name: '',
code: ''
code: '',
unit: ''
},
amount: '',
unit: '',
infoSum: ''
};
updateRow(num, obj);
......@@ -315,6 +318,12 @@
<script id="typeCodeTpl" type="text/html">
<input id="goodsInfoList{{idx}}_typeCode" name="goodsInfoList[{{idx}}].type.code" type="text" value="{{row.type.code}}" readonly class="form-control required"/>
</script>
<script id="amountTpl" type="text/html">
<input id="goodsInfoList{{idx}}_amount" name="goodsInfoList[{{idx}}].amount" type="text" value="{{row.amount}}" readonly onchange="onInputChange('{{idx}}', this, 'amount')" class="form-control required"/>
</script>
<script id="unitTpl" type="text/html">
<input id="goodsInfoList{{idx}}_unit" name="goodsInfoList[{{idx}}].type.unit" type="text" value="{{row.type.unit}}" readonly onchange="onInputChange('{{idx}}', this, 'type.unit')" class="form-control required"/>
</script>
<script id="modelTpl" type="text/html">
<input id="goodsInfoList{{idx}}_model" name="goodsInfoList[{{idx}}].model" type="text" value="{{row.model}}" onchange="onInputChange('{{idx}}', this, 'model')" class="form-control required"/>
</script>
......@@ -323,12 +332,6 @@
<input id="goodsInfoList{{idx}}_num" name="goodsInfoList[{{idx}}].num" type="text" value="{{row.num}}" onchange="onInputChange('{{idx}}', this, 'num')" class="form-control required"/>
</script>
<script id="amountTpl" type="text/html">
<input id="goodsInfoList{{idx}}_amount" name="goodsInfoList[{{idx}}].amount" type="text" value="{{row.amount}}" readonly onchange="onInputChange('{{idx}}', this, 'amount')" class="form-control required"/>
</script>
<script id="unitTpl" type="text/html">
<input id="goodsInfoList{{idx}}_unit" name="goodsInfoList[{{idx}}].unit" type="text" value="{{row.unit}}" readonly onchange="onInputChange('{{idx}}', this, 'unit')" class="form-control required"/>
</script>
<script id="infoSumTpl" type="text/html">
<input id="goodsInfoList{{idx}}_infoSum" name="goodsInfoList[{{idx}}].infoSum" type="text" value="{{row.infoSum}}" readonly onchange="onInputChange('{{idx}}', this, 'infoSum')" class="form-control required"/>
</script>
......
......@@ -33,7 +33,7 @@
<tr>
<td><font color="red">*</font>批次号</td>
<td>
<form:input path="batchNum" htmlEscape="false" readonly="true" class="form-control required"/>
<form:input path="batchNum" htmlEscape="false" class="form-control required"/>
</td>
<td><font color="red">*</font>时间</td>
<td>
......
......@@ -295,10 +295,10 @@ $(document).ready(function() {
if(LODOP){
jp.loading('loading...');
jp.get("${ctx}/warehouse/goods/goods/printQr?goodsInfoId="+id, function (res) {
var list = res.body.goodsInfo.qrCodeList;
var row = res.body.goodsInfo.qrCode;
LODOP.PRINT_INIT("打印货品");
LODOP.SET_PRINT_PAGESIZE(1,400,600,0)
createAllPage(list);
LODOP.SET_PRINT_PAGESIZE(1,800,600,0)
createAllPage(row);
LODOP.PREVIEW();
jp.close();
})
......@@ -311,16 +311,20 @@ $(document).ready(function() {
}
}
function createAllPage(list){
function createAllPage(item){
if(!list){
return;
}
list.forEach(function(item){
// if(!list){
// return;
// }
// list.forEach(function(item){
// LODOP.NewPage();
// var imgUrl = "${ctxPath}/" + item.url;
// LODOP.ADD_PRINT_IMAGE('0%',"0%","100%","100%","<img width='150' border='0' src='"+imgUrl+"' />");
// })
debugger
LODOP.NewPage();
var imgUrl = "${ctxPath}/" + item.url;
LODOP.ADD_PRINT_IMAGE('0%',"0%","100%","100%","<img width='150' border='0' src='"+imgUrl+"' />");
})
LODOP.ADD_PRINT_IMAGE('0%',"0%","100%","100%","<img width='300' border='0' src='"+imgUrl+"' />");
}
function cleanQr(id) {
......@@ -377,7 +381,7 @@ $(document).ready(function() {
{{row.amount}}
</td>
<td>
{{row.unit}}
{{row.type.unit}}
</td>
<td>
{{row.infoSum}}
......
......@@ -48,20 +48,40 @@
}
},
{
field: 'name',
title: '名称',
field: 'type.name',
title: '品名',
formatter: function (value,row,index){
return Mustache.render($("#nameTpl").html(),{
return Mustache.render($("#typeNameTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'type.name',
title: '品名代码',
field: 'type.code',
title: '代码',
formatter: function (value,row,index){
return Mustache.render($("#typeTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
return Mustache.render($("#typeCodeTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'amount',
title: '单价',
formatter: function (value,row,index){
return Mustache.render($("#amountTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'type.unit',
title: '单位',
formatter: function (value,row,index){
return Mustache.render($("#unitTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
......@@ -78,6 +98,26 @@
}
},
{
field: 'num',
title: '数量',
formatter: function (value,row,index){
return Mustache.render($("#numTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'infoSum',
title: '总价',
formatter: function (value,row,index){
return Mustache.render($("#infoSumTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'shelves',
title: '货架',
formatter: function (value,row,index){
......@@ -144,6 +184,16 @@
return $(selector).bootstrapTable('getSelections');
}
top.selectStorageData = function (res) {
res.rows = res.rows.map(function (e) {
return {
...e,
infoSum: new Big(e.num).times(e.amount).toNumber()
}
})
return res;
}
/**
* 手动添加明细
* @param selector
......@@ -154,7 +204,7 @@
jp.warning('请选择批次号!');
return;
}
jp.openStorageSelectDialog({batchNum:$("#batchNum").val(),state: 0, isMultiSelect: true },function (items){
jp.openStorageSelectDialog({batchNum:$("#batchNum").val(),state: 0, isMultiSelect: true, gridSelectTableDataHandleName: 'selectStorageData' },function (items){
if(Array.isArray(items)){
/***
* 重复的物资编码去重
......@@ -179,7 +229,8 @@
id: '',
delFlag: 0,
remarks: '',
...item
...item,
infoSum: new Big(item.num).times(item.amount).toNumber()
}
});
$(selector).bootstrapTable('append', data)
......@@ -254,15 +305,27 @@
}
function onSelectShelves(nodes, rowIndex){
if(Array.isArray(nodes) && nodes.length === 1){
var node = nodes[0];
if(Array.isArray(nodes)){
var obj = {
shelves: {
id: node.id,
name: node.name
},
warehouse: node.warehouse
shelvesIds: '',
warehouseIds: '',
shelvesNames: '',
warehouseNames: ''
};
nodes.forEach(function (item) {
obj.shelvesIds += item.id + ',';
obj.shelvesNames += item.name + ',';
obj.warehouseIds += item.warehouse.id + ',';
obj.warehouseNames += item.warehouse.name + ','
})
// var node = nodes[0];
// var obj = {
// shelves: {
// id: node.id,
// name: node.name
// },
// warehouse: node.warehouse
// };
updateRow(rowIndex, obj)
}
}
......@@ -283,7 +346,21 @@
function addShelve(){
jp.openShelvesSelectDialog(function (items){
setTimeout(function(){
var Shelve = items[0]; // 货架对象
// var Shelve = items[0]; // 货架对象
var obj = {
shelvesIds: '',
warehouseIds: '',
shelvesNames: '',
warehouseNames: ''
};
items.forEach(function (item) {
obj.shelvesIds += item.id + ',';
obj.shelvesNames += item.name + ',';
obj.warehouseIds += item.warehouse.id + ',';
obj.warehouseNames += item.warehouse.name + ','
})
var realSelections = []; // 保存真实选中的数据
var allSelections = getSelections(); // 保存所有选中的数据(含分页)
var currentPageData = getTableData(true); // 保存当前分页数据
......@@ -299,17 +376,18 @@
var index = getTableData().findIndex(function (current){
return current.qrCode.id === item.qrCode.id;
}); // 需更新的行的下标
updateRow(index,{
shelves: {
id: Shelve.id,
name: Shelve.name
},
warehouse: Shelve.warehouse
})
// updateRow(index,{
// shelves: {
// id: Shelve.id,
// name: Shelve.name
// },
// warehouse: Shelve.warehouse
// })
updateRow(index, Object.assign({}, obj));
})
},200)
})
}, true);
}
function updateTask(allList, count, updateCallback){
......@@ -408,24 +486,42 @@
<script id="nameTpl" type="text/html">
<input type="text" readonly value="{{row.name}}" class="form-control "/>
</script>
<script id="typeNameTpl" type="text/html">//<!--
<sys:treeselectNotNameProperty id="storageInfoList{{idx}}_typeName" name="storageInfoList[{{idx}}].type.id" value="{{row.type.id}}" labelName="storageInfoList[{{idx}}].type.name" labelValue="{{row.type.name}}"
title="品名代码" url="/warehouse/materialtype/materialType/treeData" notAllowSelectParent="true" cssClass="form-control required" allowClear="false" allowSearch="true" callback="onSelectType" />//-->
</script>
<script id="typeCodeTpl" type="text/html">
<input id="storageInfoList{{idx}}_typeCode" name="storageInfoList[{{idx}}].type.code" type="text" value="{{row.type.code}}" readonly class="form-control required"/>
</script>
<script id="typeTpl" type="text/html">//<!--
<sys:treeselectNotNameProperty id="storageInfoList{{idx}}_type" name="storageInfoList[{{idx}}].type.id" value="{{row.type.id}}" labelName="storageInfoList{{idx}}.type.name" labelValue="{{row.type.name}}"
title="品名代码" url="/warehouse/materialtype/materialType/treeData" cssClass="form-control " disabled="disabled" allowClear="true" allowSearch="true" callback="onSelectType" />//-->
</script>
<script id="amountTpl" type="text/html">
<input id="storageInfoList{{idx}}_amount" name="storageInfoList[{{idx}}].amount" type="text" value="{{row.amount}}" readonly onchange="onInputChange('{{idx}}', this, 'amount')" class="form-control required"/>
</script>
<script id="unitTpl" type="text/html">
<input id="storageInfoList{{idx}}_unit" name="storageInfoList[{{idx}}].type.unit" type="text" value="{{row.type.unit}}" readonly onchange="onInputChange('{{idx}}', this, 'type.unit')" class="form-control required"/>
</script>
<script id="modelTpl" type="text/html">
<input id="storageInfoList{{idx}}_model" type="text" value="{{row.model}}" readonly onchange="onInputChange('{{idx}}', this, 'model')" class="form-control "/>
</script>
<script id="numTpl" type="text/html">
<input id="storageInfoList{{idx}}_num" name="storageInfoList[{{idx}}].num" readonly type="text" value="{{row.num}}" onchange="onInputChange('{{idx}}', this, 'num')" class="form-control required"/>
</script>
<script id="infoSumTpl" type="text/html">
<input id="storageInfoList{{idx}}_infoSum" name="storageInfoList[{{idx}}].infoSum" type="text" value="{{row.infoSum}}" readonly onchange="onInputChange('{{idx}}', this, 'infoSum')" class="form-control required"/>
</script>
<script id="shelvesTpl" type="text/html">//<!--
{{#row.readonly}}
<sys:shelvesselectNotName id="storageInfoList{{idx}}_shelves" name="storageInfoList[{{idx}}].shelves.id" value="{{row.shelves.id}}" labelName="storageInfoList[{{idx}}].shelves.name" labelValue="{{row.shelves.name}}"
cssClass="form-control required" iframeUrl="/warehouse/storage/storage/form" disabled="disabled"></sys:shelvesselectNotName>
<sys:shelvesselectNotName id="storageInfoList{{idx}}_shelves" name="storageInfoList[{{idx}}].shelvesIds" value="{{row.shelvesIds}}" labelName="storageInfoList[{{idx}}].shelvesNames" labelValue="{{row.shelvesNames}}"
cssClass="form-control required" iframeUrl="/warehouse/storage/storage/form" disabled="disabled" isMultiSelected="true" />
{{/row.readonly}}
{{^row.readonly}}
<sys:shelvesselectNotName id="storageInfoList{{idx}}_shelves" name="storageInfoList[{{idx}}].shelves.id" value="{{row.shelves.id}}" labelName="storageInfoList[{{idx}}].shelves.name" labelValue="{{row.shelves.name}}"
cssClass="form-control required" iframeUrl="/warehouse/storage/storage/form" callback="onSelectShelves"></sys:shelvesselectNotName>//-->
{{/row.readonly}}
<sys:shelvesselectNotName id="storageInfoList{{idx}}_shelves" name="storageInfoList[{{idx}}].shelvesIds" value="{{row.shelvesIds}}" labelName="storageInfoList[{{idx}}].shelvesNames" labelValue="{{row.shelvesNames}}"
cssClass="form-control required" iframeUrl="/warehouse/storage/storage/form" callback="onSelectShelves" isMultiSelected="true" />//-->
{{/row.readonly}}
</script>
<script id="remarksTpl" type="text/html">
{{#row.readonly}}
......@@ -436,7 +532,9 @@
{{/row.readonly}}
</script>
<script id="warehouseTpl" type="text/html">
<input id="storageInfoList{{idx}}_warehouseName" type="text" value="{{row.warehouse.name}}" readonly class="form-control "/>
<input id="storageInfoList{{idx}}_warehouseName" type="text" value="{{row.warehouseNames}}" readonly class="form-control "/>
<input id="storageInfoList{{idx}}_warehouseIds" name="storageInfoList[{{idx}}].warehouseIds" type="hidden" value="{{row.warehouseIds}}" readonly class="form-control "/>
<input type="hidden" id="storageInfoList{{idx}}_shelvesIds" name="storageInfoList[{{idx}}].shelvesIds" value="{{row.shelvesIds}}">
</script>
<script id="scanResultTpl" type="text/html">
<br>
......
......@@ -6,6 +6,7 @@
<meta name="decorator" content="ani"/>
<link rel="stylesheet" href="${ctxStatic}/common/css/form.css">
<link rel="stylesheet" href="${ctxStatic}/plugin/bootstrapTable/bootstrap-table.min.css">
<script type="text/javascript" src="${ctxStatic}/common/js/big.js"></script>
<style>
.statistic-container{
position: relative;
......
......@@ -238,21 +238,21 @@ $(document).ready(function() {
$('#storageTable').bootstrapTable('refresh');
}
function add(){
jp.openSaveDialog("新增入库单","${ctx}/warehouse/storage/storage/form/add", '1200', '800');
jp.openSaveDialog("新增入库单","${ctx}/warehouse/storage/storage/form/add", '1400', '800');
}
function edit(id){
if(id == undefined){
id = getIdSelections();
}
jp.openSaveDialog("编辑入库单","${ctx}/warehouse/storage/storage/form/edit?id=" + id, '1200', '800');
jp.openSaveDialog("编辑入库单","${ctx}/warehouse/storage/storage/form/edit?id=" + id, '1400', '800');
}
function view(id){//没有权限时,不显示确定按钮
if(id == undefined){
id = getIdSelections();
}
jp.openViewDialog("查看入库单","${ctx}/warehouse/storage/storage/form/view?id=" + id, '1200', '800');
jp.openViewDialog("查看入库单","${ctx}/warehouse/storage/storage/form/view?id=" + id, '1400', '800');
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment