This commit is contained in:
cwchen 2024-11-13 17:27:13 +08:00
parent 2078c98fe0
commit 743f7ab24b
4 changed files with 508 additions and 21 deletions

View File

@ -0,0 +1,379 @@
let objParam;
let form, table, element, tableIns, layer, util;
let pageNum = 1;
let quanju = new Array();//全局
let huancun = new Array();//缓存
let huancunObj = new Array();//缓存2
let cjList = [];
let jjDetailArr = []; // 入库配件类型数据
function setParams(obj) {
objParam = JSON.parse(obj);
console.log(objParam);
layui.use(["form", "table", 'element', 'layer', 'util'], function () {
form = layui.form;
table = layui.table;
element = layui.element;
layer = layui.layer;
util = layui.util;
getVendList();
initTable();
});
}
// 厂家下拉选
function getVendList() {
cjList.splice(0, cjList.length);
let encryptedData = {};
let url = dataUrl + 'backstage/paType/getVendList?encryptedData=' + encodeURIComponent(JSON.stringify(encryptedData));
ajaxRequest(url, "GET", null, false, function () {
}, function (result) {
console.log(result);
if (result.code === 200) {
cjList = result.data;
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
}
// 查询/重置
function queryTable(type) {
if (type === 1) {
reloadTable(1);
} else if (type === 2) {
$('#name').val('');
$('#module').val('');
$('#type').val('');
layui.form.render();
reloadTable(1);
}
}
// 重载表格
function reloadTable(pageNum) {
table.reload("currentTableId", {
page: {
curr: pageNum ? pageNum : 1,
},
where: {
encryptedData: JSON.stringify({
'name': $('#name').val(),
'model': $('#model').val(),
'type': $('#type').val(),
}),
},
},
);
}
// 表格数据
function initTable() {
tableIns = table.render({
elem: "#currentTableId",
id: 'currentTableId',
height: "full-200",
headers: {
authorization: sessionStorage.getItem("gz-token"),
},
url: dataUrl + "backstage/paType/findByPage",
where: {
encryptedData: JSON.stringify({
'type': $('#type').val(),
'name': $('#name').val(),
'model': $('#model').val(),
}),
},
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.price = item2.price;
item.remarks = item2.remarks;
item.manufacturer = item2.manufacturer;
}
});
});
}
return {
"code": 0, // 解析接口状态
"msg": '获取成功', // 解析提示文本
"count": res.total, // 解析数据长度
"data": res.list // 解析数据列表
};
},
cols: [
[
{ type: 'checkbox', width: '5%' },
{
width: '6%',
title: "序号",
align: "center",
templet: function (d) {
return d.LAY_NUM;
},
},
{
field: "type",
width: '11.8%',
title: "配件类型",
unresize: true,
align: "center",
},
{
field: "name",
width: '12%',
title: "配件名称",
unresize: true,
align: "center",
},
{
field: "model",
width: '10%',
title: "规格型号",
unresize: true,
align: "center",
},
{
field: "unit",
title: "单位",
width: '8%',
unresize: true,
align: "center",
},
{
field: "num",
width: '10%',
title: "<span style='color:red'> * </span>本次入库量",
unresize: true,
align: "center",
edit: 'text',
style: 'outline: 1px solid #e6e6e6;outline-offset: -5px;'
},
{
field: "price",
width: '9.8%',
title: "单价(元)",
unresize: true,
align: "center",
edit: 'text',
style: 'outline: 1px solid #e6e6e6;outline-offset: -5px;'
},
{
field: "manufacturer",
width: '15%',
title: "<span style='color:red'> * </span>配件厂家",
unresize: true,
align: "center",
templet: '#TPL-select-demo'
},
{
field: "remarks",
width: '12%',
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) {
var options = this;
table.resize("currentTableId");
pageNum = tableIns.config.page.curr;
form.on('select(select-demo)', function (obj) {
console.log(obj);
var value = obj.value; // 获取选中项 value
// 获取当前行数据(如 id 等字段,以作为数据修改的索引)
var data = table.getRowData(options.id, obj.elem);
// 更新数据中对应的字段
data.manufacturer = value;
updateOrAddObject(data.id, data);
});
// 获取当前行数据 - 自定义方法
table.getRowData = function (tableId, elem) {
var index = $(elem).closest('tr').data('index');
return table.cache[tableId][index] || {};
};
//设置全部数据到全局变量
quanju = res.data;
for (var i = 0; i < res.data.length; i++) {
for (var j = 0; j < huancun.length; j++) {
//数据id和要勾选的id相同时checkbox选中
if (res.data[i].id === huancun[j]) {
//这里才是真正的有效勾选
res.data[i]["LAY_CHECKED"] = 'true';
//找到对应数据改变勾选样式,呈现出选中效果
var index = res.data[i]['LAY_INDEX'];
$('.layui-table tr[data-index=' + index + '] input[type="checkbox"]').prop('checked', true);
$('.layui-table tr[data-index=' + index + '] input[type="checkbox"]').next().addClass('layui-form-checked');
}
}
}
//设置全选checkbox的选中状态只有改变LAY_CHECKED的值 table.checkStatus才能抓取到选中的状态
let checkStatus = table.checkStatus('currentTableId');//这里的lightTable是指分页中的id
if (checkStatus.isAll) {//是否全选
//layTableAllChoose
$('.layui-table th[data-field="0"] input[type="checkbox"]').prop('checked', true);//data-field值默认为0如果在分页部分自定义了属性名则需要改成对应的属性名
$('.layui-table th[data-field="0"] input[type="checkbox"]').next().addClass('layui-form-checked');//data-field值默认为0如果在分页部分自定义了属性名则需要改成对应的属性名
}
},
});
table.on('edit(currentTableId2)', function (obj) {
var field = obj.field; // 得到修改的字段
var value = obj.value // 得到修改后的值
if (field === 'num') { // 本次入库量
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 === 'price') {
const regex = /^(?:1(?:\d{0,8}|[0-9]*\.\d{1,2})|(?:[1-9]\d{0,7}|[1-9]\d{0,6}\.\d{1,2}|[1-9]\d{1,7}\.\d{2}|100000000(?:\.00)?))$/;
if (!regex.test(value)) {
obj.reedit();
return layer.msg('单价格式不正确!', { icon: 7 })
}
} else if (field === 'remarks') { // 备注
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;
updateOrAddObject(id, obj.data);
});
//复选框选中监听,将选中的id 设置到缓存数组,或者删除缓存数组
table.on('checkbox(currentTableId2)', function (obj) {
if (obj.checked === true) {
if (obj.type === 'one' && huancun.indexOf(obj.data.id) === -1) {
huancun.push(obj.data.id);
huancunObj.push(obj.data);
} else {
for (let i = 0; i < quanju.length; i++) {
if (huancun.indexOf(quanju[i].id) === -1) {
huancun.push(quanju[i].id);
huancunObj.push(quanju[i]);
}
}
}
} else {
if (obj.type === 'one') {
for (let i = 0; i < huancun.length; i++) {
if (huancun[i] === obj.data.id) {
removeByValue(huancun, huancun[i]);//调用自定义的根据值移除函数
removeByValue(huancunObj, huancunObj[i]);//调用自定义的根据值移除函数
}
}
} else {
for (let i = 0; i < quanju.length; i++) {
for (let j = 0; j < huancun.length; j++) {
if (huancun[j] === quanju[i].id) {
removeByValue(huancun, +huancun[j]);//调用自定义的根据值移除函数
removeByValue(huancunObj, +huancunObj[j]);//调用自定义的根据值移除函数
}
}
}
}
}
});
}
// 根据id 判断对象数组的对象是否存在 如果存在则替换,不存在则添加
function updateOrAddObject(id, newObject) {
const index = jjDetailArr.findIndex(obj => obj.id === id);
if (index !== -1) {
// 如果对象存在,则替换它
jjDetailArr[index] = newObject;
} else {
// 如果对象不存在,则添加到数组
jjDetailArr.push(newObject);
}
}
//自定义方法,根据值去移除
function removeByValue(arr, val) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] == val) {
arr.splice(i, 1);
break;
}
}
for (let i = 0; i < huancunObj.length; i++) {
if (huancunObj[i].id == val) {
huancunObj.splice(i, 1);
break;
}
}
}
// 保存数据
function saveData2(params) {
let dataArr = [];
if (huancun.length === 0) {
return layer.msg('未添加数据', { icon: 7 });
} else {
$.each(huancunObj, function (index, item) {
dataArr.push(item);
})
for (let i = 0; i < huancun.length; i++) {
const id = huancun[i];
for (let j = 0; j < jjDetailArr.length; j++) {
const obj = jjDetailArr[j];
if (id === obj.id) {
updateOrAddObject2(id, obj);
}
}
}
}
console.log(dataArr);
let layerIndex = layer.confirm('<h5 style="color:red">数据即将被添加,请仔细检查数据是否有错误!</h5>', { title: '操作提示' }, function () {
layer.close(layerIndex);
closePage(1, JSON.stringify(dataArr));
});
// 替换对象
function updateOrAddObject2(id, newObject) {
const index = dataArr.findIndex(obj => obj.id === id);
if (index !== -1) {
// 如果对象存在,则替换它
dataArr[index] = newObject;
} else {
// 如果对象不存在,则添加到数组
dataArr.push(newObject);
}
}
}
// 配件类型
function addFitTypeData() {
openIframeByParamObj2("add_fit_type_data", "配件类型", "../../../page/basic/fit_type_list.html", "92%", "95%", {});
}
function closePage(type,params) {
let index = parent.layer.getFrameIndex(window.name); // 先得到当前 iframe层的索引
parent.layer.close(index); // 再执行关闭
if (type == 1) {
window.parent.addFitDatas(params);
}
}

View File

@ -14,7 +14,9 @@ function setParams(obj) {
table = layui.table;
util = layui.util;
laydate.render({
elem: '#inputDay'
elem: '#ID-laydate-rangeLinked',
range: ['#startDay', '#endDay'],
rangeLinked: true
});
form.verify();
form.on('submit(formData)', function (data) {
@ -187,10 +189,7 @@ function getBaseTableData() {
// 选择入库配件类型
function chooseFitType() {
let params = {};
/* if (jjDataArr && jjDataArr.length > 0) {
params.jjDataArrStr = JSON.stringify(jjDataArr);
} */
openIframeByParamObj("choose_fit_type", '选择入库配件类型', "./choose_fit_type_list.html", '92%', '95%', params);
openIframeByParamObj("choose_fit_type_inventory_count", '选择盘点配件类型', "./choose_inventory_count_fit_type_list.html", '92%', '95%', params);
}
// 查询

View File

@ -0,0 +1,103 @@
<!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/public.css" media="all">
</head>
<style>
body {
margin: 0;
padding: 0;
height: 100%;
}
.layui-table-view .layui-table th {
font-size: 18px;
color: #262626;
letter-spacing: 1px;
outline: none !important;
}
.btn-box {
width: 100%;
height: 60px;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
}
</style>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset">
<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: 160px;">
<input type="text" name="type" id="type" autocomplete="off" class="layui-input"
lay-affix="clear" placeholder="输入配件类型" maxlength="30">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 160px;">
<input type="text" name="name" id="name" autocomplete="off" class="layui-input"
lay-affix="clear" placeholder="输入配件名称" maxlength="30">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 160px;">
<input type="text" name="model" id="model" 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="queryTable(1)"><i
class="layui-icon"></i> 搜 索</button>
<button class="layui-btn layui-btn-primary" onclick="queryTable(2)"><i
class="layui-icon layui-icon-refresh"></i> 重 置</button>
<button type="button" class="layui-btn" onclick="addFitTypeData()">
<i class="layui-icon layui-icon-add-1"></i>添 加
</button>
</div>
<div class="layui-inline">
<p>(无配件名称及规格,点击添加新数据)</p>
</div>
</div>
</form>
</div>
</fieldset>
<div class="table-box" table-responsive style="z-index: 1;">
<table class="layui-hide" id="currentTableId" lay-filter="currentTableId2"></table>
</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>
</div>
</body>
<script type="text/html" id="TPL-select-demo">
{{# var manufacturerList = cjList; }}
<select name="city" lay-filter="select-demo" lay-append-to="body" lay-search>
{{# layui.each(manufacturerList, function(i, v){ }}
<option value="{{= v.id }}" {{=v.id===d.manufacturer ? 'selected' : '' }}>{{= v.name }}</option>
{{# }); }}
</select>
</script>
<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="../../../js/Print.js" charset="utf-8"></script>
<script src="../../../lib/layui-v2.9.18/layui/layui.js" charset="utf-8"></script>
<script src="../../../js/accessory/child/choose_inventory_count_fit_type_list.js" charset="utf-8"></script>
<script src="../../../js/openIframe.js" charset="utf-8"></script>
</html>

View File

@ -17,26 +17,32 @@
<form class="layui-form layuimini-form" onclick="return false;">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label required" style="width: 100px !important;">入库</label>
<label class="layui-form-label required" style="width: 100px !important;">盘点</label>
<div class="layui-input-inline">
<input class="layui-input" name="inputUser" id="inputUser" autocomplete="off" lay-verify="required" maxlength="30" lay-affix="clear">
<input class="layui-input" name="inputUser" id="inputUser" autocomplete="off"
lay-verify="required" maxlength="30" 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">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-date"></i>
<label class="layui-form-label required" style="width: 110px !important;">盘点日期</label>
<div class="layui-inline" id="ID-laydate-rangeLinked">
<div class="layui-input-inline">
<input type="text" autocomplete="off" id="startDay" class="layui-input"
placeholder="盘点开始日期" lay-verify="required" readonly style="cursor: pointer;">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" autocomplete="off" id="endDay" class="layui-input"
placeholder="盘点结束日期:" lay-verify="required" readonly style="cursor: pointer;">
</div>
<input class="layui-input" id="inputDay" autocomplete="off" name="inputDay"
lay-verify="required" readonly style="cursor: pointer;">
</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="255" lay-affix="clear"></textarea>
<textarea placeholder="请输入备注" lay-verify="required" id="remark" name="remark"
class="layui-textarea" maxLength="255" lay-affix="clear"></textarea>
</div>
</div>
<button type="submit" id="formSubmit" class="layui-btn" lay-submit="" lay-filter="formData"
@ -54,14 +60,14 @@
</div>
<div class="title layout">
<span style="font-weight:700;text-decoration:none;color:#409EFF;"></span>
<p>入库配件明细</p>
<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>
<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>
@ -87,8 +93,8 @@
</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-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>
@ -121,7 +127,7 @@
</div>
</div>
<div class="btn-box">
<button class="layui-btn layui-bg-blue save" onclick="saveData2()">确定入库</button>
<button class="layui-btn layui-bg-blue save" onclick="saveData2()">确定完成</button>
<button class="layui-btn layui-btn-primary cancel" onclick="closePage()">返回</button>
</div>
</div>