Browse Source

在入库界面添加扫码功能

lwx_dev
erdanergou 3 years ago
parent
commit
9981d331a4
  1. 5
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  2. 7
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  3. 12
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  4. 60
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  5. 5
      src/main/java/com/dreamchaser/depository_manage/utils/TaskCenterUtil.java
  6. 2
      src/main/resources/static/js/lay-module/layuimini/miniTab.js
  7. 60
      src/main/resources/templates/pages/application/application-in.html
  8. 1
      src/main/resources/templates/pages/material/selectMaterialByCard.html
  9. 268
      src/main/resources/templates/pages/scanQrCode/ScanQrCodeIn.html
  10. 13
      src/test/java/com/dreamchaser/depository_manage/Test.java
  11. 12
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  12. 2
      target/classes/static/js/lay-module/layuimini/miniTab.js
  13. 60
      target/classes/templates/pages/application/application-in.html
  14. 1
      target/classes/templates/pages/material/selectMaterialByCard.html

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

@ -1593,6 +1593,11 @@ public class PageController {
public String scanQrCode(){
return "pages/scanQrCode/ScanQrCode";
}
// 跳转到扫码入库界面
@GetMapping("/scanQrCodeIn")
public String scanQrCodeIn(){
return "pages/scanQrCode/ScanQrCodeIn";
}
// 跳转到扫码出库界面
@GetMapping("/scanQrCodeByOut")
public ModelAndView scanQrCodeByOut(Integer id,HttpServletRequest request){

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

@ -143,6 +143,13 @@ public interface MaterialMapper {
*/
List<Material> findMaterialByDepositorys(List<Integer> ids);
/**
* 根据仓库与类别查询物品
* @param map
* @return
*/
List<Material> findMaterialByDepositorysAndType(Map<String,Object> map);
/**

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

@ -210,6 +210,18 @@
</foreach>
</select>
<select id="findMaterialByDepositorysAndType" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumns" />
from material m
where m.depository_id in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
and m.type_id = #{materialTypeId}
</select>
<!-- 根据仓库查询物料-->

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

@ -14,6 +14,7 @@ import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import com.dreamchaser.depository_manage.utils.TaskCenterUtil;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -24,6 +25,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
/**
* @author Dreamchaser
@ -512,18 +515,31 @@ public class MaterialServiceImpl implements MaterialService {
*/
public List<Object> InitTreeMenus(String mname){
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
// 创造一个线程池
TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil();
List<Object> list = new ArrayList<>();
for (int i = 0; i < materialTypeNoParent.size(); i++) {
Map<String, Object> result = new HashMap<>();
MaterialType mt = materialTypeNoParent.get(i);
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getId(),mname,"");
Map<String, Object> stringObjectMap = new HashMap<>();
if(childForMaterialTypeByParent != null) {
stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent);
}else{
List<Object> materialByType = AddMaterialByType(mt,mname,"");
stringObjectMap = InitTreeMenus(mt, materialByType);
Future<Object> objectFuture = taskCenterUtil.submitTask(() -> {
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getId(), mname, "");
Map<String, Object> stringObjectMap = new HashMap<>();
if (childForMaterialTypeByParent != null) {
stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent);
} else {
List<Object> materialByType = AddMaterialByType(mt, mname, "");
stringObjectMap = InitTreeMenus(mt, materialByType);
}
return stringObjectMap;
});
try {
result = (Map<String, Object>) objectFuture.get();
} catch (InterruptedException ignored) {
} catch (ExecutionException e) {
e.printStackTrace();
}
list.add(stringObjectMap);
list.add(result);
}
return list;
}
@ -555,31 +571,17 @@ public class MaterialServiceImpl implements MaterialService {
dids.add(depository.getId());
}
List<Material> materialPByCondition = new ArrayList<>();
List<Material> materialByDepositorys = new ArrayList<>();
// List<Material> materialByDepositorys = new ArrayList<>();
if("".equals(adminorg)){
materialByDepositorys = materialMapper.findMaterialByCondition(new HashMap<String, Object>());
// 获取当前类别下的物料
materialPByCondition = materialMapper.findMaterialByCondition(param);
}else{
// 获取当前仓库下的所有物料库存
materialByDepositorys = materialMapper.findMaterialByDepositorys(dids);
}
for (int i = 0; i < materialByDepositorys.size(); i++) {
// 循环便利物料
if (Integer.compare(materialByDepositorys.get(i).getTypeId(), mt.getId()) == 0){
// 如果该物料是当前类别下的物料
boolean flag = false;
for (int j = 0; j < materialPByCondition.size(); j++) {
// 判断当前物料是否在最终结果中
if(materialByDepositorys.get(i).getCode().equals(materialPByCondition.get(j).getCode())){
flag = true; // 设置标志位为true
break; // 跳出本循环
}
}
if(flag){ // 如果当前物料存在
continue;
}
materialPByCondition.add(materialByDepositorys.get(i));
}
param.put("list",dids);
materialPByCondition = materialMapper.findMaterialByDepositorysAndType(param);
}
List<Object> result = new ArrayList<>();
if("".equals(mname)) { // 如果没有输入名称
for (Material material : materialPByCondition) {

5
src/main/java/com/dreamchaser/depository_manage/utils/TaskCenterUtil.java

@ -23,9 +23,10 @@ public class TaskCenterUtil {
return taskCenterUtil;
}
public void submitTask(Callable task) {
poolExecutor.submit(task);
public <T> Future<T> submitTask(Callable task) {
return poolExecutor.submit(task);
}
}

2
src/main/resources/static/js/lay-module/layuimini/miniTab.js

@ -273,8 +273,10 @@ layui.define(["element", "layer", "jquery"], function (exports) {
* 关闭选项卡
**/
$('body').on('click', '.layuimini-tab .layui-tab-title .layui-tab-close', function () {
var loading = layer.load(0, {shade: false, time: 2 * 1000});
var $parent = $(this).parent();
console.log($parent);
var tabId = $parent.attr('lay-id');
if (tabId !== undefined || tabId !== null) {
miniTab.delete(tabId);

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

@ -56,10 +56,12 @@
</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" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
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">
@ -146,14 +148,22 @@
function selectMaterialByName(obj){}
// 用于加载仓库菜单
function openDepositoryTree(obj){}
// 用于扫码入库
function scanCodeInStorage(obj) {}
// 用于删除当前选项卡
function deleteTable() {
}
// 用于暂存卡片个数
var params = [];
// 用于卡片编号
var NewIdNumber = 1;
layui.use(['form', 'step','flow'], function () {
layui.use(['form','miniTab', 'step','flow'], function () {
var $ = layui.$,
form = layui.form,
flow = layui.flow,
miniTab = layui.miniTab,
step = layui.step;
// 用于分步表单加载
@ -262,15 +272,18 @@
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<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" lay-verify="required" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" >
</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=""
class="layui-input" lay-verify="number">
class="layui-input" lay-verify="number" >
</div>
</div>
<div class="layui-form-item">
@ -305,7 +318,7 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+475 +'px');
$("#stepForm").css("height",height+477 +'px');
$("#"+parentId).after(materialItem);
};
@ -318,7 +331,7 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-475 +'px');
$("#stepForm").css("height",height-477 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
@ -342,7 +355,7 @@
// 输入code
var code = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
@ -377,8 +390,8 @@
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 codeItem = codeChildren.childNodes[3].childNodes[1];
var codeValue = codeItem.childNodes[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
@ -422,8 +435,8 @@
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 codeItem = codeChildren.childNodes[3].childNodes[1];
var codeValue = codeItem.childNodes[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
@ -458,6 +471,25 @@
});
};
// 用于扫码入库
scanCodeInStorage = 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: '/scanQrCodeIn',
end: function () {
miniTab.deleteCurrentByIframe();
}
})
};
// 用于打开仓库树形菜单
openDepositoryTree = function (obj) {
var parent = obj.parentNode.parentNode.parentNode;

1
src/main/resources/templates/pages/material/selectMaterialByCard.html

@ -44,6 +44,7 @@
parent.layer.close(index);
}
});
$.ajax({
url: "/material/treeMenus",
data: JSON.stringify(req),

268
src/main/resources/templates/pages/scanQrCode/ScanQrCodeIn.html

@ -0,0 +1,268 @@
<!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中
params.depository = vue.depository;
params.place = vue.place;
params.materialList = vue.materialList;
if (vue.materialList.length > 0) {
// 如果有物料
vue.temporaryScanValue(params); // 将数据暂存至redis中
vue.chooseIn(); // 弹出选择框
} else {
// 如果没有
layer.confirm("暂未选择物料,是否继续扫描", {
btn:["继续","取消"]
},function () { // 继续
vue.turnCameraOn(); // 继续扫描
layer.close(layer.index); // 关闭弹窗
},function () { // 取消
vue.temporaryScanValue(params); // 将数据暂存
vue.chooseIn(); // 弹出选择框
})
}
}
else if (parse.pid !== undefined) {
// 如果扫描的是库位二维码
vue.place = parse; // 将扫描结果保存到vue中
params.depository = vue.depository;
params.place = vue.place;
params.materialList = vue.materialList;
if (vue.materialList.length > 0) {
// 如果有物料
vue.temporaryScanValue(params); // 将数据暂存至redis中
vue.chooseIn(); // 弹出选择框
} else {
// 如果没有
layer.confirm("当前并未扫描物料,是否继续扫描",
{btn:["继续","取消"]},
function () { // 继续扫描
vue.turnCameraOn(); // 继续扫描
layer.close(layer.index); // 关闭弹窗
},
function () {
vue.temporaryScanValue(params); // 将数据暂存
vue.chooseIn(); // 弹出选择框
}
)
}
}
else if (parse.mid !== undefined) {
// 如果扫描的是物料二维码
vue.materialList.push(parse);
layer.confirm("是否继续扫描",
{
btn: ["继续", "取消"]
},
function () { // 继续扫描物料
vue.turnCameraOn(); // 继续扫描
layer.close(layer.index); // 关闭弹窗
},
function () {
// 不扫描物料
params.materialList = vue.materialList;
params.depository = vue.depository;
params.place = vue.place;
vue.temporaryScanValue(params); // 将物料暂存
if ( vue.depository !== null || vue.place !== null) {
// 如果已经扫描了仓库或库位
// 弹出选择框
vue.chooseIn();
}
else {
// 如果没有扫描仓库或库位
layer.confirm("暂未扫描仓库,是否继续该操作",
{
btn: ["继续", "取消"]
},
function () {// 继续
// 弹出选择框
vue.chooseIn();
},
function () { // 取消当前操作
vue.turnCameraOn(); // 继续扫描
layer.close(layer.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)
});
},
// 弹出入库|出库选择框
chooseIn(){
layer.open({
type: 2,
title: '入库',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/application_in_scanQrCode',
end:function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
})
}
}
}).$mount('#app')
</script>
</body>
</html>

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

@ -10,6 +10,7 @@ import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.Ae
import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.WXBizMsgCrypt;
import com.dreamchaser.depository_manage.controller.PageController;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.UserByPortP;
@ -68,13 +69,19 @@ public class Test {
@Autowired
QyWxOperationService qyWxOperationService;
@Autowired
MaterialService materialService;
@org.junit.Test
public void test1() throws AesException, IOException, ParserConfigurationException, SAXException {
// JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers("PangFuZhen,", 1);
// System.out.println(jsonObject);
QyWxConfig.token = QyWxConfig.GetQYWXToken();
String s = qyWxOperationService.withdrawQyWxMessage("Dv0oBVNA9p2BIWPODPqgkuvhQHsXWsMOEPE8cUQ2ZwA9ytIKtwNrGT68xhiplY3lFjCSVlIMmRed5izSY_pU-Q");
System.out.println(s);
// QyWxConfig.token = QyWxConfig.GetQYWXToken();
// String s = qyWxOperationService.withdrawQyWxMessage("Dv0oBVNA9p2BIWPODPqgkuvhQHsXWsMOEPE8cUQ2ZwA9ytIKtwNrGT68xhiplY3lFjCSVlIMmRed5izSY_pU-Q");
// System.out.println(s);
List<Object> objectList = materialService.InitTreeMenus("");
System.out.println(objectList);
}

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

@ -210,6 +210,18 @@
</foreach>
</select>
<select id="findMaterialByDepositorysAndType" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumns" />
from material m
where m.depository_id in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
and m.type_id = #{materialTypeId}
</select>
<!-- 根据仓库查询物料-->

2
target/classes/static/js/lay-module/layuimini/miniTab.js

@ -273,8 +273,10 @@ layui.define(["element", "layer", "jquery"], function (exports) {
* 关闭选项卡
**/
$('body').on('click', '.layuimini-tab .layui-tab-title .layui-tab-close', function () {
var loading = layer.load(0, {shade: false, time: 2 * 1000});
var $parent = $(this).parent();
console.log($parent);
var tabId = $parent.attr('lay-id');
if (tabId !== undefined || tabId !== null) {
miniTab.delete(tabId);

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

@ -56,10 +56,12 @@
</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" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
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">
@ -146,14 +148,22 @@
function selectMaterialByName(obj){}
// 用于加载仓库菜单
function openDepositoryTree(obj){}
// 用于扫码入库
function scanCodeInStorage(obj) {}
// 用于删除当前选项卡
function deleteTable() {
}
// 用于暂存卡片个数
var params = [];
// 用于卡片编号
var NewIdNumber = 1;
layui.use(['form', 'step','flow'], function () {
layui.use(['form','miniTab', 'step','flow'], function () {
var $ = layui.$,
form = layui.form,
flow = layui.flow,
miniTab = layui.miniTab,
step = layui.step;
// 用于分步表单加载
@ -262,15 +272,18 @@
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<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" lay-verify="required" style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" >
</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=""
class="layui-input" lay-verify="number">
class="layui-input" lay-verify="number" >
</div>
</div>
<div class="layui-form-item">
@ -305,7 +318,7 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+475 +'px');
$("#stepForm").css("height",height+477 +'px');
$("#"+parentId).after(materialItem);
};
@ -318,7 +331,7 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-475 +'px');
$("#stepForm").css("height",height-477 +'px');
params = remove(params,parentId);
reparent.removeChild(parent);
};
@ -342,7 +355,7 @@
// 输入code
var code = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
@ -377,8 +390,8 @@
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 codeItem = codeChildren.childNodes[3].childNodes[1];
var codeValue = codeItem.childNodes[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
@ -422,8 +435,8 @@
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 codeItem = codeChildren.childNodes[3].childNodes[1];
var codeValue = codeItem.childNodes[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
@ -458,6 +471,25 @@
});
};
// 用于扫码入库
scanCodeInStorage = 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: '/scanQrCodeIn',
end: function () {
miniTab.deleteCurrentByIframe();
}
})
};
// 用于打开仓库树形菜单
openDepositoryTree = function (obj) {
var parent = obj.parentNode.parentNode.parentNode;

1
target/classes/templates/pages/material/selectMaterialByCard.html

@ -44,6 +44,7 @@
parent.layer.close(index);
}
});
$.ajax({
url: "/material/treeMenus",
data: JSON.stringify(req),

Loading…
Cancel
Save