Merge branch 'master' into wxw
| | |
| | | var bodyHeight = $("#body").outerHeight(); |
| | | var topHeight = $("#top").outerHeight(); |
| | | var centerHeight = $("#center").outerHeight(); |
| | | // console.log(bodyHeight); |
| | | // console.log(topHeight); |
| | | // console.log(centerHeight); |
| | | |
| | | var hh = bodyHeight - topHeight-centerHeight - 26 ;//6是body上内边距 |
| | | return hh; |
| | |
| | | var h2 = parseInt(hh*0.4) |
| | | return h2; |
| | | } |
| | | //获取除搜索条件以及页签外高度 |
| | | function GetTableTabHeight() { |
| | | var bodyHeight = $("#body").outerHeight(); |
| | | var topHeight = $("#top").outerHeight(); |
| | | var centerHeight = $("#center").outerHeight(); |
| | | var tabHeight = $("#tab").outerHeight(); |
| | | // console.log(bodyHeight); |
| | | // console.log(topHeight); |
| | | // console.log(centerHeight); |
| | | // console.log(tabHeight); |
| | | |
| | | var hh = bodyHeight - topHeight-centerHeight-tabHeight - 57 ;//6是body上内边距 |
| | | return hh; |
| | | } |
| | | |
| | | //判断是否正整数 true 正整数 false 其他 |
| | | function isIntNum(val){ |
| | |
| | | elem: '#EndTime' |
| | | , format: 'yyyy-MM-dd' //可任意组合 |
| | | }); |
| | | |
| | | |
| | | var h1 = GetTableTopHeight(); |
| | | var h2 = GetTableBottomHeight(); |
| | | |
| | |
| | | </script> |
| | | </head> |
| | | |
| | | <body> |
| | | <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"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 60px;">入库单号</label> |
| | |
| | | <div class="layui-card-body"> |
| | | <div style="position: relative;"> |
| | | <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> |
| | | <ul class="layui-tab-title"> |
| | | <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" --><!-- 自定义表头加上 --> |
| | |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | laydate = layui.laydate; |
| | | var h1 = GetTableTabHeight(); |
| | | laydate.render({ |
| | | elem: '#StartTime' |
| | | , format: 'yyyy-MM-dd' //可任意组合 |
| | |
| | | table.render({ |
| | | id: 'PalletBind', |
| | | elem: '#PalletBind', |
| | | height: 'full-210', |
| | | height: h1, |
| | | url: IP + "/BllAsn/GetPalletBindList", |
| | | method: 'post', |
| | | contentType: 'application/json', |
| | |
| | | table.render({ |
| | | id: 'BoxInfo', |
| | | elem: '#BoxInfo', |
| | | height: 'full-210', |
| | | height: h1, |
| | | url: IP + "/BllAsn/GetBoxInfoList", |
| | | method: 'post', |
| | | contentType: 'application/json', |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 56px">部门编码</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <div style="padding-bottom: 5px;display: flex;flex-direction: row-reverse;"> |
| | |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | refreshTable("", ""); |
| | | var tableIns; |
| | | |
| | |
| | | |
| | | var infoOptions = { |
| | | elem: "#LAY-app-content-list", |
| | | height: "full-129", |
| | | height: h1, |
| | | id: "LAY-app-content-list", |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | <html> |
| | | <head> |
| | | <meta charset="utf-8"> |
| | | <title>用户信息列表</title> |
| | | <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"> |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item" > |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label">菜单号</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | </div> |
| | |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | refreshTable("", "", "", "",""); |
| | | var tableIns; |
| | | |
| | |
| | | } |
| | | var infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-94', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | </script> |
| | | </head> |
| | | |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 75px; padding-left: 0px;">运输公司</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | |
| | |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | var xqid = ""; |
| | | refreshTable("","","","",""); |
| | | var tableIns; |
| | |
| | | elem: '#LAY-app-content-list', |
| | | url: IP + "/Basis/GetLogisticsInfoList", |
| | | method: 'POST', |
| | | height: 'full-95', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | where: param, |
| | | contentType: 'application/json', |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <!-- 物料编码 --> |
| | | <div class="layui-inline"> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | |
| | |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | refreshTable("","","","","","","",""); |
| | | var tableIns; |
| | | //获取类别信息 |
| | |
| | | |
| | | var infoOptions = { |
| | | elem: "#LAY-app-content-list", |
| | | height: "full-140", |
| | | height: h1, |
| | | id: "LAY-app-content-list", |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | </script> |
| | | </head> |
| | | |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 60px;">包装编码</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <!-- 按钮 --> |
| | |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | var h1 = GetTableHeight(); |
| | | var param = { |
| | | Id: $.cookie('userId') |
| | | } |
| | |
| | | }; |
| | | var tableIns = table.render({ |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-95', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | url: url, |
| | | method: 'post', |
| | |
| | | </script> |
| | | </head> |
| | | |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 60px;">单位编码</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | |
| | | var h1 = GetTableHeight(); |
| | | |
| | | var param = { |
| | | Id: $.cookie('userId') |
| | |
| | | |
| | | var tableIns = table.render({ |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-95', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | url: url, |
| | | method: 'post', |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" id="top"> |
| | | <div class="layui-form-item"> |
| | | |
| | | <div class="layui-inline zongdan" > |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 --> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | |
| | | refreshTable("","","","","","","","",""); |
| | | var tableIns; |
| | | |
| | |
| | | } |
| | | infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-136', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | </script> |
| | | |
| | | </head> |
| | | <body> |
| | | |
| | | <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"> |
| | | <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 zongdan" > |
| | | <label class="layui-form-label" style="width: 60px;">物料编码</label> |
| | |
| | | <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>导出 |
| | | </button> |
| | | </div> |
| | | |
| | | |
| | | </div> |
| | | </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"> |
| | | <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" --><!-- 自定义表头加上 --> |
| | |
| | | element = layui.element; |
| | | laydate = layui.laydate; |
| | | |
| | | |
| | | var h1 = GetTableTabHeight(); |
| | | // var h1 = GetTkableTopHeight(); |
| | | // console.log(h1) |
| | | |
| | | laydate.render({ |
| | | elem: '#StartTime', |
| | | format: 'yyyy-MM-dd' //可任意组合 |
| | |
| | | } |
| | | infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-206', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | } |
| | | infoOptions2 = { |
| | | elem: '#LAY-app-content-list2', |
| | | height: 'full-206', |
| | | height: h1, |
| | | id: 'LAY-app-content-list2', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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"> |
| | | <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 zongdan" > |
| | | <label class="layui-form-label" style="width: 60px;">物料编码</label> |
| | |
| | | <div class="layui-card-body"> |
| | | <div style="position: relative;"> |
| | | <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> |
| | | <ul class="layui-tab-title"> |
| | | <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" --><!-- 自定义表头加上 --> |
| | |
| | | element = layui.element; |
| | | laydate = layui.laydate; |
| | | |
| | | var h1 = GetTableTabHeight(); |
| | | |
| | | laydate.render({ |
| | | elem: '#StartTime', |
| | |
| | | } |
| | | infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-164', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | } |
| | | infoOptions2 = { |
| | | elem: '#LAY-app-content-list2', |
| | | height: 'full-164', |
| | | height: h1, |
| | | id: 'LAY-app-content-list2', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | |
| | | </head> |
| | | |
| | | <body> |
| | | <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"> |
| | | <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 zongdan"> |
| | |
| | | <div class="layui-card-body"> |
| | | <div style="position: relative;"> |
| | | <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> |
| | | <ul class="layui-tab-title"> |
| | | <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" --><!-- 自定义表头加上 --> |
| | |
| | | element = layui.element; |
| | | laydate = layui.laydate; |
| | | |
| | | var h1 = GetTableTabHeight(); |
| | | |
| | | laydate.render({ |
| | | elem: '#StartTime', |
| | |
| | | } |
| | | infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-206', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | totalRow: true, |
| | | page: true, |
| | |
| | | } |
| | | infoOptions2 = { |
| | | elem: '#LAY-app-content-list2', |
| | | height: 'full-206', |
| | | height: h1, |
| | | id: 'LAY-app-content-list2', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline zongdan" > |
| | | <label class="layui-form-label" style="width: 60px;">物料编码</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 --> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | |
| | | layer = layui.layer; |
| | | |
| | | var $ = layui.$; |
| | | var h1 = GetTableHeight(); |
| | | |
| | | refreshTable("","","",""); |
| | | var tableIns; |
| | |
| | | } |
| | | infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-94', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 60px;">类别名称</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | |
| | |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | var tableIns; |
| | | |
| | | //获取区域信息 |
| | |
| | | |
| | | var infoOptions = { |
| | | elem: "#LAY-app-content-list", |
| | | height: "full-95", |
| | | height: h1, |
| | | id: "LAY-app-content-list", |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 60px;">字典名称</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | <!-- 是否公开 --> |
| | |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | var tableIns; |
| | | |
| | | //获取父级字典号 |
| | |
| | | |
| | | var infoOptions = { |
| | | elem: "#LAY-app-content-list", |
| | | height: "full-95", |
| | | height: h1, |
| | | id: "LAY-app-content-list", |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 60px;">功能名称</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | <script type="text/html" id="buttonIsEnable"> |
| | |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | var tableIns; |
| | | |
| | | function refreshTable(FunSetName, IsEnable,GroupNo) { |
| | |
| | | |
| | | var infoOptions = { |
| | | elem: "#LAY-app-content-list", |
| | | height: "full-95", |
| | | height: h1, |
| | | id: "LAY-app-content-list", |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item" > |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label">菜单号</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table> |
| | | </div> |
| | |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | refreshTable("", "", "", "",""); |
| | | var tableIns; |
| | | |
| | |
| | | } |
| | | var infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-94', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <body id="body"> |
| | | <div class="layui-card" style="margin-bottom: 0px;"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item" > |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label">菜单名称</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <!-- <div style="padding-bottom: 5px;display: flex; flex-direction: row-reverse;"> |
| | | <button class="layui-btn layui-btn-sm layuiadmin-btn-list layui-hide layui-btn-danger" data-type="hide"> |
| | |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | var h1 = GetTableHeight(); |
| | | refreshTable("","","","",""); |
| | | var tableIns; |
| | | |
| | |
| | | // 表单需要的变量 |
| | | var infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-88', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item"> |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label" style="width: 56px">角色编号</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <!-- <div style="padding-bottom: 5px;display: flex;flex-direction: row-reverse;"> |
| | |
| | | form = layui.form, |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | refreshTable("", ""); |
| | | var tableIns; |
| | | |
| | |
| | | |
| | | var infoOptions = { |
| | | elem: "#LAY-app-content-list", |
| | | height: "full-95", |
| | | height: h1, |
| | | id: "LAY-app-content-list", |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <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" style="border-bottom:1px solid #CCC"> |
| | | <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC" id="top"> |
| | | <div class="layui-form-item" > |
| | | <div class="layui-inline"> |
| | | <label class="layui-form-label">登录名</label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div id="center"></div> |
| | | |
| | | <div class="layui-card-body"> |
| | | <!-- <div style="padding-bottom: 5px;display: flex; flex-direction: row-reverse;"> |
| | | <button class="layui-btn layui-btn-sm layuiadmin-btn-list layui-hide layui-btn-danger" data-type="hide"> |
| | |
| | | laypage = layui.laypage, |
| | | layer = layui.layer; |
| | | |
| | | var h1 = GetTableHeight(); |
| | | refreshTable("", "", "", ""); |
| | | var tableIns; |
| | | //获取角色信息 |
| | |
| | | }) |
| | | var infoOptions = { |
| | | elem: '#LAY-app-content-list', |
| | | height: 'full-95', |
| | | height: h1, |
| | | id: 'LAY-app-content-list', |
| | | page: true, |
| | | limit: pageCnt, |
| | |
| | | /// <summary> |
| | | /// Desc:数量 |
| | | /// </summary> |
| | | public int Qty { get; set; } |
| | | public decimal Qty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:分配数量 |
| | | /// </summary> |
| | | public int? AllotQty { get; set; } |
| | | public decimal? AllotQty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:下架数量 |
| | | /// </summary> |
| | | public int? FactQty { get; set; } |
| | | public decimal? FactQty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:拣货数量 |
| | | /// </summary> |
| | | public int? CompleteQty { get; set; } |
| | | public decimal? CompleteQty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:包装编码 |
| | |
| | | public string SkuNo { get; set; } //物料编码 |
| | | public string SkuName { get; set; } //物料名称 |
| | | public decimal Qty { get; set; } //库存数量 |
| | | public int ExQty { get; set; } //数量 |
| | | public decimal ExQty { get; set; } //数量 |
| | | public string Standard { get; set; } |
| | | public string IsBale { get; set; } //是否裹包 |
| | | public string IsBelt { get; set; } //是否打带 |
| | |
| | | /// <summary> |
| | | /// Desc:数量 |
| | | /// </summary> |
| | | public int Qty { get; set; } |
| | | public decimal Qty { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Desc:拣货数量 |
| | |
| | | public class OutPdaInfo |
| | | { |
| | | public string OutModel { get; set; } // 拣货区(出库口) |
| | | public int PlanQty { get; set; } // 计划数量 |
| | | public int? FinishQty { get; set; } // 完成数量 |
| | | public decimal PlanQty { get; set; } // 计划数量 |
| | | public decimal? FinishQty { get; set; } // 完成数量 |
| | | public string Standard { get; set; } // 规格 |
| | | public int PickQty { get; set; } // 托盘待拣数量 |
| | | public decimal PickQty { get; set; } // 托盘待拣数量 |
| | | public decimal? PickedQty { get; set; } // 托盘已拣数量 |
| | | } |
| | | public class BoxInfo |
| | |
| | | } |
| | | } |
| | | var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo)) |
| | | .GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); |
| | | .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); |
| | | |
| | | SysRoadwayUseLog useLog = Db.Ado.SqlQuerySingle<SysRoadwayUseLog>("select Top(1) * from SysRoadwayUseLog where IsDel=0 order by CreateTime desc"); //巷道最后一次使用记录 |
| | | SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m=>m.IsDel =="0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //巷道最后一次使用记录 |
| | | |
| | | var bindNum = Db.Queryable<BllPalletBind>() |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && !string.IsNullOrWhiteSpace(m.RoadwayNo)) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | #region 确定巷道排序 |
| | | |
| | | List<string> roadList2 = new List<string>(); |
| | | List<string> roadSmall = new List<string>(); |
| | | List<string> roadLarge = new List<string>(); |
| | | if (useLog != null) |
| | | { |
| | | roadList2.Add(useLog.RoadwayNo); |
| | | foreach (var r in roadList) |
| | | { |
| | | if (r == useLog.RoadwayNo) |
| | | { |
| | | continue; |
| | | } |
| | | //如果结果为0,则说明两个字符串相等; |
| | | //如果结果小于0,则说明第一个字符串小于第二个字符串; |
| | | //如果结果大于0,则说明第一个字符串大于第二个字符串。 |
| | | var bol = String.CompareOrdinal(r, useLog.RoadwayNo); |
| | | if (bol < 0) |
| | | { |
| | | roadSmall.Add(r); |
| | | } |
| | | if (bol > 0) |
| | | { |
| | | roadLarge.Add(r); |
| | | } |
| | | } |
| | | roadList2.AddRange(roadLarge); |
| | | roadList2.AddRange(roadSmall); |
| | | } |
| | | |
| | | roadList = roadList2; |
| | | #endregion |
| | | |
| | | |
| | | var roadNo = ""; |
| | | if (laneAllot == 0)//跳巷道平均分配 |
| | | { |
| | | //如果同级巷道有多条则查上次位置日志 |
| | | if (roadList.Count > 1) |
| | | { |
| | | useLog = Db.Queryable<SysRoadwayUseLog>().OrderByDescending(l => l.Id).First(); |
| | | } |
| | | //取各巷道所有排第一个合适位 |
| | | foreach (var l in roadList) |
| | | { |
| | |
| | | } |
| | | |
| | | var locateCount = Db.Queryable<SysStorageLocat>() |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo)).Count(); |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l).Count(); |
| | | |
| | | var bindNum = Db.Queryable<BllPalletBind>() |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo== l) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | if (locateCount - bindNum > 0) |
| | | { |
| | | roadNo = l; |
| | |
| | | { |
| | | if (useLog != null) |
| | | { |
| | | roadNo = useLog.RoadwayNo; |
| | | var locateCount = Db.Queryable<SysStorageLocat>() |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == useLog.RoadwayNo).Count(); |
| | | |
| | | var bindNum = Db.Queryable<BllPalletBind>() |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == useLog.RoadwayNo) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | if (locateCount - bindNum > 0) |
| | | { |
| | | roadNo = useLog.RoadwayNo; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else//按照巷道优先级分配 |
| | | { |
| | | foreach (var item in roadList) |
| | | { |
| | | roadNo = item; |
| | | { |
| | | var locateCount = Db.Queryable<SysStorageLocat>() |
| | | .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == item).Count(); |
| | | |
| | | var bindNum = Db.Queryable<BllPalletBind>() |
| | | .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == item) |
| | | .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); |
| | | |
| | | if (locateCount - bindNum > 0) |
| | | { |
| | | roadNo = item; |
| | | } |
| | | //当前巷有位置则退出 |
| | | if (roadNo != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | #endregion |
| | | |
| | | return null; |
| | | return comDto; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | if (detail.Status == "0") |
| | | { |
| | | var sqlString2 = string.Empty; |
| | | sqlString2 += $"update BllArrivalNotice set Status = '1',CompleteTime= getDate() where ASNNo = '{model.AsnNo}' and Status ='0';"; |
| | | sqlString2 += $"update BllArrivalNoticeDetail set Status = '1',CompleteTime= getDate() where id = '{model.AsnDetailId}' and Status ='0';"; |
| | | sqlString2 += $"update BllArrivalNotice set Status = '1',UpdateTime= getDate(),UpdateUser = {userId} where ASNNo = '{model.AsnNo}' and Status ='0';"; |
| | | sqlString2 += $"update BllArrivalNoticeDetail set Status = '1',UpdateTime= getDate(),UpdateUser = {userId} where id = '{model.AsnDetailId}' and Status ='0';"; |
| | | Db.Ado.ExecuteCommand(sqlString2); |
| | | } |
| | | else if (detail.Status == "1") |
| | | { |
| | | var sqlString2 = string.Empty; |
| | | sqlString2 += $"update BllArrivalNotice set UpdateTime= getDate(),UpdateUser = {userId} where ASNNo = '{model.AsnNo}' and Status ='1';"; |
| | | sqlString2 += $"update BllArrivalNoticeDetail set UpdateTime= getDate(),UpdateUser = {userId} where id = '{model.AsnDetailId}' and Status ='1';"; |
| | | Db.Ado.ExecuteCommand(sqlString2); |
| | | } |
| | | |
| | |
| | | } |
| | | #endregion |
| | | //取合适库存商品 |
| | | Dictionary<int, int> stockQtyDic = new Dictionary<int, int>();//托出库物品数 |
| | | Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//托出库物品数 |
| | | Dictionary<string, int> zxQtyDic = new Dictionary<string, int>();//托出整箱数 |
| | | //分配货物 |
| | | //assign.AllocatePallets(stocks, pNum, bNum, needQty, stockQtyDic, zxQtyDic); |
| | | int qty = assign.AllotPallets(stockDetail, int.Parse(needQty.ToString()), pNum, bNum, stockQtyDic); |
| | | var qty = assign.AllotPallets(stockDetail, decimal.Parse(needQty.ToString()), pNum, bNum, stockQtyDic); |
| | | |
| | | foreach (var sc in stockQtyDic) |
| | | { |
| | |
| | | //修改出库单状态 |
| | | if (notice.Status == "0" || notice.Status == "1") |
| | | { |
| | | int totalQty = 0; |
| | | int totalAllotQty = 0; |
| | | decimal totalQty = 0; |
| | | decimal totalAllotQty = 0; |
| | | foreach (var item in detailList) |
| | | { |
| | | totalQty += item.Qty; |
| | |
| | | /// 分配货物 |
| | | /// </summary> |
| | | /// <param name="palletList">库存明细集合</param> |
| | | /// <param name="goodCode">物料编码</param> |
| | | /// <param name="lotNo">批次</param> |
| | | /// <param name="needQty">需要分配的数量</param> |
| | | /// <param name="fullPalletQty">满托数量</param> |
| | | /// <param name="fullBoxQty">满箱数量</param> |
| | | /// <param name="stockQtyDic">托出库物品数 key:库存托盘表的ID、val:托盘上的数量</param> |
| | | /// <returns></returns> |
| | | public int AllotPallets(List<DataStockDetail> palletList, int needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, int> stockQtyDic) |
| | | public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic) |
| | | { |
| | | //优先先进先出(快过期的先出) |
| | | //优先零箱、零托(出完零箱出整箱) |
| | |
| | | } |
| | | } |
| | | #endregion |
| | | var qty = 0; //分配的总数量 |
| | | decimal qty = 0; //分配的总数量 |
| | | var ztNum = needQty / fullPalletQty;//需要整托数 |
| | | |
| | | var zps = palletList.Where(s => s.Qty >= fullPalletQty).ToList();//整托 |
| | |
| | | //散托 |
| | | foreach (var s in st) |
| | | { |
| | | var detailQty = int.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString()); |
| | | var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString()); |
| | | if (needQty - qty < detailQty) |
| | | { |
| | | var num = needQty - qty; |
| | |
| | | var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的) |
| | | foreach (var ss in zt) |
| | | { |
| | | var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); |
| | | var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); |
| | | if (needQty - qty < detailQty) |
| | | { |
| | | var num = needQty - qty; |
| | |
| | | var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的) |
| | | foreach (var ss in zt) |
| | | { |
| | | var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); |
| | | var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); |
| | | if (needQty - qty < detailQty) |
| | | { |
| | | break; |
| | |
| | | |
| | | foreach (var ss in zt) |
| | | { |
| | | var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); |
| | | var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); |
| | | if (needQty - qty < detailQty) |
| | | { |
| | | var num = needQty - qty; |
| | |
| | | var zt = zps.Where(s => !sIds.Contains(s.Id)).OrderBy(s => s.ExpirationTime).ThenBy(m => m.Qty - m.LockQty - m.FrozenQty).ToList();//所有未使用(未被分配的) |
| | | foreach (var ss in zt) |
| | | { |
| | | var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); |
| | | var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); |
| | | if (needQty - qty < detailQty) |
| | | { |
| | | var num = needQty - qty; |
| | |
| | | /// <param name="dic"></param> |
| | | /// <param name="key"></param> |
| | | /// <param name="v"></param> |
| | | private void SaveDic(Dictionary<int, int> dic, int key, int v) |
| | | private void SaveDic(Dictionary<int, decimal> dic, int key, decimal v) |
| | | { |
| | | if (dic.ContainsKey(key)) |
| | | { |
| | |
| | | /// Default: |
| | | /// Nullable:False |
| | | /// </summary> |
| | | public int Qty {get;set;} |
| | | public decimal Qty {get;set;} |
| | | |
| | | /// <summary> |
| | | /// Desc:分配数量 |
| | | /// Default: |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public int? AllotQty {get;set;} |
| | | public decimal? AllotQty {get;set;} |
| | | |
| | | /// <summary> |
| | | /// Desc:下架数量 |
| | | /// Default:0 |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public int? FactQty {get;set;} |
| | | public decimal? FactQty {get;set;} |
| | | |
| | | /// <summary> |
| | | /// Desc:拣货数量 |
| | | /// Default:0 |
| | | /// Nullable:True |
| | | /// </summary> |
| | | public int? CompleteQty {get;set;} |
| | | public decimal? CompleteQty {get;set;} |
| | | |
| | | /// <summary> |
| | | /// Desc:包装编码 |
| | |
| | | /// Default: |
| | | /// Nullable:False |
| | | /// </summary> |
| | | public int Qty {get;set;} |
| | | public decimal Qty {get;set;} |
| | | |
| | | /// <summary> |
| | | /// Desc:拣货数量 |
| | |
| | | /// <returns></returns> |
| | | [AllowAnonymous] |
| | | [HttpPost] |
| | | public IActionResult RequestRoadWay(RequestLocate model) |
| | | { |
| | | var logStr = ""; |
| | | |
| | | logStr = $@".\log\WCS\WCS申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; |
| | | |
| | | try |
| | | { |
| | | |
| | | var jsonData = JsonConvert.SerializeObject(model); |
| | | LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr); |
| | | |
| | | var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo ); |
| | | |
| | | LogFile.SaveLogToFile($"WCS申请储位返回:( {JsonConvert.SerializeObject(list)} ),", logStr); |
| | | |
| | | return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list }); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | LogFile.SaveLogToFile($"WCS申请巷道返回:( {e.Message} ),", logStr); |
| | | |
| | | return Ok(new ErpModel { Success = -1, Message = e.Message }); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 申请储位 |
| | | /// </summary> |
| | | /// <param name="model">入库单信息</param> |
| | | /// <returns></returns> |
| | | [AllowAnonymous] |
| | | [HttpPost] |
| | | public IActionResult RequestLocation(RequestLocate model) |
| | | { |
| | | |