Commit c7d6af4f by yyq1988

对接出库功能

parent b42ddc07
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
action="${ctx}/warehouse/materialrequisition/materialRequisition/save" method="post" action="${ctx}/warehouse/materialrequisition/materialRequisition/save" method="post"
class="form-horizontal"> class="form-horizontal">
<form:hidden path="id"/> <form:hidden path="id"/>
<h3 class="物资领用表"></h3> <h3 class="text-center">物资领用表</h3>
<table class="table table-bordered main-table"> <table class="table table-bordered main-table">
<tr> <tr>
<td> <font color="red">*</font>领用单号</td> <td> <font color="red">*</font>领用单号</td>
......
<%--
Created by IntelliJ IDEA.
User: yangzi
Date: 2023/2/21
Time: 10:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/webpage/include/taglib.jsp" %>
<div id="toolbar" class="text-left">
<c:if test="${mode == 'add' || mode == 'edit'}">
<a class="btn btn-primary btn-sm" onclick="addDetail('#detail_table')" title="新增"><i class="fa fa-plus"></i>
手动添加</a>
<a class="btn btn-primary btn-sm" onclick="addScan('#detail_table')" title="新增"><i class="fa fa-plus"></i>
扫码添加</a>
</c:if>
</div>
<table id="detail_table" data-toolbar="#toolbar"></table>
<script>
var selector = "#detail_table";
function initTable() {
var data = ${fns:toJson(outbound.outboundInfoList)};
$(selector).bootstrapTable({
data: data,
columns: [{checkbox: true},
{
field: 'no',
title: '序号',
align: 'center',
width: 60,
formatter: function (value, row, index) {
var tpl = $("#hideTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, "");
var html = Mustache.render(tpl, {
idx: index,
row: row
})
return html + '<span>' + (index + 1) + '</span>'
}
},
{
field: 'ledgerInfo.name',
title: '物资名称',
formatter: function (value, row, index) {
return Mustache.render($("#ledgerInfoNameTpl").html(), {
row: row,
idx: index
})
}
},
{
field: 'ledgerInfo.code',
title: '物资编码',
formatter: function (value, row, index) {
return Mustache.render($("#ledgerInfoCodeTpl").html(), {
row: row,
idx: index
})
}
},
{
field: 'ledgerInfo.type.name',
title: '类型',
formatter: function (value, row, index) {
return Mustache.render($("#ledgerInfoTypeTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""), {
row: row,
idx: index
})
}
},
{
field: 'ledgerInfo.model',
title: '型号',
formatter: function (value, row, index) {
return Mustache.render($("#ledgerInfoModelTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""), {
row: row,
idx: index
})
}
},
{
field: 'ledgerInfo.amount',
title: '单价',
formatter: function (value, row, index) {
return Mustache.render($("#ledgerInfoAmountTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""), {
row: row,
idx: index
})
}
},
{
field: 'remarks',
title: '备注',
formatter: function (value, row, index) {
return Mustache.render($("#remarksTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""), {
row: row,
idx: index
})
}
},
{
field: '',
title: '操作',
formatter: function (value, row, index) {
var text = row.delFlag == 1 ? '撤销删除' : '删除';
var result = ["<a href='javascript:void(0);' onclick=\"removeRow(" + index + ", '" + row.id + "', '" + row.delFlag + "')\">" + text + "</a>"]
return result.join('');
}
}
]
});
}
function getSelections() {
return $(selector).bootstrapTable('getSelections');
}
/**
* 手动添加明细
* @param selector
*/
function addDetail(selector) {
jp.openGridSelectDialog({
title: '选择物资台账明细',
isMultiSelect: true,
url: "${ctx}/warehouse/ledger/ledger/findByQrOrCode",
fieldLabels: "物资编码|物资名称|类型|型号|批次号|单价",
fieldKeys: "code|name|type.name|model|batchNum|amount",
searchLabels: "物资编码",
searchKeys: "code",
}, function (items) {
if (Array.isArray(items)) {
var data = items.map(function (item) {
item[0] = false;
return {
id: '',
delFlag: 0,
remarks: '',
ledgerInfo: item
}
})
$(selector).bootstrapTable('append', data)
}
})
}
function removeRow(index, rowId, rowDelFlag) {
if (rowId) {
var delFlag = rowDelFlag === 1 ? 0 : 1
updateRow(index, {
delFlag: delFlag
})
} else {
$(selector).bootstrapTable("remove", {
field: '$index',
values: [index]
})
}
}
function updateRow(index, row) {
$(selector).bootstrapTable('updateRow', {
index: index,
row: row
})
}
function onInputChange(rowIndex, elem, field) {
var obj = {};
obj[field] = $(elem).val()
var timer = null;
clearTimeout(timer);
timer = setTimeout(function () {
updateRow(rowIndex, obj)
}, 0)
}
function onSelectReceiver(nodes, rowIndex) {
if (Array.isArray(nodes) && nodes.length === 1) {
var node = nodes[0];
var obj = {
receiver: {
id: node.id,
name: node.name
}
};
updateRow(rowIndex, obj)
}
}
/**
* 获取所有明细数据
* @returns {*|jQuery}
*/
function getTableData() {
return $(selector).bootstrapTable('getData');
}
/**
* 点击扫码显示扫码窗口
*/
function addScan() {
layer.open({
type: 1,
title: '扫码',
auto: true,
area: ['500', '300'],
content: $("#scanResultTpl").html(),
success: function () {
$("#scanResult").focus();
},
btn: ['关闭']
})
}
/**
* 扫码
* 一、获取扫码结果
* 二、请求后台接口获取结果
* 三、增一条明细数据
* 四、清空扫码结果
* @param elem
*/
function onScanChange(elem) {
try {
var json = JSON.parse($(elem).val());
var qrCodeId = json.code;
jp.get('${ctx}/warehouse/ledger/ledger/findByQrOrCode?qrCodeId=' + qrCodeId, function (res) {
var data = res.rows || [];
if (data.length) {
var item = data[0];
$(selector).bootstrapTable('append', [
{
id: '',
delFlag: 0,
remarks: '',
ledgerInfo: item
}
]);
$(elem).val('').focus();
}else{
jp.warning('未找到任何数据!');
$(elem).val('').focus();
}
})
} catch (e) {
console.log(e);
}
}
</script>
<script id="hideTpl" type="text/html">
<input id="outboundInfoList{{idx}}_id" name="outboundInfoList[{{idx}}].id" type="hidden"
value="{{row.id}}"/>
<input id="outboundInfoList{{idx}}_delFlag" name="outboundInfoList[{{idx}}].delFlag"
type="hidden" value="{{row.delFlag}}"/>
<input id="outboundInfoList{{idx}}_outbound"
name="outboundInfoList[{{idx}}].outbound.id" type="hidden"
value="{{row.outbound.id}}"/>
<input id="outboundInfoList{{idx}}_ledgerInfoId"
name="outboundInfoList[{{idx}}].ledgerInfo.id" type="hidden" value="{{row.ledgerInfo.id}}"/>
</script>
<script id="ledgerInfoNameTpl" type="text/html">
<input id="outboundInfoList{{idx}}_ledgerInfoName" readonly
name="outboundInfoList[{{idx}}].ledgerInfo.name" type="text" class="form-control"
value="{{row.ledgerInfo.name}}"/>
</script>
<script id="ledgerInfoCodeTpl" type="text/html">
<input id="outboundInfoList{{idx}}_ledgerInfoCode" readonly
name="outboundInfoList[{{idx}}].ledgerInfo.code" type="text" class="form-control"
value="{{row.ledgerInfo.code}}"/>
</script>
<script id="ledgerInfoTypeTpl" type="text/html">//<!--
<sys:treeselect id="outboundInfoList{{idx}}_ledgerInfoType" name="outboundInfoList[{{idx}}].ledgerInfo.type.id" value="{{row.ledgerInfo.type.id}}" labelName="outboundInfoList{{idx}}.ledgerInfo.type.name" labelValue="{{row.ledgerInfo.type.name}}"
title="类型" url="/warehouse/materialtype/materialType/treeData" cssClass="form-control " disabled="disabled" allowClear="true"/>//-->
</script>
<script id="ledgerInfoModelTpl" type="text/html">
<input id="outboundInfoList{{idx}}_ledgerInfoModel"
name="outboundInfoList[{{idx}}].ledgerInfo.model" type="text" class="form-control" readonly
value="{{row.ledgerInfo.model}}"/>
</script>
<script id="ledgerInfoAmountTpl" type="text/html">
<input id="outboundInfoList{{idx}}_ledgerInfoAmount"
name="outboundInfoList[{{idx}}].ledgerInfo.amount" type="text" readonly class="form-control"
value="{{row.ledgerInfo.amount}}"/>
</script>
<script id="remarksTpl" type="text/html">
<textarea id="storageInfoList{{idx}}_remarks" name="storageInfoList[{{idx}}].remarks" rows="2"
onchange="onInputChange('{{idx}}', this, 'remarks')" class="form-control ">{{row.remarks}}</textarea>
</script>
<script id="scanResultTpl" type="text/html">
<br>
<div class="container-fluid">
<div class="row">
<div class="col-xs-2 text-right">
<label>扫码结果:</label>
</div>
<div class="col-xs-10">
<input type="text" id="scanResult" class="form-control" onchange="onScanChange(this)">
<span class="text-danger">请切换英文输入法</span>
</div>
</div>
</div>
<br>
</script>
\ No newline at end of file
<%@ page contentType="text/html;charset=UTF-8" %> <%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/webpage/include/taglib.jsp"%> <%@ include file="/webpage/include/taglib.jsp" %>
<html> <html>
<head> <head>
<title>出库信息管理</title> <title>出库信息管理</title>
<meta name="decorator" content="ani"/> <meta name="decorator" content="ani"/>
<script type="text/javascript"> <link rel="stylesheet" href="${ctxStatic}/common/css/form.css">
<link rel="stylesheet" href="${ctxStatic}/plugin/bootstrapTable/bootstrap-table.min.css">
$(document).ready(function() { <script type="text/javascript" src="${ctxStatic}/plugin/bootstrapTable/bootstrap-table.min.js"></script>
jp.ajaxForm("#inputForm",function(data){ <script type="text/javascript" src="${ctxStatic}/plugin/bootstrapTable/bootstrap-table-zh-CN.js"></script>
if(data.success){
jp.success(data.msg);
jp.go("${ctx}/warehouse/outbound/outbound");
}else{
jp.error(data.msg);
$("#inputForm").find("button:submit").button("reset");
}
});
$('#outboundTime').datetimepicker({
format: "YYYY-MM-DD HH:mm:ss"
});
});
function addRow(list, idx, tpl, row){
$(list).append(Mustache.render(tpl, {
idx: idx, delBtn: true, row: row
}));
$(list+idx).find("select").each(function(){
$(this).val($(this).attr("data-value"));
});
$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
var ss = $(this).attr("data-value").split(',');
for (var i=0; i<ss.length; i++){
if($(this).val() == ss[i]){
$(this).attr("checked","checked");
}
}
});
$(list+idx).find(".form_datetime").each(function(){
$(this).datetimepicker({
format: "YYYY-MM-DD HH:mm:ss"
});
});
}
function delRow(obj, prefix){
var id = $(prefix+"_id");
var delFlag = $(prefix+"_delFlag");
if (id.val() == ""){
$(obj).parent().parent().remove();
}else if(delFlag.val() == "0"){
delFlag.val("1");
$(obj).html("&divide;").attr("title", "撤销删除");
$(obj).parent().parent().addClass("error");
}else if(delFlag.val() == "1"){
delFlag.val("0");
$(obj).html("&times;").attr("title", "删除");
$(obj).parent().parent().removeClass("error");
}
}
</script>
</head> </head>
<body> <body>
<div class="wrapper wrapper-content"> <div class="wrapper wrapper-content">
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">
<a class="panelButton" href="${ctx}/warehouse/outbound/outbound"><i class="ti-angle-left"></i> 返回</a>
</h3>
</div>
<div class="panel-body"> <div class="panel-body">
<form:form id="inputForm" modelAttribute="outbound" action="${ctx}/warehouse/outbound/outbound/save" method="post" class="form-horizontal"> <form:form id="inputForm" modelAttribute="outbound" action="${ctx}/warehouse/outbound/outbound/save"
method="post" class="form-horizontal">
<form:hidden path="id"/> <form:hidden path="id"/>
<div class="form-group"> <h3 class="text-center">出库表</h3>
<label class="col-sm-2 control-label">出库单号:</label> <table class="table table-bordered main-table">
<div class="col-sm-10">
<form:input path="number" htmlEscape="false" class="form-control "/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">相关表单ID:</label>
<div class="col-sm-10">
<form:input path="relationId" htmlEscape="false" class="form-control "/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">出库时间:</label>
<div class="col-sm-10">
<div class='input-group form_datetime' id='outboundTime'>
<input type='text' name="outboundTime" class="form-control " value="<fmt:formatDate value="${outbound.outboundTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">出库分类:</label>
<div class="col-sm-10">
<form:select path="type" class="form-control ">
<form:option value="" label=""/>
<form:options items="${fns:getDictList('wh_delivery_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
</form:select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">操作人:</label>
<div class="col-sm-10">
<form:input path="operator" htmlEscape="false" class="form-control "/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">备注信息:</label>
<div class="col-sm-10">
<form:textarea path="remarks" htmlEscape="false" rows="4" class="form-control "/>
</div>
</div>
<div class="tabs-container">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">出库单明细表:</a>
</li>
</ul>
<div class="tab-content">
<div id="tab-1" class="tab-pane fade in active">
<a class="btn btn-white btn-sm" onclick="addRow('#outboundInfoList', outboundInfoRowIdx, outboundInfoTpl);outboundInfoRowIdx = outboundInfoRowIdx + 1;" title="新增"><i class="fa fa-plus"></i> 新增</a>
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr> <tr>
<th class="hide"></th> <td> <font color="red">*</font>出库单号</td>
<th>出库单主表id</th> <td>
<th>台账明细表id</th> <form:input path="number" htmlEscape="false" readonly="true" class="form-control required"/>
<th>备注信息</th>
<th width="10">&nbsp;</th>
</tr>
</thead>
<tbody id="outboundInfoList">
</tbody>
</table>
<script type="text/template" id="outboundInfoTpl">//<!--
<tr id="outboundInfoList{{idx}}">
<td class="hide">
<input id="outboundInfoList{{idx}}_id" name="outboundInfoList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
<input id="outboundInfoList{{idx}}_delFlag" name="outboundInfoList[{{idx}}].delFlag" type="hidden" value="0"/>
</td> </td>
<td><font color="red">*</font>操作人</td>
<td> <td>
<input id="outboundInfoList{{idx}}_outbound" name="outboundInfoList[{{idx}}].outbound.id" type="text" value="{{row.outbound.id}}" class="form-control "/> <sys:userselect id="operator" name="operator.id"
value="${outbound.operator.id}" labelName="operator.name"
labelValue="${outbound.operator.name}" disabled="disabled"
cssClass="form-control required"/>
</td> </td>
</tr>
<tr>
<td> <font color="red">*</font>出库时间</td>
<td> <td>
<input id="outboundInfoList{{idx}}_ledgerInfo" name="outboundInfoList[{{idx}}].ledgerInfo.id" type="text" value="{{row.ledgerInfo.id}}" class="form-control "/> <div class='input-group form_datetime' id='outboundTime'>
<input type='text' name="outboundTime" class="form-control required"
value="<fmt:formatDate value="${outbound.outboundTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
</div>
</td> </td>
<td>出库分类</td>
<td> <td>
<textarea id="outboundInfoList{{idx}}_remarks" name="outboundInfoList[{{idx}}].remarks" rows="4" class="form-control ">{{row.remarks}}</textarea> <form:select path="type" class="form-control" onchange="onTypeChange(this)">
<form:option value="" label=""/>
<form:options items="${fns:getDictList('wh_delivery_type')}" itemLabel="label"
itemValue="value" htmlEscape="false"/>
</form:select>
</td> </td>
</tr>
<td class="text-center" width="10"> <tr>
{{#delBtn}}<span class="close" onclick="delRow(this, '#outboundInfoList{{idx}}')" title="删除">&times;</span>{{/delBtn}} <td>备注</td>
<td colspan="3">
<form:textarea path="remarks" htmlEscape="false" rows="4" class="form-control "/>
</td> </td>
</tr>//--> </tr>
</script> <tr>
<script type="text/javascript"> <td colspan="4">
var outboundInfoRowIdx = 0, outboundInfoTpl = $("#outboundInfoTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,""); <%@include file="outboundDetail.jsp" %>
$(document).ready(function() { </td>
var data = ${fns:toJson(outbound.outboundInfoList)}; </tr>
for (var i=0; i<data.length; i++){ </table>
addRow('#outboundInfoList', outboundInfoRowIdx, outboundInfoTpl, data[i]);
outboundInfoRowIdx = outboundInfoRowIdx + 1;
}
});
</script>
</div>
</div>
</div>
<c:if test="${mode == 'add' || mode=='edit'}">
<div class="col-lg-3"></div>
<div class="col-lg-6">
<div class="form-group text-center">
<div>
<button class="btn btn-primary btn-block btn-lg btn-parsley" data-loading-text="正在提交...">提 交</button>
</div>
</div>
</div>
</c:if>
</form:form> </form:form>
</div> </div>
</div> </div>
</div> </div>
</div>
</div> </div>
</div> <script type="text/javascript">
$(document).ready(function() {
initTable();
$('#outboundTime').datetimepicker({
format: "YYYY-MM-DD HH:mm:ss"
});
});
function save() {
var isValidate = jp.validateForm('#inputForm');//校验表单
if(!isValidate){
return false;
}else{
jp.loading();
jp.post($("#inputForm").attr('action'),$('#inputForm').serialize(),function(data){
if(data.success){
jp.getParent().refresh();
var dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
parent.layer.close(dialogIndex);
jp.success(data.msg)
}else{
jp.error(data.msg);
}
})
}
}
function onTypeChange(elem){
var value$ = $(elem).val();
if(value$ === '1' || value$ === '2'){
jp.warning("领用出库和盘盈出库只有物资领用和物资盘亏时选择");
$(elem).val('');
}
}
</script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -110,13 +110,6 @@ $(document).ready(function() { ...@@ -110,13 +110,6 @@ $(document).ready(function() {
} }
,{ ,{
field: 'relationId',
title: '相关表单ID',
sortable: true,
sortName: 'relationId'
}
,{
field: 'outboundTime', field: 'outboundTime',
title: '出库时间', title: '出库时间',
sortable: true, sortable: true,
...@@ -258,21 +251,21 @@ $(document).ready(function() { ...@@ -258,21 +251,21 @@ $(document).ready(function() {
$('#outboundTable').bootstrapTable('refresh'); $('#outboundTable').bootstrapTable('refresh');
} }
function add(){ function add(){
jp.go("${ctx}/warehouse/outbound/outbound/form/add"); jp.openSaveDialog("新增出库单","${ctx}/warehouse/outbound/outbound/form/add",'1200','800');
} }
function edit(id){ function edit(id){
if(id == undefined){ if(id == undefined){
id = getIdSelections(); id = getIdSelections();
} }
jp.go("${ctx}/warehouse/outbound/outbound/form/edit?id=" + id); jp.openSaveDialog("编辑出库单","${ctx}/warehouse/outbound/outbound/form/edit?id=" + id,'1200','800');
} }
function view(id){//没有权限时,不显示确定按钮 function view(id){//没有权限时,不显示确定按钮
if(id == undefined){ if(id == undefined){
id = getIdSelections(); id = getIdSelections();
} }
jp.go("${ctx}/warehouse/outbound/outbound/form/view?id=" + id); jp.openViewDialog("查看出库单","${ctx}/warehouse/outbound/outbound/form/view?id=" + id, '1200','800');
} }
...@@ -316,9 +309,11 @@ $(document).ready(function() { ...@@ -316,9 +309,11 @@ $(document).ready(function() {
<table class="ani table"> <table class="ani table">
<thead> <thead>
<tr> <tr>
<th>出库单主表id</th> <th>物资编码</th>
<th>台账明细表id</th> <th>物资名称</th>
<th>备注信息</th> <th>类型</th>
<th>型号</th>
<th>单价</th>
</tr> </tr>
</thead> </thead>
<tbody id="outboundChild-{{idx}}-1-List"> <tbody id="outboundChild-{{idx}}-1-List">
...@@ -330,10 +325,19 @@ $(document).ready(function() { ...@@ -330,10 +325,19 @@ $(document).ready(function() {
<script type="text/template" id="outboundChild1Tpl">//<!-- <script type="text/template" id="outboundChild1Tpl">//<!--
<tr> <tr>
<td> <td>
{{row.outbound.id}} {{row.ledgerInfo.name}}
</td>
<td>
{{row.ledgerInfo.code}}
</td>
<td>
{{row.ledgerInfo.type.name}}
</td>
<td>
{{row.ledgerInfo.model}}
</td> </td>
<td> <td>
{{row.ledgerInfo.id}} {{row.ledgerInfo.amount}}
</td> </td>
<td> <td>
{{row.remarks}} {{row.remarks}}
......
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