需求计划修改页面

This commit is contained in:
cwchen 2025-01-24 14:33:51 +08:00
parent 7dc71941e4
commit 69659ea640
3 changed files with 611 additions and 0 deletions

View File

@ -173,8 +173,12 @@ function initTable() {
align: "center",
unresize: true,
templet: function (d) {
let status = getCheckStatus(d.statusType, d.status);
let html = "";
html += "<a onclick='applyPlanDetail(" + JSON.stringify(d) + ")'>详情</a>";
if (status.indexOf('驳回') > -1) {
html += "<div class='splitLine'>|</div><a onclick='editApplyPlan(" + JSON.stringify(d) + ")'>修改</a>";
}
return html;
},
},
@ -232,6 +236,11 @@ function applyPlan(obj) {
openIframeByParamObj("apply_plan", "机具需求计划申请", "./child/apply_plan_form.html", "92%", "95%", obj);
}
// 申请修改
function editApplyPlan(obj) {
openIframeByParamObj("editApplyPlan", "机具需求计划申请修改", "./child/apply_plan_edit_form.html", "92%", "95%", obj);
}
// 详情
function applyPlanDetail(obj) {
openIframeByParamObj("apply_plan_detail", "详情", "./child/apply_plan_detail.html", "92%", "95%", obj);

View File

@ -0,0 +1,465 @@
let idParam, objParam;
let form, laydate, layer, upload, table, util;
let pageNum = 1, tableIns; // 定义分页
let jjDataArr = []; // 配件数据
let proList = []; // 工程下拉选
let delIdArr = [];
let detailIdArr = [];
function setParams(obj) {
objParam = JSON.parse(obj);
layui.use(['form', 'layer', 'laydate', 'upload', 'table'], function () {
form = layui.form;
layer = layui.layer;
laydate = layui.laydate;
upload = layui.upload;
table = layui.table;
util = layui.util;
laydate.render({
elem: '#needTime'
});
form.verify();
form.on('submit(formData)', function (data) {
submitApply(data);
});
form.render();
getProList();
getPlanDetails();
getPlanDetailsList();
});
}
// 工程下拉选
function getProList() {
let url = dataUrl + 'backstage/planApplication/getProList';
ajaxRequest(url, "POST", null, false, function () {
}, function (result) {
if (result.code === 200) {
setSelectData(result.data);
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
}
// 工程下拉选赋值
function setSelectData(proList) {
let html = '<option value="">请选择工程</option>';
$.each(proList, function (index, item) {
html += '<option value="' + item.id + '">' + item.name + '</option>'
})
$('#projectId').empty().append(html);
layui.form.render();
}
// 计划申请详情
function getPlanDetails() {
let params = {
encryptedData: JSON.stringify({
'id': objParam.id
})
};
let url = dataUrl + 'backstage/planApplication/getPlanDetails';
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
console.error(result);
if (result.code === 200) {
setFormData(result.data);
} else {
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
function setFormData(obj) {
form.val('formInfo', obj);
layui.form.render();
}
}
// 安全工器具明细
function getPlanDetailsList() {
let params = {
encryptedData: JSON.stringify({
'id': objParam.id
})
};
let url = dataUrl + 'backstage/planApplication/getPlanDetailsList2';
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
console.error(result);
if (result.code === 200) {
setTable(result.data);
} else {
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
function setTable(obj) {
$.each(obj, function (index, item) {
let obj = Object.assign({}, item);
obj.ppName = item.type;
obj.pName = item.typeName;
obj.name = item.module;
obj.dataId = item.id;
obj.id = item.moduleId;
jjDataArr.push(obj);
detailIdArr.push(item.id);
})
$('#no_data_title').css({ 'display': 'none' });
$('#search-info').removeAttr('style');
$('#table-box').removeAttr('style');
setTableData(jjDataArr);
}
}
function saveData2() {
$('#formSubmit').trigger('click')
}
function setNumColor(value, type) { // 1.需要量 2.已发货量 3.差缺量
let color = '#66b1ff';
if (type === 1) {
color = '#66b1ff';
} else if (type === 2) {
color = '#19be6b';
} else if (type === 3) {
color = '#ff9900';
}
return '<span style="color:' + color + ';font-weight:bold;">' + value + "</span>";
}
// 提交
function submitApply(data) {
let list = getBaseTableData();
// 校验配件入库数量
if (list.length === 0) {
return layer.msg('未添加机具数据', { icon: 7 });
}
for (let i = 0; i < list.length; i++) {
if (parseInt(list[i].needNum) === 0) {
return layer.msg('机具明细,第' + (i + 1) + '行,未填写需用量', { icon: 7 });
}
if (parseInt(list[i].times) === 0) {
return layer.msg('机具明细,第' + (i + 1) + '行,未填写需用天数', { icon: 7 });
}
}
data.field.id = objParam.id;
data.field.jsonData = JSON.stringify(list);
// 删除的工器具ID
let detailIdArr2 = [];
$.each(jjDataArr, function (index, item) {
detailIdArr2.push(item.dataId);
})
console.error(detailIdArr);
console.error(detailIdArr2);
let delDetailArr = getMinus(detailIdArr2, detailIdArr);
console.error(delDetailArr);
if (delDetailArr && delDetailArr.length > 0) {
data.field.delIds = delDetailArr;
}
let loadingMsg = layer.msg('正在提交保存,请稍等...', { icon: 16, shade: 0.01, time: '0' });
let url = dataUrl + 'backstage/planApplication/updatePlan';
let params = {
encryptedData: JSON.stringify(data.field)
};
ajaxRequest(url, 'POST', params, true, function () {
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
$('.cancel').addClass("layui-btn-disabled").attr("disabled", true);
}, function (result) {
layer.close(loadingMsg);
$('.save').removeClass("layui-btn-disabled").attr("disabled", false);
$('.cancel').removeClass("layui-btn-disabled").attr("disabled", false);
if (result.code === 200) {
parent.layer.msg(result.msg, { icon: 1 });
closePage(1);
} else {
layer.msg(result.msg, { icon: 2 });
}
}, function (xhr, status, error) {
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);
errorFn(xhr, status, error)
}, null);
// 获取差集
function getMinus(a, b) {
let minus = b.filter(item => !a.includes(item));
return minus;
}
}
// 机具明细数据
function getBaseTableData() {
let tableData = [];
$('#baseTable tbody tr').each(function (index, item) {
let times = $(this).find('td').eq(7).find('input[name="times"]').val();
let needNum = $(this).find('td').eq(6).find('input[name="needNum"]').val();
let dataId = null;
if ($(this).attr('dataId') === 'undefined') {
dataId = null;
} else {
dataId = $(this).attr('dataId');
}
tableData.push({
moduleId: $(this).attr('id'),
id: dataId,
type: $(this).find('td').eq(2).html(),
typeName: $(this).find('td').eq(3).html(),
module: $(this).find('td').eq(4).html(),
unit: $(this).find('td').eq(5).html(),
needNum: needNum ? needNum : 0,
times: times ? times : 0,
remarks: $(this).find('td').eq(8).find('input[name="remarks"]').val(),
})
})
return tableData;
}
// 选择机具类型
function chooseFitType() {
let params = {};
openIframeByParamObj("choose_fit_type", '选择需求计划机具类型<span style="color:red;font-size:14px">(设备类请备注大、中、小)</span>', "./choose_tool_type_list.html", '92%', '95%', params);
}
// 查询
function search() {
let keyWord = $('#pName').val();
let keyWord2 = $('#name').val();
if (!keyWord && !keyWord2) {
setTableData(jjDataArr);
} else if (keyWord && !keyWord2) {
let dataList = jjDataArr.filter(item => {
return item.pName.indexOf(keyWord) > -1;
})
setTableData(dataList);
} else if (!keyWord && keyWord2) {
let dataList = jjDataArr.filter(item => {
return item.name.indexOf(keyWord2) > -1;
})
setTableData(dataList);
} else if (keyWord && keyWord2) {
let dataList = jjDataArr.filter(item => {
return item.pName.indexOf(keyWord) > -1 && item.name.indexOf(keyWord2) > -1;
})
setTableData(dataList);
}
}
// 重置
function resetSearch() {
$('#pName').val('');
$('#name').val('');
setTableData(jjDataArr);
}
// 子页面回调数据
function addFitDatas(data) {
console.log('新增的数据:' + data);
if (jjDataArr.length > 0) { // 继续添加数据
let newJjDataArr = JSON.parse(data);
$.each(newJjDataArr, function (index, item) {
updateOrAddObject(item.id, item);
});
// setTableData(jjDataArr);
goOnAddData();
} else { // 第一次添加数据
jjDataArr = JSON.parse(data);
if (jjDataArr && jjDataArr.length > 0) {
$('#no_data_title').css({ 'display': 'none' });
$('#search-info').removeAttr('style');
$('#table-box').removeAttr('style');
setTableData(jjDataArr);
}
}
function updateOrAddObject(id, newObject) {
const index = jjDataArr.findIndex(obj => obj.id === id);
if (index !== -1) {
// 如果对象存在,则替换它
let oldData = jjDataArr[index];
newObject.dataId = oldData.dataId;
jjDataArr[index] = newObject;
} else {
// 如果对象不存在,则添加到数组
jjDataArr.push(newObject);
}
}
}
// 安全工器具表格赋值
function setTableData(results) {
$('#allCheck').prop('checked', false)
delIdArr.splice(0, delIdArr.length);
var html = "";
if (results && results.length > 0) {
for (var i = 0; i < results.length; i++) {
var l = results[i];
html += "<tr id='" + l.id + "' dataId='" + l.dataId + "'>";
html += '<td><input onclick="sel(this.checked,this,' + l.id + ')" name="check" type="checkbox"></td>';
html += "<td style='vertical-align:middle;' class='center hidden-480'>"
+ (i + 1) + "</td>";
html += "<td>" + l.ppName + "</td>";
html += "<td>" + l.pName + "</td>";
html += "<td>" + l.name + "</td>";
html += "<td>" + l.unit + "</td>";
html += "<td>" + setFormInput(l.needNum, 1) + "</td>";
html += "<td>" + setFormInput(l.times == null ? 0 : l.times, 2) + "</td>";
html += "<td>" + setFormInput(l.remarks, 3) + "</td>";
html += "</tr>";
}
} else {
html += "<tr><td colspan='9' class='center'>没有相关数据</td></tr>";
}
$("#baseTable tbody").empty().append(html);
layui.form.render();
}
function setFormInput(value, type) {
let html = '<form class="layui-form layuimini-form"><div class="layui-inline">';
if (type === 1) { // 需用量
html += '<input class="layui-input" name="needNum" onblur="checkValue(this,1,\'需用量\')" value="' + setNullValue(value) + '" autocomplete="off" lay-verify="required" maxlength="9">';
} else if (type === 2) { // 需用天数
html += '<input class="layui-input" name="times" onblur="checkValue(this,2,\'需用天数\')" value="' + setNullValue(value) + '" autocomplete="off" lay-verify="required" maxlength="9">';
} else if (type === 3) { // 备注
html += '<input class="layui-input" placeholder="请输入备注" id="remarks" name="remarks" value="' + setNullValue(value) + '" maxLength="60" lay-affix="clear"></input>';
}
html += '</div></form>';
return html;
}
// 复选框全选
function selectAll(selectStatus) {//传入参数(全选框的选中状态)
if (selectStatus) {
$("input[name='check']").each(function (i, n) {
n.checked = true;
});
$.each(jjDataArr, function (index, item) {
delIdArr.push(item.id);
})
} else {
$("input[name='check']").each(function (i, n) {
n.checked = false;
});
delIdArr.splice(0, delIdArr.length);
}
}
// 单个选中
function sel(selectStatus, that, id) {
if (selectStatus) {
$(that).prop('checked', true);
delIdArr.push(id);
} else {
$(that).prop('checked', false);
for (let i = 0; i < delIdArr.length; i++) {
if (delIdArr[i] == id) {
delIdArr.splice(i, 1);
break;
}
}
}
}
// 删除选中
function delFitType() {
if (delIdArr.length == 0) {
layer.msg('请先选择需要删除的数据!', { icon: 7 })
return;
}
let layerIndex = layer.confirm('<h5 style="color:red">确定要删除选中数据吗!</h5>', { title: '操作提示' }, function () {
layer.close(layerIndex);
for (let i = 0; i < delIdArr.length; i++) {
for (let j = 0; j < jjDataArr.length; j++) {
let id = jjDataArr[j].id;
if (delIdArr[i] == id) {
jjDataArr.splice(j, 1);
break;
}
}
}
if (jjDataArr.length === 0) {
$('#no_data_title').removeAttr('style');
$('#search-info').css({ 'display': 'none' });
$('#table-box').css({ 'display': 'none' });
} else {
// setTableData(jjDataArr);
handleDelTableData(delIdArr);
}
delIdArr.splice(0, delIdArr.length);
});
}
// 删除表格数据
function handleDelTableData(delIdArr) {
if (delIdArr.length > 0) {
$.each(delIdArr, function (index, item) {
$('#baseTable tbody tr').each(function () {
let id = $(this).attr('id');
if (parseInt(id) === item) {
$(this).remove();
return false;
}
})
})
}
$('#baseTable tbody tr').each(function (index, item) {
$(this).find('td').eq(1).html(index + 1);
})
}
// 继续添加数据
function goOnAddData() {
if (jjDataArr.length > 0) {
$.each(jjDataArr, function (index, item) {
$('#baseTable tbody tr').each(function () {
let id = $(this).attr('id');
if (parseInt(id) === parseInt(item.id)) {
let times = $(this).find('td').eq(7).find('input[name="times"]').val(),
needNum = $(this).find('td').eq(6).find('input[name="needNum"]').val(),
remarks = $(this).find('td').eq(8).find('input[name="remarks"]').val();
if (!item.times || parseInt(item.times) === 0) {
item.times = times;
}
if (!item.needNum || parseInt(item.needNum) === 0) {
item.needNum = needNum;
}
if (!item.remarks) {
item.remarks = remarks;
}
}
})
});
setTableData(jjDataArr);
$('#baseTable tbody tr').each(function (index, item) {
$(this).find('td').eq(1).html(index + 1);
})
}
}
// 校验数据
function checkValue(that, type, name) {
let value = $(that).val();
if (type === 1 || type === 2) { // 需用量 / 需用天数
const regex = /^(0|[1-9]\d{0,6})$/;
if (!regex.test(value) && value) {
layer.msg('' + name + '输入有误,请重新输入!', { icon: 5 })
$(that).val(0);
}
}
}
// 关闭页面
function closePage(type) {
let index = parent.layer.getFrameIndex(window.name); // 先得到当前 iframe层的索引
if (type == 1) {
window.parent.reloadData();
}
parent.layer.close(index); // 再执行关闭
}

View File

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>需求计划申请修改</title>
<link rel="stylesheet" href="../../../lib/layui-v2.9.18/layui/css/layui.css" media="all">
<link rel="stylesheet" href="../../../css/font.css" media="all">
<link rel="stylesheet" href="../../../css/data_form.css" media="all">
<link rel="stylesheet" href="../../../css/accessory/accessory_store_form.css" media="all">
</head>
<body>
<div id="main-box">
<div id="basic-box">
<form class="layui-form layuimini-form" onclick="return false;" lay-filter="formInfo">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label required" style="width: 100px !important;">申请工程</label>
<div class="layui-input-inline">
<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 required" style="width: 110px !important;">需用日期</label>
<div class="layui-input-inline layui-input-wrap">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-date"></i>
</div>
<input class="layui-input" id="needTime" autocomplete="off" name="needTime"
lay-verify="required" readonly style="cursor: pointer;">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label required" style="width: 100px !important;">项目部分</label>
<div class="layui-input-inline">
<input class="layui-input" name="projectPart" id="projectPart" autocomplete="off"
lay-verify="required" maxlength="50" lay-affix="clear">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label required" style="width: 110px !important;">施工地点</label>
<div class="layui-input-inline layui-input-wrap">
<input class="layui-input" name="projectContent" id="projectContent" autocomplete="off"
lay-verify="required" maxlength="50" lay-affix="clear">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required" style="width: 100px !important;">计划说明</label>
<div class="layui-input-inline" style="width: 764px;">
<textarea placeholder="请输入计划说明" lay-verify="required" id="remark" name="remark"
class="layui-textarea" maxLength="250" lay-affix="clear"></textarea>
</div>
</div>
<button type="submit" id="formSubmit" class="layui-btn" lay-submit="" lay-filter="formData"
style="display: none;"></button>
</form>
<div class="title layout">
<span style="font-weight:700;text-decoration:none;color:#409EFF;"></span>
<p>机具明细</p>
</div>
<!-- 无数据时-展示 -->
<div id="no_data_title" class="layout">
<img src="../../../images/no_data_icon.png" alt="无数据">
<p style="font-size: 16px;font-weight: bold;">您还没选择需用机具类型</p>
<p style="color: #999999;">请先添加机具类型后再执申请操作</p>
<button class="layui-btn layui-bg-blue" onclick="chooseFitType()">选择机具类型</button>
</div>
<fieldset class="table-search-fieldset" id="search-info" style="display: none;">
<legend>搜索信息</legend>
<div style="margin: 10px 10px 10px 10px">
<form class="layui-form layui-form-pane" action="#" onsubmit="return false;">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="pName" id="pName" autocomplete="off" class="layui-input"
lay-affix="clear" placeholder="输入物机名称" maxlength="30">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="name" id="name" autocomplete="off" class="layui-input"
lay-affix="clear" placeholder="输入规格" maxlength="30">
</div>
</div>
<div class="layui-inline">
<button class="layui-btn layui-bg-blue" onclick="search()"><i class="layui-icon"></i>
</button>
<button class="layui-btn layui-btn-primary" onclick="resetSearch()"><i
class="layui-icon layui-icon-refresh"></i> 重 置</button>
<button class="layui-btn layui-bg-blue" onclick="chooseFitType()">选择机具</button>
<button class="layui-btn layui-bg-red" onclick="delFitType()">删除选中</button>
</div>
</div>
</form>
</div>
</fieldset>
<div class="table-box" table-responsive style="display: none;" id="table-box">
<table id="baseTable" class="classTable table-hover">
<thead>
<tr>
<th style="width: 5%" class="center">
<input id="allCheck" onclick="selectAll(this.checked)" type="checkbox">
</th>
<th style="width: 5%" class="center">序号</th>
<th style="width: 10%" 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: 15%" class="center"><span style="color: red;">*</span>需用量</th>
<th style="width: 15%" class="center"><span style="color: red;">*</span>需用天数</th>
<th style="width: 15%" class="center">备注</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
<div class="btn-box">
<button class="layui-btn layui-bg-blue save" onclick="saveData2()">提交申请</button>
<button class="layui-btn layui-btn-primary cancel" onclick="closePage()">返回</button>
</div>
</div>
</body>
<script src="../../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../../js/public.js" charset="utf-8"></script>
<script src="../../../lib/layui-v2.9.18/layui/layui.js" charset="utf-8"></script>
<script src="../../../js/demandPlan/child/apply_plan_edit_form.js" charset="utf-8"></script>
<script src="../../../js/openIframe.js" charset="utf-8"></script>
</html>