From 84759c579add1daea7b3dca92dcadf17c9318ec9 Mon Sep 17 00:00:00 2001 From: pang.jiabao <pang_jiabao@163.com> Date: 星期四, 12 十二月 2024 13:28:34 +0800 Subject: [PATCH] 库存上下限预警 --- src/main/java/com/zy/asrs/mapper/LocDetlMapper.java | 2 src/main/webapp/views/locDetlGroup/locDetl_detail.html | 168 ++++++++ src/main/java/com/zy/asrs/service/LocDetlService.java | 2 src/main/java/com/zy/asrs/controller/LocDetlController.java | 116 +++++ src/main/webapp/static/js/locDetlGroup/locDetlGroup.js | 559 ++++++++++++++++++++++++++ src/main/resources/mapper/LocDetlMapper.xml | 14 src/main/webapp/views/locDetlGroup/locDetlGroup.html | 74 +++ src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java | 7 src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java | 282 +++++++++++++ 9 files changed, 1,218 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/LocDetlController.java b/src/main/java/com/zy/asrs/controller/LocDetlController.java index 6eba1f6..04d4bb5 100644 --- a/src/main/java/com/zy/asrs/controller/LocDetlController.java +++ b/src/main/java/com/zy/asrs/controller/LocDetlController.java @@ -13,11 +13,10 @@ import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.LocDetl; -import com.zy.asrs.entity.ManLocDetl; import com.zy.asrs.entity.Mat; +import com.zy.asrs.entity.param.AbnormalLocDetlParam; import com.zy.asrs.mapper.LocDetlMapper; import com.zy.asrs.service.LocDetlService; -import com.zy.asrs.service.ManLocDetlService; import com.zy.asrs.service.MatService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; @@ -45,6 +44,77 @@ return R.error(); } return R.ok(); + } + + @RequestMapping(value = "/locDetl/groupLocList/auth") + @ManagerAuth + public R groupLocList(@RequestParam(defaultValue = "1") Integer curr, + @RequestParam(defaultValue = "10") Integer limit, + @RequestParam(required = false) String orderByField, + @RequestParam(required = false) String orderByType, + @RequestParam(required = false) String condition, + @RequestParam Map<String, Object> param) { + +// List<LocDetl> result = new ArrayList<>(); + List<AbnormalLocDetlParam> result = new ArrayList<>(); +// excludeTrash(param); + param.put("curr", curr); + param.put("limit", limit); + Page<LocDetl> groupLocDetl = locDetlService.getStockStatis2(toPage(1, 10000, param, LocDetl.class)); +// List<LocDetl> groupLocDetl = locDetlService.selectGroupPage(param, curr, limit); + for (LocDetl locDetl : groupLocDetl.getRecords()) { + AbnormalLocDetlParam abnormalLocDetlParam = new AbnormalLocDetlParam(); + Mat mat = matService.selectOne(new EntityWrapper<Mat>() + .eq("matnr", locDetl.getMatnr())); + if (Cools.isEmpty(mat)) { + continue; + } + + + if (!Cools.isEmpty(mat.getStoreMax()) || !Cools.isEmpty(mat.getStoreMin())) { + abnormalLocDetlParam.setStoreMax(mat.getStoreMax()); + abnormalLocDetlParam.setStoreMaxDate(mat.getStoreMaxDate()); + abnormalLocDetlParam.setStoreMin(mat.getStoreMin()); + abnormalLocDetlParam.setAnfme(locDetl.getAnfme()); + abnormalLocDetlParam.setMaktx(mat.getMaktx()); + abnormalLocDetlParam.setMatnr(mat.getMatnr()); + abnormalLocDetlParam.setSpecs(mat.getSpecs()); + abnormalLocDetlParam.setBatch(locDetl.getBatch()); + +// SimpleDateFormat simple = new SimpleDateFormat("yyyyMMdd"); +// Date maxDate = simple.parse(locDetl.getBatch()); +// long time = maxDate.getTime(); +// Date now = new Date(); +// long time1 = now.getTime(); +// abnormalLocDetlParam.setNowTime((int) ((time1 - time) / (1000 * 60 * 60 * 24))); + + if (!Cools.isEmpty(mat.getStoreMax()) && locDetl.getAnfme() > mat.getStoreMax()) { + result.add(abnormalLocDetlParam); + } else if (!Cools.isEmpty(mat.getStoreMin()) && locDetl.getAnfme() < mat.getStoreMin()) { + result.add(abnormalLocDetlParam); + } + } + } + + Page<AbnormalLocDetlParam> locDetlPage = new Page<>(); + locDetlPage.setRecords(paging(result, curr, limit)); + locDetlPage.setTotal(result.size()); + locDetlPage.setCurrent(curr); + locDetlPage.setSize(limit); + return R.ok(locDetlPage); + } + + private List<AbnormalLocDetlParam> paging(List<AbnormalLocDetlParam> result, Integer curr, Integer limit) { + List<AbnormalLocDetlParam> pageRecord = new ArrayList<AbnormalLocDetlParam>(); + int minIndex = (curr - 1) * limit; + int maxIndex = (curr * limit) - 1; + if (result.size() < maxIndex) { + maxIndex = result.size(); + } + for (int i = minIndex; i < maxIndex; i++) { + pageRecord.add(result.get(i)); + } + return pageRecord; } @RequestMapping(value = "/locDetl/{id}/auth") @@ -187,18 +257,52 @@ if (chooseRow.length() == 1) { row = "0" + chooseRow; map.remove("row"); - }else { + } else { row = chooseRow; map.remove("row"); } } convert(map, wrapper); - if (!row.equals("")){ + if (!row.equals("")) { wrapper.and() - .where("loc_no like '" +row +"%'"); + .where("loc_no like '" + row + "%'"); } List<LocDetl> list = locDetlService.selectList(wrapper); - return R.ok(exportSupport(list, fields)); + List<AbnormalLocDetlParam> result = new ArrayList<>(); + + Page<LocDetl> groupLocDetl = locDetlService.getStockStatis2(toPage(1, 10000, param, LocDetl.class)); + for (LocDetl locDetl : groupLocDetl.getRecords()) { + AbnormalLocDetlParam abnormalLocDetlParam = new AbnormalLocDetlParam(); + Mat mat = matService.selectOne(new EntityWrapper<Mat>() + .eq("matnr", locDetl.getMatnr())); + if (Cools.isEmpty(mat)) { + continue; + } + if (!Cools.isEmpty(mat .getStoreMax()) || !Cools.isEmpty(mat.getStoreMin())) { + abnormalLocDetlParam.setStoreMax(mat.getStoreMax()); + abnormalLocDetlParam.setStoreMaxDate(mat.getStoreMaxDate()); + abnormalLocDetlParam.setStoreMin(mat.getStoreMin()); + abnormalLocDetlParam.setAnfme(locDetl.getAnfme()); + abnormalLocDetlParam.setMaktx(mat.getMaktx()); + abnormalLocDetlParam.setMatnr(mat.getMatnr()); + abnormalLocDetlParam.setSpecs(mat.getSpecs()); + abnormalLocDetlParam.setBatch(locDetl.getBatch()); + +// SimpleDateFormat simple = new SimpleDateFormat("yyyyMMdd"); +// Date maxDate = simple.parse(locDetl.getBatch()); +// long time = maxDate.getTime(); +// Date now = new Date(); +// long time1 = now.getTime(); +// abnormalLocDetlParam.setNowTime((int) ((time1 - time) / (1000 * 60 * 60 * 24))); + + if (!Cools.isEmpty(mat.getStoreMax()) && locDetl.getAnfme() > mat.getStoreMax()) { + result.add(abnormalLocDetlParam); + } else if (!Cools.isEmpty(mat.getStoreMin()) && locDetl.getAnfme() < mat.getStoreMin()) { + result.add(abnormalLocDetlParam); + } + } + } + return R.ok(exportSupport(result, fields)); } @RequestMapping(value = "/locDetlQuery/auth") diff --git a/src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java b/src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java new file mode 100644 index 0000000..6063621 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/param/AbnormalLocDetlParam.java @@ -0,0 +1,282 @@ +package com.zy.asrs.entity.param; + + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotations.TableField; +import com.core.common.Cools; +import com.core.common.SpringUtils; +import com.zy.asrs.entity.LocMast; +import com.zy.asrs.service.LocMastService; +import com.zy.common.utils.Synchro; +import com.zy.system.entity.User; +import com.zy.system.service.UserService; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.text.SimpleDateFormat; +import java.util.Date; + +@Data +public class AbnormalLocDetlParam { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "搴撲綅鍙�") + @TableField("loc_no") + private String locNo; + + @ApiModelProperty(value = "鎵樼洏鏉$爜") + private String zpallet; + + @ApiModelProperty(value = "鏁伴噺") + @ExcelProperty("鏁伴噺") + private Double anfme; + + @ApiModelProperty(value = "鍟嗗搧缂栧彿") + @ExcelProperty("鍟嗗搧缂栧彿") + private String matnr; + + @ApiModelProperty(value = "鍟嗗搧鍚嶇О") + @ExcelProperty("鍟嗗搧鍚嶇О") + private String maktx; + + @ApiModelProperty(value = "搴忓垪鐮�") + @ExcelProperty("搴忓垪鐮�") + private String batch; + + @ApiModelProperty(value = "鍗曟嵁缂栧彿") + @ExcelProperty("鍗曟嵁缂栧彿") + @TableField("order_no") + private String orderNo; + + @ApiModelProperty(value = "c") + @ExcelProperty("瑙勬牸") + private String specs; + + @ApiModelProperty(value = "鍨嬪彿") + private String model; + + @ApiModelProperty(value = "棰滆壊") + private String color; + + @ApiModelProperty(value = "鍝佺墝") + private String brand; + + @ApiModelProperty(value = "鍗曚綅") + private String unit; + + @ApiModelProperty(value = "鍗曚环") + private Double price; + + @ApiModelProperty(value = "sku") + private String sku; + + @ApiModelProperty(value = "鍗曚綅閲�") + private Double units; + + @ApiModelProperty(value = "鏉$爜") + private String barcode; + + @ApiModelProperty(value = "浜у湴") + private String origin; + + @ApiModelProperty(value = "鍘傚") + private String manu; + + @ApiModelProperty(value = "鐢熶骇鏃ユ湡") + @TableField("manu_date") + private String manuDate; + + @ApiModelProperty(value = "鍝侀」鏁�") + @TableField("item_num") + private String itemNum; + + @ApiModelProperty(value = "瀹夊叏搴撳瓨閲�") + @TableField("safe_qty") + private Double safeQty; + + @ApiModelProperty(value = "閲嶉噺") + private Double weight; + + @ApiModelProperty(value = "闀垮害") + private Double length; + + @ApiModelProperty(value = "浣撶Н") + private Double volume; + + @ApiModelProperty(value = "涓夋柟缂栫爜") + @TableField("three_code") + private String threeCode; + + @ApiModelProperty(value = "渚涘簲鍟�") + private String supp; + + @ApiModelProperty(value = "渚涘簲鍟嗙紪鐮�") + @TableField("supp_code") + private String suppCode; + + @ApiModelProperty(value = "鏄惁鎵规 1: 鏄� 0: 鍚� ") + @TableField("be_batch") + private Integer beBatch; + + @ApiModelProperty(value = "淇濊川鏈�") + @TableField("dead_time") + private String deadTime; + + @ApiModelProperty(value = "棰勮澶╂暟") + @TableField("dead_warn") + private Integer deadWarn; + + @ApiModelProperty(value = "鍒惰喘 1: 鍒堕�� 2: 閲囪喘 3: 澶栧崗 ") + private Integer source; + + @ApiModelProperty(value = "瑕佹眰妫�楠� 1: 鏄� 0: 鍚� ") + private Integer inspect; + + @ApiModelProperty(value = "鍗遍櫓鍝� 1: 鏄� 0: 鍚� ") + private Integer danger; + + @ApiModelProperty(value = "淇敼浜哄憳") + @TableField("modi_user") + private Long modiUser; + + @ApiModelProperty(value = "淇敼鏃堕棿") + @TableField("modi_time") + private Date modiTime; + + @ApiModelProperty(value = "鍒涘缓鑰�") + @TableField("appe_user") + private Long appeUser; + + @ApiModelProperty(value = "娣诲姞鏃堕棿") + @TableField("appe_time") + private Date appeTime; + + @ApiModelProperty(value = "澶囨敞") + private String memo; + + /** + * 搴撳瓨棰勮鏁伴噺涓婇檺 + */ + private Double storeMax; + + /** + * 搴撳瓨棰勮鏁伴噺涓嬮檺 + */ + private Double storeMin; + + /** + * 搴撻緞棰勮涓婇檺 + */ + private Integer storeMaxDate; + + /** + * 瀹為檯鍦ㄥ簱澶╂暟 + */ + private Integer nowTime; + + + public String getLocNo$() { + LocMastService service = SpringUtils.getBean(LocMastService.class); + LocMast locMast = service.selectById(this.locNo); + if (!Cools.isEmpty(locMast)) { + return String.valueOf(locMast.getLocNo()); + } + return null; + } + + public String getBeBatch$() { + if (null == this.beBatch) { + return null; + } + switch (this.beBatch) { + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.beBatch); + } + } + + public String getSource$() { + if (null == this.source) { + return null; + } + switch (this.source) { + case 1: + return "鍒堕��"; + case 2: + return "閲囪喘"; + case 3: + return "澶栧崗"; + default: + return String.valueOf(this.source); + } + } + + public String getInspect$() { + if (null == this.inspect) { + return null; + } + switch (this.inspect) { + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.inspect); + } + } + + public String getDanger$() { + if (null == this.danger) { + return null; + } + switch (this.danger) { + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.danger); + } + } + + public String getModiUser$() { + UserService service = SpringUtils.getBean(UserService.class); + User user = service.selectById(this.modiUser); + if (!Cools.isEmpty(user)) { + return String.valueOf(user.getUsername()); + } + return null; + } + + public String getModiTime$() { + if (Cools.isEmpty(this.modiTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); + } + + public String getAppeUser$() { + UserService service = SpringUtils.getBean(UserService.class); + User user = service.selectById(this.appeUser); + if (!Cools.isEmpty(user)) { + return String.valueOf(user.getUsername()); + } + return null; + } + + public String getAppeTime$() { + if (Cools.isEmpty(this.appeTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); + } + + public void sync(Object source) { + Synchro.Copy(source, this); + } + +} diff --git a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java index 2b7255c..23c4762 100644 --- a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java +++ b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java @@ -43,6 +43,8 @@ Integer getStockStatisCount(Map<String, Object> map); + List<LocDetl> getStockStatis2(Map<String, Object> map); + List<LocDetl> getStockStatisExcel(); @Select("select sum(a.anfme) as sum from asr_loc_detl a left join asr_loc_mast b on a.loc_no = b.loc_no where b.loc_sts = 'F' and a.matnr = #{matnr}") diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java index b08fe2a..d2bbb18 100644 --- a/src/main/java/com/zy/asrs/service/LocDetlService.java +++ b/src/main/java/com/zy/asrs/service/LocDetlService.java @@ -17,6 +17,8 @@ Page<LocDetl> getStockOut(Page<LocDetl> page); + Page<LocDetl> getStockStatis2(Page<LocDetl> page); + /** * 淇敼搴撳瓨鏄庣粏鏁伴噺锛屽鏋滄暟閲忎负0锛屽垯鍒犻櫎璁板綍 */ diff --git a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java index 2a882be..23ba656 100644 --- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java @@ -30,6 +30,13 @@ } @Override + public Page<LocDetl> getStockStatis2(Page<LocDetl> page) { + page.setRecords(baseMapper.getStockStatis2(page.getCondition())); + page.setTotal(baseMapper.getStockStatisCount(page.getCondition())); + return page; + } + + @Override public boolean updateAnfme(Double anfme, String locNo, String matnr, String batch) { if (anfme <= 0) { return this.baseMapper.deleteItem(locNo, matnr, batch) > 0; diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml index 4b0009d..5383b34 100644 --- a/src/main/resources/mapper/LocDetlMapper.xml +++ b/src/main/resources/mapper/LocDetlMapper.xml @@ -401,5 +401,19 @@ and lm.row1 in (31,32) order by row1 </select> + <select id="getStockStatis2" resultType="com.zy.asrs.entity.LocDetl"> + select * from + ( + select + ROW_NUMBER() over (order by sum(a.anfme),a.batch desc) as row + , a.matnr + , a.batch + , sum(a.anfme) as anfme + from asr_loc_detl a + where 1=1 + <include refid="stockOutCondition"></include> + group by a.matnr,a.batch + ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize}) + </select> </mapper> diff --git a/src/main/webapp/static/js/locDetlGroup/locDetlGroup.js b/src/main/webapp/static/js/locDetlGroup/locDetlGroup.js new file mode 100644 index 0000000..8998f94 --- /dev/null +++ b/src/main/webapp/static/js/locDetlGroup/locDetlGroup.js @@ -0,0 +1,559 @@ +var pageCurr; + +function getCol() { + var cols = [ + {field: 'matnr', align: 'center', title: '鐗╂枡鍙�', sort: true} + , {field: 'maktx', align: 'center', title: '鐗╂枡鍚嶇О', sort: true} + , {field: 'specs', align: 'center', title: '瑙勬牸'} + , {field: 'batch', align: 'center', title: '鎵瑰彿', width: 300, sort: true} + , {field: 'storeMax', align: 'center', title: '鏁伴噺涓婇檺', sort: true} + , {field: 'storeMin', align: 'center', title: '鏁伴噺涓嬮檺', sort: true} + // , {field: 'storeMaxDate', align: 'center', title: '搴撻緞涓婇檺', sort: true} + , {field: 'anfme', align: 'center', title: '瀹為檯鏁伴噺'} + // , {field: 'nowTime', align: 'center', title: '瀹為檯搴撻緞'} + + ]; + + + return cols; +} + +layui.use(['table', 'laydate', 'form'], function () { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + + // 鏁版嵁娓叉煋 + tableIns = table.render({ + elem: '#locDetlGroup', + headers: {token: localStorage.getItem('token')}, + url: baseUrl + '/locDetl/groupLocList/auth', + page: true, + limit: 20, + limits: [20, 30, 50, 100, 200, 500], + even: true, + toolbar: '#toolbar', + cellMinWidth: 50, + cols: [getCol()], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl + "/"; + } + pageCurr = curr; + limit(); + form.on('checkbox(tableCheckbox)', function (data) { + var _index = $(data.elem).attr('table-index') || 0; + if (data.elem.checked) { + res.data[_index][data.value] = 'Y'; + } else { + res.data[_index][data.value] = 'N'; + } + }); + } + }); + + // 鐩戝惉鎺掑簭浜嬩欢 + table.on('sort(locDetlGroup)', function (obj) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function () { + searchData[this.name] = this.value; + }); + searchData['orderByField'] = obj.field; + searchData['orderByType'] = obj.type; + tableIns.reload({ + where: searchData, + page: { + curr: 1 + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl + "/"; + } + pageCurr = curr; + limit(); + } + }); + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(locDetlGroup)', function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + switch (obj.event) { + case 'addData': + layer.open({ + type: 2, + title: '鏂板', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: 'locDetl_detail.html', + success: function (layero, index) { + layer.getChildFrame('#data-detail-submit-edit', index).hide(); + clearFormVal(layer.getChildFrame('#detail', index)); + layer.iframeAuto(index); + layer.style(index, {top: (($(window).height() - layer.getChildFrame('#data-detail', index).height()) / 3) + "px"}); + } + }); + break; + case 'refreshData': + tableIns.reload({ + page: { + curr: pageCurr + } + }); + limit(); + break; + case 'deleteData': + var data = checkStatus.data; + if (data.length === 0) { + layer.msg('璇烽�夋嫨鏁版嵁'); + } else { + layer.confirm('纭畾鍒犻櫎' + (data.length === 1 ? '姝�' : data.length) + '鏉℃暟鎹悧', function () { + $.ajax({ + url: baseUrl + "/locDetl/delete/auth", + headers: {'token': localStorage.getItem('token')}, + data: {param: JSON.stringify(data)}, + method: 'POST', + traditional: true, + success: function (res) { + if (res.code === 200) { + layer.closeAll(); + tableReload(false); + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + layer.msg(res.msg) + } + } + }) + }); + } + break; + case 'exportData': + layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function () { + var titles = []; + var fields = []; + obj.config.cols[0].map(function (col) { + if (col.type === 'normal' && col.hide === false && col.toolbar == null) { + titles.push(col.title); + fields.push(col.field); + } + }); + var exportData = {}; + $.each($('#search-box [name]').serializeArray(), function () { + exportData[this.name] = this.value; + }); + var param = { + 'locDetl': exportData, + 'fields': fields + }; + var loadIndex = layer.msg('姝e湪瀵煎嚭...', {icon: 16, shade: 0.01, time: false}); + $.ajax({ + url: baseUrl + "/locDetl/export/auth", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify(param), + dataType: 'json', + contentType: 'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + layer.close(loadIndex); + layer.closeAll(); + if (res.code === 200) { + table.exportFile(titles, res.data, 'xls'); + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + layer.msg(res.msg) + } + } + }); + }); + break; + } + }); + + // 鐩戝惉琛屽伐鍏蜂簨浠� + table.on('tool(locDetlGroup)', function (obj) { + var data = obj.data; + switch (obj.event) { + // 璇︽儏 + case 'detail': + layer.open({ + type: 2, + title: '璇︽儏', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: 'locDetl_detail.html', + success: function (layero, index) { + setFormVal(layer.getChildFrame('#detail', index), data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index); + layer.style(index, {top: (($(window).height() - layer.getChildFrame('#data-detail', index).height()) / 3) + "px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } + }); + break; + // 缂栬緫 + case 'edit': + layer.open({ + type: 2, + title: '淇敼', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: 'locDetl_detail.html', + success: function (layero, index) { + layer.getChildFrame('#data-detail-submit-save', index).hide(); + setFormVal(layer.getChildFrame('#detail', index), data, false); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false); + top.convertDisabled(layer.getChildFrame('#locNo,#matnr', index), true); + layer.iframeAuto(index); + layer.style(index, {top: (($(window).height() - layer.getChildFrame('#data-detail', index).height()) / 3) + "px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } + }); + break; + case 'locNo': + var param = top.reObject(data).locNo; + if (param === undefined) { + layer.msg("鏃犳暟鎹�"); + } else { + layer.open({ + type: 2, + title: '搴撲綅鍙疯鎯�', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: '../locMast/locMast_detail.html', + success: function (layero, index) { + $.ajax({ + url: baseUrl + "/locMast/" + param + "/auth", + headers: {'token': localStorage.getItem('token')}, + method: 'GET', + success: function (res) { + if (res.code === 200) { + setFormVal(layer.getChildFrame('#detail', index), res.data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index); + layer.style(index, {top: (($(window).height() - layer.getChildFrame('#data-detail', index).height()) / 3) + "px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } else if (res.code === 403) { + parent.location.href = "/"; + } else { + layer.msg(res.msg) + } + } + }) + } + }); + } + break; + case 'modiUser': + var param = top.reObject(data).modiUser; + if (param === undefined) { + layer.msg("鏃犳暟鎹�"); + } else { + layer.open({ + type: 2, + title: '淇敼浜哄憳璇︽儏', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: '../user/user_detail.html', + success: function (layero, index) { + $.ajax({ + url: baseUrl + "/user/" + param + "/auth", + headers: {'token': localStorage.getItem('token')}, + method: 'GET', + success: function (res) { + if (res.code === 200) { + setFormVal(layer.getChildFrame('#detail', index), res.data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index); + layer.style(index, {top: (($(window).height() - layer.getChildFrame('#data-detail', index).height()) / 3) + "px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } else if (res.code === 403) { + parent.location.href = "/"; + } else { + layer.msg(res.msg) + } + } + }) + } + }); + } + break; + case 'appeUser': + var param = top.reObject(data).appeUser; + if (param === undefined) { + layer.msg("鏃犳暟鎹�"); + } else { + layer.open({ + type: 2, + title: '鍒涘缓鑰呰鎯�', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: '../user/user_detail.html', + success: function (layero, index) { + $.ajax({ + url: baseUrl + "/user/" + param + "/auth", + headers: {'token': localStorage.getItem('token')}, + method: 'GET', + success: function (res) { + if (res.code === 200) { + setFormVal(layer.getChildFrame('#detail', index), res.data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index); + layer.style(index, {top: (($(window).height() - layer.getChildFrame('#data-detail', index).height()) / 3) + "px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } else if (res.code === 403) { + parent.location.href = "/"; + } else { + layer.msg(res.msg) + } + } + }) + } + }); + } + break; + + } + }); + + // 鏁版嵁淇濆瓨鍔ㄤ綔 + form.on('submit(save)', function () { + if (banMsg != null) { + layer.msg(banMsg); + return; + } + method("add"); + }); + + // 鏁版嵁淇敼鍔ㄤ綔 + form.on('submit(edit)', function () { + method("update") + }); + + function method(name) { + var index = layer.load(1, { + shade: [0.5, '#000'] //0.1閫忔槑搴︾殑鑳屾櫙 + }); + var data = { +// id: $('#id').val(), + locNo: $('#locNo').val(), + matnr: $('#matnr').val(), + lgnum: $('#lgnum').val(), + tbnum: $('#tbnum').val(), + tbpos: $('#tbpos').val(), + zmatid: $('#zmatid').val(), + maktx: $('#maktx').val(), + werks: $('#werks').val(), + anfme: $('#anfme').val(), + altme: $('#altme').val(), + zpallet: $('#zpallet').val(), + bname: $('#bname').val(), + memo: $('#memo').val(), + modiUser: $('#modiUser').val(), + modiTime: top.strToDate($('#modiTime\\$').val()), + appeUser: $('#appeUser').val(), + appeTime: top.strToDate($('#appeTime\\$').val()), + + }; + $.ajax({ + url: baseUrl + "/locDetl/" + name + "/auth", + headers: {'token': localStorage.getItem('token')}, + data: top.reObject(data), + method: 'POST', + success: function (res) { + if (res.code === 200) { + parent.layer.closeAll(); + parent.$(".layui-laypage-btn")[0].click(); + $("#data-detail :input").each(function () { + $(this).val(""); + }); + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + layer.msg(res.msg) + } + layer.close(index); + } + }) + } + + // 澶嶉�夋浜嬩欢 + form.on('checkbox(detailCheckbox)', function (data) { + var el = data.elem; + if (el.checked) { + $(el).val('Y'); + } else { + $(el).val('N'); + } + }); + + // 鎼滅储鏍忔悳绱簨浠� + form.on('submit(search)', function (data) { + pageCurr = 1; + tableReload(false); + }); + + + // 鎼滅储鏍忛噸缃簨浠� + form.on('submit(reset)', function (data) { + pageCurr = 1; + clearFormVal($('#search-box')); + tableReload(false); + }); + + //鏌ョ湅寮傚父鏁版嵁 + form.on('submit(unreason)', function (data) { + pageCurr = 1; + + tableIns.reload({ + where: { + unreason: true + }, + page: { + curr: pageCurr + }, + done: function (res, curr, count) { + + if (res.code === 403) { + top.location.href = baseUrl + "/"; + } + pageCurr = curr; + + limit(child); + } + }); + }); + + // 鏃堕棿閫夋嫨鍣� + layDate.render({ + elem: '#modiTime\\$', + type: 'datetime' + }); + layDate.render({ + elem: '#appeTime\\$', + type: 'datetime' + }); + + +}); + +// 鍏抽棴鍔ㄤ綔 +$(document).on('click', '#data-detail-close', function () { + parent.layer.closeAll(); +}); + +function tableReload(child) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function () { + searchData[this.name] = this.value; + }); + (child ? parent.tableIns : tableIns).reload({ + where: searchData, + page: { + curr: pageCurr + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl + "/"; + } + pageCurr = curr; + if (res.data.length === 0 && count !== 0) { + tableIns.reload({ + where: searchData, + page: { + curr: pageCurr - 1 + } + }); + pageCurr -= 1; + } + limit(child); + } + }); +} + +function setFormVal(el, data, showImg) { + for (var val in data) { + var find = el.find(":input[id='" + val + "']"); + if (find[0] != null) { + if (find[0].type === 'checkbox') { + if (data[val] === 'Y') { + find.attr("checked", "checked"); + find.val('Y'); + } else { + find.remove("checked"); + find.val('N'); + } + continue; + } + } + find.val(data[val]); + if (showImg) { + var next = find.next(); + if (next.get(0)) { + if (next.get(0).localName === "img") { + find.hide(); + next.attr("src", data[val]); + next.show(); + } + } + } + } +} + +function clearFormVal(el) { + $(':input', el) + .val('') + .removeAttr('checked') + .removeAttr('selected'); +} + +function detailScreen(index) { + var detail = layer.getChildFrame('#data-detail', index); + var height = detail.height() + 60; + if (height > ($(window).height() * 0.9)) { + height = ($(window).height() * 0.8); + } + layer.style(index, { +// top: (($(window).height()-height)/3)+"px", + height: height + 'px' + }); +} + +$('body').keydown(function () { + if (event.keyCode === 13) { + $("#search").click(); + } +}); diff --git a/src/main/webapp/views/locDetlGroup/locDetlGroup.html b/src/main/webapp/views/locDetlGroup/locDetlGroup.html new file mode 100644 index 0000000..b495afb --- /dev/null +++ b/src/main/webapp/views/locDetlGroup/locDetlGroup.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html lang="en"> +<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, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> +</head> +<body> + +<!-- 鎼滅储鏍� --> +<div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="matnr" placeholder="鐗╂枡鍙�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="maktx" placeholder="鐗╂枡鍚嶇О" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="specs" placeholder="瑙勬牸" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="batch" placeholder="鎵瑰彿" autocomplete="off"> + </div> + </div> + + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button> + <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button> + <!-- <button id="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">鏌ョ湅寮傚父鏁版嵁</button>--> + </div> + </div> + + + +</div> + +<!-- 琛ㄦ牸 --> +<div class="layui-form"> + <table class="layui-hide" id="locDetlGroup" lay-filter="locDetlGroup"></table> +</div> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px;display: block">瀵煎嚭</button> + </div> +</script> + +<script type="text/html" id="operate"> + <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a> +</script> + +<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> +<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/locDetlGroup/locDetlGroup.js" charset="utf-8"></script> + +<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe> + +</body> +</html> + diff --git a/src/main/webapp/views/locDetlGroup/locDetl_detail.html b/src/main/webapp/views/locDetlGroup/locDetl_detail.html new file mode 100644 index 0000000..7684ede --- /dev/null +++ b/src/main/webapp/views/locDetlGroup/locDetl_detail.html @@ -0,0 +1,168 @@ +<!DOCTYPE html> +<html lang="en"> +<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, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> +</head> +<body> + +<!-- 璇︽儏 --> +<div id="data-detail" class="layer_self_wrap"> + <form id="detail" class="layui-form"> + <!-- + <div class="layui-inline" style="display: none"> + <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label> + <div class="layui-input-inline"> + <input id="id" class="layui-input" type="text" placeholder="缂栧彿"> + </div> + </div> + --> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label"><span class="not-null">*</span>搴� 浣� 鍙凤細</label> + <div class="layui-input-inline cool-auto-complete"> + <input id="locNo" class="layui-input" type="text" onkeyup="check(this.id, 'locDetl')" lay-verify="required" style="display: none"> + <input id="locNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()> + <div class="cool-auto-complete-window"> + <input class="cool-auto-complete-window-input" data-key="locMastQueryBylocNo" onkeyup="autoLoad(this.getAttribute('data-key'))"> + <select class="cool-auto-complete-window-select" data-key="locMastQueryBylocNoSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> + </select> + </div> + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label"><span class="not-null">*</span>鐗┿��銆�鏂欙細</label> + <div class="layui-input-inline"> + <input id="matnr" class="layui-input" type="text" onkeyup="check(this.id, 'locDetl')" lay-verify="required" > + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">浠� 搴� 鍙凤細</label> + <div class="layui-input-inline"> + <input id="lgnum" class="layui-input" type="text" > + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label" style="font-size: x-small">杞偍璇锋眰缂栧彿锛�</label> + <div class="layui-input-inline"> + <input id="tbnum" class="layui-input" type="text" lay-verify="number" > + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">琛� 椤� 鐩細</label> + <div class="layui-input-inline"> + <input id="tbpos" class="layui-input" type="text" lay-verify="number" > + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label" style="font-size: x-small">鐗╂枡鏍囩ID锛�</label> + <div class="layui-input-inline"> + <input id="zmatid" class="layui-input" type="text" > + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">鐗╂枡鎻忚堪锛�</label> + <div class="layui-input-inline"> + <input id="maktx" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">宸ャ��銆�鍘傦細</label> + <div class="layui-input-inline"> + <input id="werks" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">鏁般��銆�閲忥細</label> + <div class="layui-input-inline"> + <input id="anfme" class="layui-input" type="text" lay-verify="number" > + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">鍗曘��銆�浣嶏細</label> + <div class="layui-input-inline"> + <input id="altme" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">鎵樼洏鏉$爜锛�</label> + <div class="layui-input-inline"> + <input id="zpallet" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">鐢ㄦ埛ID锛�</label> + <div class="layui-input-inline"> + <input id="bname" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">澶囥��銆�娉細</label> + <div class="layui-input-inline"> + <input id="memo" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">淇敼浜哄憳锛�</label> + <div class="layui-input-inline cool-auto-complete"> + <input id="modiUser" class="layui-input" type="text" lay-verify="number" style="display: none"> + <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()> + <div class="cool-auto-complete-window"> + <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))"> + <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> + </select> + </div> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">淇敼鏃堕棿锛�</label> + <div class="layui-input-inline"> + <input id="modiTime$" class="layui-input" type="text" autocomplete="off"> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">鍒� 寤� 鑰咃細</label> + <div class="layui-input-inline cool-auto-complete"> + <input id="appeUser" class="layui-input" type="text" lay-verify="number" style="display: none"> + <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()> + <div class="cool-auto-complete-window"> + <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))"> + <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> + </select> + </div> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">娣诲姞鏃堕棿锛�</label> + <div class="layui-input-inline"> + <input id="appeTime$" class="layui-input" type="text" autocomplete="off"> + </div> + </div> + + + <hr class="layui-bg-gray"> + + <div id="data-detail-btn" class="layui-btn-container layui-form-item"> + <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div> + <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div> + <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div> + </div> + + <div id="prompt"> + 娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span> + </div> + </form> +</div> +</body> +<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> +<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/locDetl/locDetl.js" charset="utf-8"></script> +</html> + -- Gitblit v1.9.1