gz_gqj_web/js/demandPlan/child/send_goods_form.js

446 lines
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

let idParam, objParam, fileList = new Array(), imgListUp = new Array();
let form, laydate, layer, upload, table, util;
let pageNum = 1, tableIns; // 定义分页
let jjDataArr = []; // 新增需求计划外机具的数据
let jjDetailArr = []; // 机具明细数据
function setParams(obj) {
objParam = JSON.parse(obj);
idParam = objParam.proId;
$('#proName').html(objParam.proName);
$('#planNum').html(objParam.planNum);
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: '#createDay'
});
form.verify();
form.on('submit(formData)', function (data) {
submitApply(data);
});
form.render();
let uploadObj = upload.render({
elem: '#test2',
multiple: true,
dataType: "json",
exts: 'jpg|png|jpeg|doc|docx|pdf|xlsx|xls',
acceptMime: 'image/jpg,image/png,image/jpeg,application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
number: 5, //最大上传数量
size: 1024 * 10, //最大文件大小单位k
auto: false, //是否自动上传 默认为true
bindAction: '#hideUpload', //绑定的按钮
choose: function (obj) {
uploadObj.config.elem.next()[0].value = '';
obj.preview(function (index, file, result) {
console.log(file);
$('#uploader-list').append(
'<div id="" class="file-iteme">' +
'<div class="handle"><p>x</p></div>' +
handleFileType(index, file, result) +
'</div>'
);
let map = new Map();//将选择的图片索引和图片写成对象存入集合
map.index = index;
map.file = file;
fileList.push(map);
});
}
});
initTable();
});
}
// 设置文件类型
function handleFileType(index, file, result) {
let html = '', img = '';
if (file.ext === 'doc' || file.ext === 'docx') {
img = '../../../images/docx.png';
} else if (file.ext === 'xls' || file.ext === 'xlsx') {
img = '../../../images/xlsx.png';
} else if (file.ext === 'pdf') {
img = '../../../images/PDF.png';
} else {
return '<img class="img" style="width: 130px;height: 120px;" data-index=' + index + ' data-name=' + file.name + ' src=' + result + '>';
}
html += '<div class="layout upload-file" data-index=' + index + '>' +
'<img src="' + img + '">' +
'<p style="text-align: center;font-size:12px;">' + file.name + '</p>' +
'</div>';
return html;
}
// 删除文件
$(document).on("click", ".file-iteme .handle", function (event) {
imgListUp.splice(0, imgListUp.length);
let index = $(this).next().attr('data-index');
$.each(fileList, function (inx, ele) {
//对比删除文件索引
//将未删除的存入新集合
if (index != ele.index) {
imgListUp.push(ele);
}
});
$(this).parent().remove();
//将新文件集合替换老集合
fileList.splice(0, fileList.length);
$.each(imgListUp, function (inx, ele) {
fileList.push(ele)
});
});
// 查询/重置
function queryTable(type) {
if (type === 1) {
reloadTable(1);
} else if (type === 2) {
$('#name').val('');
$('#module').val('');
layui.form.render();
reloadTable(1);
}
}
// 重载表格
function reloadTable(pageNum) {
table.reload("currentTableId", {
page: {
curr: pageNum ? pageNum : 1,
},
where: {
encryptedData: JSON.stringify({
'name': $('#name').val(),
'module': $('#module').val(),
'proId': idParam
}),
},
},
);
}
// 表格数据
function initTable() {
tableIns = table.render({
elem: "#currentTableId",
id: 'currentTableId',
height: "full",
headers: {
authorization: sessionStorage.getItem("gz-token"),
},
url: dataUrl + "backstage/planOut/getPorInfoDetail",
where: {
encryptedData: JSON.stringify({
'name': $('#name').val(),
'module': $('#module').val(),
'proId': idParam
}),
},
request: {
pageName: 'pageNum',
limitName: 'pageSize'
},
parseData: function (res) { // res 即为原始返回的数据
if (jjDetailArr && res.list) {
$.each(res.list, function (index, item) {
$.each(jjDetailArr, function (index2, item2) {
if (item.id === item2.id) {
item.num = item2.num;
item.tzNum = item2.tzNum;
item.outId = item2.outId;
}
});
});
}
return {
"code": 0, // 解析接口状态
"msg": '获取成功', // 解析提示文本
"count": res.total, // 解析数据长度
"data": res.list // 解析数据列表
};
},
cols: [
[
{
width: 80,
title: "序号",
align: "center",
templet: function (d) {
return d.LAY_NUM;
},
},
{
field: "type",
width: 150,
title: "物机类型",
unresize: true,
align: "center",
},
{
field: "name",
width: 150,
title: "物机名称",
unresize: true,
align: "center",
},
{
field: "module",
width: 120,
title: "规格",
unresize: true,
align: "center",
},
{
field: "unit",
title: "单位",
width: 120,
unresize: true,
align: "center",
},
{
field: "needNum",
width: 120,
title: "需要量",
unresize: true,
align: "center",
templet: function (d) {
return setNumColor(d.needNum, 1);
},
},
{
field: "fhNum",
width: 120,
title: "已发货量",
unresize: true,
align: "center",
templet: function (d) {
return setNumColor(d.fhNum, 2);
},
},
{
field: "diff",
width: 120,
title: "差缺量",
unresize: true,
align: "center",
templet: function (d) {
return setNumColor(d.diff, 3);
},
},
{
field: "num",
width: 150,
title: "<span style='color:red'> * </span>本次发货量",
unresize: true,
align: "center",
edit: 'text',
style: 'outline: 1px solid #e6e6e6;outline-offset: -5px;'
},
{
field: "tzNum",
width: 150,
title: "调整量<img id='tips' style='cursor: pointer;' src='../../../images/demandPlan/yw.png'>",
unresize: true,
align: "center",
edit: 'text',
style: 'outline: 1px solid #e6e6e6;outline-offset: -5px;'
},
{
field: "outId",
width: 250,
title: "备注",
unresize: true,
align: "center",
edit: 'textarea',
style: 'outline: 1px solid #e6e6e6;outline-offset: -5px;'
},
],
],
limits: [10, 15, 20, 25, 50, 100],
limit: 10,
page: true,
done: function (res, curr, count) {
pageNum = tableIns.config.page.curr;
$("#tips").suspensionTips({ "content": "1.如需单个机具进度达到100%请填写不发货的数量2.若填写不发货数量,请填写备注不发货原因及附件说明", position: "top", width: 300 });
},
});
table.on('edit(currentTableId)', function (obj) {
console.log(obj);
var field = obj.field; // 得到修改的字段
var value = obj.value // 得到修改后的值
var oldValue = obj.oldValue // 得到修改前的值 -- v2.8.0 新增
var data = obj.data // 得到所在行所有键值
var col = obj.getCol(); // 得到当前列的表头配置属性 -- v2.8.0 新增
if (field === 'num' || field === 'tzNum') { // 本次发货量/调整量
if (value) {
const regex = /^(0|[1-9]\d{0,6})$/;
if (!regex.test(value)) {
obj.reedit();
return layer.msg('格式不正确最大输入6位数且为正整数', { icon: 7 })
}
}
} else if (field === 'outId') { // 备注
if (value) {
if (value.length > 255) {
obj.reedit();
return layer.msg('备注最多输入255位', { icon: 7 })
}
}
}
// 显示 - 仅用于演示
// layer.msg('[ID: ' + data.id + '] ' + field + ' 字段更改值为:' + util.escape(value));
let id = obj.data.id;
let num = obj.data.num;
let tzNum = obj.data.tzNum;
let outId = obj.data.outId;
let type = obj.data.type;
let name = obj.data.name;
let module = obj.data.module;
let objParam = {
id: id,
num: num,
tzNum: tzNum,
outId: outId,
type: type,
name: name,
module: module,
remarks: outId
}
updateOrAddObject(id, objParam);
});
}
// 根据id 判断对象数组的对象是否存在 如果存在则替换,不存在则添加
function updateOrAddObject(id, newObject) {
const index = jjDetailArr.findIndex(obj => obj.id === id);
if (index !== -1) {
// 如果对象存在,则替换它
jjDetailArr[index] = newObject;
} else {
// 如果对象不存在,则添加到数组
jjDetailArr.push(newObject);
}
}
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;">' + setNullValue(value) + "</span>";
}
// 提交
function submitApply(data) {
let list = [];
// 校验发货附件是否上传
if (fileList.length === 0) {
return layer.msg('请上传发货附件', { icon: 7 });
}
// 校验调整量发生变化是否填写备注
for (let i = 0; i < jjDetailArr.length; i++) {
let obj = jjDetailArr[i];
if (obj.tzNum > 0 && !obj.remarks) {
return layer.msg(obj.type + '-' + obj.name + '-' + obj.module + ',已修改调整量,请填写备注', { icon: 7 });
}
}
// 添加机具发货数据
for (let i = 0; i < jjDetailArr.length; i++) {
let obj = jjDetailArr[i];
if (obj.num > 0 || obj.tzNum > 0) {
list.push(obj);
}
}
// 校验机具发货数量
if (list.length === 0) {
return layer.msg('未填写发货数量', { icon: 7 });
}
data.field.proId = idParam;
data.field.list = list;
data.field.addList = jjDataArr;
let formData = new FormData();
//遍历最终文件集合
for (let i = 0; i < fileList.length; i++) {
formData.append("file[]", fileList[i].file)
}
formData.append('params', JSON.stringify(data.field));
console.log(JSON.stringify(data.field));
let loadingMsg = layer.msg('正在提交保存,请稍等...', { icon: 16, shade: 0.01, time: '0' });
console.log(JSON.stringify(data.field));
let url = dataUrl + 'backstage/planOut/insertProOutPutInfo';
ajaxRequestByUploadFile(url, formData, function () {
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
$('.cancel').addClass("layui-btn-disabled").attr("disabled", true);
}, function (result) {
console.log(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 handleNum(value) {
if (!value) {
return null;
}
const regex = /^(0|[1-9]\d{0,6})$/;
if (!regex.test(value)) {
return layer.msg('格式不正确最大输入6位数且为正整数', { icon: 7 })
}
return null;
}
// 详情
function openDetail() {
alert('详情');
}
// 新增需求计划外机具
function addJjData() {
let params = {
'proId': idParam
};
if (jjDataArr && jjDataArr.length > 0) {
params.jjDataArrStr = JSON.stringify(jjDataArr);
}
openIframeByParamObj("addJjData", '新增需求计划外机具', "./add_jj_data.html", '72%', '80%', params);
}
function addJjDatas(data) {
console.log('新增的数据:' + data);
jjDataArr = JSON.parse(data);
}
// 关闭页面
function closePage(type) {
let index = parent.layer.getFrameIndex(window.name); // 先得到当前 iframe层的索引
parent.layer.close(index); // 再执行关闭
if (type == 1) {
window.parent.reloadData();
}
}