GZMachinesWeb/WebContent/WEB-INF/views/demandPlan/child/apply_plan_form.jsp

862 lines
21 KiB
Plaintext
Raw Normal View History

2025-06-20 17:47:53 +08:00
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<%@include file="../../baseset.jsp"%>
<%@include file="../../systemset.jsp"%>
<link rel="stylesheet"
href="${bonuspath}/static/js/layui-v2.9.18/layui/css/layui.css" />
<script src="${bonuspath}/static/js/layui-v2.9.18/layui/layui.js"></script>
<link rel="stylesheet"
href="${bonuspath}/static/plugins/zTree/3.5/zTreeStyle.css" />
<script
src="${bonuspath}/static/plugins/zTree/3.5/jquery.ztree.core-3.5.min.js"></script>
<title></title>
<style type="text/css">
.btn-box {
width: 100%;
height: 80px;
box-sizing: border-box;
display: flex;
justify-content: end;
align-items: center;
padding-right: 2%;
}
#baseInfo tr {
height: 2.5em;
}
#baseInfo tr>input {
width: 96%;
}
.inp {
width: 80%;
}
.a {
text-align: left;
}
.tree-div {
padding: 0px 5px;
background: #cae6e8;
border: 1px solid #cae6e8;
width: 300px;
height: 30px;
position: absolute;
top: 24%;
border-radius: 5px;
z-index: 999;
overflow-x: hidden;
cursor: pointer;
}
.treeTitle {
font-size: 1.2em;
text-align: center;
width: 190px;
}
.required_icon, th span {
font-size: 16px;
color: red;
margin: 0 5px 0 5px
}
.layui-form-label {
width: 120px;
}
.layui-form-item .layui-input-inline {
width: 350px;
}
#baseInfo tr th {
vertical-align: middle;
}
.customTable {
width: 96%;
margin: 0 2% 0 2%;
}
</style>
</head>
<body>
<div id="main-box">
<form class="layui-form" onsubmit="return false;"
onclick="return false;">
<div class="layui-form-item" style="margin-top: 1%;">
<div class="layui-inline">
<label class="layui-form-label"><span class="required_icon">*</span>申请工程</label>
<div class="layui-input-inline layui-input-wrap"
style="background-color: #fff !important;">
<select name="projectId" id="projectId" lay-verify="required" lay-search
class="layui-select">
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label"><span class="required_icon">*</span>需用日期</label>
<div class="layui-input-inline layui-input-wrap">
<input type="text" name="needTime" id="needTime"
lay-verify="required" lay-affix="clear" class="layui-input"
placeholder="请选择需用日期" readonly="readonly"
style="cursor: pointer;">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label"><span class="required_icon">*</span>项目部分</label>
<div class="layui-input-inline layui-input-wrap">
<input type="text" name="projectPart" id="projectPart"
lay-verify="required" autocomplete="off" lay-affix="clear"
class="layui-input" maxlength="50" placeholder="请输入项目部分">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label"><span class="required_icon">*</span>施工地点</label>
<div class="layui-input-inline layui-input-wrap">
<input type="text" name="projectContent" id="projectContent"
lay-verify="required" autocomplete="off" lay-affix="clear"
class="layui-input" maxlength="50" placeholder="请输入施工地点">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>计划说明</label>
<div class="layui-input-inline" style="width: 844px;">
<textarea placeholder="请输入计划说明" lay-verify="required" id="remark"
name="remark" class="layui-textarea" maxLength="500"></textarea>
</div>
</div>
<button type="submit" id="formSubmit" class="layui-btn" lay-submit=""
lay-filter="formData" style="display: none;"></button>
</form>
<table id="baseInfo" cellspacing="0" cellpadding="0" border="0"
class="customTable">
<tbody class="a">
<input type="hidden" name="taskId" value="${taskId}" />
<tr class="out_source">
<td colspan="6">
<table>
<tr>
<td width="90%">
<div style="right: 10%; position: fixed; bottom: auto;"
title="点击拖拽" id="typeTree" class="tree-div">
<div class="treeTitle">
选择机具<a onclick="unfoldOrPickUpTypeTree(this)"
style="font-size: 0.8em; margin-left: 1em; cursor: pointer;"
title="点击开展或收起">展开</a>
</div>
<input style="margin-left: 10px; margin-top: 5px;" type="text"
id="key" placeholder="Search..." value="${keyWord}"
onblur="keyChange(1)" oninput="keyChange(2)" />
<div>
<ul id="machineTypeTree" class="ztree"></ul>
</div>
</div>
<div id="b" onclick="t()"></div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="6">
<table id="machineTable"
class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th style="width: 5%" class="center hidden-480">序号</th>
<th style="width: 15%" class="center">物机类型</th>
<th style="width: 15%" class="center">物机名称</th>
<th style="width: 10%" class="center">规格</th>
<th style="width: 10%" class="center">单位</th>
<th style="width: 10%" class="center"><span>*</span>需用量</th>
<th style="width: 10%" class="center"><span>*</span>需用天数</th>
<th style="width: 15%" class="center">备注</th>
<th style="width: 10%" class="center">操作</th>
</tr>
</thead>
<tbody id="list">
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div class="btn-box">
<button class="layui-btn layui-btn-normal save" onclick="saveData2()">提交申请</button>
<button class="layui-btn layui-btn-primary cancel"
onclick="closePage()">返回</button>
</div>
</div>
<script type="text/javascript">
var machines ={};//机具容器
var p; //父页面对象,多层关闭时使用
var form,laydate,layer;
layui.use(['form', 'laydate'], function(){
form = layui.form;
layer = layui.layer;
laydate = layui.laydate;
laydate.render({
elem: '#needTime'
});
form.verify();
form.on('submit(formData)', function (data) {
submitApply(data);
});
getProSelect();
form.render();
});
function saveData2() {
$('#formSubmit').trigger('click')
}
// 工程下拉选
function getProSelect() {
$.ajax({
url : bonuspath + '/backstage/planApplication/getProList',
type: 'post',
data: {},
dataType:"JSON",
success: function (result) {
if (result.res === 1) {
setProList(result.obj);
}
}
});
}
function setProList(list) {
let html = '<option value="">请选择</option>';
if(list && list.length > 0){
$.each(list, function (index, item) {
html += '<option value="' + item.id + '">' + item.name + '</option>';
})
}
$('#projectId').empty().append(html);
layui.form.render();
}
$(function () {
$("#typeTree").mousedown(function(ev){
var div1 = document.getElementById("typeTree");
   var oevent = ev || event;
   var dx = oevent.clientX;
   var distanceX = div1.offsetWidth;
    document.onmousemove = function(ev){
      var oevent = ev || event;
var diff = oevent.clientX - dx;
div1.style.width = (distanceX - diff) + 'px';
  
    };
     document.onmouseup = function(){
      document.onmousemove = null;
      document.onmouseup = null;
    };
});
getMachineTypeTreeData();
});
var leaseCompany = localStorage.getItem("leaseCompany");
var projectName = localStorage.getItem("projectName");
$("#leaseCompany").val(leaseCompany);
$("#projectName").val(projectName);
function t(){
$("#typeTree").css("height", "30px");
$("#typeTree").css("overflow-y",null);
$("#typeTree>a").text("展开");
}
/**
* 打开或收起类型树
*/
function unfoldOrPickUpTypeTree(that){
if($("#typeTree").outerHeight(true) < 40){
$("#typeTree").css("height","400px");
$("#typeTree").css("overflow-y","auto");
$(that).text("收起");
}else{
$("#typeTree").css("height", "30px");
$("#typeTree").css("overflow-y",null);
$(that).text("展开");
}
}
var nodeArray = [];
var preArray = [];
var nodeObj = {};
//定义树节点初始数据
var zNodes1 = [];
//获取数据初始化树
function getMachineTypeTreeData(name) {
$.ajax({
type : 'POST',
url : bonuspath + '/backstage/planApplication/getDevTreeList',
data : {
name:name
},
success : function(result) {
console.log(result);
/* var nodes = zNodes1.concat(result.obj.list);
nodes.push({id: "0", pId: null, name: "物资类型", open: true,code:""});
$.fn.zTree.init($("#machineTypeTree"), setting1, nodes); */
initData(result.obj);
var nodes = zNodes1.concat(result.obj);
$.fn.zTree.init($("#machineTypeTree"), setting1, nodes);
var treeObj = $.fn.zTree.init($("#machineTypeTree"), setting1, nodes);
fillter(treeObj);
},
error : function(e) {
JY.Model.info(e.resMsg);
},
dataType : 'json'
});
}
function fillter(treeObj) {
//获得树形图对象
var nodeList = treeObj.getNodes();//展开第一个根节点
for(var i = 0; i < nodeList.length; i++) { //设置节点展开第二级节点
treeObj.expandNode(nodeList[i], false, false, true);
var nodespan = nodeList[i].children;
if(nodespan && nodespan.length > 0){
for(var j = 0; j < nodespan.length; j++) { //设置节点展开第三级节点
treeObj.expandNode(nodespan[j], false, false, true);
var nodespans = nodespan[j].children;
if(nodespans!=null){
for(var k = 0; k < nodespans.length; k++) { //设置节点展开第三级节点
treeObj.expandNode(nodespans[k], false, false, true);
}
}else{
}
}
}
}
}
/**
* @author zp
* @date
* @function 将数组里面对象装进 id为键 值为数组中对象的 json对象 以便快速定位到该值
* @returns
*/
function keyChange(flag){
if(flag == 1){
var keyWord = $("#key").val().trim();
if(!JY.Object.notNull(keyWord)){
var nodes = zNodes1.concat(JsonToArray(nodeObj));
$.fn.zTree.init($("#machineTypeTree"), setting1, nodes);
}
}else{
var keyWord = $("#key").val().trim();
var keyObj = {};
if(nodeArray!=null){
var size = nodeArray.length;
var name="";
var node = {};
var p = {};
var pp = {};
for(var i = 0; i < size ; i++){
node = nodeArray[i];
name = node.name;
if(name.indexOf(keyWord) != -1){
keyObj[node.id] = node;
if(node.level == 3){
p =nodeObj[node.pId];
keyObj[p.id] = p;
pp = nodeObj[p.pId];
keyObj[pp.id] = pp;
for (var key in nodeObj){
if(nodeObj[key].pId == node.id){
keyObj[nodeObj[key].id] = nodeObj[key];
}
}
}else if(node.level == 2){
p =nodeObj[node.pId];
keyObj[p.id] = p;
for (var key in nodeObj){
if(nodeObj[key].pId == node.id){
keyObj[nodeObj[key].id] = nodeObj[key];
for(var keyy in nodeObj){
if(nodeObj[keyy].pId == nodeObj[key].id){
keyObj[nodeObj[keyy].id] = nodeObj[keyy];
}
}
}
}
}else if(node.level == 1){
for (var key in nodeObj){
if(nodeObj[key].pId == node.id){
keyObj[nodeObj[key].id] = nodeObj[key];
for(var keyy in nodeObj){
if(nodeObj[keyy].pId == nodeObj[key].id){
keyObj[nodeObj[keyy].id] = nodeObj[keyy];
for(var keyyy in nodeObj){
if(nodeObj[keyyy].pId == nodeObj[keyy].id){
keyObj[nodeObj[keyyy].id] = nodeObj[keyyy];
}
}
}
}
}
}
}
}
}
}else{
}
var nodes = zNodes1.concat(JsonToArray(keyObj));
$.fn.zTree.init($("#machineTypeTree"), setting1, nodes);
}
}
/**
* @author
* @date
* @function 将数组里面对象装进 id为键 值为数组中对象的 json对象 以便快速定位到该值
* @returns
*/
function initData(arr){
nodeArray = arr;
preArray = arr;
var size = nodeArray.length;
var node ={};
var key ="";
for(var i = 0;i<size;i++){
node = nodeArray[i];
key=node.id;
nodeObj[key]=node;
}
}
/**
* @author zp
* @date
* @function 排除指定id的node
* @returns 数组对象
*/
function excludeUnitId(arr){
initData(arr);
if(excludeArr.indexOf(",") == -1){
delete nodeObj[excludeArr];
}else{
var a = excludeArr.split(",");
deleteExclode(a);
}
nodeArray = JsonToArray(nodeObj,1)
return nodeArray;
}
/**
* @author zp
* @date
* @function 将传入的json对值全部封装进数组
* @returns 数组对象
*/
function JsonToArray(obj,flag){
var arr = [];
for (var key in obj){
arr.push(obj[key]);
}
var size = arr.length;
if(flag != 1){
for(var i = 0;i<size;i++){
arr[i].open = true;
}
}
return arr;
}
//树的设置
var setting1 = {
view : {
selectedMulti : false
},
data : {
simpleData : {
enable : true
},
showTitle:true,
key: {
title: "name" //设置title提示信息对应的属性名称 也就是节点相关的某个属性 这样设置显示的是属性 title的内容
}
},
edit : {
enable : false
},
callback : {
// 不允许拖拽
onClick : chooseNode,
beforeDrag : beforeDrag,
}
};
//不允许拖拽
function beforeDrag(treeId, treeNodes) {
return false;
}
var oob={};
/**
* 单击节点事件
* @returns
*/
function chooseNode(event,treeId,treeNode){
//console.log(JSON.stringify(treeNode))
if(!treeNode.isParent ){
oob = treeNode;
saveMaInfo(oob);
}
}
function saveMaInfo(oob){
if(JSON.stringify(oob) == JSON.stringify({})){
var indexMsg = layer.confirm("<h5 style='color:red;'>请选择物资!</h5>", {btn: ['关闭']},function(){
layer.close(indexMsg);
});
}else{
if(validPartIsSelected(oob)){
var indexMsg = layer.confirm("<h5 style='color:red;'>已经选择了该物资!</h5>", {btn: ['关闭']},function(){
layer.close(indexMsg);
});
}else{
invokeSubPageFunction(oob);
}
}
}
/**
* @author
* @date 2020-04-22
* @function 条件查询
* @returns
*/
function search(){
$("#search").trigger("click")
}
/**
* @author
* @date 2020-04-24
* @function 启动执行
* @returns
*/
$(function () {
$("#keyWord").keydown(function(e) {
keycode = e.which || e.keyCode;
if (keycode == 13) {
search();
}
});
p = window.parent;
});
/**
* @author
* @date 2020-04-29
* @function 提交申请审核结果
* @returns
*/
function submitApply(data){
var machines = [];
var size = $(".pa").size();
if(size == 0){
var indexMsg = layer.confirm("<h5 style='color:red'>您还没有选择任何需求,请先选择设备!</h5>", {btn: ['确认']},function(){
layer.close(indexMsg);})
return;
}
$(".pa").each(function(){
o = paramConversionToObjOfForm2(this);
machines.push(o);
});
data.field.jsonData = JSON.stringify(machines);
let loadingMsg = layer.msg('正在提交保存,请稍等...', {
icon: 16
,shade: 0.01
,time:'0'
});
console.log(JSON.stringify(data.field));
$.ajax({
url: bonuspath +'/backstage/planApplication/addPlan',
type: 'POST',
data: JSON.stringify(data.field),
dataType: 'json',
contentType:"application/json",
beforeSend: function () {
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
$('.cancel').addClass("layui-btn-disabled").attr("disabled", true);
},
success: function (result) {
layer.close(loadingMsg); // 关闭提示层
if (result.res === 1) {
parent.layer.msg(result.msg, { icon: 1 });
closePage(1);
} else{
var indexMsg = layer.confirm(result.resMsg, {btn: ['关闭']},function(){
layer.close(indexMsg);
});
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
}
},
error: function (result) {
layer.close(loadingMsg); // 关闭提示层
layer.msg('服务异常,请稍后重试', { icon: 16, scrollbar: false, time: 2000 });
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
}
});
}
//解析表格数据
function paramConversionToObjOfForm2(that){
let obj = {
'moduleId' : $(that).find('th').eq(0).html(),
'type' : $(that).find('th').eq(2).html(),
'typeName': $(that).find('th').eq(3).html(),
'module' : $(that).find('th').eq(4).html(),
'unit' : $(that).find('th').eq(5).html(),
'needNum' : $(that).find('th').eq(6).children('input').val(),
'times' : $(that).find('th').eq(7).children('input').val(),
'remarks' : $(that).find('th').eq(8).children('input').val()
};
return obj;
}
/**
* @author
* @date 2020-04-29
* @function 回调子页面函数
* @returns
*/
function invokeSubPageFunction(obj){
$("#list").append(renderData(obj));
machines[obj.id] = obj;
/* var id = obj.id;
var isCount = obj.isCount;
$.ajax({
type : 'POST',
url : bonuspath + '/backstage/machineType/getNumAndPick',
data : {
id:id,
isCount:isCount
},
dataType : 'json',
success : function(data) {
//alert(JSON.stringify(data))
machines[obj.id] = obj;
obj.storageNum = data.obj.nums;
obj.preOutNum = data.obj.allNums;
var size = Object.getOwnPropertyNames(machines).length
$("#list").append(renderData(obj,size));
},
error : function(e) {
JY.Model.info(e.resMsg);
},
}); */
}
var user;
/**
* @author
* @date 2020-04-29
* @function 校验是否已经选择
* @returns
*/
function validPartIsSelected(obj){
if(machines[obj.id]){
return true;
}
return false;
}
/**
* @author
* @date 2020-04-29
* @function 渲染数据
* @returns
*/
function renderData(obj){
console.info(obj)
var index = $('.pa').size() + 1;
var html = "";
html += "<tr class='pa'>";
html += "<th class='center' style='display:none'>"+obj.id+"</th>";
html += "<th class='center'>"+index+"</th>";
html += "<th class='center'>"+setNullValue(obj.ppName)+"</th>";
html += "<th class='center'>"+setNullValue(obj.pName)+"</th>";
html += "<th class='center'>"+setNullValue(obj.name)+"</th>";
html += "<th class='center'>"+setNullValue(obj.unit)+"</th>";
html += "<th class='center'><input style='width:90%;height:2.5em;border: 1px solid #d5d5d5 !important;padding: 0 5px 0 5px;' onblur='validNum(this,1)' maxLength='8' value='1'></th>";
html += "<th class='center'><input style='width:90%;height:2.5em;border: 1px solid #d5d5d5 !important;padding: 0 5px 0 5px;'onblur='validNum(this,2)' maxLength='4' value='1'></th>";
/* if(JY.Object.notNull(obj.unitName)){
html += "<th class='center'>"+obj.unitName+"</th>";
}else{
html += "<th class='center'>暂无</th>";
} */
/* if(JY.Object.notNull(obj.keepName)){
html += "<th class='center'>"+obj.keepName+"</th>";
}else{
html += "<th class='center'>暂无</th>";
} */
html += "<th class='center'><input onblur='checkText(this)' maxLength='255' filed='remarks,val' type='text' style='width:100%;height:2.5em;'></th>";
html += "<th class='center'><a style='color:#4491d3;cursor: pointer;' onclick='delPartData("+obj.id+",this)'>删除</a></th></tr>";
return html;
}
// 设置空值
function setNullValue(value){
if(!value){
return '/';
}
return value;
}
/**
* @author
* @date 2019-06-19
* @function
* @returns
*/
function validNum(that,type){
var num = $(that).val();
if(type === 1){ // 需用量 最少为1 最大不能超过十位数
const regex = /^(?!0\d)\d{1,8}$/;
if(!regex.test(num)){
var indexMsg = layer.confirm("<h5 style='color:red'>需用量最少为1最大输入6位数且为正整数</h5>", {btn: ['确认']},function(){
layer.close(indexMsg);})
$(that).val(1);
}
}else if(type === 2){ // 需用天数
const regex = /^(?!0\d)\d{1,4}$/;
if(!regex.test(num)){
var indexMsg = layer.confirm("<h5 style='color:red'>需用天数最少为1最大输入4位数且为正整数</h5>", {btn: ['确认']},function(){
layer.close(indexMsg);})
$(that).val(1);
}
}
}
/**
* @author
* @date 2019-08-27
* @function
* @returns
*/
function delPartData(id,that){
var indexMsg = layer.confirm("<h5 style='color:red'>您确定删除此条数据吗?</h5>", {btn: ['确定','取消']},function(){
layer.close(indexMsg);
$(that).parent().parent().remove();
delete machines[id];
if($('.pa').size() > 0){
$("#list .pa").each(function(index,item){
console.log(index);
$(this).find('th').eq(1).html(index + 1)
});
}
});
}
// 关闭页面
function closePage(type) {
let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引
if (type == 1) {
window.parent.reloadData();
}
parent.layer.close(index); //再执行关闭
}
</script>
</body>
</html>