<!DOCTYPE html>
|
<html>
|
<head>
|
<meta charset="utf-8">
|
<title>年度报表</title>
|
<meta name="renderer" content="webkit">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
<link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
|
<link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
|
<link rel="stylesheet" href="../../css/public.css" media="all">
|
<style type="text/css">
|
.layui-form-item .layui-inline {
|
margin-bottom: 1px;
|
margin-right: 1px;
|
}
|
|
</style>
|
<script>
|
// 这里是需要在页面渲染之前执行的代码
|
document.addEventListener("DOMContentLoaded", function() {
|
//获取table默认显示数
|
pageCntFirst();
|
//判断是否开启table列表列宽调整功能。
|
GetIsSetColW();
|
});
|
</script>
|
|
</head>
|
<body id="body">
|
<div class="layui-fluid" style="padding-bottom: 0;">
|
<div class="layui-card">
|
<div class="layui-form layui-card-header layuiadmin-card-header-auto" id="top">
|
<div class="layui-form-item" style="margin-bottom: 0px;">
|
<div class="layui-inline">
|
<label class="layui-form-label">开始日期</label>
|
<div class="layui-input-inline">
|
<input type="text" autocomplete="off" name="StartTime" id="StartTime" class="layui-input"
|
placeholder="开始日期">
|
</div>
|
</div>
|
<div class="layui-inline">
|
<label class="layui-form-label">结束日期</label>
|
<div class="layui-input-inline">
|
<input type="text" autocomplete="off" name="EndTime" id="EndTime" class="layui-input"
|
placeholder="结束日期">
|
</div>
|
</div>
|
<div class="layui-inline sousuo">
|
<button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search">
|
<i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
|
</button>
|
<button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit
|
lay-filter="daochu">
|
<i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>导出
|
</button>
|
</div>
|
|
|
</div>
|
</div>
|
|
<div id="center"></div>
|
<div class="layui-card-body">
|
<div style="position: relative;">
|
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
|
<ul class="layui-tab-title" id="tab">
|
<li class="layui-this">总表</li>
|
<li >明细</li>
|
</ul>
|
|
<div id="center">
|
</div>
|
|
<div class="layui-tab-content">
|
<!-- 单据总表 -->
|
<div class="layui-tab-item layui-show">
|
<div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 -->
|
<table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
|
|
<!-- #region 自定义表头 -->
|
<div class="headerSetIcon">
|
<button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols">
|
<i class="layui-icon"></i>
|
</button>
|
</div>
|
<!-- #endregion -->
|
</div>
|
</div>
|
<!-- 单据明细 -->
|
<div class="layui-tab-item">
|
<div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 -->
|
<table id="LAY-app-content-list2" lay-filter="LAY-app-content-list2"></table>
|
|
<!-- #region 自定义表头 -->
|
<div class="headerSetIcon">
|
<button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols2">
|
<i class="layui-icon"></i>
|
</button>
|
</div>
|
<!-- #endregion -->
|
|
<!-- #region 自定义表头 -->
|
<!-- 入库重量 -->
|
<script type="text/html" id="InspectASNWeight">
|
{{# function GetBtn(d){
|
return (d.ASNQty * d.Weight).toFixed(4);
|
}
|
}}
|
{{ GetBtn(d) }}
|
</script>
|
|
<!-- 出库重量 -->
|
<script type="text/html" id="InspectSOWeight">
|
{{# function GetBtn1(d){
|
return (d.SOQty * d.Weight).toFixed(4);
|
}
|
}}
|
{{ GetBtn1(d) }}
|
</script>
|
|
<!-- 结存重量 -->
|
<script type="text/html" id="InspectASNSOWeight">
|
{{# function GetBtn2(d){
|
return (d.ASNSOQty * d.Weight).toFixed(4);
|
}
|
}}
|
{{ GetBtn2(d) }}
|
</script>
|
<!-- #endregion -->
|
</div>
|
</div>
|
</div>
|
</div>
|
|
</div>
|
|
<!-- 类型 -->
|
<script type="text/html" id="buttonType">
|
{{# if(d.Type=='0'){ }}
|
<p>原料</p>
|
{{# } else if(d.Type=='1') { }}
|
<p>包材</p>
|
{{# } else if(d.Type=='2') { }}
|
<p>成品</p>
|
{{# } else if(d.Type=='3') { }}
|
<p>耗材</p>
|
{{# } else if(d.Type=='4') { }}
|
<p>中间品</p>
|
{{# } }}
|
</script>
|
|
</div>
|
</div>
|
</div>
|
|
<script src="../../layuiadmin/layui/layui.js"></script>
|
<script src="../../js/public.js"></script>
|
<script src="../../js/jquery-3.5.1.min.js"></script>
|
<script src="../../js/jquery.cookie.js"></script>
|
<script>
|
var uid = $.cookie('userId');
|
layui.config({
|
base: '../../layuiadmin/' //静态资源所在路径
|
}).extend({
|
index: 'lib/index' //主入口模块
|
}).use(['index', 'table', 'laypage', 'layer','element','laydate'], function() {
|
var table = layui.table,
|
form = layui.form,
|
laypage = layui.laypage,
|
layer = layui.layer;
|
element = layui.element;
|
laydate = layui.laydate;
|
|
|
laydate.render({
|
elem: '#StartTime',
|
format: 'yyyy-MM-dd' //可任意组合
|
});
|
laydate.render({
|
elem: '#EndTime',
|
format: 'yyyy-MM-dd' //可任意组合
|
});
|
//获取当前时间
|
function getNowTime() {
|
var date = new Date();
|
//年 getFullYear():四位数字返回年份
|
var year = date.getFullYear(); //getFullYear()代替getYear()
|
//月 getMonth():0 ~ 11
|
var month = date.getMonth() + 1;
|
//日 getDate():(1 ~ 31)
|
var day = date.getDate();
|
//时 getHours():(0 ~ 23)
|
var hour = date.getHours();
|
//分 getMinutes(): (0 ~ 59)
|
var minute = date.getMinutes();
|
//秒 getSeconds():(0 ~ 59)
|
var second = date.getSeconds();
|
|
var time = year + addZero(month) + addZero(day) + addZero(hour) + addZero(minute) + addZero(second);
|
return time;
|
|
//小于10的拼接上0字符串
|
|
};
|
function addZero(s) {
|
return s < 10 ? ('0' + s) : s;
|
};
|
|
// 表单需要的变量
|
var infoOptions;
|
var infoOptions2;
|
|
var myDate = new Date();
|
// console.log(myDate.getFullYear()+'-'+(myDate.getMonth() + 1)+'-'+myDate.getDate()+' 00:00:00')
|
myDate.getFullYear(); //获取完整的年份(4位,1970-????)
|
myDate.getMonth(); //获取当前月份(0-11,0代表1月)
|
myDate.getDate(); //获取当前日(1-31)
|
// 每日初始时间
|
var chudate = myDate.getFullYear()+'-'+(myDate.getMonth() + 1)+'-'+myDate.getDate()+' 00:00:00'
|
var jiedate = myDate.getFullYear()+'-'+(myDate.getMonth() + 1)+'-'+myDate.getDate()+' 23:59:59'
|
var $ = layui.$;
|
var yemianid =0;
|
|
|
var h1 = GetTableTabHeight();
|
refreshTable("","");
|
//获取出入库总量
|
function refreshTable(StartTime,EndTime) {
|
//#region 自定义表头
|
var colsJson
|
var param1={
|
Href:'Statistical/GetAssSoInfo'
|
};
|
sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function(res) {
|
if (res.code == 0){
|
if(res.data=='' || res.data==undefined || res.data==null){
|
colsJson=TotalColsArr
|
}else{
|
colsJson= eval(res.data);
|
}
|
}else{
|
colsJson=TotalColsArr
|
}
|
infoOptions = {
|
elem: '#LAY-app-content-list',
|
height: h1,
|
id: 'LAY-app-content-list',
|
page: true,
|
limit: pageCnt,
|
limits: pageLimits,
|
even: true,
|
cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
|
done: function(){
|
//自定义列宽
|
SetTableColW('LAY-app-content-list','Statistical/GetAssSoInfo',TotalColsSysArr);
|
},
|
cols:colsJson
|
};
|
|
var param = {
|
StartTime:$("#StartTime").val(),
|
EndTime:$("#EndTime").val(),
|
};
|
sendData(IP + "/Statistical/GetAssSoInfo", param, 'get', function(res) {
|
//console.log(res)
|
if (res.code == 0) { //成功
|
var list = res.data;
|
$.extend(infoOptions, {
|
data: list
|
});
|
infoOptions.page = {
|
curr: 1
|
}
|
tableIns = table.render(infoOptions);
|
}
|
else { //不成功
|
layer.msg('获取总量列表信息失败!', {
|
icon: 2,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function() {});
|
}
|
});
|
});
|
//#endregion
|
|
}
|
//#region 自定义表头
|
var TotalColsArr = [[
|
{field: '',title: '序号',type:'numbers',align: 'center',fixed: 'left', "disabled": true},
|
{field: 'SkuNo', title: '物料编码', align: 'center'},
|
{field: 'SkuName', title: '物料名称', align: 'center',},
|
{field: 'Standard', title: '规格', align: 'center',},
|
{field: 'Type', title: '类型', align: 'center',templet: '#buttonType',},
|
{field: 'Demo',title: '备注',align: 'center',width: 200},
|
]];
|
var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
|
//#endregion
|
// 表单需要的变量
|
/*var infoOptions = {
|
elem: '#LAY-app-content-list',
|
height: 'full-164',
|
id: 'LAY-app-content-list',
|
page: true,
|
limit: pageCnt,
|
limits: pageLimits,
|
even: true,
|
cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
|
cols:
|
[[
|
{
|
title: '序号',
|
type: 'numbers',
|
fixed: 'left'
|
},
|
{
|
field: 'SkuNo',
|
title: '物料编码',
|
align: 'center'
|
},
|
{
|
field: 'SkuName',
|
title: '物料名称',
|
align: 'center',
|
},
|
{
|
field: 'Standard',
|
title: '规格',
|
align: 'center',
|
},
|
{
|
field: 'Type',
|
title: '类型',
|
align: 'center',
|
templet: '#buttonType',
|
},
|
{
|
field: 'Demo',
|
title: '备注',
|
align: 'center',
|
width: 200
|
},
|
|
]]
|
};*/
|
|
|
|
//获取单据明细
|
function refreshTable2(SkuNo,StartTime,EndTime) {
|
//#region 自定义表头
|
var colsJson;
|
var param1={
|
Href:'Statistical/GetAssSoInfoDetail'
|
};
|
sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function(res) {
|
if (res.code == 0){
|
if(res.data=='' || res.data==undefined || res.data==null){
|
colsJson=DetailColsArr
|
}else{
|
colsJson= eval(res.data);
|
}
|
}else{
|
colsJson=DetailColsArr
|
}
|
|
infoOptions2 = {
|
elem: '#LAY-app-content-list2',
|
height: h1,
|
id: 'LAY-app-content-list2',
|
page: true,
|
limit: pageCnt,
|
limits: pageLimits,
|
cellMinWidth: 60, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
|
done: function(){
|
//自定义列宽
|
SetTableColW('LAY-app-content-list2','Statistical/GetAssSoInfoDetail',DetailColsSysArr);
|
},
|
cols:colsJson
|
};
|
|
var param = {
|
skuNo:SkuNo,
|
StartTime:StartTime,
|
EndTime:EndTime,
|
}
|
//console.log(param)
|
sendData(IP + "/Statistical/GetAssSoInfoDetail", param, 'get', function(res) {
|
if (res.code == 0) //成功
|
{
|
var list = res.data;
|
$.extend(infoOptions2, {
|
data: list
|
});
|
infoOptions2.page = {
|
curr: 1
|
}
|
tableIns2 = table.render(infoOptions2);
|
}
|
else //不成功
|
{
|
layer.msg('获取明细列表信息失败!', {
|
icon: 2,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function() {});
|
}
|
})
|
|
});
|
//#endregion
|
|
}
|
|
//#region 自定义表头
|
var DetailColsArr = [[
|
{field: '',title: '序号',type:'numbers',fixed: 'left',width:65, "disabled": true},
|
{field: 'SkuNo', title: '物料编码', align: 'center', },
|
{field: 'SkuName', title: '物料名称', align: 'center',},
|
{field: 'NoticeDateTime', title: '单据日期', align: 'center',},
|
{field: 'ASNNo', title: '入库单号', align: 'center',},
|
{field: 'SONo', title: '出库单号', align: 'center',},
|
{field: 'NoticeType', title: '统计类别', align: 'center',},
|
{field: 'ASNQty', title: '入库数量', align: 'center',},
|
{field: 'ASNWeight',title: '入库重量(吨)',align: 'center', templet: '#InspectASNWeight'},
|
{field: 'SOQty',title: '出库数量', align: 'center',},
|
{field: 'SOWeight',title: '出库重量(吨)',align: 'center', templet: '#InspectSOWeight' },
|
{field: 'ASNSOQty',title: '结存数量', align: 'center',},
|
{field: 'ASNSOWeight',title: '结存重量(吨)',align: 'center', emplet: '#InspectASNSOWeight'},
|
{field: 'Weight',title: '理论重量',align: 'center',},
|
]];
|
var DetailColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(DetailColsArr)))//将表头数据进行url编码
|
//#endregion
|
|
// 表单需要的变量
|
/*var infoOptions2 = {
|
elem: '#LAY-app-content-list2',
|
height: 'full-164',
|
id: 'LAY-app-content-list2',
|
page: true,
|
limit: pageCnt,
|
limits: pageLimits,
|
even: true,
|
cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
|
cols:
|
[[
|
{
|
title: '序号',
|
type: 'numbers',
|
fixed: 'left',
|
},
|
{
|
field: 'SkuNo',
|
title: '物料编码',
|
align: 'center',
|
},
|
{
|
field: 'SkuName',
|
title: '物料名称',
|
align: 'center',
|
},
|
{
|
field: 'NoticeDateTime',
|
title: '单据日期',
|
align: 'center',
|
},
|
{
|
field: 'ASNNo',
|
title: '入库单号',
|
align: 'center',
|
},
|
{
|
field: 'SONo',
|
title: '出库单号',
|
align: 'center',
|
},
|
{
|
field: 'NoticeType',
|
title: '统计类别',
|
align: 'center',
|
},
|
{
|
field: 'ASNQty',
|
title: '入库数量',
|
align: 'center',
|
},
|
{
|
field: 'ASNWeight',
|
title: '入库重量(吨)',
|
align: 'center',
|
templet: function (d) {
|
return (d.ASNQty * d.Weight).toFixed(4);
|
}
|
},
|
{
|
field: 'SOQty',
|
title: '出库数量',
|
align: 'center',
|
},
|
{
|
field: 'SOWeight',
|
title: '出库重量(吨)',
|
align: 'center',
|
templet: function (d) {
|
return (d.SOQty * d.Weight).toFixed(4);
|
}
|
},
|
{
|
field: 'ASNSOQty',
|
title: '结存数量',
|
align: 'center',
|
},
|
{
|
field: 'ASNSOWeight',
|
title: '结存重量(吨)',
|
align: 'center',
|
templet: function (d) {
|
return (d.ASNSOQty * d.Weight).toFixed(4);
|
}
|
},
|
{
|
field: 'Weight',
|
title: '理论重量',
|
align: 'center',
|
},
|
]]
|
};*/
|
//var url = IP + "/Statistical/GetInventoryList1";
|
|
|
|
//接受全局变量
|
let quanjuskuNo = '';
|
//监听搜索
|
form.on('submit(LAY-app-contlist-search)', function(data) {
|
var EndTime = $("#EndTime").val();
|
var StartTime = $("#StartTime").val();
|
|
|
if(yemianid == 0){
|
quanjuskuNo = '';
|
refreshTable(StartTime,EndTime);
|
}else if(yemianid == 1){
|
refreshTable2(quanjuskuNo,StartTime,EndTime);
|
}
|
|
});
|
//触发行双击事件
|
table.on('rowDouble(LAY-app-content-list)', function(obj) {
|
$(".layui-tab-title>li").attr("class", "");
|
$('.layui-tab-title>li').eq(1).attr('class', 'layui-this');
|
$('.layui-tab-content .layui-tab-item').attr('class', 'layui-tab-item')
|
$('.layui-tab-content .layui-tab-item').eq(1).attr('class', 'layui-tab-item layui-show')
|
//onsole.log(obj.data.SkuNo);
|
quanjuskuNo = obj.data.SkuNo;
|
refreshTable2(quanjuskuNo,$("#StartTime").val(),$("#EndTime").val());
|
yemianid=1;
|
});
|
|
//监听Tab切换,以改变地址hash值
|
element.on('tab(docDemoTabBrief)', function(data){
|
//console.log(data);
|
yemianid = data.index;
|
if(yemianid == 0){
|
//console.log("总单");
|
refreshTable($("#StartTime").val(),$("#EndTime").val());
|
}else if(yemianid == 1){
|
//console.log("明细");
|
refreshTable2(quanjuskuNo,$("#StartTime").val(),$("#EndTime").val());
|
}
|
});
|
|
form.on('submit(daochu)', function () {
|
layer.confirm('确定导出当前数据吗?', function(index) {
|
if(yemianid == 0){
|
//console.log("总单");
|
var param = {
|
// skuNo:SkuNo,
|
StartTime:$("#StartTime").val(),
|
EndTime:$("#EndTime").val(),
|
};
|
sendData(IP + "/Statistical/GetAssSoInfo", param, 'get', function (res) {
|
//console.log(res);
|
if (res.code == 0) { //成功
|
var list = res.data;
|
list.forEach(item => {
|
if (item.SkuName.split(','))
|
{
|
item.SkuName = '"'+item.SkuName+'"'
|
}
|
switch(item.Type)
|
{
|
case '0':
|
item.Type = "原料"
|
break;
|
case '1':
|
item.Type = "包材"
|
break;
|
case '2':
|
item.Type = "成品"
|
break;
|
case '3':
|
item.Type = "耗材"
|
break;
|
case '4':
|
item.Type = "中间品"
|
break;
|
default:
|
item.Type = ""
|
break;
|
}
|
});
|
table.exportFile(tableIns.config.id, list,'xls',"年度报表总表"+getNowTime(),); //data 为该实例中的任意数量的数据
|
layer.msg('导出成功!', {
|
icon: 1,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
|
});
|
|
} else { //不成功
|
layer.msg('获取信息失败!', {
|
icon: 2,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () { });
|
}
|
});
|
}else if(yemianid == 1){
|
//console.log("记录");
|
var param = {
|
skuNo:quanjuskuNo,
|
StartTime:$("#StartTime").val(),
|
EndTime:$("#EndTime").val(),
|
};
|
sendData(IP + "/Statistical/GetAssSoInfoDetail", param, 'get', function (res) {
|
//console.log(res);
|
if (res.code == 0) { //成功
|
var list = res.data;
|
list.forEach(item => {
|
if (item.SkuName.split(','))
|
{
|
item.SkuName = '"'+item.SkuName+'"'
|
}
|
item.ASNWeight = (item.ASNQty * item.Weight).toFixed(4); // 入库重量
|
item.SOWeight = (item.SOQty * item.Weight).toFixed(4); // 出库重量
|
item.ASNSOWeight = (item.ASNSOQty * item.Weight).toFixed(4); // 结存重量
|
});
|
table.exportFile(tableIns2.config.id, list,'xls',"年度报表明细"+getNowTime(),); //data 为该实例中的任意数量的数据
|
layer.msg('导出成功!', {
|
icon: 1,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () {
|
|
});
|
|
} else { //不成功
|
layer.msg('获取信息失败!', {
|
icon: 2,
|
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
}, function () { });
|
}
|
});
|
}
|
});
|
});
|
|
//#region 自定义表头
|
//自定义表头
|
active = {
|
customCols: function(){
|
layer.open({
|
type: 2,
|
title: '自定义列',
|
content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetAssSoInfo&ColsSysArr='+TotalColsSysArr,
|
maxmin: false,
|
resize: false,
|
area: ['970px', '650px']
|
});
|
},
|
customCols2: function(){
|
layer.open({
|
type: 2,
|
title: '自定义列',
|
content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetAssSoInfoDetail&ColsSysArr='+DetailColsSysArr,
|
maxmin: false,
|
resize: false,
|
area: ['970px', '650px']
|
});
|
}
|
|
};
|
$('.layui-btn').on('click', function() {
|
var type = $(this).data('type');
|
active[type] ? active[type].call(this) : '';
|
});
|
//#endregion
|
|
|
});
|
</script>
|
</body>
|
</html>
|