Browse Source

完成扫码出库时可以同时扫码二维码与条形码

lwx_dev
erdanergou 3 years ago
parent
commit
4571c79781
  1. 81
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  2. 192
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  3. 60
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  4. 7
      src/main/java/com/dreamchaser/depository_manage/entity/MaterialAndBarCode.java
  5. 7
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.java
  6. 8
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  7. 19
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  8. 37
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  9. 13
      src/main/java/com/dreamchaser/depository_manage/pojo/MaterialP.java
  10. 15
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  11. 92
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  12. 45
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  13. 3
      src/main/java/com/dreamchaser/depository_manage/utils/HttpUtils.java
  14. 452
      src/main/resources/templates/pages/application/application-in.html
  15. 19
      src/main/resources/templates/pages/application/application-in_scanQrCode.html
  16. 179
      src/main/resources/templates/pages/application/application-out.html
  17. 2
      src/main/resources/templates/pages/application/application-out_min-mobile.html
  18. 373
      src/main/resources/templates/pages/application/application-transfer.html
  19. 453
      src/main/resources/templates/pages/application/application-transfer_back.html
  20. 8
      src/main/resources/templates/pages/chart/chart-out_back.html
  21. 298
      src/main/resources/templates/pages/material/material-view.html
  22. 4
      src/main/resources/templates/pages/material/selectDepositoryByCard.html
  23. 2
      src/main/resources/templates/pages/other/welcome.html
  24. 2
      src/main/resources/templates/pages/scanQrCode/ScanBarCode.html
  25. 83
      src/main/resources/templates/pages/scanQrCode/ScanBarCodeByNew.html
  26. 126
      src/main/resources/templates/pages/scanQrCode/ScanBarCodeIn.html
  27. 124
      src/main/resources/templates/pages/scanQrCode/ScanBarCodeOut.html
  28. 341
      src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html
  29. 295
      src/main/resources/templates/pages/scanQrCode/scanQrCodeTransfer.html
  30. 32
      src/test/java/com/dreamchaser/depository_manage/Test.java
  31. 8
      target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  32. 37
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  33. 452
      target/classes/templates/pages/application/application-in.html
  34. 19
      target/classes/templates/pages/application/application-in_scanQrCode.html
  35. 179
      target/classes/templates/pages/application/application-out.html
  36. 2
      target/classes/templates/pages/application/application-out_min-mobile.html
  37. 373
      target/classes/templates/pages/application/application-transfer.html
  38. 453
      target/classes/templates/pages/application/application-transfer_back.html
  39. 8
      target/classes/templates/pages/chart/chart-out_back.html
  40. 298
      target/classes/templates/pages/material/material-view.html
  41. 4
      target/classes/templates/pages/material/selectDepositoryByCard.html
  42. 2
      target/classes/templates/pages/other/welcome.html

81
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java

@ -226,7 +226,7 @@ public class DepositoryRecordController {
insert.put("depositoryId",map.get("depositoryId"+temp));
insert.put("applyRemark",map.get("applyRemark"+temp));
insert.put("code",map.get("code"+temp));
insert.put("price",map.get("price").toString());
insert.put("price",map.get("price"+temp).toString());
if(placeId == -1) { // 如果插入到仓库
insert.put("placeId",0);
Integer add = depositoryRecordService.applicationInPlace(insert);
@ -248,22 +248,24 @@ public class DepositoryRecordController {
}
}
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
if(placeId == -1) {// 如果插入到仓库
map.put("placeId",0);
Integer add = depositoryRecordService.applicationInPlace(map);
if(add == -1){
errMsg.add(map);
}else {
integer+=add;
successMsg.add(map);
}
}else{ // 如果具体到库位
Integer flag = depositoryRecordService.applicationInPlace(map);
if(flag == -1){
map.put("err","存储失败,请重新选择存储位");
errMsg.add(map);
}else{
integer += flag;
if(placeId != null) {
if (placeId == -1) {// 如果插入到仓库
map.put("placeId", 0);
Integer add = depositoryRecordService.applicationInPlace(map);
if (add == -1) {
errMsg.add(map);
} else {
integer += add;
successMsg.add(map);
}
} else { // 如果具体到库位
Integer flag = depositoryRecordService.applicationInPlace(map);
if (flag == -1) {
map.put("err", "存储失败,请重新选择存储位");
errMsg.add(map);
} else {
integer += flag;
}
}
}
result.put("err",errMsg);
@ -274,7 +276,7 @@ public class DepositoryRecordController {
}else if(integer != 0 && params.size() > 0){
if(integer == params.size() + 1){
return CrudUtil.postHandle(integer,params.size() + 1);
}else{
}else {
return new RestResponse(result,666,new StatusInfo("错误","含有错误信息"));
}
}
@ -326,6 +328,19 @@ public class DepositoryRecordController {
}else{
// 插入主订单
map.put("departmenthead",departmentHeadId.toString());
if(!map.containsKey("mid")){
// 如果不包含初始的第一个卡片
Set<String> strings = map.keySet();
String key = "";
for (String tempKey :
strings) {
if(tempKey.contains("mid")){
key = tempKey;
break;
}
}
String keyNumber = key.split("mid")[1];
}
Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken);
if(res == 1) {
// 获取主订单编号
@ -607,6 +622,16 @@ public class DepositoryRecordController {
Integer integer = 0;
if(params.size() < 1 && map.size() > 4){
integer += depositoryRecordService.transferApply(map,userToken);
Object id = map.get("parentId");
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}else if(params.size() > 0){
for (int i = 0; i < params.size(); i++) {
Integer temp = params.get(i);
@ -619,8 +644,28 @@ public class DepositoryRecordController {
insert.put("applyRemark",map.get("applyRemark"+temp));
insert.put("code",map.get("code"+temp));
integer += depositoryRecordService.transferApply(insert,userToken);
Object id = insert.get("parentId");
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
integer += depositoryRecordService.transferApply(map,userToken);
Object id = map.get("parentId");
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
if(params.size() < 1) {
return CrudUtil.postHandle(integer, 1);

192
src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java

@ -274,12 +274,18 @@ public class MaterialController {
mp = materialPByCondition.get(0);
Map<String,Object> paramByPrice = new HashMap<>();
paramByPrice.put("code",mp.getCode());
// 获取当前库存中的物料单价
List<MaterialP> inventory = materialService.findInventory(paramByPrice);
if(inventory.size() > 0){
mp.setPrice(inventory.get(0).getPrice());
}else{
mp.setPrice(0.0);
}
paramByPrice.put("mcode",mp.getCode());
paramByPrice.remove("code");
// 获取条形码与物料对应关系
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByPrice);
mp.setMaterialAndBarCodeList(materialByBarCodeByCondition);
}
return new RestResponse(mp, 1, 200);
}
@ -339,6 +345,15 @@ public class MaterialController {
return new RestResponse(200);
}
// 将扫描的条形码数据暂存到redis中
@PostMapping("/temporaryBarCodeValueForMaterial")
public RestResponse temporaryBarCodeValueForMaterial(@RequestBody Map<String, Object> map, HttpServletRequest request) {
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
// 存入mids
redisTemplate.opsForValue().set("temporaryBarCodeValueForMaterial" + userByPort.getNumber(), JSONObject.toJSONString(map));
return new RestResponse(200);
}
// 判断当前扫描的物料是否存在
@GetMapping("/IsMaterialExist")
public RestResponse IsMaterialExist(HttpServletRequest request) {
@ -430,12 +445,189 @@ public class MaterialController {
@GetMapping("/application_in_scanQrCode")
public RestResponse applicationInScanQrCode(HttpServletRequest request){
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
// 获取当前用户所在部门拥有的仓库
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString());
String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue"+userByPort.getNumber()).toString();
redisTemplate.delete("scanQrCodeValue"+userByPort.getNumber());
JSONObject jsonObject = JSONObject.parseObject(scanQrCodeValue);
JSONArray materialListByJson = jsonObject.getJSONArray("materialList");
Map<String,Object> param = new HashMap<>();
List<MaterialP> materialPList = new ArrayList<>();
for (int i = 0; i < materialListByJson.size(); i++) {
JSONObject material = (JSONObject) materialListByJson.get(i);
List<PlaceP> placePList = new ArrayList<>();
param.put("mcode",material.getString("code"));
MaterialP mp = new MaterialP(materialService.findMaterialById(material.getInteger("mid")));
// 获取物料与条形码的对应关系
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(param);
for (int j = 0; j < depositoryByAdminorg.size(); j++) {
Depository depository = depositoryByAdminorg.get(j);
param.put("code",material.getString("code"));
param.put("depositoryId",depository.getId());
List<MaterialP> inventory = materialService.findInventory(param);
if(inventory.size() > 0) {
List<PlaceP> place = placeService.findPlaceByMidAndDid(inventory.get(0).getId(), depository.getId());
placePList.addAll(place);
}
}
mp.setPlacePList(placePList);
mp.setMaterialAndBarCodeList(materialByBarCodeByCondition);
materialPList.add(mp);
}
jsonObject.put("materialList",materialPList);
return new RestResponse(jsonObject);
}
// 获取条形码扫描结果
@GetMapping("/application_in_scanBarCode")
public RestResponse applicationInScanBarCode(HttpServletRequest request){
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
String scanBarCodeValue = redisTemplate.opsForValue().get("temporaryBarCodeValueForMaterial"+userByPort.getNumber()).toString();
redisTemplate.delete("temporaryBarCodeValueForMaterial"+userByPort.getNumber());
JSONObject jsonObject = JSONObject.parseObject(scanBarCodeValue);
JSONArray barCodeList = (JSONArray) jsonObject.get("barCodeList");
// 获取标志位,用于判断是否扫描二维码
Boolean flag = jsonObject.getBoolean("flag");
Map<String,Object> result = new HashMap<>();
List<Object> materialList = new ArrayList<>();
// 获取当前用户所在部门拥有的仓库
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString());
Map<String,Object> param = new HashMap<>();
for (int i = 0; i < barCodeList.size(); i++) {
// 获取具体的条形码
String barCode = barCodeList.getString(i);
// 获取条形码与物料的映射
MaterialAndBarCode materialByBarCode = null;
for (int j = 0; j < depositoryByAdminorg.size(); j++) {
param.put("depositoryId",depositoryByAdminorg.get(j).getId());
param.put("barCode",barCode);
// 通过仓库与条形码获取对应关系
materialByBarCode = materialService.findMaterialByBarCodeByBarCodeAndDepositoryId(param);
if(materialByBarCode != null){
// 如果获取到对应关系
break;
}
}
if(materialByBarCode == null) {
// 如果没有获取到
materialByBarCode = materialService.findMaterialByBarCode(barCode);
}
materialList.add(materialByBarCode);
}
result.put("materialList",materialList);
if(flag){
String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue"+userByPort.getNumber()).toString();
redisTemplate.delete("scanQrCodeValue"+userByPort.getNumber());
JSONObject parseObject = JSONObject.parseObject(scanQrCodeValue);
result.put("depository",parseObject.get("depository"));
result.put("place",parseObject.get("place"));
}
return new RestResponse(result);
}
// 获取条形码扫描结果
@GetMapping("/application_transfer_scanBarCode")
public RestResponse applicationTransferScanBarCode(HttpServletRequest request){
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
// 获取当前用户部门所拥有仓库
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString());
String scanBarCodeValue = redisTemplate.opsForValue().get("temporaryBarCodeValueForMaterial"+userByPort.getNumber()).toString();
redisTemplate.delete("temporaryBarCodeValueForMaterial"+userByPort.getNumber());
JSONObject jsonObject = JSONObject.parseObject(scanBarCodeValue);
JSONArray barCodeList = (JSONArray) jsonObject.get("barCodeList");
// 获取标志位,用于判断是否扫描二维码
Boolean flag = jsonObject.getBoolean("flag");
Map<String,Object> result = new HashMap<>();
List<Object> materialList = new ArrayList<>();
for (int i = 0; i < barCodeList.size(); i++) {
// 获取具体的条形码
String barCode = barCodeList.getString(i);
// 获取条形码与物料的映射
MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode);
Boolean isExist = false;
List<PlaceP> placePList = new ArrayList<>();
for (int j = 0; j < depositoryByAdminorg.size(); j++) {
Map<String,Object> param = new HashMap<>();
param.put("depositoryId",depositoryByAdminorg.get(j).getId());
param.put("code",materialByBarCode.getMcode());
List<MaterialP> inventory = materialService.findInventory(param);
if(inventory.size() > 0){
// 如果存在该物料
MaterialP materialP = inventory.get(0);
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(materialP.getId(), depositoryByAdminorg.get(j).getId());
placePList.addAll(placeByMidAndDid);
isExist = true;
}
}
if(isExist) {
materialByBarCode.setPlacePList(placePList);
materialList.add(materialByBarCode);
}
}
result.put("materialList",materialList);
if(flag){
String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue"+userByPort.getNumber()).toString();
redisTemplate.delete("scanQrCodeValue"+userByPort.getNumber());
JSONObject parseObject = JSONObject.parseObject(scanQrCodeValue);
result.put("depository",parseObject.get("depository"));
result.put("place",parseObject.get("place"));
}
return new RestResponse(result);
}
// 获取条形码扫描结果
@GetMapping("/application_out_scanBarCode")
public RestResponse applicationOutScanBarCode(HttpServletRequest request){
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
// 获取当前用户部门所拥有仓库
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString());
String scanBarCodeValue = redisTemplate.opsForValue().get("temporaryBarCodeValueForMaterial"+userByPort.getNumber()).toString();
redisTemplate.delete("temporaryBarCodeValueForMaterial"+userByPort.getNumber());
JSONObject jsonObject = JSONObject.parseObject(scanBarCodeValue);
JSONArray barCodeList = (JSONArray) jsonObject.get("barCodeList");
// 获取标志位,用于判断是否扫描二维码
Boolean flag = jsonObject.getBoolean("flag");
Map<String,Object> result = new HashMap<>();
List<Object> materialList = new ArrayList<>();
for (int i = 0; i < barCodeList.size(); i++) {
// 获取具体的条形码
String barCode = barCodeList.getString(i);
// 获取条形码与物料的映射
MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode);
Boolean isExist = false;
List<PlaceP> placePList = new ArrayList<>();
for (int j = 0; j < depositoryByAdminorg.size(); j++) {
Map<String,Object> param = new HashMap<>();
param.put("depositoryId",depositoryByAdminorg.get(j).getId());
param.put("code",materialByBarCode.getMcode());
List<MaterialP> inventory = materialService.findInventory(param);
if(inventory.size() > 0){
// 如果存在该物料
MaterialP materialP = inventory.get(0);
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(materialP.getId(), depositoryByAdminorg.get(j).getId());
materialByBarCode.setMid(materialP.getId());
placePList.addAll(placeByMidAndDid);
isExist = true;
}
}
if(isExist) {
materialByBarCode.setPlacePList(placePList);
materialList.add(materialByBarCode);
}
}
result.put("materialList",materialList);
if(flag){
String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue"+userByPort.getNumber()).toString();
redisTemplate.delete("scanQrCodeValue"+userByPort.getNumber());
JSONObject parseObject = JSONObject.parseObject(scanQrCodeValue);
result.put("depository",parseObject.get("depository"));
result.put("place",parseObject.get("place"));
}
return new RestResponse(result);
}
// 通过条形码获取物料信息
@GetMapping("/findMaterialByBarCode")
public RestResponse findMaterialByBarCode(@RequestParam String barCode,HttpServletRequest request){

60
src/main/java/com/dreamchaser/depository_manage/controller/PageController.java

@ -431,6 +431,10 @@ public class PageController {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
if (id != null) {
Material material = materialService.findMaterialById(id);
Map<String,Object> map = new HashMap<>();
map.put("mcode",material.getCode());
// 获取物料与条形码的对应关系
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(map);
Map<String,Object> params = new HashMap<>();
params.put("mid",material.getId());
params.put("mname",material.getMname());
@ -447,6 +451,7 @@ public class PageController {
}
mv.addObject("qrCode",qrCode);
mv.addObject("record", materialService.findMaterialAndTypeById(id));
mv.addObject("barCodeList",materialByBarCodeByCondition);
mv.addObject("materialTypes", materialTypeService.findMaterialTypeAll());
} else {
throw new MyException("缺少必要参数!");
@ -649,13 +654,13 @@ public class PageController {
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/chart/chart-out_back");
// 转出物料数量
mv.addObject("InCount", depositoryRecordService.CalculateAllApplicationOutCount("已出库"));
mv.addObject("OutCount", depositoryRecordService.CalculateAllApplicationOutCount("已出库"));
// 转出物料金额
mv.addObject("allInCount", depositoryRecordService.CalculateAllApplicationOutCount(""));
mv.addObject("allOutCount", depositoryRecordService.CalculateAllApplicationOutCount(""));
// 出售物料数量
mv.addObject("InPrice", depositoryRecordService.CalculateAllApplicationOutPrice("已出库"));
mv.addObject("OutPrice", depositoryRecordService.CalculateAllApplicationOutPrice("已出库"));
// 出库物料总额
mv.addObject("allInPrice", depositoryRecordService.CalculateAllApplicationOutPrice(""));
mv.addObject("allOutPrice", depositoryRecordService.CalculateAllApplicationOutPrice(""));
return mv;
}
@ -1603,6 +1608,11 @@ public class PageController {
public String scanBarCode(){
return "pages/scanQrCode/ScanBarCode";
}
// 用于扫码条形码
@GetMapping("/scanBarCodeByNew")
public String scanBarCodeByNew(){
return "pages/scanQrCode/ScanBarCodeByNew";
}
// 跳转到扫码出库界面
@GetMapping("/scanQrCodeByOut")
public ModelAndView scanQrCodeByOut(Integer id,HttpServletRequest request){
@ -1615,6 +1625,36 @@ public class PageController {
mv.addObject("record",applicationOutMinById);
return mv;
}
// 跳转到新扫码出库界面
@GetMapping("/scanBarOrQrCodeOut")
public ModelAndView scanBarOrQrCodeOut(Integer id,HttpServletRequest request){
ModelAndView mv = new ModelAndView();
// 获取当前要处理的子订单
ApplicationOutRecordMin applicationOutMinById = depositoryRecordService.findApplicationOutMinById(id);
mv.setViewName("pages/scanQrCode/ScanBarOrQrCodeOut");
Material materialById = materialService.findMaterialById(applicationOutMinById.getMid());
mv.addObject("materialById",materialById);
mv.addObject("record",applicationOutMinById);
return mv;
}
@GetMapping("/scanQrCodeTransfer")
public ModelAndView scanQrCodeTransfer(HttpServletRequest request){
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/scanQrCode/scanQrCodeTransfer");
return mv;
}
@GetMapping("/scanBarCodeIn")
public String scanBarCodeIn(){
return "pages/scanQrCode/ScanBarCodeIn";
}
@GetMapping("/scanBarCodeOut")
public ModelAndView scanBarCodeOut(){
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/scanQrCode/ScanBarCodeOut");
return mv;
}
// 获取扫描结果并跳转到入库
@GetMapping("/application_in_scanQrCode")
@ -1653,11 +1693,13 @@ public class PageController {
for (int i = 0; i < mids.size(); i++) {
Map<String,Object> param = new HashMap<>();
Integer o = ObjectFormatUtil.toInteger(mids.get(i));
Material materialById = materialService.findMaterialById(o);
param.put("mid",materialById.getId());
param.put("mname",materialById.getMname());
param.put("code",materialById.getCode());
param.put("version",materialById.getVersion());
MaterialP mp = new MaterialP( materialService.findMaterialById(o));
param.put("mid",mp.getId());
param.put("mname",mp.getMname());
param.put("code",mp.getCode());
param.put("version",mp.getVersion());
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(param);
param.put("materialAndBarCodeList",materialByBarCodeByCondition);
String context = JSONObject.toJSONString(param);
materialList.add(context);
}

7
src/main/java/com/dreamchaser/depository_manage/entity/MaterialAndBarCode.java

@ -1,8 +1,10 @@
package com.dreamchaser.depository_manage.entity;
import com.dreamchaser.depository_manage.pojo.PlaceP;
import lombok.Data;
import java.math.BigInteger;
import java.util.List;
/**
* 条形码与物料对应
@ -57,4 +59,9 @@ public class MaterialAndBarCode {
* 物料单价
*/
private Double price;
/**
* 物料所处库位
*/
private List<PlaceP> placePList;
}

7
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.java

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.pojo.ApplicationInRecordP;
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordMinP;
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@ -327,4 +328,10 @@ public interface DepositoryRecordMapper {
* @return
*/
List<ApplicationOutRecordMin> findApplicationOutMinByCondition(Map<String,Object> map);
/**
* 获取所有已经完成的子订单
* @return
*/
List<ApplicationOutRecordMin> findApplicationOutMinForComplete();
}

8
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml

@ -717,6 +717,14 @@
and aorm.parentId = #{parentId}
</select>
<select id="findApplicationOutMinForComplete" resultMap="applicationOutRecordMin">
select
<include refid="ApplicationOutRecordMinInfo" />
from application_out_record_min aorm left join application_out_record aor on aorm.parentId = aor.id
where 1 = 1
and aor.pass = 1
</select>
<!-- 插入数据 -->
<insert id="insertDepositoryRecord" parameterType="map" useGeneratedKeys="true" keyProperty="id">
INSERT INTO depository_record (

19
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java

@ -172,14 +172,29 @@ public interface MaterialMapper {
* @param map
* @return
*/
MaterialAndBarCode findMaterialByBarCodeByCondition(Map<String,Object> map);
List<MaterialAndBarCode> findMaterialByBarCodeByCondition(Map<String,Object> map);
/**
* 添加条形码与物料编码的映射
* 添加条形码与物料编码的映射,单条数据
* @param map
* @return
*/
Integer addBarCodeAndMcode(Map<String,Object> map);
/**
* 批量添加条形码与物料之间的映射
* @param map
* @return
*/
Integer addBarCodeAndMaterialForMoreOne(Map<String,Object> map);
/**
* 删除条形码与物料之间的映射
* @param map
* @return
*/
Integer deleteBarCodeAndMaterial(Map<String,Object> map);
}

37
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -108,8 +108,11 @@
<if test="price != null">
AND m.price = #{price}
</if>
<if test="typeId != null">
AND m.type_id = #{typeId}
<if test="materialTypeId != null">
AND m.type_id = #{materialTypeId}
</if>
<if test="code != null and code != '' ">
and m.code = #{code}
</if>
and state != 3 and m.depository_id is null
</select>
@ -273,6 +276,7 @@
<if test="tname != null and tname != ''">
AND tname LIKE CONCAT('%', #{tname}, '%')
</if>
group by bmcode
</select>
<!-- 根据仓库查询物料-->
@ -375,6 +379,18 @@
)
</insert>
<insert id="addBarCodeAndMaterialForMoreOne" parameterType="map">
insert into barcodeandmaterial(id,mcode,barCode)
values
<foreach collection="list" index="index" item="item" separator=",">
(#{id},
#{code},
#{item})
</foreach>
</insert>
<!-- 批量插入数据-->
<insert id="insertMaterials" parameterType="list">
INSERT INTO material (
@ -398,6 +414,23 @@
</foreach>
</insert>
<!-- 删除映射-->
<delete id="deleteBarCodeAndMaterial" parameterType="map">
delete
from barcodeandmaterial
where 1 = 1
<if test="barCode != null and barCode != ''">
and barCode = #{barCode}
</if>
<if test="mcode != null and mcode != ''">
and mcode = #{mcode}
</if>
<if test="id != null and id != ''">
and id = #{id}
</if>
</delete>
<!-- 修改数据 -->
<update id="updateMaterial">

13
src/main/java/com/dreamchaser/depository_manage/pojo/MaterialP.java

@ -1,9 +1,11 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.Material;
import com.dreamchaser.depository_manage.entity.MaterialAndBarCode;
import lombok.Data;
import java.math.BigInteger;
import java.util.List;
/**
* 库存类的包装类
@ -101,6 +103,17 @@ public class MaterialP {
private String placeCode;
/**
* 物料编码与条形码的对应关系
*/
private List<MaterialAndBarCode> materialAndBarCodeList;
/**
* 物料所处库位
*/
private List<PlaceP> placePList;
public MaterialP(Integer id, Integer depositoryId, String mname, Integer quantity, Double price, String typeName) {

15
src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java

@ -187,4 +187,19 @@ public interface MaterialService {
* @return
*/
MaterialAndBarCode findMaterialByBarCode(String barCode);
/**
* 通过条件获取条形码与物料的对应关系
* @param map
* @return
*/
List<MaterialAndBarCode> findMaterialByBarCodeByCondition(Map<String,Object> map);
/**
* 通过条形码与仓库编码获取对应关系
* @param map
* @return
*/
MaterialAndBarCode findMaterialByBarCodeByBarCodeAndDepositoryId(Map<String,Object> map);
}

92
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java

@ -236,27 +236,17 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
List<ApplicationOutRecordP> applicationOutRecordPAll = depositoryRecordMapper.findApplicationOutRecordPAll();
Double sum = 0.0;
if (state.isEmpty()) {
// 如果要获取要出库的所有数量
for (int i = 0; i < applicationOutRecordPAll.size(); i++) {
sum += (double) applicationOutRecordPAll.get(i).getQuantity();
}
} else {
for (int i = 0; i < applicationOutRecordPAll.size(); i++) {
if (state.equals(applicationOutRecordPAll.get(i).getState())) {
for (int j = 0; j < applicationOutRecordPAll.size(); j++) {
ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(j);
// 获取所有子物料
Map<String, Object> map = new HashMap<>();
map.put("parentId", applicationOutRecordP.getId());
List<ApplicationOutRecordMin> minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map);
for (int k = 0; k < minByCondition.size(); k++) {
ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k);
Integer mid = applicationOutRecordMin.getMid();
Material materialById = materialMapper.findMaterialById(mid);
sum += (double) materialById.getQuantity();
}
}
}
// 如果获取已经出库的数量
List<ApplicationOutRecordMin> applicationOutMinForComplete = depositoryRecordMapper.findApplicationOutMinForComplete();
for (int i = 0; i < applicationOutMinForComplete.size(); i++) {
ApplicationOutRecordMin recordMin = applicationOutMinForComplete.get(i);
sum += (double) recordMin.getQuantity();
}
}
return sum;
@ -466,9 +456,17 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
params.put("pid", placeId);
// 获取当前物料所存放库位的数量
placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params);
if (placeAndMaterialByMidAndPid.getQuantity() < record.getQuantity()) {
// 如果当前库位数量不足
flag = false;
if(placeAndMaterialByMidAndPid != null) {
// 如果当前库位存在该物料
if (placeAndMaterialByMidAndPid.getQuantity() < record.getQuantity()) {
// 如果当前库位数量不足
flag = false;
}
}else{
restResponse.setStatus(566);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败","当前位置未发现该物料"));
return restResponse;
}
} else { // 如果是默认库位
Map<String, Object> params = new HashMap<>();
@ -476,9 +474,17 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
params.put("pid", 0);
// 获取当前物料在默认库位中的数量
placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params);
if (placeAndMaterialByMidAndPid.getQuantity() < record.getQuantity()) {
// 如果当前库位数量不足
flag = false;
if(placeAndMaterialByMidAndPid != null) {
// 如果当前库位存在该物料
if (placeAndMaterialByMidAndPid.getQuantity() < record.getQuantity()) {
// 如果当前库位数量不足
flag = false;
}
}else{
restResponse.setStatus(566);
restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败","当前位置未发现该物料"));
return restResponse;
}
}
// 获取出库物料具体信息
@ -667,7 +673,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
// depositoryRecordMapper.insertApplicationInRecord(map);
transferRecordMapper.addTransferRecord(map);// 插入转移记录
transferRecordMapper.addTransferRecord(map);// 插入转移记录
Integer transferId = ObjectFormatUtil.toInteger(map.get("id"));
//清除主键
map.remove("id");
@ -677,8 +683,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Administration company = PageController.getCompany(userByPort.getMaindeparment(), userByPort);
// 生成出库订单
map.put("code", createCode(depositoryRecordById.getDname(), "outOrderNumber", "out", company.getName()));
String placeId = map.get("fromPlaceId").toString();
if ("".equals(placeId) || "0".equals(placeId)) {
Object placeId = map.get("fromPlaceId");
if (placeId == null ||"".equals(placeId.toString()) || "0".equals(placeId.toString())) {
map.put("placeId", 0);
}
// 插入主表
@ -687,17 +694,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 清除主键
map.remove("id");
map.put("parentId", id);
String departMentHeadQyWxName = (String) map.get("departMentHeadQyWxName");
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName, ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:"+userByPort.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userByPort.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
return depositoryRecordMapper.insertApplicationOutRecordMin(map);
}
@ -752,6 +748,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}).start();
} else {
result = "驳回";
map.put("pass",2);
map.put("state", "部门负责人审核未通过");
}
@ -927,6 +924,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
redisTemplate.expire("user:"+userByPort.getNumber()+":QyWxOutId:"+outId,72,TimeUnit.HOURS);
} else {
// 如果点击的是驳回
map.put("pass", 2);
map.put("departmentheadPass", 2);
map.put("state", "部门负责人审核未通过");
@ -1411,6 +1409,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
List<ApplicationOutRecordP> applicationOutRecordPAll = depositoryRecordMapper.findApplicationOutRecordPAll();
Double sum = 0.0;
if (state.isEmpty()) {
// 如果要获取所有待出库的金额
for (int i = 0; i < applicationOutRecordPAll.size(); i++) {
ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(i);
// 获取所有子物料
@ -1426,20 +1425,13 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
} else {
for (int i = 0; i < applicationOutRecordPAll.size(); i++) {
if (state.equals(applicationOutRecordPAll.get(i).getState())) {
ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(i);
// 获取所有子物料
Map<String, Object> map = new HashMap<>();
map.put("parentId", applicationOutRecordP.getId());
List<ApplicationOutRecordMin> minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map);
for (int k = 0; k < minByCondition.size(); k++) {
ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k);
Integer mid = applicationOutRecordMin.getMid();
Material materialById = materialMapper.findMaterialById(mid);
sum += ((double) materialById.getPrice() / 100) * applicationOutRecordMin.getQuantity();
}
}
// 如果要获取已完成的金额
List<ApplicationOutRecordMin> applicationOutMinForComplete = depositoryRecordMapper.findApplicationOutMinForComplete();
for (int i = 0; i < applicationOutMinForComplete.size(); i++) {
ApplicationOutRecordMin recordMin = applicationOutMinForComplete.get(i);
Integer mid = recordMin.getMid();
Material materialById = materialMapper.findMaterialById(mid);
sum += ((double) materialById.getPrice() / 100) * recordMin.getQuantity();
}
}
BigDecimal bg = new BigDecimal(sum);

45
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

@ -84,6 +84,7 @@ public class MaterialServiceImpl implements MaterialService {
* @param map 参数列表
* @return 受影响的行数
*/
@Transactional
@Override
public Integer updateMaterial(Map<String, Object> map) {
if(map.containsKey("price")){
@ -98,6 +99,20 @@ public class MaterialServiceImpl implements MaterialService {
Object materialTypeId = map.get("materialTypeId");
map.put("typeId", materialTypeId);
}
String barCode = (String) map.get("barCode");
if(!"0".equals(barCode)) {
Map<String, Object> delParam = new HashMap<>();
delParam.put("id", barCode);
materialMapper.deleteBarCodeAndMaterial(delParam);
}
if(map.containsKey("barCodeList")){
// 如果需要新增与条形码的映射
List barCodeList = (ArrayList) map.get("barCodeList");
Map<String,Object> param = new HashMap<>();
param.put("list",barCodeList);
param.put("code",map.get("code"));
materialMapper.addBarCodeAndMaterialForMoreOne(param);
}
return materialMapper.updateMaterial(map);
}
@ -498,9 +513,39 @@ public class MaterialServiceImpl implements MaterialService {
public MaterialAndBarCode findMaterialByBarCode(String barCode) {
Map<String,Object> map =new HashMap<>();
map.put("barCode",barCode);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialMapper.findMaterialByBarCodeByCondition(map);
if(materialByBarCodeByCondition.size() > 0){
return materialByBarCodeByCondition.get(0);
}
return null;
}
/**
* 通过条件获取条形码与物料的对应关系
* @param map
* @return
*/
@Override
public List<MaterialAndBarCode> findMaterialByBarCodeByCondition(Map<String, Object> map) {
return materialMapper.findMaterialByBarCodeByCondition(map);
}
/**
* 通过条形码与仓库编码获取对应关系
* @param map
* @return
*/
@Override
public MaterialAndBarCode findMaterialByBarCodeByBarCodeAndDepositoryId(Map<String, Object> map) {
List<MaterialAndBarCode> materialByBarCodeByCondition = materialMapper.findMaterialByBarCodeByCondition(map);
if(materialByBarCodeByCondition.size() > 0){
MaterialAndBarCode materialAndBarCode = materialByBarCodeByCondition.get(0);
materialAndBarCode.setPrice(materialAndBarCode.getPrice() / 100);
return materialAndBarCode;
}
return null;
}
/**
* 构造树形选择框
* @return

3
src/main/java/com/dreamchaser/depository_manage/utils/HttpUtils.java

@ -239,6 +239,9 @@ public class HttpUtils {
if(userByPort!=null)
{
keyAndToken = UserKeyAndTokenPool.getKeyAndToken(userByPort.getNumber());
if(keyAndToken == null || "".equals(keyAndToken)){
keyAndToken = " & ";
}
}
String[] split = keyAndToken.split("&");

452
src/main/resources/templates/pages/application/application-in.html

@ -12,17 +12,25 @@
</head>
<body>
<style>
.inputdiv{
display:flex;background-color: #fff;height: 38px;line-height: 38px;border: 1px solid rgb(238, 238, 238);
.inputdiv {
display: flex;
background-color: #fff;
height: 38px;
line-height: 38px;
border: 1px solid rgb(238, 238, 238);
}
.layui-form-label{
.layui-form-label {
padding: 9px 0px;
text-align: left;
}
.layui-input-block{
.layui-input-block {
margin-left: 80px;
}
.layui-form-select{
width: 100%;
}
</style>
@ -30,105 +38,126 @@
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-fluid">
<!-- 入库申请提交-->
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; " >
<div carousel-item style="overflow: inherit">
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1" style="padding-right: 0px">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label" >物料名称:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" onblur="selectMaterialByName(this)"
lay-verify="required"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name="mid" class="layui-input" id="mid"
style="display: none" lay-verify="required"/>
<!-- 入库申请提交-->
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; ">
<div carousel-item style="overflow: inherit">
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem" style="padding-right: 0px">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline"
onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称:</label>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeInStorage(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
<input name="price" type="number" placeholder="请填写入物料单价" value=""
class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input"
style="border-style: none"
id="openSonByMaterial" onblur="selectMaterialByName(this)"
lay-verify="required"/>
<i class="layui-icon layui-icon-search" style="display: inline"
id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
<input type="text" name="mid" class="layui-input" id="mid"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value=""
onblur="selectCode(this)"
class="layui-input" lay-verify="required"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
style="margin-top: 10px" onclick="scanCodeInStorage(this)">
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>
<!-- 提交按钮-->
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block" style="bottom: 15px;">
<button id="submitForm" class="layui-btn" lay-submit lay-filter="formStep" style="margin-left: 15%">
&emsp;提交&emsp;
</button>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barCode" name="barCode" type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
</form>
</div>
<!-- 下一步-->
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
提交成功
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
<input name="price" type="number" placeholder="请填写入物料单价" value=""
class="layui-input" lay-verify="number">
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再填写一次</button>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>
</form>
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline"
onclick="addItem(this)"></i>
</div>
<!-- 提交按钮-->
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block" style="bottom: 15px;">
<button id="submitForm" class="layui-btn" lay-submit lay-filter="formStep"
style="margin-left: 15%">
&emsp;提交&emsp;
</button>
</div>
</div>
</div>
</form>
</div>
<!-- 下一步-->
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
提交成功
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再填写一次</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
@ -137,29 +166,47 @@
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
// 用于添加标签
function addItem(obj){}
function addItem(obj) {
}
// 用于删除标签
function deleteItem(obj){}
function deleteItem(obj) {
}
// 用于编码查询
function selectCode(obj){}
function selectCode(obj) {
}
// 用于点击搜索按钮
function selectMaterial(obj){}
function selectMaterial(obj) {
}
// 用于物料名称查询
function selectMaterialByName(obj){}
function selectMaterialByName(obj) {
}
// 用于加载仓库菜单
function openDepositoryTree(obj){}
function openDepositoryTree(obj) {
}
// 用于扫码入库
function scanCodeInStorage(obj) {}
function scanCodeInStorage(obj) {
}
// 用于扫描条形码
function scanBarCode(obj) {
}
// 用于重新渲染该页面
function Coverpage(num, obj) {}
function Coverpage(num, obj) {
}
// 用于暂存卡片个数
var params = [];
let scanValue = {};
// 用于卡片编号
var NewIdNumber = 1;
layui.use(['form','miniTab', 'step','flow'], function () {
layui.use(['form', 'miniTab', 'step', 'flow'], function () {
var $ = layui.$,
form = layui.form,
miniTab = layui.miniTab,
@ -170,7 +217,7 @@
elem: '#stepForm',
filter: 'stepForm',
width: '100%', //设置容器宽度
height: '600px',
height: '700px',
stepItems: [{
title: '填写信息'
}, {
@ -184,6 +231,7 @@
data = data.field;
data.type = 1;
data.params = params;
console.log(data)
$.ajax({
url: "/depositoryRecord/applicationIn",
type: 'post',
@ -197,23 +245,27 @@
layer.close(this.layerIndex);
if (data.status >= 300) {
var d = data.data;
if(d === ""){
if (d === "") {
layer.msg(data.statusInfo.detail);
}else{
} else {
var err = d["err"];
var success = d["success"];
var errMsg = "";
for (let i = 0; i < err.length; i++) {
errMsg += "物料编码: "
errMsg += "物料编码: ";
errMsg += err[i]["code"];
}
errMsg += "添加失败,请选择新仓库或库位";
layer.msg(errMsg,{
icon:5,
time:1000
},function () {
if(err.length>0) {
errMsg += "添加失败,请选择新仓库或库位";
layer.msg(errMsg, {
icon: 5,
time: 1000
}, function () {
step.next('#stepForm');
});
}else{
step.next('#stepForm');
});
}
}
} else {
@ -253,7 +305,7 @@
NewIdNumber = NewIdNumber + 1;
// 物料名称栏目
var materialItem = `
<div class="layui-card-body" style="padding-right: 0px" id=`+"cardItem"+NewIdNumber+`>
<div class="layui-card-body" style="padding-right: 0px" id=` + "cardItem" + NewIdNumber + `>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
@ -264,7 +316,7 @@
id="openSonByMaterial" lay-verify="required" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=`+"mid"+NewIdNumber+` class="layui-input" id="mid"
<input type="text" name=` + "mid" + NewIdNumber + ` class="layui-input" id="mid"
style="display: none" lay-verify="required" />
</div>
</div>
@ -272,23 +324,35 @@
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
<input id="code" name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" >
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeInStorage(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barcode" name=` + "barCode" + NewIdNumber + ` type="text" placeholder="请填写入条形编码" value=""
class="layui-input" style="border-style: none">
<img src="/static/images/search.ico" height="16"
id = `+"barCodeImg"+NewIdNumber+`
width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
<input name=`+"price"+NewIdNumber+` type="number" placeholder="请填写入物料单价" value=""
<input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value=""
class="layui-input" lay-verify="number" >
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=`+"quantity"+NewIdNumber+` type="number" placeholder="请填写入物料数量" value=""
<input name=` + "quantity" + NewIdNumber + ` type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>
@ -298,9 +362,9 @@
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name=`+"depositoryId"+NewIdNumber+` class="layui-input" id="depositoryId"
<input type="text" name=` + "depositoryId" + NewIdNumber + ` class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name=`+"placeId"+NewIdNumber+` class="layui-input" id="placeId"
<input type="text" name=` + "placeId" + NewIdNumber + ` class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
@ -308,7 +372,7 @@
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
@ -316,9 +380,9 @@
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+477 +'px');
$("#"+parentId).after(materialItem);
params.push(NewIdNumber);
$("#stepForm").css("height", height + 532 + 'px');
$("#" + parentId).after(materialItem);
};
// 实现卡片删除
@ -330,8 +394,8 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-477 +'px');
params = remove(params,parentId);
$("#stepForm").css("height", height - 532 + 'px');
params = remove(params, parentId);
reparent.removeChild(parent);
};
@ -340,7 +404,7 @@
function remove(arr, item) {
var result = [];
for (let i = 0; i < arr.length; i++) {
if(arr[i] === item){
if (arr[i] === item) {
continue;
}
result.push(arr[i]);
@ -350,13 +414,14 @@
// 用于实现通过编码查询物料
selectCode = function(obj){
selectCode = function (obj) {
// 输入code
var code = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var materialChildren = parent.childNodes[5];
var priceChildren = parent.childNodes[9];
var priceChildren = parent.childNodes[11];
var barCodeChildren = parent.childNodes[9];
// 物料条目
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
@ -364,6 +429,8 @@
// 单价条目
var priceItem = priceChildren.childNodes[3].childNodes;
var priceValue = priceItem[1];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.code = code;
req.type = "in";
@ -371,20 +438,41 @@
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:req,
data: req,
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
if(d == null){
if (d == null) {
layer.msg("没有该编码,请确认是否输入正确");
materialName.value = "";
materialId.value = "";
priceValue.value = "";
obj.value = "";
}else{
} else {
materialName.value = d.mname;
materialId.value = d.id;
priceValue.value = d.price;
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if(materialAndBarCodeList.length > 0){
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#"+id).remove();
// barCodeInput.style = "display:none";
var idNumber = materialId.name.split("mid")[1];
var barCodeSelect = `
<select id=`+"barCode"+idNumber+` name=`+"barCode"+idNumber+ `>
</select>`;
$("#"+barCodeImg.id).before(barCodeSelect);
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render();
}
}
}
});
@ -413,9 +501,9 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname='+mname+'&type=1&clickObj='+parentId,
move : '.layui-layer-title',
fixed:false,
content: '/selectMaterialByCard?mname=' + mname + '&type=1&clickObj=' + parentId,
move: '.layui-layer-title',
fixed: false,
end: function () {
var mid = materialId.value;
$.ajax({
@ -426,7 +514,7 @@
success: function (d) {
var material = d.data.materialById;
var code = material.code;
if(code === undefined){
if (code === undefined) {
code = "";
}
codeValue.value = code;
@ -457,26 +545,26 @@
url: "/material/findMaterialByCondition",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
if(d.count > 1){
if (d.count > 1) {
layer.msg("请点击右侧搜索确定物品");
materialId.value = "";
codeValue.value = "";
return false;
}else if(d.count === 0){
} else if (d.count === 0) {
layer.msg("没有该物品,请确认输入是否正确");
materialId.value = "";
codeValue.value = "";
materialName.value = "";
return false;
}
else{
} else {
var material = d.data[0];
materialName.value = material.mname;
materialId.value = material.id;
codeValue.value = material.code;
}
}
});
@ -565,7 +653,17 @@
<div class="inputdiv">
<input id="code" name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" onblur="selectCode(this)"
class="layui-input" lay-verify="required" value="${obj.code}" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" >
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeInStorage(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
@ -573,7 +671,7 @@
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
<input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value=""
<input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value="${obj.price}"
class="layui-input" lay-verify="number">
</div>
</div>
@ -600,12 +698,12 @@
if (NewIdNumber !== "") {
params.push(NewIdNumber)
}
$("#stepForm").css("height", height + 475 + 'px');
$("#stepForm").css("height", height + 532 + 'px');
var materialItem = firstItem + depositoryItem + lastItem; // 最终
$("#btn_sub").prepend(materialItem)
};
// 用于扫码入库
scanCodeInStorage = function(){
scanCodeInStorage = function () {
layer.open({
type: 2,
title: '扫码',
@ -613,8 +711,8 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move : '.layui-layer-title',
fixed:false,
move: '.layui-layer-title',
fixed: false,
content: '/scanQrCodeIn',
end: function () {
$.ajax({
@ -624,8 +722,8 @@
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
var depository = data["depository"];
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
@ -637,8 +735,14 @@
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
Coverpage(i, materialList[i-1]);
Coverpage(i, materialList[i - 1]);
var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"];
$.each(materialbyBarCodeList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
form.render();
} else {
var material = {};
material.mname = '';
@ -652,6 +756,51 @@
})
};
scanBarCode = function (obj) {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanBarCodeIn',
end: function () {
$.ajax({
url: "/material/application_in_scanBarCode",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
scanValue.depository = depository;
}
if (place !== undefined && place !== null && place !== "") {
// 如果扫描到库位
scanValue.place = place;
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
materialList[i-1].code = materialList[i-1].mcode;
Coverpage(i, materialList[i - 1]);
$.each(materialList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
form.render();
}
}
})
}
})
};
// 用于打开仓库树形菜单
openDepositoryTree = function (obj) {
var parent = obj.parentNode.parentNode.parentNode;
@ -663,14 +812,13 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/selectDepositoryByCard?type=1&clickObj='+parentId,
move: '.layui-layer-title',
fixed: false,
content: '/selectDepositoryByCard?type=1&clickObj=' + parentId,
});
}
})
</script>
</body>

19
src/main/resources/templates/pages/application/application-in_scanQrCode.html

@ -28,6 +28,9 @@
.layui-input-block {
margin-left: 80px;
}
.layui-form-select{
width: 100%;
}
</style>
@ -140,7 +143,12 @@
if (materialList.length > 0) {
for (let i = 0; i < materialList.length; i++) {
initForm(i, materialList[i]);
var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"];
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
form.render()
} else {
var material = {};
material.mname = '';
@ -234,6 +242,16 @@
class="layui-input" lay-verify="required" value="${obj.code}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
@ -300,7 +318,6 @@
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
console.log(data)
var d = data.data;
if (d === "") {
layer.msg(data.statusInfo.detail);

179
src/main/resources/templates/pages/application/application-out.html

@ -33,7 +33,7 @@
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1">
<div class="layui-card-body" id="cardItem">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
@ -56,6 +56,19 @@
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barCode" name="barCode" type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
@ -74,7 +87,7 @@
</div>
<!-- 提交按钮-->
<div class="layui-form-item">
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 30px;margin-left: 15%">
&emsp;提交申请&emsp;
@ -125,6 +138,10 @@
function selectMaterialByName(obj){}
// 用于判断当前物料数量是否合适
function MaterialQuantityIsTrue(){}
// 用于扫描条形码
function scanBarCode() {}
// 用于重新渲染页面
function Coverpage() {}
// 用于暂存卡片个数
var params = [];
// 用于卡片编号
@ -150,6 +167,28 @@
form.on('submit(formStep)', function (data) {
data = data.field;
data.params = params;
if(data.mid === undefined){
// 如果没有初始项
var dataKeys = Object.keys(data);
var dataKey;
for (let i = 0; i < dataKeys.length; i++) {
dataKey = dataKeys[i];
if(dataKey.includes("mid")){
break;
}
}
// 获取当前数字
var keyNumber = dataKey.split("mid")[1];
for (let index = 0; index < dataKeys.length; index++) {
var tempKey = dataKeys[index];
if(tempKey.includes(keyNumber)){
var key = tempKey.replace(keyNumber,"");
data[key] = data[tempKey];
delete data[tempKey];
}
}
data.params = remove(data.params,Number(keyNumber));
}
$.ajax({
url: "/depositoryRecord/applicationOut",
type: 'post',
@ -222,6 +261,19 @@
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber +` type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
@ -241,10 +293,83 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+350 +'px');
$("#stepForm").css("height",height+422 +'px');
$("#"+parentId).after(materialItem);
};
// 用于重新渲染页面
Coverpage = function (num, obj) {
var parent = $("#cardParent");
// 获取待添加父类
NewIdNumber = num;
if (num === 0) { // 如果是第一个
NewIdNumber = "";
}
var firstItem =
// 前半部分
` <div class="layui-card-body" style="padding-right: 0px" id=` + "cardItem" + NewIdNumber + `>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-block">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" lay-verify="required" value="${obj.mname}" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=` + "mid" + NewIdNumber + ` class="layui-input" id="mid" value="${obj.mid}"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" onblur="selectCode(this)"
class="layui-input" lay-verify="required" value="${obj.code}" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeInStorage(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=` + "quantity" + NewIdNumber + ` type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>`;
var lastItem = `<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
if (NewIdNumber !== "") {
params.push(NewIdNumber)
}
$("#stepForm").css("height", height + 532 + 'px');
var materialItem = firstItem + lastItem; // 最终
$("#btn_sub").before(materialItem)
};
// 实现卡片删除
deleteItem = function (obj) {
// 获取父节点
@ -254,7 +379,7 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-350 +'px');
$("#stepForm").css("height",height-422 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
@ -395,6 +520,52 @@
});
};
scanBarCode = function (obj) {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanBarCodeOut',
end: function () {
$.ajax({
url: "/material/application_out_scanBarCode",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
scanValue.depository = depository;
}
if (place !== undefined && place !== null && place !== "") {
// 如果扫描到库位
scanValue.place = place;
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
materialList[i-1].code = materialList[i-1].mcode;
Coverpage(i, materialList[i - 1]);
$.each(materialList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
form.render();
}
}
})
}
})
};
//用于判断当前物料数量是否合适
MaterialQuantityIsTrue = function (obj) {
var id = obj.id.split("quantity")[1];

2
src/main/resources/templates/pages/application/application-out_min-mobile.html

@ -116,7 +116,7 @@
area: ['100%', '100%'],
move : '.layui-layer-title',
fixed:false,
content: '/scanQrCodeByOut?id='+id,
content: '/scanBarOrQrCodeOut?id='+id,
end:function () {
parent.layer.close(index);//关闭当前页
}

373
src/main/resources/templates/pages/application/application-transfer.html

@ -23,7 +23,9 @@
.layui-input-block{
margin-left: 80px;
}
.layui-form-select{
width: 100%;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
@ -35,7 +37,7 @@
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1">
<div class="layui-card-body" id="cardItem">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
@ -54,9 +56,28 @@
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value=""
onblur="selectCode(this)"
class="layui-input" lay-verify="required"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
style="margin-top: 10px" onclick="scanCodeByTransfer(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barCode" name="barCode" type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
@ -92,7 +113,7 @@
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>
<!-- 提交-->
<div class="layui-form-item">
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 10px;margin-left: 15%">
&emsp;提交申请&emsp;
@ -144,8 +165,20 @@
function selectMaterialByName(obj){}
// 用于加载仓库菜单
function openDepositoryTree(obj){}
// 用于扫码入库
function scanCodeByTransfer(obj) {
}
// 用于扫描条形码
function scanBarCode() {
}
// 用于重新渲染该页面
function Coverpage(num, obj) {
}
// 用于暂存卡片个数
var params = [];
let scanValue = {};
// 用于卡片编号
var NewIdNumber = 1;
layui.use([ 'form', 'step','layer','jquery'], function () {
@ -158,7 +191,7 @@
filter: 'stepForm',
width: '100%', //设置容器宽度
stepWidth: '80%',
height: '600px',
height: '700px',
stepItems: [{
title: '填写信息'
}, {
@ -170,6 +203,28 @@
form.on('submit(formStep)', function (data) {
data=data.field;
data.params = params;
if(data.mid === undefined){
// 如果没有初始项
var dataKeys = Object.keys(data);
var dataKey;
for (let i = 0; i < dataKeys.length; i++) {
dataKey = dataKeys[i];
if(dataKey.includes("mid")){
break;
}
}
// 获取当前数字
var keyNumber = dataKey.split("mid")[1];
for (let index = 0; index < dataKeys.length; index++) {
var tempKey = dataKeys[index];
if(tempKey.includes(keyNumber)){
var key = tempKey.replace(keyNumber,"");
data[key] = data[tempKey];
delete data[tempKey];
}
}
data.params = remove(data.params,Number(keyNumber));
}
$.ajax({
url:"/depositoryRecord/transfer",
type:'put',
@ -196,7 +251,7 @@
complete: function () {
layer.close(this.layerIndex);
}
})
});
return false;
});
@ -239,9 +294,25 @@
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
style="margin-top: 10px" onclick="scanCodeByTransfer(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
class="layui-input" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
@ -281,10 +352,146 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+455 +'px');
$("#stepForm").css("height",height+532 +'px');
$("#"+parentId).after(materialItem);
};
// 实现卡片重新渲染
Coverpage = function (num, obj) {
console.log(obj)
var parent = $("#cardParent");
// 获取待添加父类
NewIdNumber = num;
if (num === 0) { // 如果是第一个
NewIdNumber = "";
}
var depositoryItem = `
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name=` + "depositoryId" + NewIdNumber + ` class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name=` + "placeId" + NewIdNumber + ` class="layui-input" id="placeId" value="0"
style="display: none" lay-verify="required"/>
</div>
</div>
`;
if (scanValue.depository !== undefined && scanValue.depository !== null && scanValue.depository !== "") {
let depository = scanValue.depository;
// 如果扫描了仓库
depositoryItem = `<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input" value=` + depository.dname + `
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name=` + "depositoryId" + NewIdNumber + ` class="layui-input" id="depositoryId" value=` + depository.did + `
style="display: none" lay-verify="required"/>
<input type="text" name=` + "placeId" + NewIdNumber + ` class="layui-input" id="placeId" value="0"
style="display: none" lay-verify="required"/>
</div>
</div>`;
}
if (scanValue.place !== undefined && scanValue.place !== null && scanValue.place !== "") {
// 如果扫描了库位
let place = scanValue.place;
depositoryItem = `<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)" value=` + place.dname + "-" + place.code + `
lay-verify="required"/>
<input type="text" name=` + "depositoryId" + NewIdNumber + ` class="layui-input" id="depositoryId" value=` + place.depositoryId + `
style="display: none" lay-verify="required"/>
<input type="text" name=` + "placeId" + NewIdNumber + ` class="layui-input" id="placeId" value=` + place.pid + `
style="display: none" lay-verify="required"/>
</div>
</div>`;
}
var firstItem =
// 前半部分
` <div class="layui-card-body" style="padding-right: 0px" id=` + "cardItem" + NewIdNumber + `>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-block">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" lay-verify="required" value="${obj.mname}" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=` + "mid" + NewIdNumber + ` class="layui-input" id="mid" value="${obj.id}"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" onblur="selectCode(this)"
class="layui-input" lay-verify="required" value="${obj.code}" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeByTransfer(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name=`+"placeId"+NewIdNumber +` id=`+"place"+NewIdNumber +`></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=` + "quantity" + NewIdNumber + ` type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>`;
var lastItem = `<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
if (NewIdNumber !== "") {
params.push(NewIdNumber)
}
$("#stepForm").css("height", height + 532 + 'px');
var materialItem = firstItem + depositoryItem + lastItem; // 最终
$("#btn_sub").before(materialItem)
};
// 实现卡片删除
deleteItem = function (obj) {
// 获取父节点
@ -294,11 +501,63 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-455 +'px');
$("#stepForm").css("height",height-532 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
// 用于实现扫描条形码
scanBarCode = function (obj) {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanBarCodeIn',
end: function () {
$.ajax({
url: "/material/application_transfer_scanBarCode",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
console.log(data)
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
scanValue.depository = depository;
}
if (place !== undefined && place !== null && place !== "") {
// 如果扫描到库位
scanValue.place = place;
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
materialList[i-1].code = materialList[i-1].mcode;
var placePList = materialList[i-1]["placePList"];
Coverpage(i, materialList[i - 1]);
$.each(materialList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
$.each(placePList, function (index, item) {
$("#place"+i).append(new Option(item.depositoryName +"-" +item.code, item.id));//往下拉菜单里添加元素
});
}
form.render();
}
}
})
}
})
};
//删除数组中指定元素
function remove(arr, item) {
@ -312,18 +571,79 @@
return result;
}
// 用于扫码功能
scanCodeByTransfer = function () {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanQrCodeTransfer',
end: function () {
$.ajax({
url: "/material/application_in_scanQrCode",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
scanValue.depository = depository;
}
if (place !== undefined && place !== null && place !== "") {
// 如果扫描到库位
scanValue.place = place;
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
Coverpage(i, materialList[i - 1]);
var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"];
$.each(materialbyBarCodeList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
var placePList = materialList[i - 1]["placePList"];
$.each(placePList, function (index, item) {
$("#place"+i).append(new Option(item.depositoryName + "-" + item.code, item.id));//往下拉菜单里添加元素
});
}
form.render();
} else {
var material = {};
material.mname = '';
material.mid = '';
material.code = '';
Coverpage(0, material);
}
}
})
}
})
};
// 用于实现通过编码查询物料
selectCode = function(obj){
// 输入code
var code = obj.value;
var id = obj.name.split("code")[1];
var codeId = obj.name.split("code")[1];
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var barCodeChildren = parent.childNodes[9];
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialItem = children.childNodes[3].childNodes[1];
var materialName = materialItem.childNodes[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.code = code;
req.type = "out";
@ -349,9 +669,26 @@
data:JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success:function (res) {
$('#place'+id).empty();
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if(materialAndBarCodeList.length > 0){
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#"+id).remove();
var idNumber = materialId.name.split("mid")[1];
var barCodeSelect = `
<select id=`+"barCode"+idNumber+` name=`+"barCode"+idNumber+ `>
</select>`;
$("#"+barCodeImg.id).before(barCodeSelect);
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
$('#place'+codeId).empty();
$.each(res.data, function (index, item) {
$('#place'+id).append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
$('#place'+codeId).append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
materialName.value = d.mname;

453
src/main/resources/templates/pages/application/application-transfer_back.html

@ -11,145 +11,165 @@
<link rel="stylesheet" href="/static/js/lay-module/step-lay/step.css" media="all">
</head>
<body>
<style>
.inputdiv{
display:flex;background-color: #fff;height: 38px;line-height: 38px;border: 1px solid rgb(238, 238, 238);
}
.layui-form-label{
padding: 9px 0px;
text-align: left;
}
.layui-input-block{
margin-left: 80px;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body" style="padding-top: 40px;">
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item>
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<!-- 库存转移申请-->
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item style="overflow: inherit">
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称:</label>
<div class="layui-input-block">
<!-- <input name="mname" type="text" placeholder="请填写物料名称" class="layui-input" lay-verify="required" />-->
<select name="mname" lay-verify="required" lay-filter="mname">
<option value="" selected>请选择物料</option>
<option th:each="Material,iterStar:${materials}" th:value="${Material?.getId()}" th:text="${Material?.getMname()}" >天玑1000</option>
</select>
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" onblur="selectMaterialByName(this)"
lay-verify="required"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name="mid" class="layui-input" id="mid"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value="" class="layui-input" lay-verify="number" required>
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">原仓库:</label>
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name="fromId" id="formId" lay-verify="required">
<option value="" selected>请选择仓库</option>
<option th:each="depository,iterStar:${depositories}" th:value="${depository?.getId()}" th:text="${depository?.getDname()}">外芯仓库</option>
</select>
<select name="fromPlaceId" id="place"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">转入仓库:</label>
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<select name="toId" lay-verify="required">
<option value="" selected>请选择仓库</option>
<option th:each="depository,iterStar:${depositories}" th:value="${depository?.getId()}" th:text="${depository?.getDname()}">外芯仓库</option>
</select>
<input name="quantity" type="number" placeholder="请填写入物料数量" value="" class="layui-input" lay-verify="number" required>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">审核人:</label>
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<select name="reviewerId" lay-verify="required">
<option th:each="reviewer,iterStat:${reviewers}" th:value="${reviewer?.getId()}" th:text="${reviewer?.getUname()}" selected>张三</option>
</select>
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep">
&emsp;提交申请&emsp;
</button>
</div>
</div>
</form>
</div>
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
提交申请成功
</div>
<div style="font-size: 14px;color: #666;margin-top: 20px;">预计审核时间为1天</div>
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再申请一次</button>
</div>
</form>
</div>
<div>
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
入款成功
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>
<!-- 提交-->
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 10px;margin-left: 15%">
&emsp;提交申请&emsp;
</button>
</div>
<div style="font-size: 14px;color: #666;margin-top: 20px;">预计两小时到账</div>
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再入一笔</button>
<button class="layui-btn layui-btn-primary">查看账单</button>
</div>
</form>
</div>
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
提交申请成功
</div>
<div style="font-size: 14px;color: #666;margin-top: 20px;">预计审核时间为1天</div>
</div>
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再申请一次</button>
</div>
</form>
</div>
</div>
<hr>
<div style="color: #666;margin-top: 30px;margin-bottom: 40px;padding-left: 30px;">
<h3>说明</h3><br>
申请提交后,24小时内审核完毕
</div>
</div>
</div>
<hr>
<div style="color: #666;margin-top: 30px;margin-bottom: 40px;padding-left: 30px;">
<h3>说明</h3><br>
申请提交后,24小时内审核完毕
</div>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
// 用于添加标签
function addItem(obj){}
// 用于删除标签
function deleteItem(obj){}
// 用于编码查询
function selectCode(obj){}
// 用于点击搜索按钮
function selectMaterial(obj){}
// 用于物料名称查询
function selectMaterialByName(obj){}
// 用于加载仓库菜单
function openDepositoryTree(obj){}
// 用于暂存卡片个数
var params = [];
// 用于卡片编号
var NewIdNumber = 1;
layui.use([ 'form', 'step','layer','jquery'], function () {
var $ = layui.$,
form = layui.form,
step = layui.step;
step.render({
elem: '#stepForm',
filter: 'stepForm',
width: '100%', //设置容器宽度
stepWidth: '750px',
height: '100%',
stepWidth: '80%',
height: '600px',
stepItems: [{
title: '填写申请信息'
}, {
title: '审核中'
title: '填写信息'
}, {
title: '等待出库'
},{
title: '等待入库'
title: '提交成功'
}]
});
form.on('submit(formStep)', function (data) {
data=data.field;
data.state=0;
data.params = params;
$.ajax({
url:"/depositoryRecord/transfer",
type:'put',
@ -185,22 +205,6 @@
return false;
});
form.on('select(mname)',function (data){
$.ajax({
url:"/repository/find_depository?mid="+data.value,
type:'get',
dataType:'json',
contentType: "application/json;charset=utf-8",
success:function(d){
$('#formId').val(d.data.id)
layui.use(['form'],function() {
var form=layui.form;
form.render();
});
}
})
})
$('.pre').click(function () {
step.pre('#stepForm');
@ -208,8 +212,267 @@
$('.next').click(function () {
step.next('#stepForm');
});
// 实现卡片添加
addItem = function (obj) {
// 获取父元素id
var parentId = obj.parentNode.id;
NewIdNumber = NewIdNumber + 1;
// 物料名称栏目
var materialItem = `
<div class="layui-card-body" style="padding-right: 0px" id=`+"cardItem"+NewIdNumber+`>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-block">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" lay-verify="required" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=`+"mid"+NewIdNumber+` class="layui-input" id="mid"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<input id="code" name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name=`+"placeId"+NewIdNumber +` id=`+"place"+NewIdNumber +`></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=`+"quantity"+NewIdNumber+` type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name=`+"depositoryId"+NewIdNumber+` class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name=`+"placeId"+NewIdNumber+` class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+455 +'px');
$("#"+parentId).after(materialItem);
};
// 实现卡片删除
deleteItem = function (obj) {
// 获取父节点
var parent = obj.parentNode;
var parentId = parent.id;
parentId = parseInt(parentId.split("cardItem")[1]);
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-455 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
//删除数组中指定元素
function remove(arr, item) {
var result = [];
for (let i = 0; i < arr.length; i++) {
if(arr[i] === item){
continue;
}
result.push(arr[i]);
}
return result;
}
// 用于实现通过编码查询物料
selectCode = function(obj){
// 输入code
var code = obj.value;
var id = obj.name.split("code")[1];
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var req = {};
req.code = code;
req.type = "out";
$.ajax({
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:req,
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
if(d == null){
layer.msg("没有该编码,请确认是否输入正确");
materialName.value = "";
materialId.value = "";
obj.value = "";
}else{
req.mid = d.id;
$.ajax({
url: "/place/findPlaceByMid",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success:function (res) {
$('#place'+id).empty();
$.each(res.data, function (index, item) {
$('#place'+id).append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
materialName.value = d.mname;
materialId.value = d.id;
}
});
}
}
});
};
// 用于实现点击搜索按钮
selectMaterial = function (obj) {
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var parentId = parent.id;
var codeChildren = parent.childNodes[7];
var materialChildren = parent.childNodes[5];
var codeItem = codeChildren.childNodes[3].childNodes;
var codeValue = codeItem[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value;
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
move : '.layui-layer-title',
fixed:false,
end: function () {
var mid = materialId.value;
$.ajax({
url: "/material/findMatrialById?mid=" + mid,
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var material = d.data.materialById;
var placeList = d.data.placeList;
var code = material.code;
if(code === undefined){
code = "";
}
codeValue.value = code;
$('#place').empty();
$.each(placeList, function (index, item) {
$('#place').append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
}
});
}
});
};
//用于实现物料名称搜索
selectMaterialByName = function (obj) {
// 输入code
var data = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var materialChildren = parent.childNodes[5];
var codeChildren = parent.childNodes[7];
var codeItem = codeChildren.childNodes[3].childNodes;
var codeValue = codeItem[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var req = {};
req.mname = data;
$.ajax({
url: "/material/findMaterialByCondition",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
if(d.count > 1){
layer.msg("请点击右侧搜索确定物品");
materialId.value = "";
codeValue.value = "";
return false;
}else if(d.count === 0){
layer.msg("没有该物品,请确认输入是否正确");
materialId.value = "";
codeValue.value = "";
materialName.value = "";
return false;
}
else{
var material = d.data[0];
materialName.value = material.mname;
materialId.value = material.id;
codeValue.value = material.code;
}
}
});
};
// 用于打开仓库树形菜单
openDepositoryTree = function (obj) {
var parent = obj.parentNode.parentNode.parentNode;
var parentId = parent.id;
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/selectDepositoryByCard?type=1&clickObj='+parentId,
});
}
})
</script>

8
src/main/resources/templates/pages/chart/chart-out_back.html

@ -44,7 +44,7 @@
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
<span th:text="${allInCount}"></span>
<span th:text="${allOutCount}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
@ -62,7 +62,7 @@
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
<span th:text="${allInPrice}"></span>
<span th:text="${allOutPrice}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
@ -80,7 +80,7 @@
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
<span th:text="${InCount}"></span>
<span th:text="${OutCount}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
@ -98,7 +98,7 @@
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
<span th:text="${InPrice}"></span>
<span th:text="${OutPrice}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->

298
src/main/resources/templates/pages/material/material-view.html

@ -1,135 +1,213 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<link rel="stylesheet" href="/static/js/lay-module/step-lay/step.css" media="all">
<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/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<link rel="stylesheet" href="/static/js/lay-module/step-lay/step.css" media="all">
<style>
.inputdiv {
display: flex;
background-color: #fff;
height: 38px;
line-height: 38px;
border: 1px solid rgb(238, 238, 238);
}
.layui-form-label {
padding: 9px 0px;
text-align: left;
}
.layui-input-block {
margin-left: 80px;
}
</style>
</head>
<body>
<form class="layui-form" action="" >
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">物料编号</label>
<div class="layui-input-block">
<input type="text" th:value="${record.getId()}" name="id" required lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly">
<form class="layui-form" action="">
<input type="text" id="barCodeList" style="display:none;">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">物料编号</label>
<div class="layui-input-block">
<input type="text" th:value="${record.getId()}" name="id" required lay-verify="required" autocomplete="off"
class="layui-input" readonly="readonly">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getMname()}" name="mname" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getMname()}" name="mname" required lay-verify="required"
autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">存货编码</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getCode()}" name="code" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">存货编码</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getCode()}" name="code" required lay-verify="required"
autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">规格型号</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getVersion()}" name="version" required autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">规格型号</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getVersion()}" name="version" required autocomplete="off"
class="layui-input">
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料类型</label>
<div class="layui-input-inline">
<input type="text" placeholder="请选择物料类型" class="layui-input" id="openSonByMateralType" readonly th:value="${record.getMaterialType().getTname()}"
lay-verify="required"/>
<input type="text" id="materialTypeId" th:value="${record.getTypeId()}" placeholder="请选择物料类型" name="materialTypeId" class="layui-input" style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">材质</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getTexture()}" name="texture" required autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">物料类型</label>
<div class="layui-input-inline">
<input type="text" placeholder="请选择物料类型" class="layui-input" id="openSonByMateralType" readonly
th:value="${record.getMaterialType().getTname()}"
lay-verify="required"/>
<input type="text" id="materialTypeId" th:value="${record.getTypeId()}" placeholder="请选择物料类型"
name="materialTypeId" class="layui-input" style="display: none" lay-verify="required"/>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getUnit()}" name="unit" required autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">材质</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getTexture()}" name="texture" required autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getUnit()}" name="unit" required autocomplete="off"
class="layui-input">
</div>
</div>
</div>
<!-- 二维码生成-->
<div class="layui-form-item">
<label class="layui-form-label">二维码</label>
<div class="layui-input-inline">
<img src="" id="qrCode" th:src="${qrCode}">
<!-- 二维码生成-->
<div class="layui-form-item">
<label class="layui-form-label">二维码</label>
<div class="layui-input-inline">
<img src="" id="qrCode" th:src="${qrCode}">
</div>
</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="checkbox" name="state" lay-skin="switch" lay-text="启用|禁用" th:checked="${record.getState() == 1}">
<div class="layui-form-item">
<label class="layui-form-label">条形码</label>
<div class="layui-input-inline">
<div class="inputdiv">
<select name="barCode" id="barCode">
<OPTION VALUE="0">请选择要删除的条形码</OPTION>
<option th:each="barCode,iterStar:${barCodeList}" th:value="${barCode?.getId()}"
th:text="${barCode?.getBmcode()}"></option>
</select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px"
onclick="scanBarCode(this)">
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="checkbox" name="state" lay-skin="switch" lay-text="启用|禁用"
th:checked="${record.getState() == 1}">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</div>
</form>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
function changeQrCodeState(){};
layui.use('form', function(){
var form = layui.form, $ = layui.$;
$('#openSonByMateralType').on('click', function(){
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/selectType',
});
});
//提交
form.on('submit(formDemo)', function(data){
data = data.field
$.ajax({
url: "/material/material_edit",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(data),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
return;
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
},function(){
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);//关闭当前页
window.location='/material_out'
function changeQrCodeState() {
};
var barCode = [];
var flag = false;
layui.use('form', function () {
var form = layui.form, $ = layui.$;
$('#openSonByMateralType').on('click', function () {
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move: '.layui-layer-title',
fixed: false,
content: '/selectType',
});
});
//提交
form.on('submit(formDemo)', function (data) {
data = data.field;
if(flag) {
data.barCodeList = barCode;
}
$.ajax({
url: "/material/material_edit",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(data),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
return;
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);//关闭当前页
window.location = '/material_out'
})
}
}
});
return false;
});
scanBarCode = function () {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanBarCodeByNew',
end: function () {
var barCodeList = $("#barCodeList").val();
// 根据&符合分割字符串并删除空
var strings = barCodeList.split(",");
strings = strings.filter(item => item && item.trim());
barCode = strings;
// 用于将扫描结果输出
$.each(strings, function (index, item) {
$("#barCode").append(new Option(item, index));//往下拉菜单里添加元素
});
flag = true;
form.render();
}
})
}
}
})
return false;
});
};
});
});
</script>
</body>

4
src/main/resources/templates/pages/material/selectDepositoryByCard.html

@ -41,9 +41,9 @@
var windowParent = $("#" + clickObj, window.parent.document)[0];
var depositoryChildren = null;
if (windowParent.childNodes.length === 17) {
depositoryChildren = windowParent.childNodes[11];
} else {
depositoryChildren = windowParent.childNodes[13];
} else {
depositoryChildren = windowParent.childNodes[15];
}
var depositoryItem = depositoryChildren.childNodes[3].childNodes;
var depositoryName = depositoryItem[1];

2
src/main/resources/templates/pages/other/welcome.html

@ -126,7 +126,7 @@
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/application_transfer" data-title="入库查询" data-icon="fa fa-file-text">
<a href="javascript:;" layuimini-content-href="/application_transfer" data-title="转移申请" data-icon="fa fa-file-text">
<i class="fa fa-exchange"></i>
<cite>转移申请</cite>
</a>

2
src/main/resources/templates/pages/scanQrCode/ScanBarCode.html

@ -33,7 +33,6 @@
html5QrCode.stop().then((ignore) => {
// 暂停扫描
console.log(decodedText);
// 发送ajax请求去获取当前条码的数据
layui.$.ajax({
url: "/material/findMaterialByBarCode?barCode="+decodedText,
@ -46,7 +45,6 @@
layui.$("#barcode", window.parent.document).val(decodedText);
if(data === null || data === undefined){
// 如果没有查询到物料
}else{
layui.$("#mname", window.parent.document).val(data.mname);
layui.$("#code", window.parent.document).val(data.code);

83
src/main/resources/templates/pages/scanQrCode/ScanBarCodeByNew.html

@ -0,0 +1,83 @@
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">
<link rel="stylesheet" href="/static/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<!--[if lt IE 9]>
<script src="/static/js/html5.min.js"></script>
<script src="/static/js/respond.min.js"></script>
<![endif]-->
<!-- vue相关-->
<script src="../static/js/vue/vue.js"></script>
<script src="../static/js/vue/vue-router.js"></script>
<script src="../static/lib/http-vue-loader/src/httpVueLoader.js"></script>
<script src="../static/js/VueQrcodeReader.umd.min.js"></script>
<script src="/static/js/scanBarCode/html5-qrcode.min.js"></script>
</head>
<body>
<div style="width: 500px" id="reader">
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
// 用于判断是否包含字母
var barCodeList = [];
const html5QrCode = new Html5Qrcode("reader");
const qrCodeSuccessCallback = (decodedText, decodedResult) => {
/* 扫描成功 */
var formatName = decodedResult.result.format.formatName;
html5QrCode.stop().then((ignore) => {
// 暂停扫描
if (!(formatName.includes("QR_CODE")|| formatName.includes("AZTEC"))) {
// 发送ajax请求去获取当前条码的数据
layui.$.ajax({
url: "/material/findMaterialByBarCode?barCode=" + decodedText,
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
// 将扫描结果赋值给父页面
if (data === null || data === undefined) {
// 如果没有查询到物料
barCodeList.push(decodedText);
}
layer.confirm("是否继续扫描?",
{
btn: ["继续", "取消"]
},
function () {// 继续
// 弹出选择框
layer.close(layer.index);
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback);
},
function () {
// 关闭当前页
layui.$("#barCodeList", window.parent.document).val(barCodeList);
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
);
}
})
}
}).catch((err) => {
console.log(err)
// 停止失败,处理它。
});
};
const config = {fps: 10, qrbox: {width: 250, height: 250}};
// Select back camera or fail with `OverconstrainedError`.
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback);
</script>
</body>
</html>

126
src/main/resources/templates/pages/scanQrCode/ScanBarCodeIn.html

@ -0,0 +1,126 @@
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">
<link rel="stylesheet" href="/static/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<!--[if lt IE 9]>
<script src="/static/js/html5.min.js"></script>
<script src="/static/js/respond.min.js"></script>
<![endif]-->
<!-- vue相关-->
<script src="../static/js/vue/vue.js"></script>
<script src="../static/js/vue/vue-router.js"></script>
<script src="../static/lib/http-vue-loader/src/httpVueLoader.js"></script>
<script src="../static/js/VueQrcodeReader.umd.min.js"></script>
<script src="/static/js/scanBarCode/html5-qrcode.min.js"></script>
</head>
<body>
<div style="width: 500px" id="reader">
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
// 用于判断是否包含字母
var regString = /[a-zA-Z]+/;
let barCodeList = [];
var depository;
var place;
// 是否扫描二维码标志位
var flag = false;
const html5QrCode = new Html5Qrcode("reader");
const qrCodeSuccessCallback = (decodedText, decodedResult) => {
/* 扫描成功 */
// console.log(regString.test(decodedText));
var formatName = decodedResult.result.format.formatName;
if (formatName.includes("QR_CODE")||formatName.includes("AZTEC")) {
console.log("二维码",decodedText);
// 如果扫描的位本地二维码
flag = true;
// 先解密
let jmResult = {};
jmResult.result = decodedText;
layui.$.ajax({
url: "/material/decode3Des",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(jmResult),
success:function (d) {
let parse = JSON.parse(d.data);
if (parse.did !== undefined) {
// 如果扫描的是仓库二维码
depository = parse;
}
if (parse.pid !== undefined) {
// 如果扫描的是库位二维码
place = parse;
}
}
})
}else{
// console.log("条形码",decodedText);
// 如果是条形码
barCodeList.push(decodedText);
}
html5QrCode.stop().then((ignore) => {
// 暂停扫描
layer.confirm("是否继续扫描?",
{
btn: ["继续", "取消"]
},
function () {// 继续
// 弹出选择框
layer.close(layer.index);
html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback);
},
function () { // 取消当前操作
layer.close(layer.index); // 关闭弹窗
// 将数据暂存到redis
var param = {};
param.barCodeList = barCodeList;
param.flag = flag;
layui.$.ajax({
url:"/material/temporaryBarCodeValueForMaterial",
type:"post",
datatype:"json",
data:JSON.stringify(param),
contentType: "application/json;charset=utf-8",
});
if(flag){
var params = {};
params.depository = depository;
params.place = place;
params.materialList = [];
layui.$.ajax({
url: "/material/temporaryValue",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(params)
});
}
// 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
)
}).catch((err) => {
console.log(err)
// 停止失败,处理它。
});
};
const config = { fps: 10, qrbox: { width: 250, height: 250 } };
// Select back camera or fail with `OverconstrainedError`.
html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback);
</script>
</body>
</html>

124
src/main/resources/templates/pages/scanQrCode/ScanBarCodeOut.html

@ -0,0 +1,124 @@
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">
<link rel="stylesheet" href="/static/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<!--[if lt IE 9]>
<script src="/static/js/html5.min.js"></script>
<script src="/static/js/respond.min.js"></script>
<![endif]-->
<!-- vue相关-->
<script src="../static/js/vue/vue.js"></script>
<script src="../static/js/vue/vue-router.js"></script>
<script src="../static/lib/http-vue-loader/src/httpVueLoader.js"></script>
<script src="../static/js/VueQrcodeReader.umd.min.js"></script>
<script src="/static/js/scanBarCode/html5-qrcode.min.js"></script>
</head>
<body>
<div style="width: 500px" id="reader">
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
// 用于判断是否包含字母
let barCodeList = [];
var depository;
var place;
// 是否扫描二维码标志位
var flag = false;
const html5QrCode = new Html5Qrcode("reader");
const qrCodeSuccessCallback = (decodedText, decodedResult) => {
var formatName = decodedResult.result.format.formatName;
/* 扫描成功 */
// console.log(decodedText,decodedResult);
if (formatName.includes("QR_CODE")||formatName.includes("AZTEC")) {
// console.log("二维码",decodedText);
// 如果扫描的位本地二维码
flag = true;
// 先解密
let jmResult = {};
jmResult.result = decodedText;
layui.$.ajax({
url: "/material/decode3Des",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(jmResult),
success:function (d) {
let parse = JSON.parse(d.data);
if (parse.did !== undefined) {
// 如果扫描的是仓库二维码
depository = parse;
}
if (parse.pid !== undefined) {
// 如果扫描的是库位二维码
place = parse;
}
}
})
}else{
console.log("条形码",decodedText);
// 如果是条形码
barCodeList.push(decodedText);
}
html5QrCode.stop().then((ignore) => {
// 暂停扫描
layer.confirm("是否继续扫描?",
{
btn: ["继续", "取消"]
},
function () {// 继续
// 弹出选择框
layer.close(layer.index);
html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback);
},
function () { // 取消当前操作
layer.close(layer.index); // 关闭弹窗
// 将数据暂存到redis
var param = {};
param.barCodeList = barCodeList;
param.flag = flag;
layui.$.ajax({
url:"/material/temporaryBarCodeValueForMaterial",
type:"post",
datatype:"json",
data:JSON.stringify(param),
contentType: "application/json;charset=utf-8",
});
if(flag){
var params = {};
params.depository = depository;
params.place = place;
params.materialList = [];
layui.$.ajax({
url: "/material/temporaryValue",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(params)
});
}
// 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
)
}).catch((err) => {
console.log(err)
// 停止失败,处理它。
});
};
const config = { fps: 10, qrbox: { width: 250, height: 250 } };
// Select back camera or fail with `OverconstrainedError`.
html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback);
</script>
</body>
</html>

341
src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html

@ -0,0 +1,341 @@
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">
<link rel="stylesheet" href="/static/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<!--[if lt IE 9]>
<script src="/static/js/html5.min.js"></script>
<script src="/static/js/respond.min.js"></script>
<![endif]-->
<!-- vue相关-->
<script src="../static/js/vue/vue.js"></script>
<script src="../static/js/vue/vue-router.js"></script>
<script src="../static/lib/http-vue-loader/src/httpVueLoader.js"></script>
<script src="../static/js/VueQrcodeReader.umd.min.js"></script>
<script src="/static/js/scanBarCode/html5-qrcode.min.js"></script>
</head>
<body>
<input id="id" style="display: none" th:value="${record.getId()}">
<input id="mcode" style="display: none" th:value="${materialById.getCode()}">
<input id="depositoryId" style="display: none" th:value="${record.getDepositoryId()}">
<input id="quantity" style="display: none" th:value="${record.getQuantity()}">
<div style="width: 500px" id="reader">
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
// 获取待处理订单的参数
let id = layui.$("#id").val();
let mcode = layui.$("#mcode").val();
let depositoryId = layui.$("#depositoryId").val();
let quantity = layui.$("#quantity").val();
// 先定义,用于弹出确定框
function isOutTrue() {
}
// 用于判断是否包含字母
var depository = null;
var place = null;
var material = null;
const html5QrCode = new Html5Qrcode("reader");
const qrCodeSuccessCallback = (decodedText, decodedResult) => {
/* 扫描成功 */
// 获取当前扫码的类型
var formatName = decodedResult.result.format.formatName;
html5QrCode.stop().then((ignore) => {
// 暂停扫描
// 判断当前扫描的二维码是条码还是二维码
if (formatName.includes("QR_CODE")||formatName.includes("AZTEC")) {
// 如果是二维码
let params = {}; // 用于暂存扫描结果
let jmResult = {};
jmResult.result = decodedText;
// 解密当前二维码
layui.$.ajax({
url: "/material/decode3Des",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(jmResult),
success: function (d) {
let parse = JSON.parse(d.data);
console.log(parse);
if (parse.did !== undefined) {
//如果扫描的为仓库
depository = parse;// 将扫描结果保存到vue中
if (material == null) {
// 如果还没有扫描物料
layer.confirm("请扫描物料", {
btn: ["扫描", "取消"]
}, function () { // 继续
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
layer.close(layer.index); // 关闭弹窗
}, function () { // 取消
// 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
} else {
// 如果已经扫描物料
if (depositoryId !== parse.did && Number(depositoryId) !== parse.did && depositoryId !== parse.did.toString()) {
// 如果当前仓库不是订单对应仓库
depository = null;
place = null;
layer.msg("出库仓库不正确,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else {
// 如果正确
var req = {};
req.id = id;
isOutTrue(req);
}
}
} else if (parse.pid !== undefined) {
// 如果扫描的为库位
place = parse;// 将扫描结果保存到vue中
if ( material == null) {
// 如果还没有扫描物料
layer.confirm("请扫描物料", {
btn: ["扫描", "取消"]
}, function () { // 继续
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
layer.close(layer.index); // 关闭弹窗
}, function () { // 取消
// 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
} else {
if (depositoryId !== parse.depositoryId && Number(depositoryId) !== parse.depositoryId && depositoryId !== parse.depositoryId.toString()) {
// 如果当前仓库不是订单对应仓库
depository = null;
place = null;
layer.msg("出库库位所在仓库不正确,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else if (parse.mcodeList.indexOf(mcode) === -1) {
// 如果当前库位不存在该物料
depository = null;
place = null;
layer.msg("出库库位不含该物料,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else {
var req = {};
req.placeId = place.pid;
req.id = id;
isOutTrue(req);
}
}
} else if (parse.mid !== undefined) {
// 如果扫描的为物料
material = parse;// 将扫描结果保存到vue中
if (mcode !== material.code && Number(mcode) !== material.code && mcode !== material.code.toString()) {
material = null;
layer.msg("出库物料不正确,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else {
if (depository !== null) { // 如果已经扫描仓库
if (depositoryId !== depository.did && Number(depositoryId) !== depository.did && depositoryId !== depository.did.toString()) {
// 如果扫描的仓库不是订单要求的仓库
layer.confirm("当前仓库不符合要求,请移步至正确仓库", {
btn: ["确定"]
}, function () {
// 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
} else {
// 如果是出库位置为默认库位
var req = {};
req.id = id;
// 弹出确定框
isOutTrue(req);
}
} else if ( place != null) {
// 如果已经扫描库位
if (depositoryId !== place.depositoryId && Number(depositoryId) !== place.depositoryId && depositoryId !== place.depositoryId.toString()) {
// 如果当前仓库不是订单对应仓库
depository = null;
place = null;
layer.msg("出库库位所在仓库不正确,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else if ( place.mcodeList.indexOf(mcode) === -1) {
// 如果当前库位不存在该物料
depository = null;
place = null;
layer.msg("出库库位不含该物料,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else {
var req = {};
req.id = id;
req.placeId = place.pid;
// 弹出确定框
isOutTrue(req);
}
} else {
layer.confirm("请扫描仓库或库位", {
btn: ["扫描", "取消"]
}, function () { // 继续
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
layer.close(layer.index); // 关闭弹窗
}, function () { // 取消
// 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
}
}
}
}
});
}
else {
// 如果是条码
// 发送ajax请求去获取当前条码的数据
layui.$.ajax({
url: "/material/findMaterialByBarCode?barCode=" + decodedText,
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
// 将扫描结果赋值给父页面
if (data === null || data === undefined) {
// 如果没有查询到物料
layer.msg("未查询到对应物料,请重新扫描");
// 继续扫描
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else {
material =data;
// 查询到物料
if (mcode !== data.code && Number(mcode) !== data.code && mcode !== data.code.toString()) {
material = null;
layer.msg("出库物料不正确,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else {
if (depository !== null) { // 如果已经扫描仓库
if (depositoryId !== depository.did && Number(depositoryId) !== depository.did && depositoryId !== depository.did.toString()) {
// 如果扫描的仓库不是订单要求的仓库
layer.confirm("当前仓库不符合要求,请移步至正确仓库", {
btn: ["确定"]
}, function () {
//关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
} else {
// 如果是出库位置为默认库位
var req = {};
req.id = id;
// 弹出确定框
isOutTrue(req);
}
} else if (place != null) {
// 如果已经扫描库位
if (depositoryId !== place.depositoryId && Number(depositoryId) !== place.depositoryId && depositoryId !== place.depositoryId.toString()) {
// 如果当前仓库不是订单对应仓库
depository = null;
place = null;
layer.msg("出库库位所在仓库不正确,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else if (place.mcodeList.indexOf(mcode) === -1) {
// 如果当前库位不存在该物料
depository = null;
place = null;
layer.msg("出库库位不含该物料,请重新扫描");
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
} else {
var req = {};
req.id = id;
req.placeId = place.pid;
// 弹出确定框
isOutTrue(req);
}
} else {
layer.confirm("请扫描仓库或库位", {
btn: ["扫描", "取消"]
}, function () { // 继续
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
layer.close(layer.index); // 关闭弹窗
}, function () { // 取消
// 将vue中暂存的库位置为空
material = null;
//关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
}
}
}
}
})
}
}).catch((err) => {
console.log(err)
// 停止失败,处理它。
});
};
// 弹出出库确定弹出框
isOutTrue = function (req) {
var confirmIndex = layer.confirm("确定出库?", {
btn: ["确定", "取消"]
}, function () { // 如果确定出库
layui.$.ajax({
url: "/depositoryRecord/isCheckOut",
type: "post",
dataType: 'json',
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (res) {
if (res.status === 200) {
// 如果出库成功
layer.msg("出库成功",
{
icon: 6,
time: 500
}
, function () {
layer.close(layer.index);
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
});
} else {
// 如果出库失败
layer.msg(res.statusInfo.detail + ",请重试");
depository = null;
material = null;
place = null;
// 继续扫描
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描
return
}
}
})
}, function () {
// 如果取消
depository = null;
material = null;
place = null;
})
}
const config = {fps: 10, qrbox: {width: 250, height: 250}};
// Select back camera or fail with `OverconstrainedError`.
html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback);
</script>
</body>
</html>

295
src/main/resources/templates/pages/scanQrCode/scanQrCodeTransfer.html

@ -0,0 +1,295 @@
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">
<link rel="stylesheet" href="/static/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<!--[if lt IE 9]>
<script src="/static/js/html5.min.js"></script>
<script src="/static/js/respond.min.js"></script>
<![endif]-->
<!-- vue相关-->
<script src="../static/js/vue/vue.js"></script>
<script src="../static/js/vue/vue-router.js"></script>
<script src="../static/lib/http-vue-loader/src/httpVueLoader.js"></script>
<script src="../static/js/VueQrcodeReader.umd.min.js"></script>
<style>
.validation-success,
.validation-failure,
.validation-pending {
position: absolute;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, .8);
text-align: center;
font-weight: bold;
font-size: 1.4rem;
padding: 10px;
display: flex;
flex-flow: column nowrap;
justify-content: center;
}
.validation-success {
color: green;
}
.validation-failure {
color: red;
}
</style>
</head>
<body>
<div id="app">
<qrcode-stream :camera="camera" @decode="onDecode" @init="onInit" :track="paintBoundingBox">
<div v-if="validationPending" class="validation-pending">
Long validation in progress...
</div>
</qrcode-stream>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
Vue.use(httpVueLoader);
var vue = new Vue({
data() {
return {
isValid: undefined,
camera: 'auto',
result: '',
error: '',
materialList: [],
depository: null,
place: null
}
},
computed: {
validationPending() {
return this.isValid === undefined
&& this.camera === 'off'
},
},
methods: {
onDecode(result) {
let params = {}; // 用于暂存扫描结果
this.result = result;
let jmResult = {};
jmResult.result = result;
// 先进行解密操作
layui.$.ajax({
url: "/material/decode3Des",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(jmResult),
success: function (d) {
let parse = JSON.parse(d.data);
vue.turnCameraOff(); // 暂停扫描
if (parse.did !== undefined) {
//如果扫描的为仓库
vue.depository = parse;// 将扫描结果保存到vue中
if (vue.materialList.length === 0) {
// 如果还没有扫描物料
layer.confirm("请扫描物料", {
btn: ["扫描", "取消"]
}, function () { // 继续
vue.turnCameraOn(); // 继续扫描
layer.close(layer.index); // 关闭弹窗
}, function () { // 取消
// 将vue中暂存的数据置为空
params.materialList = null;
params.place = null;
params.depository = vue.depository;
// 将数据暂存到redis
vue.temporaryScanValue(params);
// 如果已经扫描物料,关闭当前页面
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
} else {
params.place = null;
params.depository = vue.depository;
params.materialList = vue.materialList;
// 将数据暂存到redis
vue.temporaryScanValue(params);
// 如果已经扫描物料,关闭当前页面
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
} else if (parse.pid !== undefined) {
// 如果扫描的为库位
vue.place = parse;// 将扫描结果保存到vue中
if (vue.materialList.length === 0) {
// 如果还没有扫描物料
layer.confirm("请扫描物料", {
btn: ["扫描", "取消"]
}, function () { // 继续
vue.turnCameraOn(); // 继续扫描
layer.close(layer.index); // 关闭弹窗
}, function () { // 取消
params.materialList = null;
params.depository = null;
params.place = vue.place;
// 将数据暂存到redis
vue.temporaryScanValue(params);
// 如果已经扫描物料,关闭当前页面
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
} else {
params.depository = null;
params.materialList = vue.materialList;
params.place = vue.place;
// 将数据暂存到redis
vue.temporaryScanValue(params);
// 如果已经扫描物料,关闭当前页面
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
} else if (parse.mid !== undefined) {
// 如果扫描的为物料
// 判断该物料是否有库存
var req = {};
req.code = parse.code;
req.type = "out";
layui.$.ajax({
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
if(d == null){
layer.confirm("仓库中暂无该物料,是否继续扫描", {
btn: ["继续", "取消"]
}, function () { // 继续
vue.turnCameraOn(); // 继续扫描
layer.close(layer.index); // 关闭弹窗
}, function () { // 取消
// 将vue中暂存的库位置为空
params.depository = null;
params.materialList = vue.materialList;
params.place = null;
// 将数据暂存到redis
vue.temporaryScanValue(params);
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
}else{
vue.materialList.push(parse);// 将扫描结果保存到vue中
if (vue.depository !== null) { // 如果已经扫描仓库
params.depository = vue.depository;
params.materialList = vue.materialList;
params.place = null;
// 将数据暂存到redis
vue.temporaryScanValue(params);
// 关闭当前页面
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
} else if (vue.place != null) {
params.depository = null;
params.materialList = vue.materialList;
params.place = vue.place;
// 将数据暂存到redis
vue.temporaryScanValue(params);
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
} else {
layer.confirm("暂未扫描要转入仓库或库位,是否扫描", {
btn: ["扫描", "取消"]
}, function () { // 继续
vue.turnCameraOn(); // 继续扫描
layer.close(layer.index); // 关闭弹窗
}, function () { // 取消
// 将vue中暂存的库位置为空
params.depository = null;
params.materialList = vue.materialList;
params.place = null;
// 将数据暂存到redis
vue.temporaryScanValue(params);
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
}
}
}
});
}
}
});
},
async onInit(promise) {
try {
await promise.then(this.resetValidationState)
} catch (error) {
if (error.name === 'NotAllowedError') {
this.error = "ERROR: you need to grant camera access permission"
} else if (error.name === 'NotFoundError') {
this.error = "ERROR: no camera on this device"
} else if (error.name === 'NotSupportedError') {
this.error = "ERROR: secure context required (HTTPS, localhost)"
} else if (error.name === 'NotReadableError') {
this.error = "ERROR: is the camera already in use?"
} else if (error.name === 'OverconstrainedError') {
this.error = "ERROR: installed cameras are not suitable"
} else if (error.name === 'StreamApiNotSupportedError') {
this.error = "ERROR: Stream API is not supported in this browser"
} else if (error.name === 'InsecureContextError') {
this.error = 'ERROR: Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.';
} else {
this.error = `ERROR: Camera error (${error.name})`
}
console.log(this.error)
}
}
,
resetValidationState() {
this.isValid = undefined
}
,
// 绘制二维码跟踪框
paintBoundingBox(detectedCodes, ctx) {
for (const detectedCode of detectedCodes) {
const {boundingBox: {x, y, width, height}} = detectedCode;
ctx.lineWidth = 2;
ctx.strokeStyle = '#007bff';
ctx.strokeRect(x, y, width, height)
}
}
,
// 打开相机
turnCameraOn() {
this.camera = 'auto'
}
,
// 关闭相机
turnCameraOff() {
this.camera = 'off'
},
// 将扫描到的数据暂存到redis
temporaryScanValue(params) {
layui.$.ajax({
url: "/material/temporaryValue",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(params)
});
},
}
}).$mount('#app')
</script>
</body>
</html>

32
src/test/java/com/dreamchaser/depository_manage/Test.java

@ -76,8 +76,36 @@ public class Test {
@org.junit.Test
public void test1() throws AesException, IOException, ParserConfigurationException, SAXException {
Map<String,Object> map = new HashMap<>();
map.put("id",2);
Integer integer = materialService.insertMaterial(map);
/* map.put("mid",0);
map.put("mcode","code");*/
map.put("mid1",1);
map.put("mcode1","code1");
map.put("mid2",2);
map.put("mcode2","code2");
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
Set<String> strings = map.keySet();
String key = "";
for (String tempKey :
strings) {
if(tempKey.contains("mid")){
key = tempKey;
break;
}
}
Map.Entry<String, Object> entry;
String keyNumber = key.split("mid")[1];
while (iterator.hasNext()){
entry = iterator.next();
// 放入新的Entry
if(entry.toString().contains(keyNumber)){
map.put(entry.toString().replace(keyNumber,""),entry.getValue());
// iterator.remove();
}
// 删除老的Entry
}
System.out.println(map);
}

8
target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml

@ -717,6 +717,14 @@
and aorm.parentId = #{parentId}
</select>
<select id="findApplicationOutMinForComplete" resultMap="applicationOutRecordMin">
select
<include refid="ApplicationOutRecordMinInfo" />
from application_out_record_min aorm left join application_out_record aor on aorm.parentId = aor.id
where 1 = 1
and aor.pass = 1
</select>
<!-- 插入数据 -->
<insert id="insertDepositoryRecord" parameterType="map" useGeneratedKeys="true" keyProperty="id">
INSERT INTO depository_record (

37
target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -108,8 +108,11 @@
<if test="price != null">
AND m.price = #{price}
</if>
<if test="typeId != null">
AND m.type_id = #{typeId}
<if test="materialTypeId != null">
AND m.type_id = #{materialTypeId}
</if>
<if test="code != null and code != '' ">
and m.code = #{code}
</if>
and state != 3 and m.depository_id is null
</select>
@ -273,6 +276,7 @@
<if test="tname != null and tname != ''">
AND tname LIKE CONCAT('%', #{tname}, '%')
</if>
group by bmcode
</select>
<!-- 根据仓库查询物料-->
@ -375,6 +379,18 @@
)
</insert>
<insert id="addBarCodeAndMaterialForMoreOne" parameterType="map">
insert into barcodeandmaterial(id,mcode,barCode)
values
<foreach collection="list" index="index" item="item" separator=",">
(#{id},
#{code},
#{item})
</foreach>
</insert>
<!-- 批量插入数据-->
<insert id="insertMaterials" parameterType="list">
INSERT INTO material (
@ -398,6 +414,23 @@
</foreach>
</insert>
<!-- 删除映射-->
<delete id="deleteBarCodeAndMaterial" parameterType="map">
delete
from barcodeandmaterial
where 1 = 1
<if test="barCode != null and barCode != ''">
and barCode = #{barCode}
</if>
<if test="mcode != null and mcode != ''">
and mcode = #{mcode}
</if>
<if test="id != null and id != ''">
and id = #{id}
</if>
</delete>
<!-- 修改数据 -->
<update id="updateMaterial">

452
target/classes/templates/pages/application/application-in.html

@ -12,17 +12,25 @@
</head>
<body>
<style>
.inputdiv{
display:flex;background-color: #fff;height: 38px;line-height: 38px;border: 1px solid rgb(238, 238, 238);
.inputdiv {
display: flex;
background-color: #fff;
height: 38px;
line-height: 38px;
border: 1px solid rgb(238, 238, 238);
}
.layui-form-label{
.layui-form-label {
padding: 9px 0px;
text-align: left;
}
.layui-input-block{
.layui-input-block {
margin-left: 80px;
}
.layui-form-select{
width: 100%;
}
</style>
@ -30,105 +38,126 @@
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-fluid">
<!-- 入库申请提交-->
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; " >
<div carousel-item style="overflow: inherit">
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1" style="padding-right: 0px">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label" >物料名称:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" onblur="selectMaterialByName(this)"
lay-verify="required"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name="mid" class="layui-input" id="mid"
style="display: none" lay-verify="required"/>
<!-- 入库申请提交-->
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; ">
<div carousel-item style="overflow: inherit">
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem" style="padding-right: 0px">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline"
onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称:</label>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeInStorage(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
<input name="price" type="number" placeholder="请填写入物料单价" value=""
class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input"
style="border-style: none"
id="openSonByMaterial" onblur="selectMaterialByName(this)"
lay-verify="required"/>
<i class="layui-icon layui-icon-search" style="display: inline"
id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
<input type="text" name="mid" class="layui-input" id="mid"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value=""
onblur="selectCode(this)"
class="layui-input" lay-verify="required"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
style="margin-top: 10px" onclick="scanCodeInStorage(this)">
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>
<!-- 提交按钮-->
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block" style="bottom: 15px;">
<button id="submitForm" class="layui-btn" lay-submit lay-filter="formStep" style="margin-left: 15%">
&emsp;提交&emsp;
</button>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barCode" name="barCode" type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
</form>
</div>
<!-- 下一步-->
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
提交成功
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
<input name="price" type="number" placeholder="请填写入物料单价" value=""
class="layui-input" lay-verify="number">
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再填写一次</button>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>
</form>
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline"
onclick="addItem(this)"></i>
</div>
<!-- 提交按钮-->
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block" style="bottom: 15px;">
<button id="submitForm" class="layui-btn" lay-submit lay-filter="formStep"
style="margin-left: 15%">
&emsp;提交&emsp;
</button>
</div>
</div>
</div>
</form>
</div>
<!-- 下一步-->
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
提交成功
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再填写一次</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
@ -137,29 +166,47 @@
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
// 用于添加标签
function addItem(obj){}
function addItem(obj) {
}
// 用于删除标签
function deleteItem(obj){}
function deleteItem(obj) {
}
// 用于编码查询
function selectCode(obj){}
function selectCode(obj) {
}
// 用于点击搜索按钮
function selectMaterial(obj){}
function selectMaterial(obj) {
}
// 用于物料名称查询
function selectMaterialByName(obj){}
function selectMaterialByName(obj) {
}
// 用于加载仓库菜单
function openDepositoryTree(obj){}
function openDepositoryTree(obj) {
}
// 用于扫码入库
function scanCodeInStorage(obj) {}
function scanCodeInStorage(obj) {
}
// 用于扫描条形码
function scanBarCode(obj) {
}
// 用于重新渲染该页面
function Coverpage(num, obj) {}
function Coverpage(num, obj) {
}
// 用于暂存卡片个数
var params = [];
let scanValue = {};
// 用于卡片编号
var NewIdNumber = 1;
layui.use(['form','miniTab', 'step','flow'], function () {
layui.use(['form', 'miniTab', 'step', 'flow'], function () {
var $ = layui.$,
form = layui.form,
miniTab = layui.miniTab,
@ -170,7 +217,7 @@
elem: '#stepForm',
filter: 'stepForm',
width: '100%', //设置容器宽度
height: '600px',
height: '700px',
stepItems: [{
title: '填写信息'
}, {
@ -184,6 +231,7 @@
data = data.field;
data.type = 1;
data.params = params;
console.log(data)
$.ajax({
url: "/depositoryRecord/applicationIn",
type: 'post',
@ -197,23 +245,27 @@
layer.close(this.layerIndex);
if (data.status >= 300) {
var d = data.data;
if(d === ""){
if (d === "") {
layer.msg(data.statusInfo.detail);
}else{
} else {
var err = d["err"];
var success = d["success"];
var errMsg = "";
for (let i = 0; i < err.length; i++) {
errMsg += "物料编码: "
errMsg += "物料编码: ";
errMsg += err[i]["code"];
}
errMsg += "添加失败,请选择新仓库或库位";
layer.msg(errMsg,{
icon:5,
time:1000
},function () {
if(err.length>0) {
errMsg += "添加失败,请选择新仓库或库位";
layer.msg(errMsg, {
icon: 5,
time: 1000
}, function () {
step.next('#stepForm');
});
}else{
step.next('#stepForm');
});
}
}
} else {
@ -253,7 +305,7 @@
NewIdNumber = NewIdNumber + 1;
// 物料名称栏目
var materialItem = `
<div class="layui-card-body" style="padding-right: 0px" id=`+"cardItem"+NewIdNumber+`>
<div class="layui-card-body" style="padding-right: 0px" id=` + "cardItem" + NewIdNumber + `>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
@ -264,7 +316,7 @@
id="openSonByMaterial" lay-verify="required" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=`+"mid"+NewIdNumber+` class="layui-input" id="mid"
<input type="text" name=` + "mid" + NewIdNumber + ` class="layui-input" id="mid"
style="display: none" lay-verify="required" />
</div>
</div>
@ -272,23 +324,35 @@
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
<input id="code" name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" >
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeInStorage(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barcode" name=` + "barCode" + NewIdNumber + ` type="text" placeholder="请填写入条形编码" value=""
class="layui-input" style="border-style: none">
<img src="/static/images/search.ico" height="16"
id = `+"barCodeImg"+NewIdNumber+`
width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
<input name=`+"price"+NewIdNumber+` type="number" placeholder="请填写入物料单价" value=""
<input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value=""
class="layui-input" lay-verify="number" >
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=`+"quantity"+NewIdNumber+` type="number" placeholder="请填写入物料数量" value=""
<input name=` + "quantity" + NewIdNumber + ` type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>
@ -298,9 +362,9 @@
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name=`+"depositoryId"+NewIdNumber+` class="layui-input" id="depositoryId"
<input type="text" name=` + "depositoryId" + NewIdNumber + ` class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name=`+"placeId"+NewIdNumber+` class="layui-input" id="placeId"
<input type="text" name=` + "placeId" + NewIdNumber + ` class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
@ -308,7 +372,7 @@
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
@ -316,9 +380,9 @@
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+477 +'px');
$("#"+parentId).after(materialItem);
params.push(NewIdNumber);
$("#stepForm").css("height", height + 532 + 'px');
$("#" + parentId).after(materialItem);
};
// 实现卡片删除
@ -330,8 +394,8 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-477 +'px');
params = remove(params,parentId);
$("#stepForm").css("height", height - 532 + 'px');
params = remove(params, parentId);
reparent.removeChild(parent);
};
@ -340,7 +404,7 @@
function remove(arr, item) {
var result = [];
for (let i = 0; i < arr.length; i++) {
if(arr[i] === item){
if (arr[i] === item) {
continue;
}
result.push(arr[i]);
@ -350,13 +414,14 @@
// 用于实现通过编码查询物料
selectCode = function(obj){
selectCode = function (obj) {
// 输入code
var code = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var materialChildren = parent.childNodes[5];
var priceChildren = parent.childNodes[9];
var priceChildren = parent.childNodes[11];
var barCodeChildren = parent.childNodes[9];
// 物料条目
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
@ -364,6 +429,8 @@
// 单价条目
var priceItem = priceChildren.childNodes[3].childNodes;
var priceValue = priceItem[1];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.code = code;
req.type = "in";
@ -371,20 +438,41 @@
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:req,
data: req,
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
if(d == null){
if (d == null) {
layer.msg("没有该编码,请确认是否输入正确");
materialName.value = "";
materialId.value = "";
priceValue.value = "";
obj.value = "";
}else{
} else {
materialName.value = d.mname;
materialId.value = d.id;
priceValue.value = d.price;
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if(materialAndBarCodeList.length > 0){
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#"+id).remove();
// barCodeInput.style = "display:none";
var idNumber = materialId.name.split("mid")[1];
var barCodeSelect = `
<select id=`+"barCode"+idNumber+` name=`+"barCode"+idNumber+ `>
</select>`;
$("#"+barCodeImg.id).before(barCodeSelect);
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render();
}
}
}
});
@ -413,9 +501,9 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname='+mname+'&type=1&clickObj='+parentId,
move : '.layui-layer-title',
fixed:false,
content: '/selectMaterialByCard?mname=' + mname + '&type=1&clickObj=' + parentId,
move: '.layui-layer-title',
fixed: false,
end: function () {
var mid = materialId.value;
$.ajax({
@ -426,7 +514,7 @@
success: function (d) {
var material = d.data.materialById;
var code = material.code;
if(code === undefined){
if (code === undefined) {
code = "";
}
codeValue.value = code;
@ -457,26 +545,26 @@
url: "/material/findMaterialByCondition",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
if(d.count > 1){
if (d.count > 1) {
layer.msg("请点击右侧搜索确定物品");
materialId.value = "";
codeValue.value = "";
return false;
}else if(d.count === 0){
} else if (d.count === 0) {
layer.msg("没有该物品,请确认输入是否正确");
materialId.value = "";
codeValue.value = "";
materialName.value = "";
return false;
}
else{
} else {
var material = d.data[0];
materialName.value = material.mname;
materialId.value = material.id;
codeValue.value = material.code;
}
}
});
@ -565,7 +653,17 @@
<div class="inputdiv">
<input id="code" name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" onblur="selectCode(this)"
class="layui-input" lay-verify="required" value="${obj.code}" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" >
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeInStorage(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
@ -573,7 +671,7 @@
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
<input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value=""
<input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value="${obj.price}"
class="layui-input" lay-verify="number">
</div>
</div>
@ -600,12 +698,12 @@
if (NewIdNumber !== "") {
params.push(NewIdNumber)
}
$("#stepForm").css("height", height + 475 + 'px');
$("#stepForm").css("height", height + 532 + 'px');
var materialItem = firstItem + depositoryItem + lastItem; // 最终
$("#btn_sub").prepend(materialItem)
};
// 用于扫码入库
scanCodeInStorage = function(){
scanCodeInStorage = function () {
layer.open({
type: 2,
title: '扫码',
@ -613,8 +711,8 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move : '.layui-layer-title',
fixed:false,
move: '.layui-layer-title',
fixed: false,
content: '/scanQrCodeIn',
end: function () {
$.ajax({
@ -624,8 +722,8 @@
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
var depository = data["depository"];
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
@ -637,8 +735,14 @@
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
Coverpage(i, materialList[i-1]);
Coverpage(i, materialList[i - 1]);
var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"];
$.each(materialbyBarCodeList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
form.render();
} else {
var material = {};
material.mname = '';
@ -652,6 +756,51 @@
})
};
scanBarCode = function (obj) {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanBarCodeIn',
end: function () {
$.ajax({
url: "/material/application_in_scanBarCode",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
scanValue.depository = depository;
}
if (place !== undefined && place !== null && place !== "") {
// 如果扫描到库位
scanValue.place = place;
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
materialList[i-1].code = materialList[i-1].mcode;
Coverpage(i, materialList[i - 1]);
$.each(materialList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
form.render();
}
}
})
}
})
};
// 用于打开仓库树形菜单
openDepositoryTree = function (obj) {
var parent = obj.parentNode.parentNode.parentNode;
@ -663,14 +812,13 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/selectDepositoryByCard?type=1&clickObj='+parentId,
move: '.layui-layer-title',
fixed: false,
content: '/selectDepositoryByCard?type=1&clickObj=' + parentId,
});
}
})
</script>
</body>

19
target/classes/templates/pages/application/application-in_scanQrCode.html

@ -28,6 +28,9 @@
.layui-input-block {
margin-left: 80px;
}
.layui-form-select{
width: 100%;
}
</style>
@ -140,7 +143,12 @@
if (materialList.length > 0) {
for (let i = 0; i < materialList.length; i++) {
initForm(i, materialList[i]);
var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"];
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
form.render()
} else {
var material = {};
material.mname = '';
@ -234,6 +242,16 @@
class="layui-input" lay-verify="required" value="${obj.code}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
@ -300,7 +318,6 @@
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
console.log(data)
var d = data.data;
if (d === "") {
layer.msg(data.statusInfo.detail);

179
target/classes/templates/pages/application/application-out.html

@ -33,7 +33,7 @@
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1">
<div class="layui-card-body" id="cardItem">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
@ -56,6 +56,19 @@
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barCode" name="barCode" type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
@ -74,7 +87,7 @@
</div>
<!-- 提交按钮-->
<div class="layui-form-item">
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 30px;margin-left: 15%">
&emsp;提交申请&emsp;
@ -125,6 +138,10 @@
function selectMaterialByName(obj){}
// 用于判断当前物料数量是否合适
function MaterialQuantityIsTrue(){}
// 用于扫描条形码
function scanBarCode() {}
// 用于重新渲染页面
function Coverpage() {}
// 用于暂存卡片个数
var params = [];
// 用于卡片编号
@ -150,6 +167,28 @@
form.on('submit(formStep)', function (data) {
data = data.field;
data.params = params;
if(data.mid === undefined){
// 如果没有初始项
var dataKeys = Object.keys(data);
var dataKey;
for (let i = 0; i < dataKeys.length; i++) {
dataKey = dataKeys[i];
if(dataKey.includes("mid")){
break;
}
}
// 获取当前数字
var keyNumber = dataKey.split("mid")[1];
for (let index = 0; index < dataKeys.length; index++) {
var tempKey = dataKeys[index];
if(tempKey.includes(keyNumber)){
var key = tempKey.replace(keyNumber,"");
data[key] = data[tempKey];
delete data[tempKey];
}
}
data.params = remove(data.params,Number(keyNumber));
}
$.ajax({
url: "/depositoryRecord/applicationOut",
type: 'post',
@ -222,6 +261,19 @@
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber +` type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
@ -241,10 +293,83 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+350 +'px');
$("#stepForm").css("height",height+422 +'px');
$("#"+parentId).after(materialItem);
};
// 用于重新渲染页面
Coverpage = function (num, obj) {
var parent = $("#cardParent");
// 获取待添加父类
NewIdNumber = num;
if (num === 0) { // 如果是第一个
NewIdNumber = "";
}
var firstItem =
// 前半部分
` <div class="layui-card-body" style="padding-right: 0px" id=` + "cardItem" + NewIdNumber + `>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-block">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" lay-verify="required" value="${obj.mname}" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=` + "mid" + NewIdNumber + ` class="layui-input" id="mid" value="${obj.mid}"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" onblur="selectCode(this)"
class="layui-input" lay-verify="required" value="${obj.code}" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeInStorage(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=` + "quantity" + NewIdNumber + ` type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>`;
var lastItem = `<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
if (NewIdNumber !== "") {
params.push(NewIdNumber)
}
$("#stepForm").css("height", height + 532 + 'px');
var materialItem = firstItem + lastItem; // 最终
$("#btn_sub").before(materialItem)
};
// 实现卡片删除
deleteItem = function (obj) {
// 获取父节点
@ -254,7 +379,7 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-350 +'px');
$("#stepForm").css("height",height-422 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
@ -395,6 +520,52 @@
});
};
scanBarCode = function (obj) {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanBarCodeOut',
end: function () {
$.ajax({
url: "/material/application_out_scanBarCode",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
scanValue.depository = depository;
}
if (place !== undefined && place !== null && place !== "") {
// 如果扫描到库位
scanValue.place = place;
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
materialList[i-1].code = materialList[i-1].mcode;
Coverpage(i, materialList[i - 1]);
$.each(materialList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
form.render();
}
}
})
}
})
};
//用于判断当前物料数量是否合适
MaterialQuantityIsTrue = function (obj) {
var id = obj.id.split("quantity")[1];

2
target/classes/templates/pages/application/application-out_min-mobile.html

@ -116,7 +116,7 @@
area: ['100%', '100%'],
move : '.layui-layer-title',
fixed:false,
content: '/scanQrCodeByOut?id='+id,
content: '/scanBarOrQrCodeOut?id='+id,
end:function () {
parent.layer.close(index);//关闭当前页
}

373
target/classes/templates/pages/application/application-transfer.html

@ -23,7 +23,9 @@
.layui-input-block{
margin-left: 80px;
}
.layui-form-select{
width: 100%;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
@ -35,7 +37,7 @@
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1">
<div class="layui-card-body" id="cardItem">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
@ -54,9 +56,28 @@
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value=""
onblur="selectCode(this)"
class="layui-input" lay-verify="required"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
style="margin-top: 10px" onclick="scanCodeByTransfer(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barCode" name="barCode" type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
@ -92,7 +113,7 @@
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>
<!-- 提交-->
<div class="layui-form-item">
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 10px;margin-left: 15%">
&emsp;提交申请&emsp;
@ -144,8 +165,20 @@
function selectMaterialByName(obj){}
// 用于加载仓库菜单
function openDepositoryTree(obj){}
// 用于扫码入库
function scanCodeByTransfer(obj) {
}
// 用于扫描条形码
function scanBarCode() {
}
// 用于重新渲染该页面
function Coverpage(num, obj) {
}
// 用于暂存卡片个数
var params = [];
let scanValue = {};
// 用于卡片编号
var NewIdNumber = 1;
layui.use([ 'form', 'step','layer','jquery'], function () {
@ -158,7 +191,7 @@
filter: 'stepForm',
width: '100%', //设置容器宽度
stepWidth: '80%',
height: '600px',
height: '700px',
stepItems: [{
title: '填写信息'
}, {
@ -170,6 +203,28 @@
form.on('submit(formStep)', function (data) {
data=data.field;
data.params = params;
if(data.mid === undefined){
// 如果没有初始项
var dataKeys = Object.keys(data);
var dataKey;
for (let i = 0; i < dataKeys.length; i++) {
dataKey = dataKeys[i];
if(dataKey.includes("mid")){
break;
}
}
// 获取当前数字
var keyNumber = dataKey.split("mid")[1];
for (let index = 0; index < dataKeys.length; index++) {
var tempKey = dataKeys[index];
if(tempKey.includes(keyNumber)){
var key = tempKey.replace(keyNumber,"");
data[key] = data[tempKey];
delete data[tempKey];
}
}
data.params = remove(data.params,Number(keyNumber));
}
$.ajax({
url:"/depositoryRecord/transfer",
type:'put',
@ -196,7 +251,7 @@
complete: function () {
layer.close(this.layerIndex);
}
})
});
return false;
});
@ -239,9 +294,25 @@
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
style="margin-top: 10px" onclick="scanCodeByTransfer(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
class="layui-input" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
@ -281,10 +352,146 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+455 +'px');
$("#stepForm").css("height",height+532 +'px');
$("#"+parentId).after(materialItem);
};
// 实现卡片重新渲染
Coverpage = function (num, obj) {
console.log(obj)
var parent = $("#cardParent");
// 获取待添加父类
NewIdNumber = num;
if (num === 0) { // 如果是第一个
NewIdNumber = "";
}
var depositoryItem = `
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name=` + "depositoryId" + NewIdNumber + ` class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name=` + "placeId" + NewIdNumber + ` class="layui-input" id="placeId" value="0"
style="display: none" lay-verify="required"/>
</div>
</div>
`;
if (scanValue.depository !== undefined && scanValue.depository !== null && scanValue.depository !== "") {
let depository = scanValue.depository;
// 如果扫描了仓库
depositoryItem = `<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input" value=` + depository.dname + `
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name=` + "depositoryId" + NewIdNumber + ` class="layui-input" id="depositoryId" value=` + depository.did + `
style="display: none" lay-verify="required"/>
<input type="text" name=` + "placeId" + NewIdNumber + ` class="layui-input" id="placeId" value="0"
style="display: none" lay-verify="required"/>
</div>
</div>`;
}
if (scanValue.place !== undefined && scanValue.place !== null && scanValue.place !== "") {
// 如果扫描了库位
let place = scanValue.place;
depositoryItem = `<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)" value=` + place.dname + "-" + place.code + `
lay-verify="required"/>
<input type="text" name=` + "depositoryId" + NewIdNumber + ` class="layui-input" id="depositoryId" value=` + place.depositoryId + `
style="display: none" lay-verify="required"/>
<input type="text" name=` + "placeId" + NewIdNumber + ` class="layui-input" id="placeId" value=` + place.pid + `
style="display: none" lay-verify="required"/>
</div>
</div>`;
}
var firstItem =
// 前半部分
` <div class="layui-card-body" style="padding-right: 0px" id=` + "cardItem" + NewIdNumber + `>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-block">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" lay-verify="required" value="${obj.mname}" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=` + "mid" + NewIdNumber + ` class="layui-input" id="mid" value="${obj.id}"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" onblur="selectCode(this)"
class="layui-input" lay-verify="required" value="${obj.code}" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanCodeByTransfer(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name=`+"placeId"+NewIdNumber +` id=`+"place"+NewIdNumber +`></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=` + "quantity" + NewIdNumber + ` type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>`;
var lastItem = `<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
if (NewIdNumber !== "") {
params.push(NewIdNumber)
}
$("#stepForm").css("height", height + 532 + 'px');
var materialItem = firstItem + depositoryItem + lastItem; // 最终
$("#btn_sub").before(materialItem)
};
// 实现卡片删除
deleteItem = function (obj) {
// 获取父节点
@ -294,11 +501,63 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-455 +'px');
$("#stepForm").css("height",height-532 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
// 用于实现扫描条形码
scanBarCode = function (obj) {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanBarCodeIn',
end: function () {
$.ajax({
url: "/material/application_transfer_scanBarCode",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
console.log(data)
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
scanValue.depository = depository;
}
if (place !== undefined && place !== null && place !== "") {
// 如果扫描到库位
scanValue.place = place;
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
materialList[i-1].code = materialList[i-1].mcode;
var placePList = materialList[i-1]["placePList"];
Coverpage(i, materialList[i - 1]);
$.each(materialList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
$.each(placePList, function (index, item) {
$("#place"+i).append(new Option(item.depositoryName +"-" +item.code, item.id));//往下拉菜单里添加元素
});
}
form.render();
}
}
})
}
})
};
//删除数组中指定元素
function remove(arr, item) {
@ -312,18 +571,79 @@
return result;
}
// 用于扫码功能
scanCodeByTransfer = function () {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanQrCodeTransfer',
end: function () {
$.ajax({
url: "/material/application_in_scanQrCode",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
var materialList = data["materialList"];
var depository = data["depository"];
var place = data["place"];
if (depository !== undefined && depository !== null && depository !== "") {
// 如果扫描到仓库
scanValue.depository = depository;
}
if (place !== undefined && place !== null && place !== "") {
// 如果扫描到库位
scanValue.place = place;
}
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
Coverpage(i, materialList[i - 1]);
var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"];
$.each(materialbyBarCodeList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
var placePList = materialList[i - 1]["placePList"];
$.each(placePList, function (index, item) {
$("#place"+i).append(new Option(item.depositoryName + "-" + item.code, item.id));//往下拉菜单里添加元素
});
}
form.render();
} else {
var material = {};
material.mname = '';
material.mid = '';
material.code = '';
Coverpage(0, material);
}
}
})
}
})
};
// 用于实现通过编码查询物料
selectCode = function(obj){
// 输入code
var code = obj.value;
var id = obj.name.split("code")[1];
var codeId = obj.name.split("code")[1];
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var barCodeChildren = parent.childNodes[9];
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialItem = children.childNodes[3].childNodes[1];
var materialName = materialItem.childNodes[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.code = code;
req.type = "out";
@ -349,9 +669,26 @@
data:JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success:function (res) {
$('#place'+id).empty();
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if(materialAndBarCodeList.length > 0){
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#"+id).remove();
var idNumber = materialId.name.split("mid")[1];
var barCodeSelect = `
<select id=`+"barCode"+idNumber+` name=`+"barCode"+idNumber+ `>
</select>`;
$("#"+barCodeImg.id).before(barCodeSelect);
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
}
$('#place'+codeId).empty();
$.each(res.data, function (index, item) {
$('#place'+id).append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
$('#place'+codeId).append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
materialName.value = d.mname;

453
target/classes/templates/pages/application/application-transfer_back.html

@ -11,145 +11,165 @@
<link rel="stylesheet" href="/static/js/lay-module/step-lay/step.css" media="all">
</head>
<body>
<style>
.inputdiv{
display:flex;background-color: #fff;height: 38px;line-height: 38px;border: 1px solid rgb(238, 238, 238);
}
.layui-form-label{
padding: 9px 0px;
text-align: left;
}
.layui-input-block{
margin-left: 80px;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body" style="padding-top: 40px;">
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item>
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<!-- 库存转移申请-->
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item style="overflow: inherit">
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称:</label>
<div class="layui-input-block">
<!-- <input name="mname" type="text" placeholder="请填写物料名称" class="layui-input" lay-verify="required" />-->
<select name="mname" lay-verify="required" lay-filter="mname">
<option value="" selected>请选择物料</option>
<option th:each="Material,iterStar:${materials}" th:value="${Material?.getId()}" th:text="${Material?.getMname()}" >天玑1000</option>
</select>
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" onblur="selectMaterialByName(this)"
lay-verify="required"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name="mid" class="layui-input" id="mid"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value="" class="layui-input" lay-verify="number" required>
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">原仓库:</label>
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name="fromId" id="formId" lay-verify="required">
<option value="" selected>请选择仓库</option>
<option th:each="depository,iterStar:${depositories}" th:value="${depository?.getId()}" th:text="${depository?.getDname()}">外芯仓库</option>
</select>
<select name="fromPlaceId" id="place"></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">转入仓库:</label>
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<select name="toId" lay-verify="required">
<option value="" selected>请选择仓库</option>
<option th:each="depository,iterStar:${depositories}" th:value="${depository?.getId()}" th:text="${depository?.getDname()}">外芯仓库</option>
</select>
<input name="quantity" type="number" placeholder="请填写入物料数量" value="" class="layui-input" lay-verify="number" required>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">审核人:</label>
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<select name="reviewerId" lay-verify="required">
<option th:each="reviewer,iterStat:${reviewers}" th:value="${reviewer?.getId()}" th:text="${reviewer?.getUname()}" selected>张三</option>
</select>
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep">
&emsp;提交申请&emsp;
</button>
</div>
</div>
</form>
</div>
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
提交申请成功
</div>
<div style="font-size: 14px;color: #666;margin-top: 20px;">预计审核时间为1天</div>
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再申请一次</button>
</div>
</form>
</div>
<div>
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
入款成功
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>
<!-- 提交-->
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 10px;margin-left: 15%">
&emsp;提交申请&emsp;
</button>
</div>
<div style="font-size: 14px;color: #666;margin-top: 20px;">预计两小时到账</div>
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再入一笔</button>
<button class="layui-btn layui-btn-primary">查看账单</button>
</div>
</form>
</div>
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
提交申请成功
</div>
<div style="font-size: 14px;color: #666;margin-top: 20px;">预计审核时间为1天</div>
</div>
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再申请一次</button>
</div>
</form>
</div>
</div>
<hr>
<div style="color: #666;margin-top: 30px;margin-bottom: 40px;padding-left: 30px;">
<h3>说明</h3><br>
申请提交后,24小时内审核完毕
</div>
</div>
</div>
<hr>
<div style="color: #666;margin-top: 30px;margin-bottom: 40px;padding-left: 30px;">
<h3>说明</h3><br>
申请提交后,24小时内审核完毕
</div>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
// 用于添加标签
function addItem(obj){}
// 用于删除标签
function deleteItem(obj){}
// 用于编码查询
function selectCode(obj){}
// 用于点击搜索按钮
function selectMaterial(obj){}
// 用于物料名称查询
function selectMaterialByName(obj){}
// 用于加载仓库菜单
function openDepositoryTree(obj){}
// 用于暂存卡片个数
var params = [];
// 用于卡片编号
var NewIdNumber = 1;
layui.use([ 'form', 'step','layer','jquery'], function () {
var $ = layui.$,
form = layui.form,
step = layui.step;
step.render({
elem: '#stepForm',
filter: 'stepForm',
width: '100%', //设置容器宽度
stepWidth: '750px',
height: '100%',
stepWidth: '80%',
height: '600px',
stepItems: [{
title: '填写申请信息'
}, {
title: '审核中'
title: '填写信息'
}, {
title: '等待出库'
},{
title: '等待入库'
title: '提交成功'
}]
});
form.on('submit(formStep)', function (data) {
data=data.field;
data.state=0;
data.params = params;
$.ajax({
url:"/depositoryRecord/transfer",
type:'put',
@ -185,22 +205,6 @@
return false;
});
form.on('select(mname)',function (data){
$.ajax({
url:"/repository/find_depository?mid="+data.value,
type:'get',
dataType:'json',
contentType: "application/json;charset=utf-8",
success:function(d){
$('#formId').val(d.data.id)
layui.use(['form'],function() {
var form=layui.form;
form.render();
});
}
})
})
$('.pre').click(function () {
step.pre('#stepForm');
@ -208,8 +212,267 @@
$('.next').click(function () {
step.next('#stepForm');
});
// 实现卡片添加
addItem = function (obj) {
// 获取父元素id
var parentId = obj.parentNode.id;
NewIdNumber = NewIdNumber + 1;
// 物料名称栏目
var materialItem = `
<div class="layui-card-body" style="padding-right: 0px" id=`+"cardItem"+NewIdNumber+`>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-block">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
id="openSonByMaterial" lay-verify="required" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=`+"mid"+NewIdNumber+` class="layui-input" id="mid"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<input id="code" name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">所处库位:</label>
<div class="layui-input-block">
<select name=`+"placeId"+NewIdNumber +` id=`+"place"+NewIdNumber +`></select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=`+"quantity"+NewIdNumber+` type="number" placeholder="请填写入物料数量" value=""
class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">仓库:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择仓库" class="layui-input"
id="openSonByDepository" readonly onclick="openDepositoryTree(this)"
lay-verify="required"/>
<input type="text" name=`+"depositoryId"+NewIdNumber+` class="layui-input" id="depositoryId"
style="display: none" lay-verify="required"/>
<input type="text" name=`+"placeId"+NewIdNumber+` class="layui-input" id="placeId"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+455 +'px');
$("#"+parentId).after(materialItem);
};
// 实现卡片删除
deleteItem = function (obj) {
// 获取父节点
var parent = obj.parentNode;
var parentId = parent.id;
parentId = parseInt(parentId.split("cardItem")[1]);
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-455 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
//删除数组中指定元素
function remove(arr, item) {
var result = [];
for (let i = 0; i < arr.length; i++) {
if(arr[i] === item){
continue;
}
result.push(arr[i]);
}
return result;
}
// 用于实现通过编码查询物料
selectCode = function(obj){
// 输入code
var code = obj.value;
var id = obj.name.split("code")[1];
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var req = {};
req.code = code;
req.type = "out";
$.ajax({
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:req,
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
if(d == null){
layer.msg("没有该编码,请确认是否输入正确");
materialName.value = "";
materialId.value = "";
obj.value = "";
}else{
req.mid = d.id;
$.ajax({
url: "/place/findPlaceByMid",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success:function (res) {
$('#place'+id).empty();
$.each(res.data, function (index, item) {
$('#place'+id).append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
materialName.value = d.mname;
materialId.value = d.id;
}
});
}
}
});
};
// 用于实现点击搜索按钮
selectMaterial = function (obj) {
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var parentId = parent.id;
var codeChildren = parent.childNodes[7];
var materialChildren = parent.childNodes[5];
var codeItem = codeChildren.childNodes[3].childNodes;
var codeValue = codeItem[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value;
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
move : '.layui-layer-title',
fixed:false,
end: function () {
var mid = materialId.value;
$.ajax({
url: "/material/findMatrialById?mid=" + mid,
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var material = d.data.materialById;
var placeList = d.data.placeList;
var code = material.code;
if(code === undefined){
code = "";
}
codeValue.value = code;
$('#place').empty();
$.each(placeList, function (index, item) {
$('#place').append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
form.render();
}
});
}
});
};
//用于实现物料名称搜索
selectMaterialByName = function (obj) {
// 输入code
var data = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var materialChildren = parent.childNodes[5];
var codeChildren = parent.childNodes[7];
var codeItem = codeChildren.childNodes[3].childNodes;
var codeValue = codeItem[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var req = {};
req.mname = data;
$.ajax({
url: "/material/findMaterialByCondition",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
if(d.count > 1){
layer.msg("请点击右侧搜索确定物品");
materialId.value = "";
codeValue.value = "";
return false;
}else if(d.count === 0){
layer.msg("没有该物品,请确认输入是否正确");
materialId.value = "";
codeValue.value = "";
materialName.value = "";
return false;
}
else{
var material = d.data[0];
materialName.value = material.mname;
materialId.value = material.id;
codeValue.value = material.code;
}
}
});
};
// 用于打开仓库树形菜单
openDepositoryTree = function (obj) {
var parent = obj.parentNode.parentNode.parentNode;
var parentId = parent.id;
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/selectDepositoryByCard?type=1&clickObj='+parentId,
});
}
})
</script>

8
target/classes/templates/pages/chart/chart-out_back.html

@ -44,7 +44,7 @@
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
<span th:text="${allInCount}"></span>
<span th:text="${allOutCount}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
@ -62,7 +62,7 @@
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
<span th:text="${allInPrice}"></span>
<span th:text="${allOutPrice}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
@ -80,7 +80,7 @@
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
<span th:text="${InCount}"></span>
<span th:text="${OutCount}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->
@ -98,7 +98,7 @@
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
<span th:text="${InPrice}"></span>
<span th:text="${OutPrice}"></span>
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
<!-- 比昨天 <a style="color: #1aa094">▲0.12</a><br>-->

298
target/classes/templates/pages/material/material-view.html

@ -1,135 +1,213 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<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/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<link rel="stylesheet" href="/static/js/lay-module/step-lay/step.css" media="all">
<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/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<link rel="stylesheet" href="/static/js/lay-module/step-lay/step.css" media="all">
<style>
.inputdiv {
display: flex;
background-color: #fff;
height: 38px;
line-height: 38px;
border: 1px solid rgb(238, 238, 238);
}
.layui-form-label {
padding: 9px 0px;
text-align: left;
}
.layui-input-block {
margin-left: 80px;
}
</style>
</head>
<body>
<form class="layui-form" action="" >
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">物料编号</label>
<div class="layui-input-block">
<input type="text" th:value="${record.getId()}" name="id" required lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly">
<form class="layui-form" action="">
<input type="text" id="barCodeList" style="display:none;">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">物料编号</label>
<div class="layui-input-block">
<input type="text" th:value="${record.getId()}" name="id" required lay-verify="required" autocomplete="off"
class="layui-input" readonly="readonly">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getMname()}" name="mname" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">物料名称</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getMname()}" name="mname" required lay-verify="required"
autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">存货编码</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getCode()}" name="code" required lay-verify="required" autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">存货编码</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getCode()}" name="code" required lay-verify="required"
autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">规格型号</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getVersion()}" name="version" required autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">规格型号</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getVersion()}" name="version" required autocomplete="off"
class="layui-input">
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料类型</label>
<div class="layui-input-inline">
<input type="text" placeholder="请选择物料类型" class="layui-input" id="openSonByMateralType" readonly th:value="${record.getMaterialType().getTname()}"
lay-verify="required"/>
<input type="text" id="materialTypeId" th:value="${record.getTypeId()}" placeholder="请选择物料类型" name="materialTypeId" class="layui-input" style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">材质</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getTexture()}" name="texture" required autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">物料类型</label>
<div class="layui-input-inline">
<input type="text" placeholder="请选择物料类型" class="layui-input" id="openSonByMateralType" readonly
th:value="${record.getMaterialType().getTname()}"
lay-verify="required"/>
<input type="text" id="materialTypeId" th:value="${record.getTypeId()}" placeholder="请选择物料类型"
name="materialTypeId" class="layui-input" style="display: none" lay-verify="required"/>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getUnit()}" name="unit" required autocomplete="off" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">材质</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getTexture()}" name="texture" required autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位</label>
<div class="layui-input-inline">
<input type="text" th:value="${record.getUnit()}" name="unit" required autocomplete="off"
class="layui-input">
</div>
</div>
</div>
<!-- 二维码生成-->
<div class="layui-form-item">
<label class="layui-form-label">二维码</label>
<div class="layui-input-inline">
<img src="" id="qrCode" th:src="${qrCode}">
<!-- 二维码生成-->
<div class="layui-form-item">
<label class="layui-form-label">二维码</label>
<div class="layui-input-inline">
<img src="" id="qrCode" th:src="${qrCode}">
</div>
</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="checkbox" name="state" lay-skin="switch" lay-text="启用|禁用" th:checked="${record.getState() == 1}">
<div class="layui-form-item">
<label class="layui-form-label">条形码</label>
<div class="layui-input-inline">
<div class="inputdiv">
<select name="barCode" id="barCode">
<OPTION VALUE="0">请选择要删除的条形码</OPTION>
<option th:each="barCode,iterStar:${barCodeList}" th:value="${barCode?.getId()}"
th:text="${barCode?.getBmcode()}"></option>
</select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px"
onclick="scanBarCode(this)">
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">状态</label>
<div class="layui-input-block">
<input type="checkbox" name="state" lay-skin="switch" lay-text="启用|禁用"
th:checked="${record.getState() == 1}">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</div>
</form>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
function changeQrCodeState(){};
layui.use('form', function(){
var form = layui.form, $ = layui.$;
$('#openSonByMateralType').on('click', function(){
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/selectType',
});
});
//提交
form.on('submit(formDemo)', function(data){
data = data.field
$.ajax({
url: "/material/material_edit",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(data),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
return;
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
},function(){
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);//关闭当前页
window.location='/material_out'
function changeQrCodeState() {
};
var barCode = [];
var flag = false;
layui.use('form', function () {
var form = layui.form, $ = layui.$;
$('#openSonByMateralType').on('click', function () {
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move: '.layui-layer-title',
fixed: false,
content: '/selectType',
});
});
//提交
form.on('submit(formDemo)', function (data) {
data = data.field;
if(flag) {
data.barCodeList = barCode;
}
$.ajax({
url: "/material/material_edit",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(data),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
return;
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);//关闭当前页
window.location = '/material_out'
})
}
}
});
return false;
});
scanBarCode = function () {
layer.open({
type: 2,
title: '扫码',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/scanBarCodeByNew',
end: function () {
var barCodeList = $("#barCodeList").val();
// 根据&符合分割字符串并删除空
var strings = barCodeList.split(",");
strings = strings.filter(item => item && item.trim());
barCode = strings;
// 用于将扫描结果输出
$.each(strings, function (index, item) {
$("#barCode").append(new Option(item, index));//往下拉菜单里添加元素
});
flag = true;
form.render();
}
})
}
}
})
return false;
});
};
});
});
</script>
</body>

4
target/classes/templates/pages/material/selectDepositoryByCard.html

@ -41,9 +41,9 @@
var windowParent = $("#" + clickObj, window.parent.document)[0];
var depositoryChildren = null;
if (windowParent.childNodes.length === 17) {
depositoryChildren = windowParent.childNodes[11];
} else {
depositoryChildren = windowParent.childNodes[13];
} else {
depositoryChildren = windowParent.childNodes[15];
}
var depositoryItem = depositoryChildren.childNodes[3].childNodes;
var depositoryName = depositoryItem[1];

2
target/classes/templates/pages/other/welcome.html

@ -126,7 +126,7 @@
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/application_transfer" data-title="入库查询" data-icon="fa fa-file-text">
<a href="javascript:;" layuimini-content-href="/application_transfer" data-title="转移申请" data-icon="fa fa-file-text">
<i class="fa fa-exchange"></i>
<cite>转移申请</cite>
</a>

Loading…
Cancel
Save