19 changed files with 4967 additions and 0 deletions
@ -0,0 +1,60 @@ |
|||
package com.dreamchaser.depository_manage.entity; |
|||
|
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* 用于保存盘点记录 |
|||
*/ |
|||
@Data |
|||
public class StockTaking { |
|||
/** |
|||
* id |
|||
*/ |
|||
private Long id; |
|||
|
|||
/** |
|||
* 盘点单号 |
|||
*/ |
|||
private String code; |
|||
|
|||
|
|||
/** |
|||
* 负责人 |
|||
*/ |
|||
private String departmentManager; |
|||
|
|||
/** |
|||
* 盘点仓库 |
|||
*/ |
|||
private Integer placeId; |
|||
|
|||
/** |
|||
* 盘点库位 |
|||
*/ |
|||
private Integer depositoryId; |
|||
|
|||
/** |
|||
* 1通过2驳回3待处理 |
|||
*/ |
|||
private Integer state; |
|||
|
|||
/** |
|||
* 盘点发起人 |
|||
*/ |
|||
private Integer originator; |
|||
|
|||
/** |
|||
* 申请时间 |
|||
*/ |
|||
private Long createTime; |
|||
|
|||
/** |
|||
* 审核时间 |
|||
*/ |
|||
private Long completeTime; |
|||
|
|||
/** |
|||
* 审核意见 |
|||
*/ |
|||
private String auditOpinion; |
|||
} |
|||
@ -0,0 +1,294 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
|
|||
<!-- notice --> |
|||
<mapper namespace="com.dreamchaser.depository_manage.mapper.StockTakingMapper"> |
|||
<!-- This code was generated by TableGo tools, mark 1 begin. --> |
|||
<!-- 字段映射 --> |
|||
<resultMap id="StockTakingMap" type="com.dreamchaser.depository_manage.entity.StockTaking"> |
|||
<id column="id" property="id" jdbcType="INTEGER" /> |
|||
<result column="code" property="code" jdbcType="VARCHAR" /> |
|||
<result column="depositoryId" property="depositoryId" jdbcType="INTEGER" /> |
|||
<result column="placeId" property="placeId" jdbcType="INTEGER" /> |
|||
<result column="state" property="state" jdbcType="INTEGER" /> |
|||
<result column="crateTime" property="crateTime" jdbcType="INTEGER" /> |
|||
<result column="completeTime" property="completeTime" jdbcType="INTEGER" /> |
|||
<result column="originator" property="originator" jdbcType="INTEGER" /> |
|||
<result column="departmentManager" property="departmentManager" jdbcType="VARCHAR" /> |
|||
<result column="auditOpinion" property="auditOpinion" jdbcType="VARCHAR" /> |
|||
</resultMap> |
|||
|
|||
<resultMap id="StockTakingChildMap" type="com.dreamchaser.depository_manage.pojo.StockTakingChildP"> |
|||
<id column="id" property="id" jdbcType="INTEGER" /> |
|||
<result column="mid" property="mid" jdbcType="INTEGER" /> |
|||
<result column="oldInventory" property="oldInventory" jdbcType="INTEGER" /> |
|||
<result column="newInventory" property="newInventory" jdbcType="INTEGER" /> |
|||
<result column="inventory" property="inventory" jdbcType="INTEGER" /> |
|||
<result column="mainId" property="mainId" jdbcType="INTEGER" /> |
|||
<result column="takingResult" property="takingResult" jdbcType="VARCHAR" /> |
|||
<result column="mtexture" property="mtexture" jdbcType="VARCHAR" /> |
|||
<result column="mversion" property="mversion" jdbcType="VARCHAR" /> |
|||
<result column="munit" property="munit" jdbcType="VARCHAR" /> |
|||
<result column="tname" property="tname" jdbcType="VARCHAR" /> |
|||
<result column="mcode" property="mcode" jdbcType="VARCHAR" /> |
|||
<result column="mname" property="mname" jdbcType="VARCHAR" /> |
|||
<result column="mtId" property="mtId" jdbcType="INTEGER" /> |
|||
|
|||
</resultMap> |
|||
|
|||
|
|||
|
|||
<!-- 表查询字段 --> |
|||
<sql id="StockTakingAllColumns"> |
|||
st.id,st.code,st.depositoryId,st.placeId,st.departmentManager,st.state,st.createTime,st.originator,st.completeTime,st.auditOpinion |
|||
</sql> |
|||
|
|||
<sql id="StockTakingChildPAllColumns"> |
|||
id,mid,oldInventory,newInventory,inventory,mainId,takingResult,mname,mtId,tname,mcode,mversion,munit,mtexture |
|||
</sql> |
|||
|
|||
<!-- 插入主表--> |
|||
<insert id="insertStockTaking" useGeneratedKeys="true" keyProperty="id"> |
|||
INSERT INTO stocktaking (id,code,depositoryId,placeId,departmentManager,state,createTime,originator) |
|||
values ( |
|||
#{id}, |
|||
#{code}, |
|||
#{depositoryId}, |
|||
#{placeId}, |
|||
#{departmentManager}, |
|||
#{state}, |
|||
#{createTime}, |
|||
#{originator} |
|||
) |
|||
</insert> |
|||
|
|||
<!-- 插入子表--> |
|||
<insert id="insertStockTakingChild" useGeneratedKeys="true" keyProperty="id"> |
|||
INSERT INTO stocktakingchild (id,mid,oldInventory,newInventory,takingResult,inventory,mainId) |
|||
values ( |
|||
#{id},#{mid},#{oldInventory},#{newInventory},#{takingResult},#{inventory},#{mainId} |
|||
) |
|||
</insert> |
|||
|
|||
|
|||
<delete id="deleteStockTakingChild" parameterType="int"> |
|||
delete from stocktakingchild where id = #{id} |
|||
</delete> |
|||
|
|||
<delete id="deleteStockTakingChilds" parameterType="list"> |
|||
delete from stocktakingchild |
|||
where id in |
|||
<foreach collection="list" index="index" item="id" open="(" separator="," close=")"> |
|||
#{id} |
|||
</foreach> |
|||
</delete> |
|||
|
|||
<delete id="deleteStockTaking" parameterType="int"> |
|||
delete from stocktaking where id = #{id} |
|||
</delete> |
|||
|
|||
<delete id="deleteStockTakings" parameterType="list"> |
|||
delete from stocktaking |
|||
where id in |
|||
<foreach collection="list" index="index" item="id" open="(" separator="," close=")"> |
|||
#{id} |
|||
</foreach> |
|||
</delete> |
|||
|
|||
<update id="updateStockTaking"> |
|||
update stocktaking |
|||
<set> |
|||
<if test="code != null and code != ''"> |
|||
code = #{code}, |
|||
</if> |
|||
<if test="depositoryId != null"> |
|||
depositoryId = #{depositoryId}, |
|||
</if> |
|||
<if test="placeId != null"> |
|||
placeId = #{placeId}, |
|||
</if> |
|||
<if test="departmentManager != null and departmentManager != ''"> |
|||
departmentManager = #{departmentManager}, |
|||
</if> |
|||
<if test="state != null and state != ''"> |
|||
state = #{state}, |
|||
</if> |
|||
<if test="createTime != null and createTime != ''"> |
|||
createTime = #{createTime}, |
|||
</if> |
|||
<if test="originator != null and originator!=''"> |
|||
originator = #{originator}, |
|||
</if> |
|||
<if test="auditOpinion != null"> |
|||
auditOpinion = #{auditOpinion}, |
|||
</if> |
|||
<if test="completeTime != null and completeTime != ''"> |
|||
completeTime = #{completeTime} |
|||
</if> |
|||
</set> |
|||
where id = #{id} |
|||
</update> |
|||
|
|||
|
|||
<update id="updateStockTakingChild"> |
|||
update stocktakingchild |
|||
<set> |
|||
<if test="mid != null and mid != ''"> |
|||
mid = #{mid}, |
|||
</if> |
|||
<if test="oldInventory != null"> |
|||
oldInventory = #{oldInventory}, |
|||
</if> |
|||
<if test="newInventory != null"> |
|||
newInventory = #{newInventory}, |
|||
</if> |
|||
<if test="takingResult != null and takingResult != ''"> |
|||
takingResult = #{takingResult}, |
|||
</if> |
|||
<if test="inventory != null"> |
|||
inventory = #{inventory}, |
|||
</if> |
|||
<if test="mainId != null and mainId != ''"> |
|||
mainId = #{mainId} |
|||
</if> |
|||
</set> |
|||
where id = #{id} |
|||
</update> |
|||
|
|||
<select id="selectStockTakingChildByMainId" parameterType="int" resultMap="StockTakingChildMap"> |
|||
select |
|||
<include refid="StockTakingChildPAllColumns"/> |
|||
from stocktakingchildinfo |
|||
where mainId = #{mainId} |
|||
</select> |
|||
|
|||
<select id="selectStockTakingByCondition" parameterType="map" resultMap="StockTakingMap"> |
|||
select |
|||
<include refid="StockTakingAllColumns"/> |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
<if test="code != null and code != ''"> |
|||
and st.code LIKE CONCAT('%', #{code}, '%') |
|||
</if> |
|||
<if test="depositoryId != null and depositoryId != ''"> |
|||
and st.depositoryId = #{depositoryId} |
|||
</if> |
|||
<if test="placeId != null"> |
|||
and st.placeId = #{placeId} |
|||
</if> |
|||
<if test="departmentManager != null and departmentManager != ''"> |
|||
and FIND_IN_SET(#{departmentManager},st.departmentManager) != 0 |
|||
</if> |
|||
<if test="originator != null and originator!=''"> |
|||
and st.originator = #{originator} |
|||
</if> |
|||
</select> |
|||
|
|||
|
|||
<select id="selectStockTakingChildPByCondition" parameterType="map" resultMap="StockTakingChildMap"> |
|||
select |
|||
<include refid="StockTakingChildPAllColumns"/> |
|||
from stocktakingchildinfo |
|||
where 1 = 1 |
|||
<if test="mid != null and mid != ''"> |
|||
and mid = #{mid} |
|||
</if> |
|||
<if test="oldInventory != null"> |
|||
and oldInventory = #{oldInventory} |
|||
</if> |
|||
<if test="newInventory != null"> |
|||
and newInventory = #{newInventory} |
|||
</if> |
|||
<if test="takingResult != null and takingResult != ''"> |
|||
and takingResult = #{takingResult} |
|||
</if> |
|||
<if test="inventory != null"> |
|||
and inventory = #{inventory} |
|||
</if> |
|||
<if test="mainId != null and mainId != ''"> |
|||
and mainId = #{mainId} |
|||
</if> |
|||
<if test="mname != null and mname != ''"> |
|||
and mname like CONCAT('%',#{mname},'%') |
|||
</if> |
|||
<if test="mtId != null"> |
|||
and mtId = #{mtId} |
|||
</if> |
|||
<if test="mcode != null and mcode != ''"> |
|||
and mcode = #{mcode} |
|||
</if> |
|||
<if test="mversion != null and mversion != ''"> |
|||
and mversion = #{mversion} |
|||
</if> |
|||
<if test="munit != null and munit != ''"> |
|||
and munit = #{munit} |
|||
</if> |
|||
<if test="mtexture != null and mtexture != ''"> |
|||
and mtexture = #{mtexture} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="selectStockTakingById" resultMap="StockTakingMap"> |
|||
select |
|||
<include refid="StockTakingAllColumns"/> |
|||
from stocktaking st |
|||
where st.id = #{id} |
|||
</select> |
|||
|
|||
<select id="selectStockTakingChildPById" parameterType="int" resultMap="StockTakingChildMap"> |
|||
select |
|||
<include refid="StockTakingChildPAllColumns"/> |
|||
from stocktakingchildinfo |
|||
where id = #{id} |
|||
</select> |
|||
|
|||
<select id="findMyTask" parameterType="map" resultMap="StockTakingMap"> |
|||
select |
|||
<include refid="StockTakingAllColumns"/> |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
<if test='isDone == "0"'> |
|||
and (state = 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) |
|||
</if> |
|||
<if test='isDone == "1"'> |
|||
and (state != 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) |
|||
</if> |
|||
<if test="begin != null and size != null"> |
|||
LIMIT #{begin},#{size} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="findMyTaskCount" parameterType="map" resultType="int"> |
|||
SELECT |
|||
count(*) |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
<if test='isDone == "0"'> |
|||
and (state = 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) |
|||
</if> |
|||
<if test='isDone == "1"'> |
|||
and (state != 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) |
|||
</if> |
|||
|
|||
</select> |
|||
|
|||
|
|||
<select id="findMyApply" parameterType="map" resultMap="StockTakingMap"> |
|||
select |
|||
<include refid="StockTakingAllColumns"/> |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
and originator = #{userId} |
|||
<if test="begin != null and size != null"> |
|||
LIMIT #{begin},#{size} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="findMyApplyCount" parameterType="map" resultType="int"> |
|||
SELECT |
|||
count(*) |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
and originator = #{userId} |
|||
</select> |
|||
</mapper> |
|||
@ -0,0 +1,96 @@ |
|||
package com.dreamchaser.depository_manage.pojo; |
|||
|
|||
import com.dreamchaser.depository_manage.entity.MaterialAndBarCode; |
|||
import com.dreamchaser.depository_manage.entity.StockTakingChild; |
|||
import lombok.Data; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 盘点记录 |
|||
*/ |
|||
@Data |
|||
public class StockTakingChildP { |
|||
/** |
|||
* id |
|||
*/ |
|||
private Long id; |
|||
/** |
|||
* 物料id |
|||
*/ |
|||
private Integer mid; |
|||
/** |
|||
* 库存容量 |
|||
*/ |
|||
private Integer oldInventory; |
|||
/** |
|||
* 盘点数量 |
|||
*/ |
|||
private Integer newInventory; |
|||
/** |
|||
* 盘点结果 |
|||
*/ |
|||
private String takingResult; |
|||
|
|||
/** |
|||
* 盘点结果(展示) |
|||
*/ |
|||
private String takingResultShow; |
|||
/** |
|||
* 盈亏数量 |
|||
*/ |
|||
private Integer inventory; |
|||
|
|||
/** |
|||
* 盘点单号 |
|||
*/ |
|||
private String code; |
|||
|
|||
/** |
|||
* 物料名称 |
|||
*/ |
|||
private String mname; |
|||
|
|||
/** |
|||
* 物料编码 |
|||
*/ |
|||
private String mcode; |
|||
|
|||
/** |
|||
* 物料与条形码的对应关系 |
|||
*/ |
|||
private List<MaterialAndBarCode> materialAndBarCodeList; |
|||
|
|||
/** |
|||
* 类型id |
|||
*/ |
|||
private Long mtId; |
|||
|
|||
/** |
|||
* 类型名称 |
|||
*/ |
|||
private String tname; |
|||
|
|||
/** |
|||
* 物料材质 |
|||
*/ |
|||
private String mtexture; |
|||
|
|||
/** |
|||
* 物料规格型号 |
|||
*/ |
|||
private String mversion; |
|||
|
|||
/** |
|||
* 物料计量单位 |
|||
*/ |
|||
private String munit; |
|||
|
|||
/** |
|||
* 主表id |
|||
*/ |
|||
private Long mainId; |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,93 @@ |
|||
package com.dreamchaser.depository_manage.pojo; |
|||
|
|||
import com.dreamchaser.depository_manage.entity.StockTaking; |
|||
import com.dreamchaser.depository_manage.utils.DateUtil; |
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
public class StockTakingP { |
|||
/** |
|||
* id |
|||
*/ |
|||
private Long id; |
|||
|
|||
/** |
|||
* 盘点单号 |
|||
*/ |
|||
private String code; |
|||
|
|||
|
|||
/** |
|||
* 负责人 |
|||
*/ |
|||
private String departmentManager; |
|||
|
|||
/** |
|||
* 盘点仓库 |
|||
*/ |
|||
private Integer placeId; |
|||
|
|||
/** |
|||
* 盘点库位 |
|||
*/ |
|||
private Integer depositoryId; |
|||
|
|||
/** |
|||
* 库位编码 |
|||
*/ |
|||
private String placeCode; |
|||
|
|||
/** |
|||
* 仓库名称 |
|||
*/ |
|||
private String depositoryName; |
|||
|
|||
/** |
|||
* 负责人名称 |
|||
*/ |
|||
private String departmentManagerName; |
|||
|
|||
/** |
|||
* 1通过2驳回3待处理 |
|||
*/ |
|||
private Integer state; |
|||
|
|||
/** |
|||
* 申请时间 |
|||
*/ |
|||
private String createTime; |
|||
|
|||
|
|||
/** |
|||
* 审核时间 |
|||
*/ |
|||
private String completeTime; |
|||
|
|||
/** |
|||
* 盘点发起人 |
|||
*/ |
|||
private Integer originator; |
|||
|
|||
/** |
|||
* 盘点发起人姓名 |
|||
*/ |
|||
private String originatorName; |
|||
|
|||
/** |
|||
* 审核意见 |
|||
* |
|||
*/ |
|||
private String auditOpinion; |
|||
|
|||
public StockTakingP(StockTaking st) { |
|||
this.id = st.getId(); |
|||
this.code = st.getCode(); |
|||
this.departmentManager = st.getDepartmentManager(); |
|||
this.depositoryId = st.getDepositoryId(); |
|||
this.placeId = st.getPlaceId(); |
|||
this.state = st.getState(); |
|||
this.createTime = DateUtil.TimeStampToDateTime(st.getCreateTime()); |
|||
this.originator = st.getOriginator(); |
|||
this.auditOpinion = st.getAuditOpinion(); |
|||
} |
|||
} |
|||
@ -0,0 +1,65 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en" xmlns:th="http://www.thymeleaf.org"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>layui</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"> |
|||
</head> |
|||
<body> |
|||
<div id="test2" class="demo-tree"></div> |
|||
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script> |
|||
<script> |
|||
var data; |
|||
layui.use(['form', 'layer','dropdown','tree'], function () { |
|||
var $ = layui.jquery, |
|||
tree = layui.tree, |
|||
test = tree.render({ |
|||
elem: '#test2' |
|||
,data: [] |
|||
,onlyIconControl: false //是否仅允许节点左侧图标控制展开收缩 |
|||
,click: function(obj){ |
|||
var data = obj.data; |
|||
if(data.children !== undefined){ |
|||
return false; |
|||
} |
|||
var name = $("#departmentManager",window.parent.document).val(); |
|||
var id = $("#departmentManagerId",window.parent.document).val(); |
|||
if(name === undefined||name === null||name === ""){ |
|||
$("#departmentManager",window.parent.document).val(data.title); |
|||
}else{ |
|||
$("#departmentManager",window.parent.document).val(name + ","+data.title); |
|||
} |
|||
if(id === undefined||id === null||id === ""){ |
|||
$("#departmentManagerId",window.parent.document).val(data.id); |
|||
}else{ |
|||
$("#departmentManagerId",window.parent.document).val(id + ","+data.id); |
|||
} |
|||
var index = parent.layer.getFrameIndex(window.name); |
|||
parent.layer.close(index); |
|||
|
|||
} |
|||
}); |
|||
$.ajax({ |
|||
url: "/company/treeMenus", |
|||
type: 'get', |
|||
dataType: 'json', |
|||
contentType: "application/json;charset=utf-8", |
|||
beforeSend:function () { |
|||
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); |
|||
}, |
|||
success: function (d) { |
|||
layer.close(this.layerIndex); |
|||
var data2 = d.data; |
|||
test.reload({ |
|||
data:data2 |
|||
}); |
|||
} |
|||
}); |
|||
}) |
|||
</script> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,132 @@ |
|||
<!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 = []; |
|||
let materialList = []; |
|||
// 是否扫描二维码标志位 |
|||
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")) { |
|||
// 如果扫描的位本地二维码 |
|||
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) { |
|||
// 如果扫描的是仓库二维码 |
|||
layer.msg("请扫描物料!",{ |
|||
icon:0, |
|||
time:500 |
|||
},function () { |
|||
vue.turnCameraOn(); // 继续扫描 |
|||
}) |
|||
} |
|||
else if (parse.pid !== undefined) { |
|||
// 如果扫描的是库位二维码 |
|||
layer.msg("请扫描物料!",{ |
|||
icon:0, |
|||
time:500 |
|||
},function () { |
|||
vue.turnCameraOn(); // 继续扫描 |
|||
}) |
|||
}else{ |
|||
materialList.push(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.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> |
|||
File diff suppressed because it is too large
Binary file not shown.
@ -0,0 +1,294 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
|
|||
<!-- notice --> |
|||
<mapper namespace="com.dreamchaser.depository_manage.mapper.StockTakingMapper"> |
|||
<!-- This code was generated by TableGo tools, mark 1 begin. --> |
|||
<!-- 字段映射 --> |
|||
<resultMap id="StockTakingMap" type="com.dreamchaser.depository_manage.entity.StockTaking"> |
|||
<id column="id" property="id" jdbcType="INTEGER" /> |
|||
<result column="code" property="code" jdbcType="VARCHAR" /> |
|||
<result column="depositoryId" property="depositoryId" jdbcType="INTEGER" /> |
|||
<result column="placeId" property="placeId" jdbcType="INTEGER" /> |
|||
<result column="state" property="state" jdbcType="INTEGER" /> |
|||
<result column="crateTime" property="crateTime" jdbcType="INTEGER" /> |
|||
<result column="completeTime" property="completeTime" jdbcType="INTEGER" /> |
|||
<result column="originator" property="originator" jdbcType="INTEGER" /> |
|||
<result column="departmentManager" property="departmentManager" jdbcType="VARCHAR" /> |
|||
<result column="auditOpinion" property="auditOpinion" jdbcType="VARCHAR" /> |
|||
</resultMap> |
|||
|
|||
<resultMap id="StockTakingChildMap" type="com.dreamchaser.depository_manage.pojo.StockTakingChildP"> |
|||
<id column="id" property="id" jdbcType="INTEGER" /> |
|||
<result column="mid" property="mid" jdbcType="INTEGER" /> |
|||
<result column="oldInventory" property="oldInventory" jdbcType="INTEGER" /> |
|||
<result column="newInventory" property="newInventory" jdbcType="INTEGER" /> |
|||
<result column="inventory" property="inventory" jdbcType="INTEGER" /> |
|||
<result column="mainId" property="mainId" jdbcType="INTEGER" /> |
|||
<result column="takingResult" property="takingResult" jdbcType="VARCHAR" /> |
|||
<result column="mtexture" property="mtexture" jdbcType="VARCHAR" /> |
|||
<result column="mversion" property="mversion" jdbcType="VARCHAR" /> |
|||
<result column="munit" property="munit" jdbcType="VARCHAR" /> |
|||
<result column="tname" property="tname" jdbcType="VARCHAR" /> |
|||
<result column="mcode" property="mcode" jdbcType="VARCHAR" /> |
|||
<result column="mname" property="mname" jdbcType="VARCHAR" /> |
|||
<result column="mtId" property="mtId" jdbcType="INTEGER" /> |
|||
|
|||
</resultMap> |
|||
|
|||
|
|||
|
|||
<!-- 表查询字段 --> |
|||
<sql id="StockTakingAllColumns"> |
|||
st.id,st.code,st.depositoryId,st.placeId,st.departmentManager,st.state,st.createTime,st.originator,st.completeTime,st.auditOpinion |
|||
</sql> |
|||
|
|||
<sql id="StockTakingChildPAllColumns"> |
|||
id,mid,oldInventory,newInventory,inventory,mainId,takingResult,mname,mtId,tname,mcode,mversion,munit,mtexture |
|||
</sql> |
|||
|
|||
<!-- 插入主表--> |
|||
<insert id="insertStockTaking" useGeneratedKeys="true" keyProperty="id"> |
|||
INSERT INTO stocktaking (id,code,depositoryId,placeId,departmentManager,state,createTime,originator) |
|||
values ( |
|||
#{id}, |
|||
#{code}, |
|||
#{depositoryId}, |
|||
#{placeId}, |
|||
#{departmentManager}, |
|||
#{state}, |
|||
#{createTime}, |
|||
#{originator} |
|||
) |
|||
</insert> |
|||
|
|||
<!-- 插入子表--> |
|||
<insert id="insertStockTakingChild" useGeneratedKeys="true" keyProperty="id"> |
|||
INSERT INTO stocktakingchild (id,mid,oldInventory,newInventory,takingResult,inventory,mainId) |
|||
values ( |
|||
#{id},#{mid},#{oldInventory},#{newInventory},#{takingResult},#{inventory},#{mainId} |
|||
) |
|||
</insert> |
|||
|
|||
|
|||
<delete id="deleteStockTakingChild" parameterType="int"> |
|||
delete from stocktakingchild where id = #{id} |
|||
</delete> |
|||
|
|||
<delete id="deleteStockTakingChilds" parameterType="list"> |
|||
delete from stocktakingchild |
|||
where id in |
|||
<foreach collection="list" index="index" item="id" open="(" separator="," close=")"> |
|||
#{id} |
|||
</foreach> |
|||
</delete> |
|||
|
|||
<delete id="deleteStockTaking" parameterType="int"> |
|||
delete from stocktaking where id = #{id} |
|||
</delete> |
|||
|
|||
<delete id="deleteStockTakings" parameterType="list"> |
|||
delete from stocktaking |
|||
where id in |
|||
<foreach collection="list" index="index" item="id" open="(" separator="," close=")"> |
|||
#{id} |
|||
</foreach> |
|||
</delete> |
|||
|
|||
<update id="updateStockTaking"> |
|||
update stocktaking |
|||
<set> |
|||
<if test="code != null and code != ''"> |
|||
code = #{code}, |
|||
</if> |
|||
<if test="depositoryId != null"> |
|||
depositoryId = #{depositoryId}, |
|||
</if> |
|||
<if test="placeId != null"> |
|||
placeId = #{placeId}, |
|||
</if> |
|||
<if test="departmentManager != null and departmentManager != ''"> |
|||
departmentManager = #{departmentManager}, |
|||
</if> |
|||
<if test="state != null and state != ''"> |
|||
state = #{state}, |
|||
</if> |
|||
<if test="createTime != null and createTime != ''"> |
|||
createTime = #{createTime}, |
|||
</if> |
|||
<if test="originator != null and originator!=''"> |
|||
originator = #{originator}, |
|||
</if> |
|||
<if test="auditOpinion != null"> |
|||
auditOpinion = #{auditOpinion}, |
|||
</if> |
|||
<if test="completeTime != null and completeTime != ''"> |
|||
completeTime = #{completeTime} |
|||
</if> |
|||
</set> |
|||
where id = #{id} |
|||
</update> |
|||
|
|||
|
|||
<update id="updateStockTakingChild"> |
|||
update stocktakingchild |
|||
<set> |
|||
<if test="mid != null and mid != ''"> |
|||
mid = #{mid}, |
|||
</if> |
|||
<if test="oldInventory != null"> |
|||
oldInventory = #{oldInventory}, |
|||
</if> |
|||
<if test="newInventory != null"> |
|||
newInventory = #{newInventory}, |
|||
</if> |
|||
<if test="takingResult != null and takingResult != ''"> |
|||
takingResult = #{takingResult}, |
|||
</if> |
|||
<if test="inventory != null"> |
|||
inventory = #{inventory}, |
|||
</if> |
|||
<if test="mainId != null and mainId != ''"> |
|||
mainId = #{mainId} |
|||
</if> |
|||
</set> |
|||
where id = #{id} |
|||
</update> |
|||
|
|||
<select id="selectStockTakingChildByMainId" parameterType="int" resultMap="StockTakingChildMap"> |
|||
select |
|||
<include refid="StockTakingChildPAllColumns"/> |
|||
from stocktakingchildinfo |
|||
where mainId = #{mainId} |
|||
</select> |
|||
|
|||
<select id="selectStockTakingByCondition" parameterType="map" resultMap="StockTakingMap"> |
|||
select |
|||
<include refid="StockTakingAllColumns"/> |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
<if test="code != null and code != ''"> |
|||
and st.code LIKE CONCAT('%', #{code}, '%') |
|||
</if> |
|||
<if test="depositoryId != null and depositoryId != ''"> |
|||
and st.depositoryId = #{depositoryId} |
|||
</if> |
|||
<if test="placeId != null"> |
|||
and st.placeId = #{placeId} |
|||
</if> |
|||
<if test="departmentManager != null and departmentManager != ''"> |
|||
and FIND_IN_SET(#{departmentManager},st.departmentManager) != 0 |
|||
</if> |
|||
<if test="originator != null and originator!=''"> |
|||
and st.originator = #{originator} |
|||
</if> |
|||
</select> |
|||
|
|||
|
|||
<select id="selectStockTakingChildPByCondition" parameterType="map" resultMap="StockTakingChildMap"> |
|||
select |
|||
<include refid="StockTakingChildPAllColumns"/> |
|||
from stocktakingchildinfo |
|||
where 1 = 1 |
|||
<if test="mid != null and mid != ''"> |
|||
and mid = #{mid} |
|||
</if> |
|||
<if test="oldInventory != null"> |
|||
and oldInventory = #{oldInventory} |
|||
</if> |
|||
<if test="newInventory != null"> |
|||
and newInventory = #{newInventory} |
|||
</if> |
|||
<if test="takingResult != null and takingResult != ''"> |
|||
and takingResult = #{takingResult} |
|||
</if> |
|||
<if test="inventory != null"> |
|||
and inventory = #{inventory} |
|||
</if> |
|||
<if test="mainId != null and mainId != ''"> |
|||
and mainId = #{mainId} |
|||
</if> |
|||
<if test="mname != null and mname != ''"> |
|||
and mname like CONCAT('%',#{mname},'%') |
|||
</if> |
|||
<if test="mtId != null"> |
|||
and mtId = #{mtId} |
|||
</if> |
|||
<if test="mcode != null and mcode != ''"> |
|||
and mcode = #{mcode} |
|||
</if> |
|||
<if test="mversion != null and mversion != ''"> |
|||
and mversion = #{mversion} |
|||
</if> |
|||
<if test="munit != null and munit != ''"> |
|||
and munit = #{munit} |
|||
</if> |
|||
<if test="mtexture != null and mtexture != ''"> |
|||
and mtexture = #{mtexture} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="selectStockTakingById" resultMap="StockTakingMap"> |
|||
select |
|||
<include refid="StockTakingAllColumns"/> |
|||
from stocktaking st |
|||
where st.id = #{id} |
|||
</select> |
|||
|
|||
<select id="selectStockTakingChildPById" parameterType="int" resultMap="StockTakingChildMap"> |
|||
select |
|||
<include refid="StockTakingChildPAllColumns"/> |
|||
from stocktakingchildinfo |
|||
where id = #{id} |
|||
</select> |
|||
|
|||
<select id="findMyTask" parameterType="map" resultMap="StockTakingMap"> |
|||
select |
|||
<include refid="StockTakingAllColumns"/> |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
<if test='isDone == "0"'> |
|||
and (state = 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) |
|||
</if> |
|||
<if test='isDone == "1"'> |
|||
and (state != 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) |
|||
</if> |
|||
<if test="begin != null and size != null"> |
|||
LIMIT #{begin},#{size} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="findMyTaskCount" parameterType="map" resultType="int"> |
|||
SELECT |
|||
count(*) |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
<if test='isDone == "0"'> |
|||
and (state = 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) |
|||
</if> |
|||
<if test='isDone == "1"'> |
|||
and (state != 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) |
|||
</if> |
|||
|
|||
</select> |
|||
|
|||
|
|||
<select id="findMyApply" parameterType="map" resultMap="StockTakingMap"> |
|||
select |
|||
<include refid="StockTakingAllColumns"/> |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
and originator = #{userId} |
|||
<if test="begin != null and size != null"> |
|||
LIMIT #{begin},#{size} |
|||
</if> |
|||
</select> |
|||
|
|||
<select id="findMyApplyCount" parameterType="map" resultType="int"> |
|||
SELECT |
|||
count(*) |
|||
from stocktaking st |
|||
where 1 = 1 |
|||
and originator = #{userId} |
|||
</select> |
|||
</mapper> |
|||
@ -0,0 +1,74 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en" xmlns:th="http://www.thymeleaf.org"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>layui</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"> |
|||
</head> |
|||
<body> |
|||
<input id="mname" name="mname" th:value="${mname}" style="display: none"> |
|||
<input id="type" name="type" th:value="${type}" style="display: none"> |
|||
<input id="clickObj" name="clickObj" th:value="${clickObj}" style="display: none"> |
|||
<input id="placeId" name="clickObj" th:value="${placeId}" style="display: none"> |
|||
<input id="depositoryId" name="clickObj" th:value="${depositoryId}" style="display: none"> |
|||
<div id="test2" class="demo-tree"></div> |
|||
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script> |
|||
<script> |
|||
var data; |
|||
layui.use(['form', 'layer', 'dropdown', 'tree'], function () { |
|||
var $ = layui.jquery, |
|||
tree = layui.tree; |
|||
var mname = $("#mname").val(); |
|||
var type = $("#type").val(); |
|||
var clickObj = $("#clickObj").val(); |
|||
var depositoryId = $("#depositoryId").val(); |
|||
var placeId = $("#placeId").val(); |
|||
var req = {}; |
|||
req.mname = mname; |
|||
req.type = type; |
|||
req.depositoryId = depositoryId; |
|||
req.placeId = placeId; |
|||
test = tree.render({ |
|||
elem: '#test2' |
|||
, data: [] |
|||
, click: function (obj) { |
|||
if (obj.data.children !== undefined) { |
|||
return false |
|||
} |
|||
var windowParent = $("#"+clickObj,window.parent.document)[0]; |
|||
var children = windowParent.childNodes[5]; |
|||
var materialItem = children.childNodes[3].childNodes[1].childNodes; |
|||
var materialName = materialItem[1]; |
|||
var materialId = materialName.parentNode.parentNode.childNodes[3]; |
|||
materialName.value = obj.data.title; |
|||
materialId.value = obj.data.id; |
|||
var index = parent.layer.getFrameIndex(window.name); |
|||
parent.layer.close(index); |
|||
} |
|||
}); |
|||
|
|||
$.ajax({ |
|||
url: "/material/treeMenus", |
|||
data: JSON.stringify(req), |
|||
type: 'post', |
|||
dataType: 'json', |
|||
contentType: "application/json;charset=utf-8", |
|||
beforeSend:function () { |
|||
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); |
|||
}, |
|||
success: function (d) { |
|||
layer.close(this.layerIndex); |
|||
var data2 = d.data; |
|||
test.reload({ |
|||
data: data2 |
|||
}); |
|||
} |
|||
}); |
|||
}) |
|||
</script> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,65 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en" xmlns:th="http://www.thymeleaf.org"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>layui</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"> |
|||
</head> |
|||
<body> |
|||
<div id="test2" class="demo-tree"></div> |
|||
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script> |
|||
<script> |
|||
var data; |
|||
layui.use(['form', 'layer','dropdown','tree'], function () { |
|||
var $ = layui.jquery, |
|||
tree = layui.tree, |
|||
test = tree.render({ |
|||
elem: '#test2' |
|||
,data: [] |
|||
,onlyIconControl: false //是否仅允许节点左侧图标控制展开收缩 |
|||
,click: function(obj){ |
|||
var data = obj.data; |
|||
if(data.children !== undefined){ |
|||
return false; |
|||
} |
|||
var name = $("#departmentManager",window.parent.document).val(); |
|||
var id = $("#departmentManagerId",window.parent.document).val(); |
|||
if(name === undefined||name === null||name === ""){ |
|||
$("#departmentManager",window.parent.document).val(data.title); |
|||
}else{ |
|||
$("#departmentManager",window.parent.document).val(name + ","+data.title); |
|||
} |
|||
if(id === undefined||id === null||id === ""){ |
|||
$("#departmentManagerId",window.parent.document).val(data.id); |
|||
}else{ |
|||
$("#departmentManagerId",window.parent.document).val(id + ","+data.id); |
|||
} |
|||
var index = parent.layer.getFrameIndex(window.name); |
|||
parent.layer.close(index); |
|||
|
|||
} |
|||
}); |
|||
$.ajax({ |
|||
url: "/company/treeMenus", |
|||
type: 'get', |
|||
dataType: 'json', |
|||
contentType: "application/json;charset=utf-8", |
|||
beforeSend:function () { |
|||
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); |
|||
}, |
|||
success: function (d) { |
|||
layer.close(this.layerIndex); |
|||
var data2 = d.data; |
|||
test.reload({ |
|||
data:data2 |
|||
}); |
|||
} |
|||
}); |
|||
}) |
|||
</script> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,132 @@ |
|||
<!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 = []; |
|||
let materialList = []; |
|||
// 是否扫描二维码标志位 |
|||
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")) { |
|||
// 如果扫描的位本地二维码 |
|||
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) { |
|||
// 如果扫描的是仓库二维码 |
|||
layer.msg("请扫描物料!",{ |
|||
icon:0, |
|||
time:500 |
|||
},function () { |
|||
vue.turnCameraOn(); // 继续扫描 |
|||
}) |
|||
} |
|||
else if (parse.pid !== undefined) { |
|||
// 如果扫描的是库位二维码 |
|||
layer.msg("请扫描物料!",{ |
|||
icon:0, |
|||
time:500 |
|||
},function () { |
|||
vue.turnCameraOn(); // 继续扫描 |
|||
}) |
|||
}else{ |
|||
materialList.push(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.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> |
|||
@ -0,0 +1,100 @@ |
|||
<!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 barCode; |
|||
var depository; |
|||
var place; |
|||
// 是否扫描二维码标志位 |
|||
var flag = false; |
|||
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")) { |
|||
// 如果扫描的位本地二维码 |
|||
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; |
|||
layui.$("#openSonByDepository",window.parent.document).val(depository.dname); |
|||
layui.$("#depositoryId",window.parent.document).val(depository.did); |
|||
layui.$("#placeId",window.parent.document).val(0); |
|||
var index = parent.layer.getFrameIndex(window.name); |
|||
parent.layer.close(index); |
|||
} |
|||
else if (parse.pid !== undefined) { |
|||
// 如果扫描的是库位二维码 |
|||
place = parse; |
|||
layui.$("#openSonByDepository",window.parent.document).val(place.dname +"-"+ place.code); |
|||
layui.$("#depositoryId",window.parent.document).val(place.depositoryId); |
|||
layui.$("#placeId",window.parent.document).val(place.pid); |
|||
var index = parent.layer.getFrameIndex(window.name); |
|||
parent.layer.close(index); |
|||
} |
|||
else{ |
|||
layer.msg("请扫描正确的二维码",{ |
|||
icon:0, |
|||
time:500 |
|||
},function () { |
|||
var index = parent.layer.getFrameIndex(window.name); |
|||
parent.layer.close(index); |
|||
}); |
|||
|
|||
} |
|||
} |
|||
}) |
|||
}else{ |
|||
console.log("条形码",decodedText); |
|||
// 如果是条形码 |
|||
} |
|||
|
|||
}).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> |
|||
@ -0,0 +1,202 @@ |
|||
<!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> |
|||
<input type="text" id="depositoryId" th:value="${depositoryId}" style="display: none"> |
|||
<input type="text" id="placeId" th:value="${placeId}" style="display: none"> |
|||
<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 depositoryId = layui.$("#depositoryId").val(); |
|||
var placeId = layui.$("#placeId").val(); |
|||
var vue = new Vue({ |
|||
data() { |
|||
return { |
|||
isValid: undefined, |
|||
camera: 'auto', |
|||
result: '', |
|||
error: '', |
|||
materialList: [] |
|||
|
|||
} |
|||
}, |
|||
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) { |
|||
// 如果扫描的是仓库二维码 |
|||
layer.msg("请扫描物料!",{ |
|||
icon:0, |
|||
time:500 |
|||
},function () { |
|||
vue.turnCameraOn(); // 继续扫描 |
|||
}) |
|||
} |
|||
else if (parse.pid !== undefined) { |
|||
// 如果扫描的是库位二维码 |
|||
layer.msg("请扫描物料!",{ |
|||
icon:0, |
|||
time:500 |
|||
},function () { |
|||
vue.turnCameraOn(); // 继续扫描 |
|||
}) |
|||
} |
|||
else if (parse.mid !== undefined) { |
|||
// 如果扫描的是物料二维码 |
|||
vue.materialList.push(parse); |
|||
layer.confirm("是否继续扫描", |
|||
{ |
|||
btn: ["继续", "取消"] |
|||
}, |
|||
function () { // 继续扫描物料 |
|||
vue.turnCameraOn(); // 继续扫描 |
|||
layer.close(layer.index); // 关闭弹窗 |
|||
}, |
|||
function () { |
|||
// 不扫描物料 |
|||
params.materialList = vue.materialList; |
|||
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> |
|||
File diff suppressed because it is too large
@ -0,0 +1,350 @@ |
|||
<!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"> |
|||
<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; |
|||
} |
|||
|
|||
.layui-form-select { |
|||
width: 100%; |
|||
border-style: none; |
|||
} |
|||
|
|||
</style> |
|||
</head> |
|||
<body> |
|||
<div class="layuimini-container"> |
|||
<div class="layuimini-main"> |
|||
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; "> |
|||
<div carousel-item style="overflow: inherit"> |
|||
<div> |
|||
<fieldset class="table-search-fieldset"> |
|||
<legend>库存盘点</legend> |
|||
<div class="layui-fluid"> |
|||
<div class="layui-card"> |
|||
<form class="layui-form" |
|||
style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px" |
|||
lay-filter="form1" id="form1"> |
|||
<div class="layui-card-body" id="takingHeader" style="padding-right: 0px"> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盘点位置:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="mainId" id="mainId" th:value="${mainRecord.getId()}" style="display:none;"> |
|||
<input type="text" class="layui-input" |
|||
th:value="${mainRecord.getDepositoryName()}" |
|||
style="border-style: none" |
|||
id="openSonByDepository" readonly |
|||
lay-verify="required"/> |
|||
<input type="text" name="depositoryId" class="layui-input" |
|||
id="depositoryId" th:value="${mainRecord.getDepositoryId()}" |
|||
style="display: none" lay-verify="required"/> |
|||
<input type="text" name="placeId" class="layui-input" id="placeId" |
|||
th:value="${mainRecord.getPlaceId()}" |
|||
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 type="text" placeholder="请选择负责人" class="layui-input" |
|||
id="departmentManager" readonly |
|||
th:value="${mainRecord.getDepartmentManagerName()}" |
|||
lay-verify="required"/> |
|||
<input type="text" id="departmentManagerId" name="departmentManagerId" |
|||
th:value="${mainRecord.getDepartmentManager()}" |
|||
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-block"> |
|||
<input type="text" placeholder="请选择负责人" class="layui-input" |
|||
id="originatorName" readonly |
|||
th:value="${mainRecord.getOriginatorName()}" |
|||
lay-verify="required"/> |
|||
<input type="text" id="originator" name="departmentManagerId" |
|||
th:value="${mainRecord.getOriginator()}" |
|||
class="layui-input" style="display: none" lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<fieldset class="table-search-fieldset"> |
|||
<legend>盘点明细</legend> |
|||
<div class="layui-card-body" id="InventoryDetails" style="padding-right: 0px"> |
|||
<hr> |
|||
|
|||
<div class="layui-collapse" lay-accordion> |
|||
<div class="layui-colla-item" |
|||
th:each="recordMin,iterStar:${recordChild}"> |
|||
<h2 class="layui-colla-title" |
|||
th:text="${recordMin.getMname()}"></h2> |
|||
<div class="layui-colla-content"> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">物料编码:</label> |
|||
<div class="layui-input-block" style="margin: 0px;"> |
|||
<div class="inputdiv"> |
|||
<input th:attr="name='code' +${recordMin.getId()},id='code'+${recordMin.getId()}" |
|||
type="text" placeholder="请填写入物料编码" |
|||
th:value="${recordMin.getMcode()}" |
|||
class="layui-input" lay-verify="required" |
|||
style="border-style: none"> |
|||
</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 |
|||
th:attr="id='barCode'+${recordMin.getId()},name='barCode'+${recordMin.getId()}" |
|||
style="border-style: none"> |
|||
|
|||
</select> |
|||
</div> |
|||
</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" |
|||
th:value="${recordMin.getTname()}" |
|||
th:attr="id='openSonByMateralType'+${recordMin.getId()}" |
|||
readonly |
|||
lay-verify="required"/> |
|||
<input type="text" |
|||
th:value="${recordMin.getMtId()}" |
|||
th:attr="id='materialTypeId'+${recordMin.getId()},name='typeId'+${recordMin.getId()}" |
|||
placeholder="请选择物料类型" 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-block"> |
|||
<input type="text" placeholder="请填写材质名称" |
|||
class="layui-input" |
|||
th:value="${recordMin.getMtexture()}" |
|||
th:attr="id='texture'+${recordMin.getId()},name='texture'+${recordMin.getId()}" |
|||
/> |
|||
</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" |
|||
th:value="${recordMin.getMversion()}" |
|||
th:attr="id='version'+${recordMin.getId()},name='version'+${recordMin.getId()}" |
|||
/> |
|||
</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" |
|||
th:value="${recordMin.getMunit()}" |
|||
th:attr="id='unit'+${recordMin.getId()},name='unit'+${recordMin.getId()}" |
|||
/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">库存数量:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="number" class="layui-input" readonly |
|||
th:value="${recordMin.getOldInventory()}" |
|||
th:attr="id='oldInventory'+${recordMin.getId()},name='oldInventory'+${recordMin.getId()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盘点数量:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="number" class="layui-input" |
|||
th:value="${recordMin.getNewInventory()}" |
|||
th:attr="id='newInventory'+${recordMin.getId()},name='newInventory'+${recordMin.getId()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盘点结果:</label> |
|||
<div class="layui-input-block"> |
|||
|
|||
<input type="text" class="layui-input" id="takingResult" |
|||
th:value="${recordMin.getTakingResultShow()}" |
|||
th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盈亏数量:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="number" class="layui-input" readonly |
|||
|
|||
th:value="${recordMin.getInventory()}" |
|||
th:attr="id='inventory'+${recordMin.getId()},name='inventory'+${recordMin.getId()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</fieldset> |
|||
|
|||
<div id="review"> |
|||
<div class="layui-form" style="margin: 0 auto;max-width: 900px;padding-top: 40px;"> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">审核备注:</label> |
|||
<div class="layui-input-block"> |
|||
<textarea id="auditOpinion" name="auditOpinion" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<div class="layui-input-block"> |
|||
<button type="button" class="layui-btn" onclick="review(1)"> |
|||
 审核通过  |
|||
</button> |
|||
<button type="button" class="layui-btn layui-btn-danger" onclick="review(2)"> |
|||
 审核不通过  |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</fieldset> |
|||
</div> |
|||
</div> |
|||
</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 review(data){} |
|||
layui.use(['form','step','element'], function () { |
|||
var $ = layui.$, |
|||
step = layui.step, |
|||
element = layui.element, |
|||
form = layui.form; |
|||
|
|||
var position=0,states={},number = 2; |
|||
states = [ {title: "待审核"}]; |
|||
// 用于分步表单加载 |
|||
step.render({ |
|||
elem: '#stepForm', |
|||
filter: 'stepForm', |
|||
width: '100%', //设置容器宽度 |
|||
stepWidth: '750px', |
|||
height: '1495px', |
|||
position: position, |
|||
number:number, |
|||
stepItems: states |
|||
}); |
|||
|
|||
|
|||
|
|||
// 用于获取审核结果与审核的单号 |
|||
review=function (pass) { |
|||
let data = {}; |
|||
data.mainId = $("#mainId").val(); |
|||
data.auditOpinion = $("#auditOpinion").val(); |
|||
data.state = pass; |
|||
|
|||
$.ajax({ |
|||
url:"/stockTaking/review", |
|||
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(d){ |
|||
layer.close(this.layerIndex); |
|||
if(d.status >= 300){ |
|||
var errMsg = d.data.errMsg; |
|||
// 获取出错的子订单 |
|||
layer.confirm("当前盘点数量中有溢出情况,需要进行转移", { |
|||
btn:["确定"] |
|||
},function () { // 继续 |
|||
layer.open({ |
|||
type: 2, |
|||
title: '转移物料', |
|||
skin: 'layui-layer-rim', |
|||
maxmin: true, |
|||
shadeClose: true, //点击遮罩关闭层 |
|||
area: ['70%', '70%'], |
|||
move: '.layui-layer-title', |
|||
fixed: false, |
|||
content: '/stockTakingTransfer?minIds='+errMsg.errIds, |
|||
end: function (res) { |
|||
if(res.status >= 300){ |
|||
layer.msg("提交失败,联系开发人员解决", { |
|||
icon: 5,//成功的表情 |
|||
time: 500 //1秒关闭(如果不配置,默认是3秒) |
|||
}, function(){ |
|||
window.location = '/StockTakingView?id='+data.mainId; |
|||
}); |
|||
}else{ |
|||
layer.msg("提交成功", { |
|||
icon: 6,//成功的表情 |
|||
time: 500 //1秒关闭(如果不配置,默认是3秒) |
|||
}, function(){ |
|||
window.location = '/StockTakingView?id='+data.mainId; |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
}); |
|||
|
|||
|
|||
} |
|||
else{ |
|||
layer.msg("提交成功", { |
|||
icon: 6,//成功的表情 |
|||
time: 500 //1秒关闭(如果不配置,默认是3秒) |
|||
}, function(){ |
|||
window.location = '/StockTakingView?id='+data.mainId; |
|||
}); |
|||
} |
|||
}, |
|||
}) |
|||
|
|||
}; |
|||
|
|||
}); |
|||
|
|||
</script> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,291 @@ |
|||
<!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"> |
|||
<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; |
|||
} |
|||
|
|||
.layui-form-select { |
|||
width: 100%; |
|||
border-style: none; |
|||
} |
|||
|
|||
</style> |
|||
</head> |
|||
<body> |
|||
<div class="layuimini-container"> |
|||
<div class="layuimini-main"> |
|||
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; "> |
|||
<div carousel-item style="overflow: inherit"> |
|||
<div> |
|||
<fieldset class="table-search-fieldset"> |
|||
<legend>库存盘点</legend> |
|||
<div class="layui-fluid"> |
|||
<div class="layui-card"> |
|||
<form class="layui-form" |
|||
style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px" |
|||
lay-filter="form1" id="form1"> |
|||
<div class="layui-card-body" id="takingHeader" style="padding-right: 0px"> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盘点位置:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="mainId" th:value="${mainRecord.getId()}" style="display:none;"> |
|||
<input type="text" class="layui-input" |
|||
th:value="${mainRecord.getDepositoryName()}" |
|||
style="border-style: none" |
|||
id="openSonByDepository" readonly |
|||
lay-verify="required"/> |
|||
<input type="text" name="depositoryId" class="layui-input" |
|||
id="depositoryId" th:value="${mainRecord.getDepositoryId()}" |
|||
style="display: none" lay-verify="required"/> |
|||
<input type="text" name="placeId" class="layui-input" id="placeId" |
|||
th:value="${mainRecord.getPlaceId()}" |
|||
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 type="text" placeholder="请选择负责人" class="layui-input" |
|||
id="departmentManager" readonly |
|||
th:value="${mainRecord.getDepartmentManagerName()}" |
|||
lay-verify="required"/> |
|||
<input type="text" id="departmentManagerId" name="departmentManagerId" |
|||
th:value="${mainRecord.getDepartmentManager()}" |
|||
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-block"> |
|||
<input type="text" placeholder="请选择负责人" class="layui-input" |
|||
id="originatorName" readonly |
|||
th:value="${mainRecord.getOriginatorName()}" |
|||
lay-verify="required"/> |
|||
<input type="text" id="originator" name="departmentManagerId" |
|||
th:value="${mainRecord.getOriginator()}" |
|||
class="layui-input" style="display: none" lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<fieldset class="table-search-fieldset"> |
|||
<legend>盘点明细</legend> |
|||
<div class="layui-card-body" id="InventoryDetails" style="padding-right: 0px"> |
|||
<hr> |
|||
|
|||
<div class="layui-collapse" lay-accordion> |
|||
<div class="layui-colla-item" |
|||
th:each="recordMin,iterStar:${recordChild}"> |
|||
<h2 class="layui-colla-title" |
|||
th:text="${recordMin.getMname()}"></h2> |
|||
<div class="layui-colla-content"> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">物料编码:</label> |
|||
<div class="layui-input-block" style="margin: 0px;"> |
|||
<div class="inputdiv"> |
|||
<input th:attr="name='code' +${recordMin.getId()},id='code'+${recordMin.getId()}" |
|||
type="text" placeholder="请填写入物料编码" |
|||
th:value="${recordMin.getMcode()}" |
|||
class="layui-input" lay-verify="required" |
|||
style="border-style: none"> |
|||
</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 |
|||
th:attr="id='barCode'+${recordMin.getId()},name='barCode'+${recordMin.getId()}" |
|||
style="border-style: none"> |
|||
|
|||
</select> |
|||
|
|||
</select> |
|||
</div> |
|||
</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" |
|||
th:value="${recordMin.getTname()}" |
|||
th:attr="id='openSonByMateralType'+${recordMin.getId()}" |
|||
readonly |
|||
lay-verify="required"/> |
|||
<input type="text" |
|||
th:value="${recordMin.getMtId()}" |
|||
th:attr="id='materialTypeId'+${recordMin.getId()},name='typeId'+${recordMin.getId()}" |
|||
placeholder="请选择物料类型" 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-block"> |
|||
<input type="text" placeholder="请填写材质名称" |
|||
class="layui-input" |
|||
th:value="${recordMin.getMtexture()}" |
|||
th:attr="id='texture'+${recordMin.getId()},name='texture'+${recordMin.getId()}" |
|||
/> |
|||
</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" |
|||
th:value="${recordMin.getMversion()}" |
|||
th:attr="id='version'+${recordMin.getId()},name='version'+${recordMin.getId()}" |
|||
/> |
|||
</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" |
|||
th:value="${recordMin.getMunit()}" |
|||
th:attr="id='unit'+${recordMin.getId()},name='unit'+${recordMin.getId()}" |
|||
/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">库存数量:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="number" class="layui-input" readonly |
|||
th:value="${recordMin.getOldInventory()}" |
|||
th:attr="id='oldInventory'+${recordMin.getId()},name='oldInventory'+${recordMin.getId()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盘点数量:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="number" class="layui-input" |
|||
th:value="${recordMin.getNewInventory()}" |
|||
th:attr="id='newInventory'+${recordMin.getId()},name='newInventory'+${recordMin.getId()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盘点结果:</label> |
|||
<div class="layui-input-block"> |
|||
|
|||
<input type="text" class="layui-input" id="takingResult" |
|||
th:value="${recordMin.getTakingResultShow()}" |
|||
th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盈亏数量:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="number" class="layui-input" readonly |
|||
|
|||
th:value="${recordMin.getInventory()}" |
|||
th:attr="id='inventory'+${recordMin.getId()},name='inventory'+${recordMin.getId()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</fieldset> |
|||
|
|||
<div class="layui-card-body" id="takingFooter" style="padding-right: 0px;display: none"> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">处理时间:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" id="completeTime" class="layui-input" th:value="${mainRecord.getCompleteTime()}" readonly> |
|||
</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" |
|||
readonly |
|||
th:value="${mainRecord.getAuditOpinion()}" |
|||
lay-verify="required"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</fieldset> |
|||
</div> |
|||
</div> |
|||
</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> |
|||
|
|||
|
|||
layui.use(['form', 'flow','step','element'], function () { |
|||
var $ = layui.$, |
|||
step = layui.step, |
|||
element = layui.element, |
|||
form = layui.form; |
|||
|
|||
var position=0,states={},number = 2; |
|||
|
|||
var ifShow = ($("#completeTime").val() === ""); |
|||
|
|||
|
|||
console.log($("#completeTime").val()) |
|||
console.log(ifShow) |
|||
if(ifShow){ |
|||
// 如果还未处理 |
|||
states = [ {title: "待审核"}]; |
|||
}else{ |
|||
$("#takingFooter").show(); |
|||
states = [{title: "已处理"}] |
|||
} |
|||
|
|||
|
|||
// 用于分步表单加载 |
|||
step.render({ |
|||
elem: '#stepForm', |
|||
filter: 'stepForm', |
|||
width: '100%', //设置容器宽度 |
|||
stepWidth: '750px', |
|||
height: '1300px', |
|||
position: position, |
|||
number:number, |
|||
stepItems: states |
|||
}); |
|||
|
|||
}); |
|||
|
|||
</script> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,395 @@ |
|||
<!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"> |
|||
<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; |
|||
} |
|||
|
|||
.layui-form-select { |
|||
width: 100%; |
|||
border-style: none; |
|||
} |
|||
|
|||
</style> |
|||
</head> |
|||
<body> |
|||
<div class="layuimini-container"> |
|||
<div class="layuimini-main"> |
|||
<div> |
|||
<fieldset class="table-search-fieldset"> |
|||
<legend>转移盘点</legend> |
|||
<div class="layui-fluid"> |
|||
<div class="layui-card"> |
|||
<form class="layui-form" |
|||
style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px" |
|||
lay-filter="form1" id="form1"> |
|||
<div class="layui-card-body" id="takingHeader" style="padding-right: 0px"> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">转移位置:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" id="minIds" name="minIds" th:value="${minIds}" style="display:none;"> |
|||
<input type="text" name="mainId" id="mainId" th:value="${mainRecord.getId()}" |
|||
style="display:none;"> |
|||
<input type="text" class="layui-input" |
|||
id="openSonByDepository" readonly |
|||
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> |
|||
|
|||
<fieldset class="table-search-fieldset"> |
|||
<legend>转移明细</legend> |
|||
<div class="layui-card-body" id="InventoryDetails" style="padding-right: 0px"> |
|||
<hr> |
|||
|
|||
<div class="layui-collapse" lay-accordion> |
|||
<div class="layui-colla-item" |
|||
th:each="recordMin,iterStar:${recordChild}"> |
|||
<h2 class="layui-colla-title" |
|||
th:text="${recordMin.getMname()}"></h2> |
|||
<div class="layui-colla-content"> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">物料编码:</label> |
|||
<div class="layui-input-block" style="margin: 0px;"> |
|||
<div class="inputdiv"> |
|||
<input th:attr="name='code' +${recordMin.getId()},id='code'+${recordMin.getId()}" |
|||
type="text" placeholder="请填写入物料编码" |
|||
th:value="${recordMin.getMcode()}" |
|||
class="layui-input" lay-verify="required" |
|||
style="border-style: none"> |
|||
</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 |
|||
th:attr="id='barCode'+${recordMin.getId()},name='barCode'+${recordMin.getId()}" |
|||
style="border-style: none"> |
|||
|
|||
</select> |
|||
</div> |
|||
</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" |
|||
th:value="${recordMin.getTname()}" |
|||
th:attr="id='openSonByMateralType'+${recordMin.getId()}" |
|||
readonly |
|||
lay-verify="required"/> |
|||
<input type="text" |
|||
th:value="${recordMin.getMtId()}" |
|||
th:attr="id='materialTypeId'+${recordMin.getId()},name='typeId'+${recordMin.getId()}" |
|||
placeholder="请选择物料类型" 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-block"> |
|||
<input type="text" placeholder="请填写材质名称" |
|||
class="layui-input" |
|||
th:value="${recordMin.getMtexture()}" |
|||
th:attr="id='texture'+${recordMin.getId()},name='texture'+${recordMin.getId()}" |
|||
/> |
|||
</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" |
|||
th:value="${recordMin.getMversion()}" |
|||
th:attr="id='version'+${recordMin.getId()},name='version'+${recordMin.getId()}" |
|||
/> |
|||
</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" |
|||
th:value="${recordMin.getMunit()}" |
|||
th:attr="id='unit'+${recordMin.getId()},name='unit'+${recordMin.getId()}" |
|||
/> |
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">盘点数量:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="number" class="layui-input" |
|||
th:value="${recordMin.getNewInventory()}" |
|||
th:attr="id='newInventory'+${recordMin.getId()},name='newInventory'+${recordMin.getId()}" |
|||
readonly |
|||
lay-verify="required"/> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label">转移数量:</label> |
|||
<div class="layui-input-block"> |
|||
<input type="number" class="layui-input" |
|||
th:value="${recordMin.getInventory()}" |
|||
th:attr="id='invnetory'+${recordMin.getId()},name='invnetory'+${recordMin.getId()}" |
|||
onblur="checkNumber(this)" |
|||
lay-verify="required"/> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</fieldset> |
|||
|
|||
<div class="layui-card-body" id="takingFooter" style="padding-right: 0px"> |
|||
<div class="layui-form-item"> |
|||
<div class="layui-input-block"> |
|||
<button class="layui-btn" lay-submit lay-filter="formStep"> |
|||
 提交  |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</fieldset> |
|||
</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 scanCode(obj) { |
|||
} |
|||
|
|||
// 用于盘点当前转移数量是否合适 |
|||
function checkNumber(obj) { |
|||
|
|||
} |
|||
|
|||
|
|||
// 用于暂存卡片个数 |
|||
let params = []; |
|||
|
|||
// 用于存储当前选择的盘点位置 |
|||
let depositoryId; |
|||
let placeId; |
|||
|
|||
|
|||
//用于存储当前最小转移量 |
|||
let minTransferNum = {}; |
|||
|
|||
let minIds = []; |
|||
layui.use(['form', 'flow'], function () { |
|||
var $ = layui.$, |
|||
form = layui.form; |
|||
|
|||
var minRecordIds = $("#minIds").val(); |
|||
let split = minRecordIds.split(","); |
|||
for (let i = 0; i < split.length; i++) { |
|||
var s = split[i]; |
|||
if ("" === s) { |
|||
continue; |
|||
} |
|||
minIds.push(Number(s)); |
|||
minTransferNum["invnetory" + s] = ($("#invnetory" + s).val()); |
|||
} |
|||
// 用于打开仓库树形菜单 |
|||
$('#openSonByDepository').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: '/selectDepository?type=2', |
|||
end: function () { |
|||
var nowDepositoryId = $("#depositoryId").val(); |
|||
var nowPlaceId = $("#placeId").val(); |
|||
if (nowDepositoryId !== depositoryId || nowPlaceId !== placeId) { |
|||
// 如果重新选择盘点位置 |
|||
var nowDepositoryName = $("#openSonByDepository").val(); |
|||
$("#form1")[0].reset(); |
|||
$("#depositoryId").val(nowDepositoryId); |
|||
$("#placeId").val(nowPlaceId); |
|||
$("#openSonByDepository").val(nowDepositoryName); |
|||
form.render(); |
|||
} |
|||
depositoryId = nowDepositoryId; |
|||
placeId = nowPlaceId; |
|||
|
|||
} |
|||
}); |
|||
}); |
|||
|
|||
|
|||
// 用于提交盘点转移情况 |
|||
form.on('submit(formStep)', function (data) { |
|||
if (depositoryId !== null && depositoryId !== undefined && depositoryId !== "") { |
|||
data = data.field; |
|||
$.ajax({ |
|||
url: "/stockTaking/stockTransfer", |
|||
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.msg("申请提交成功", { |
|||
icon: 6,//成功的表情 |
|||
time: 500 //1秒关闭(如果不配置,默认是3秒) |
|||
}, function () { |
|||
step.next('#stepForm'); |
|||
}); |
|||
}, |
|||
complete: function () { |
|||
layer.close(this.layerIndex); |
|||
} |
|||
}); |
|||
} else { |
|||
layer.msg("请先选择盘点位置", { |
|||
icon: 0, |
|||
time: 500 |
|||
}) |
|||
} |
|||
}); |
|||
|
|||
//删除数组中指定元素 |
|||
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; |
|||
} |
|||
|
|||
|
|||
// 扫码盘点位置 |
|||
scanCode = function () { |
|||
layer.open({ |
|||
type: 2, |
|||
title: '弹窗内容', |
|||
skin: 'layui-layer-rim', |
|||
maxmin: true, |
|||
shadeClose: true, //点击遮罩关闭层 |
|||
area: ['100%', '100%'], |
|||
move: '.layui-layer-title', |
|||
fixed: false, |
|||
content: '/scanCodeByTaking', |
|||
end: function () { |
|||
var nowDepositoryId = $("#depositoryId").val(); |
|||
var nowPlaceId = $("#placeId").val(); |
|||
if (nowDepositoryId !== depositoryId || nowPlaceId !== placeId) { |
|||
// 如果重新选择盘点位置 |
|||
var nowDepositoryName = $("#openSonByDepository").val(); |
|||
$("#form1")[0].reset(); |
|||
$("#depositoryId").val(nowDepositoryId); |
|||
$("#placeId").val(nowPlaceId); |
|||
$("#openSonByDepository").val(nowDepositoryName); |
|||
form.render(); |
|||
} |
|||
depositoryId = nowDepositoryId; |
|||
placeId = nowPlaceId; |
|||
|
|||
} |
|||
}); |
|||
}; |
|||
|
|||
|
|||
// 用于判断当前数量是否合适 |
|||
checkNumber = function (obj) { |
|||
var id = obj.id; |
|||
var oldNumber = Number(minTransferNum[id]); |
|||
if (depositoryId !== null && depositoryId !== undefined && depositoryId !== "") { |
|||
var req = {}; |
|||
req.depositoryId = depositoryId; |
|||
req.placeId = placeId; |
|||
$.ajax({ |
|||
url: "/stockTaking/findInventoryByLocation", |
|||
type: 'post', |
|||
dataType: 'json', |
|||
contentType: "application/json;charset=utf-8", |
|||
data: JSON.stringify(req), |
|||
success: function (d) { |
|||
var data = d.data; |
|||
var placeInventory = data.inventory; |
|||
id = id.split("invnetory")[1]; |
|||
var number = Number(obj.value); |
|||
var inventory = Number($("#newInventory" + id).val()); |
|||
if (number < oldNumber) { |
|||
layer.msg("转移数量不能小于" + oldNumber); |
|||
obj.value = oldNumber; |
|||
} |
|||
if (number > inventory) { |
|||
layer.msg("转移数量不能大于当前盘点数量:" + inventory); |
|||
obj.value = oldNumber; |
|||
} |
|||
if(number > placeInventory){ |
|||
layer.msg("当前转移库位只能存放:" + placeInventory+"的物料"); |
|||
obj.value = oldNumber; |
|||
} |
|||
} |
|||
|
|||
}) |
|||
} else { |
|||
layer.msg("请先选择盘点位置", { |
|||
icon: 0, |
|||
time: 500 |
|||
}, function () { |
|||
obj.value = oldNumber; |
|||
}) |
|||
} |
|||
} |
|||
|
|||
|
|||
}); |
|||
|
|||
</script> |
|||
</body> |
|||
</html> |
|||
Loading…
Reference in new issue