<!DOCTYPE html>
|
<html lang="zh-cn">
|
|
<head>
|
<meta charset="UTF-8">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
<title>叫料配送看板</title>
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
<link rel="stylesheet" type="text/css" href="css/bootstrap-table.min.css">
|
<link rel="stylesheet" type="text/css" href="css/index.css">
|
<script src="js/jquery.min.js"></script>
|
<script src='js/echarts.min.js'></script>
|
<script src="js/bootstrap.min.js"></script>
|
<script src='js/bootstrap-table.min.js'></script>
|
<script src='js/bootstrap-table-zh-CN.min.js'></script>
|
<script src="js/jquery.SuperSlide.2.1.3.js"></script>
|
<script src='js/template.js'></script>
|
<script src="js/jquery.qrcode.min.js"></script>
|
<style>
|
.clock {
|
font-family: 'BebasNeueRegular', Arial, Helvetica, sans-serif;
|
font-size: 20px;
|
width: 450px;
|
float: right;
|
color: #fff;
|
margin-top: -75px;
|
margin-right: 5px;
|
color: #09d1ea;
|
|
}
|
|
.clock #Date {
|
text-align: center;
|
text-shadow: 0 0 0px #00c6ff;
|
|
|
}
|
|
.clock ul {
|
width: 450px;
|
margin: 0 auto;
|
padding: 0px;
|
list-style: none;
|
text-align: right;
|
margin-left: 15px;
|
position: relative;
|
}
|
|
.clock ul li {
|
display: inline;
|
font-size: 24px;
|
text-align: left;
|
font-family: 'BebasNeueRegular', Arial, Helvetica, sans-serif;
|
text-shadow: 0 0 0px #00c6ff;
|
}
|
|
body {
|
padding-left: 50px;
|
padding-right: 50px;
|
}
|
|
.title {
|
|
font-size: 44px;
|
font-family: PingFangSC;
|
font-weight: 500;
|
color: rgba(9, 209, 234, 1);
|
text-align: center;
|
background: url(img/img_little_new.png) center no-repeat;
|
margin-bottom: 30px;
|
}
|
|
.col-sm-12 {
|
position: relative;
|
min-height: 1px;
|
padding-right: 0px;
|
padding-left: 0px;
|
}
|
|
.col-sm-8,
|
.col-sm-6,
|
.col-sm-4,
|
.col-sm-3,
|
.col-sm-2 {
|
/* border: 1px solid #00c6ff; */
|
height: 450px;
|
}
|
|
#cTitle {
|
width: 50px;
|
height: 450px;
|
font-size: 25px;
|
line-height: 30px;
|
color: #00c6ff;
|
border: 1px solid #333
|
}
|
|
.col-sm-12,
|
.col-sm-2,
|
.col-sm-3,
|
.col-sm-4,
|
.col-sm-6,
|
.col-sm-8 {
|
position: relative;
|
min-height: 1px;
|
padding-right: 0px;
|
padding-left: 0px;
|
}
|
|
#mychart1,
|
#mychart2 {
|
width: 100%;
|
border: none;
|
height: 450px;
|
}
|
#cList0 {
|
height: 450px;
|
width: 3%;
|
/* border: 1px solid #00c6ff; */
|
float: left;
|
}
|
|
#cList1 {
|
float: left;
|
}
|
|
#cList1 li {
|
float: left;
|
height: 450px;
|
color: #00c6ff;
|
font-size: 20px;
|
/*文字居中*/
|
text-align: center;
|
/*display: flex;*/
|
}
|
|
#cList1 li span {
|
/*文字居中*/
|
display: inline-block;
|
height: 100%;
|
/*文字居中*/
|
|
/*文字竖排*/
|
writing-mode: vertical-lr;
|
/*从左向右 从右向左是 writing-mode: vertical-rl;*/
|
writing-mode: tb-lr;
|
/*IE浏览器的从左向右 从右向左是 writing-mode: tb-rl;*/
|
}
|
|
#cList2 {
|
height: 450px;
|
width: 97%;
|
/* border: 1px solid #00c6ff; */
|
float: left;
|
}
|
|
table tr td {
|
text-align: center;
|
vertical-align: middle !important;
|
/*border: 1px solid #464646;*/
|
border-right: 0px;
|
height: 40px;
|
font-size: 16px;
|
font-family: '黑体';
|
font-family: Arial;
|
border: none;
|
}
|
|
.table>caption+thead>tr:first-child>td,
|
.table>caption+thead>tr:first-child>th,
|
.table>colgroup+thead>tr:first-child>td,
|
.table>colgroup+thead>tr:first-child>th,
|
.table>thead:first-child>tr:first-child>td,
|
.table>thead:first-child>tr:first-child>th {
|
background-color: #000;
|
color: #3bff72;
|
|
}
|
|
.fixed-table-container tbody td .th-inner,
|
.fixed-table-container thead th .th-inner {
|
font-size: 15px;
|
color: #09d1ea;
|
padding: 20px 0 15px 0;
|
}
|
|
#tb_order,
|
#tb_order1 tr td {
|
text-align: center;
|
height: 32px;
|
line-height: 32px;
|
font-size: 14px;
|
/* font-family: '黑体'; */
|
color: #a6a8ae;
|
font-family: Arial;
|
/* border: 1px solid #464646; */
|
border: none;
|
}
|
|
#tb_order,
|
#tb_order1 tr td {
|
text-align: center;
|
height: 32px;
|
line-height: 32px;
|
font-size: 14px;
|
/* font-family: '黑体'; */
|
color: #a6a8ae;
|
font-family: Arial;
|
/* border: 1px solid #464646; */
|
border: none;
|
}
|
|
.bootstrap-table .table {
|
border-radius: none
|
}
|
|
th {
|
background-color: transparent !important;
|
}
|
|
td {
|
background-color: transparent;
|
}
|
|
tr {
|
background-color: transparent
|
}
|
|
#tb_order,
|
#tb_order1 tr:nth-child(even) {
|
background: #080c1c;
|
}
|
|
.fixed-table-container tbody td .th-inner,
|
.fixed-table-container thead th .th-inner {
|
text-align: left;
|
}
|
|
.progress {
|
background-color: darkblue;
|
}
|
|
#tb_order,
|
#tb_order1 tr:nth-child(even) {
|
background: #000000;
|
}
|
|
|
|
|
|
|
#tb_order1 tr th {
|
/*border: 1px solid #464646;*/
|
border: none;
|
font-size: 22px;
|
}
|
|
#tb_order1 tr td {
|
text-align: center;
|
height: 32px;
|
line-height: 32px;
|
font-size: 18px;
|
font-family: '黑体';
|
font-family: Arial;
|
/*border:1px solid #464646;*/
|
border: none;
|
}
|
|
#tb_order1 tr:hover {
|
background: #000000;
|
}
|
.pull-right,.fixed-table-pagination .pagination-detail, .fixed-table-pagination div.pagination {
|
display: none;
|
}
|
</style>
|
<script type="text/javascript">
|
var CallHouseCode='01';//叫料看板仓库编码
|
|
|
var interval;//计时器
|
var interval1;//计时器
|
var interval2;//计时器
|
var num = 0;
|
var num1 = 0;
|
var TLProgress=0; //退料率
|
var CallData = []; //近日配送时间数组
|
var CallPSQty = []; //近日配送总数数组
|
var CAllQty = []; //今日叫料总数数组
|
$(document).ready(function () {
|
// 创建两个变量,一个数组中的月和日的名称
|
var monthNames = ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"];
|
setInterval(function () {
|
var date1 = new Date;
|
var year = date1.getFullYear();
|
var month = date1.getMonth();
|
var day = date1.getDate();
|
var hh = date1.getHours();
|
var mm = date1.getMinutes();
|
var ss = date1.getSeconds();
|
var dayNames = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
|
var Stamp = new Date();
|
|
|
$('#Date').html(year + " 年" + " " + monthNames[month] + ' ' + day + " 日 " + ' ' + dayNames[Stamp.getDay()]);
|
$("#hours").html((hh < 10 ? ("0" + hh) : hh));
|
$("#min").html((mm < 10 ? ("0" + mm) : mm));
|
$("#sec").html((ss < 10 ? ("0" + ss) : ss));
|
|
}, 1000);
|
|
});
|
$(function () {
|
var mychart1 = echarts.init(document.getElementById('mychart1'));
|
var mychart2 = echarts.init(document.getElementById('mychart2'));
|
TopData();
|
BottomData();
|
Chart(mychart1, mychart2);
|
|
// 定时器
|
interval = setInterval(function () {
|
$("#tb_order").bootstrapTable('refresh');
|
}, 10000);
|
interval1=setInterval(function () {
|
$("#tb_order1").bootstrapTable('refresh');
|
}, 10000);
|
interval2=setInterval(function () {
|
TLProgress = 0;
|
CallData = [];
|
CallPSQty = [];
|
CAllQty = [];
|
Chart(mychart1, mychart2);
|
}, 20000);
|
//根据窗口的大小变动图表 --- 重点
|
window.onresize = function () {
|
myChart1.resize();
|
myChart2.resize();
|
}
|
})
|
|
function Chart(mychart1, mychart2) {
|
$.ajax({
|
url: "http://localhost:12298/api/loaddata/CallData",
|
dataType: "JSON",
|
async: false,//使用同步的方式,true为异步方式
|
type: "Get",
|
data:{"CallHouseCode":CallHouseCode},
|
success: function (data) {
|
TLProgress=parseFloat((data.data[1][1].qty / data.data[1][0].qty) * 100).toFixed(2);
|
if(isNaN(TLProgress)){
|
TLProgress=0;
|
}
|
//今日配送率
|
$.each(data.data[0], function (index, val) {
|
CallData.push(val.hour);
|
CallPSQty.push(parseFloat(val.HSendQTY).toFixed(2));
|
CAllQty.push(parseFloat(val.HQty).toFixed(2));
|
});
|
},
|
error: function (data) {
|
|
}
|
})
|
|
const colorList = ['#47A2FF ', '#FBD444']
|
option1 = {
|
title: [
|
{
|
text: '',
|
subtext: TLProgress+'%',
|
textStyle: {
|
fontSize: 16,
|
color: '#999',
|
lineHeight: 20
|
},
|
subtextStyle: {
|
fontSize: 28,
|
color: '#00c6ff'
|
},
|
textAlign: 'center',
|
left: '50%',
|
top: '45%'
|
},
|
{
|
show: true,
|
text: '退料率',
|
textStyle: {
|
color: '#00c6ff',
|
fontSize: '16',
|
},
|
textAlign: 'center',
|
left: '50%',
|
top: '5%'
|
}
|
],
|
tooltip: {
|
trigger: 'item',
|
},
|
legend: {
|
type: 'scroll',
|
icon: 'pin',
|
show: false
|
},
|
color: colorList,
|
series: [
|
{
|
name: '占比',
|
type: 'pie',
|
radius: [50, 80],
|
center: ['50%', '50%'],
|
label: {
|
show: false
|
},
|
labelLine: {
|
show: false
|
},
|
itemStyle: {
|
borderWidth: 3,
|
borderColor: '#000000'
|
},
|
data: [
|
{ name: '达成率', value: TLProgress },
|
{ name: '未达成率', value: 100-TLProgress }
|
],
|
}
|
]
|
};
|
|
option2 = {
|
title: {
|
text: '近日配送率',
|
left: '0',
|
top: 2,
|
textStyle: {
|
fontSize: 20,
|
color: '#00c6ff',
|
fontFamily: "微软雅黑"
|
},
|
},
|
color: ['#5b9bd5', '#ed7d31', '#a9d18e', '#ffc000'],
|
tooltip: {
|
|
},
|
grid: {
|
left: '3%',
|
right: '4%',
|
bottom: '10%',
|
containLabel: true
|
},
|
legend: {
|
left: 'right',
|
data: ['叫料数', '配送数'],
|
textStyle: {
|
color: '#00c6ff',
|
fontSize: 16,
|
fontFamily: "微软雅黑"
|
}
|
|
},
|
xAxis: [
|
{
|
type: 'category',
|
data: CallData,
|
axisTick: {
|
alignWithLabel: true
|
},
|
|
axisLine: {
|
show: true,
|
lineStyle: {
|
color: '#00c6ff',
|
type: 'solid', //设置网格线类型 dotted:虚线 solid:实线
|
width: 1, //隐藏y轴
|
}
|
},
|
axisLabel: {
|
show: true,
|
textStyle: {
|
color: '#00c6ff', //坐标值得具体的颜色
|
fontSize: '16'
|
}
|
}
|
}
|
],
|
yAxis: [
|
{
|
type: 'value',
|
axisLine: {
|
show: false,
|
|
},
|
splitLine: { //网格线
|
lineStyle: {
|
color: '#00c6ff',
|
|
},
|
show: true //隐藏或显示
|
},
|
axisLabel: {
|
textStyle: {
|
color: '#00c6ff', //坐标值得具体的颜色
|
fontSize: '16'
|
}
|
}
|
}
|
],
|
series: [
|
{
|
name: '叫料数',
|
type: 'bar',
|
data: CAllQty
|
},
|
{
|
name: '配送数',
|
type: 'bar',
|
data: CallPSQty
|
}
|
]
|
};
|
|
mychart1.setOption(option1);
|
mychart2.setOption(option2);
|
|
}
|
|
function TopData(){
|
$('#tb_order').bootstrapTable({
|
url: 'http://localhost:12298/api/loaddata/CallTableTopData',
|
//data: dataJson,
|
method: 'get', //请求方式(*)
|
dataType: "json",
|
queryParams :queryParams,
|
striped: false, //是否显示行间隔色
|
cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
|
pagination: true, //是否显示分页(*)
|
sortable: false, //是否启用排序
|
sortable: false, //是否启用排序
|
search: false, //是否启用搜索框
|
sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
|
pageNumber: 1, //初始化加载第一页,默认第一页
|
pageSize: 8, //每页的记录行数(*)
|
pageList: [8], //可供选择的每页的行数(*)
|
strictSearch: false, //设置为 true启用 全匹配搜索,否则为模糊搜索
|
clickToSelect: true, //是否启用点击选中行
|
singleSelect: true, //设置True 将禁止多选
|
uniqueId: "ID", //每一行的唯一标识,一般为主键列
|
cardView: false, //是否显示详细视图
|
detailView: false, //是否显示父子表
|
|
columns: [
|
{ field: 'HICMOBillNO', title: '生产订单', align: "left" },
|
{ field: 'HNUMBER', title: '物料编码', align: "left" },
|
{ field: 'HNAME', title: '物料名称', align: "left",cellStyle: function (value, row, index) {
|
return {
|
css: {
|
"min-width": "100px",
|
"white-space": "nowrap",
|
"text-overflow": "ellipsis",
|
"overflow": "hidden",
|
"max-width": "120px"
|
}
|
}
|
} },
|
{ field: 'HMODEL', title: '规格型号', align: "left",cellStyle: function (value, row, index) {
|
return {
|
css: {
|
"min-width": "100px",
|
"white-space": "nowrap",
|
"text-overflow": "ellipsis",
|
"overflow": "hidden",
|
"max-width": "120px"
|
}
|
}
|
} },
|
{ field: 'HQTY', title: '叫料数量', align: "left" , formatter: function (value, row, index) {
|
return parseFloat(value).toFixed(2);
|
}},
|
{ field: 'HLEFT', title: '已配送数量', align: "left" , formatter: function (value, row, index) {
|
return parseFloat(value).toFixed(2);
|
}},
|
// { field: 'ShipListKuqty', title: '当前库存', align: "left" },
|
{ field: 'HSTATUS', title: '状态', align: "left",formatter: function (value, row, index) {
|
return "未完成";
|
} },
|
{
|
field: 'Progress', title: '进度', align: "left", formatter: function (value, row, index) {
|
var res = 100 * row.HLEFT / row.HQTY;
|
//return ["<div class='progress'> <div class='progress-bar' role='progressbar' aria-valuenow='50' aria-valuemin='0' aria-valuemax='100' style='width:" + res.toFixed(2) + "%'>" + res.toFixed(2) + "</div> </div>"];
|
return "<div class='w40 div_co pw'><div class='PA' style='text-align:right;color:#4b2dba;float:right;height:20px;line-height:25px'>" + res.toFixed(2) + "%</div><div class='progress' style='margin-top:4px;'><div class='progress-bar progress-diy-info' role='progressbar' aria-valuenow='50' aria-valuemin='0' aria-valuemax='100' style='width:" + res.toFixed(2) + "%';text-align:center;'></div></div></div>";
|
}
|
}
|
],
|
onClickRow: function (row, $element) {
|
|
},
|
onCheck: function (row, $element) {
|
|
},
|
onLoadSuccess: function (row) {
|
var num_total = (row.total)/ 8
|
if (num >= num_total) {
|
num = 0
|
}
|
}
|
|
})
|
}
|
//得到查询的参数
|
function queryParams(params) {
|
num += 1;
|
var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
|
CallHouseCode:CallHouseCode,
|
limit: params.limit, //页面大小
|
offset: num, //页码
|
};
|
return temp;
|
}
|
|
|
function BottomData(){
|
$('#tb_order1').bootstrapTable({
|
url: 'http://localhost:12298/api/loaddata/CallTableBottomData',
|
//data: dataJson,
|
method: 'get', //请求方式(*)
|
dataType: "json",
|
queryParams :queryParams,
|
striped: false, //是否显示行间隔色
|
cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
|
pagination: true, //是否显示分页(*)
|
sortable: false, //是否启用排序
|
sortable: false, //是否启用排序
|
search: false, //是否启用搜索框
|
sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
|
pageNumber: 1, //初始化加载第一页,默认第一页
|
pageSize: 8, //每页的记录行数(*)
|
pageList: [8], //可供选择的每页的行数(*)
|
strictSearch: false, //设置为 true启用 全匹配搜索,否则为模糊搜索
|
clickToSelect: true, //是否启用点击选中行
|
singleSelect: true, //设置True 将禁止多选
|
uniqueId: "ID", //每一行的唯一标识,一般为主键列
|
cardView: false, //是否显示详细视图
|
detailView: false, //是否显示父子表
|
|
columns: [
|
{ field: 'KSTATUS', title: '库存状态', align: "left" },
|
{ field: 'KNUMBER', title: '物料编码', align: "left" },
|
{ field: 'KNAME', title: '物料名称', align: "left",cellStyle: function (value, row, index) {
|
return {
|
css: {
|
"min-width": "100px",
|
"white-space": "nowrap",
|
"text-overflow": "ellipsis",
|
"overflow": "hidden",
|
"max-width": "120px"
|
}
|
}
|
} },
|
{ field: 'KMODEL', title: '物料规格', align: "left",cellStyle: function (value, row, index) {
|
return {
|
css: {
|
"min-width": "100px",
|
"white-space": "nowrap",
|
"text-overflow": "ellipsis",
|
"overflow": "hidden",
|
"max-width": "120px"
|
}
|
}
|
} },
|
{ field: 'KQTY', title: '库存数量', align: "left" , formatter: function (value, row, index) {
|
return parseFloat(value).toFixed(2);
|
}},
|
{ field: 'KZYQTY', title: '占用数量', align: "left" , formatter: function (value, row, index) {
|
return parseFloat(value).toFixed(2);
|
}},
|
{ field: 'KKYQTY', title: '剩余可用数量', align: "left" , formatter: function (value, row, index) {
|
var res = 100 * row.KQTY -row.KZYQTY;
|
return parseFloat(res).toFixed(2);
|
}},
|
{ field: 'KZTQTY', title: '采购在途数量', align: "left" , formatter: function (value, row, index) {
|
return parseFloat(value).toFixed(2);
|
}},
|
{ field: 'KGQTY', title: '安全库存', align: "left" , formatter: function (value, row, index) {
|
return parseFloat(value).toFixed(2);
|
}},
|
{ field: 'KXQTY', title: '需求量', align: "left" , formatter: function (value, row, index) {
|
return parseFloat(value).toFixed(2);
|
}},
|
{ field: 'KDQTY', title: '本日需求', align: "left" , formatter: function (value, row, index) {
|
return parseFloat(value).toFixed(2);
|
}}
|
],
|
onClickRow: function (row, $element) {
|
|
},
|
onCheck: function (row, $element) {
|
|
},
|
onLoadSuccess: function (row) {
|
var num_total = (row.total)/ 8
|
if (num >= num_total) {
|
num = 0
|
}
|
}
|
})
|
}
|
|
//得到查询的参数
|
function queryParams1(params) {
|
num1 += 1;
|
var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
|
CallHouseCode:CallHouseCode,
|
limit: params.limit, //页面大小
|
offset: num1, //页码
|
};
|
return temp;
|
}
|
</script>
|
</head>
|
|
<body>
|
<div class='title'>韩电叫料配送看板</div>
|
|
<div class="clock">
|
<ul>
|
<li id="Date"></li>
|
<li id="hours"> </li>
|
<li id="point">:</li>
|
<li id="min"> </li>
|
<li id="point">:</li>
|
<li id="sec"> </li>
|
</ul>
|
|
</div>
|
<div class="col-sm-8">
|
<div class="col-sm-12">
|
<div id="cList0">
|
<ul id="cList1">
|
<li><span>未配送清单</span></li>
|
</ul>
|
</div>
|
<div id="cList2">
|
<table id="tb_order" class="table-condensed table-responsive tb_order" data-filter-control="true"></table>
|
</div>
|
</div>
|
</div>
|
<div class="col-sm-4">
|
<div id="mychart1"></div>
|
</div>
|
<div class="col-sm-8">
|
<div id="cList0">
|
<ul id="cList1">
|
<li><span>库存状态</span></li>
|
</ul>
|
</div>
|
<div id="cList2">
|
<table id="tb_order1" class="table-condensed table-responsive tb_order" data-filter-control="true"></table>
|
</div>
|
</div>
|
<div class="col-sm-4">
|
<div id="mychart2"></div>
|
</div>
|
</body>
|
|
</html>
|