KDTECH.ProManager/Pages/page/Order/BOM/Demo_TableEdit.html

331 lines
15 KiB
HTML
Raw Normal View History

2021-01-21 01:06:55 +08:00
<!DOCTYPE html>
<html>
<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="../../../lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="../../../css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<div class="layui-form layuimini-form">
<div class="layui-form-item">
<label class="layui-form-label required">设计总成图号</label>
<div class="layui-input-block">
<input type="text" name="designAssyNum" required lay-verify="required" lay-reqtext="设计总成图号不能为空"
placeholder="请输入设计总成图号" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">BOM名称</label>
<div class="layui-input-block">
<input type="text" name="name" required lay-verify="required" lay-reqtext="BOM名称不能为空"
placeholder="请输入BOM名称" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<script type="text/html" id="toolbar">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="addLine">添加</button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="deleteLine">删除</button>
</div>
</script>
<table class="layui-hide" id="addBOMDetailsList" lay-filter="addBOMDetailsList"></table>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
<script src="../../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script src="../../../js/md5/md5.js" charset="utf-8"></script>
<script src="../../../js/PublicParameters/PublicParameters.js" charset="utf-8"></script>
<script>
layui.config({
base: '../../../js/lay-module/'
}).extend({ tableEdit: 'tableEdit/tableEdit' }).use(['form', 'table', 'tableEdit'], function () {
var form = layui.form,
layer = layui.layer,
table = layui.table,
tableEdit = layui.tableEdit;
$ = layui.$;
// table.render({
// elem: '#addBOMDetailsList',
// data: [{ "figureNum": "", "remark": "", }],
// toolbar: '#toolbar',
// defaultToolbar: [],
// cols: [[
// { type: "checkbox", width: 50 },
// { type: "numbers", title: '序号', width: 50 },
// { field: 'figureNum', width: 200, title: '图号编码', align: "center", edit: "text" },
// { field: 'remark', width: 350, title: '备注', align: "left" },
// ]],
// page: false,
// skin: 'line'
// });
var params = [{ name: 1, value: "张三1" }, { name: 2, value: "张三2" }, { name: 3, value: "张三3" }, { name: 4, value: "张三4" }, { name: 5, value: "张三5" }];
var cols = table.render({
elem: '#addBOMDetailsList'
, id: 'id'
, url: '../../../jsondata/Demo_TableEditData.json'
, height: 'full-90'
, page: true
, cols: [[
{ type: 'checkbox' }
//type的类型值select下拉框date时间选择框input(输入框)
//input为输入框失去焦点会触发回调aopTable.on()中触发的回调
, { field: 'name', title: '输入框', width: 120, event: 'name', config: { type: 'input' } }
//data 为下拉框数据
, {
field: 'danxuan', align: 'center', title: '单选', width: 120, event: 'danxuan', config: { type: 'select', data: params }, templet: function (d) {
return d.danxuan && d.danxuan.value ? d.danxuan.value : '';
}
}
// enabled => true多选false单选。默认为false
, {
field: 'duoxuan', title: '多选', width: 120, event: 'duoxuan', config: { type: 'select', data: params, enabled: true }, templet: function (d) {
var str = [];
d.duoxuan.forEach(function (e) {
str.push(e.value)
});
return str.join(' || ');
}
}
//dateType表示日期时间格式date为“yyyy-MM-dd”datetime为“yyyy-MM-dd HH:ss:mm”
, { field: 'birthday', title: '生日', width: 120, event: 'birthday', config: { type: 'date', dateType: 'date' } }
//cascadeSelectField字段为级联开关字段(存在该字段则级联,否则不级联)
, {
field: 'xlkjl', title: '下拉框联动(上级)', width: 150, event: 'xlkjl', config: { type: 'select', data: params, cascadeSelectField: 'xialaxiaji' }, templet: function (d) {
return d.xlkjl && d.xlkjl.value ? d.xlkjl.value : '';
}
}
, {
field: 'xialaxiaji', title: '下拉框联动(下级)', width: 150, event: 'xiaji', config: { type: 'select', data: params }, templet: function (d) {
return d.xialaxiaji && d.xialaxiaji.value ? d.xialaxiaji.value : '';
}
}
, { field: 'rqjl', title: '日期联动(上级)', width: 150, event: 'rqjl', config: { type: 'date', dateType: 'date', cascadeSelectField: 'rqxiaji' } }
, {
field: 'rqxiaji', title: '日期框联动(下级)', width: 150, event: 'rqxiaji', config: { type: 'select', data: params }, templet: function (d) {
return d.rqxiaji && d.rqxiaji.value ? d.rqxiaji.value : '';
}
}
]]
}).config.cols;
/**
* 参数cols是table.render({})中的cols属性值
* aop代理是基于event点击事件进行操作的因此cols中务必开启event点击事件
**/
var aopTable = tableEdit.aopObj(cols); //获取一个aop对象
/**
* 注意:
* 1、 aopTable.on('tool(xxx)',function (obj) {})
* 2、 table.on('tool(yyy)',function (obj) {})
* 如果1中的xxx与2中的yyy字符串相同时不能同时用用了会造成后调用者覆盖前调用者。
* 应该直接用1来代替2因为1中包含了2中的事件。
* 如果不相同,则可以同时使用。
**/
aopTable.on('tool(addBOMDetailsList)', function (obj) {
var field = obj.field; //单元格字段
var value = obj.value; //修改后的值
var data = obj.data; //当前行旧数据
var event = obj.event; //当前单元格事件属性值
var update = {};
update[field] = value;
//把value更新到行中
obj.update(update);
/**
*说白了此obj与table.on('tool(tableEvent)',function (obj) {})
*中的obj对象是同一个所以可以如此操作。
*
* */
});
/**
* 级联下拉框 => 点击事件生成下拉框之前的回调函数
* 主要用于 => 动态获取单元格下拉数据
* tableEvent => table的lay-filter属性值
* 如示例代码所示
*/
tableEdit.on('clickBefore(addBOMDetailsList)', function (obj) {
var cascadeSelectData = obj.data; //级联数据
var cascadeSelectField = obj.field; //级联字段
if (Array.isArray(cascadeSelectData)) {
cascadeSelectData = cascadeSelectData[0];
}
var reslut = null;
//下拉数据 只可ajax同步请求后台
if (cascadeSelectField === 'rqjl') { //日期级联下拉框
if (cascadeSelectData === '2020-05-11') {
reslut = {
data: [{ name: 1, value: '语文' }, { name: 2, value: '数学' }, { name: 3, value: '英语' }, { name: 4, value: '物理' }, { name: 5, value: '化学' }],
enabled: false //单选 true为多选
};
} else {
reslut = {
data: [{ name: 6, value: '政治' }, { name: 7, value: '地理' }, { name: 8, value: '历史' }, { name: 9, value: '生物' }, { name: 10, value: '音乐' }],
enabled: false //单选 true为多选
};
}
} else {
if (cascadeSelectData.name + '' === '1') {
reslut = {
data: [{ name: 11, value: '贵州' }, { name: 12, value: '云南' }, { name: 13, value: '四川' }, { name: 14, value: '湖南' }],
enabled: false //单选 true为多选
};
} else {
reslut = {
data: [{ name: 15, value: '荆州' }, { name: 16, value: '扬州' }, { name: 17, value: '杭州' }, { name: 18, value: '苏州' }],
enabled: false //单选 true为多选
};
}
}
return reslut;
});
/**
* toolbar监听事件
*/
table.on('toolbar(addBOMDetailsList)', function (obj) {
if (obj.event === 'addLine') { // 监听添加操作
var Data = table.cache["addBOMDetailsList"];
var datas = {
"figureNum": "",
"remark": ""
}
Data.push(datas);
table.reload('addBOMDetailsList', {
data: Data
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'deleteLine') { // 监听删除操作
var checkStatus = table.checkStatus('addBOMDetailsList');
if (checkStatus.data.length == 0) {
layer.alert('请选择至少一条数据!');
return false;
}
var tableDT = table.cache["addBOMDetailsList"];
var tableArr = [];
for (var i = 0; i < tableDT.length; i++) {//遍历表格缓存数组
var btnObj = tableDT[i];
if (btnObj.LAY_CHECKED) {//条件:选中
tableDT.splice(i, 1);//移除后后造成数组下标索引发生变化所以下面需要i--
i--;
}
}
tableArr = tableDT;
table.reload("addBOMDetailsList", {
data: tableArr // 将新数据重新载入表格
});
}
});
//监听提交
form.on('submit(saveBtn)', function (data) {
layer.confirm('确认保存吗?', function () {
var apiUrl = GetWebApiUrl();
var CurrUserInfo = layui.sessionData('CurrUserInfo');
var figureNum = data.field.figureNum;
if (figureNum.length == 1) {
figureNum = '0' + figureNum;
}
$.ajax({
url: apiUrl + "/api/services/app/FigureNumber/CreateFigureNumber", //请求的url地址
dataType: "json", //返回格式为json
//async: false,//请求是否异步默认为异步这也是ajax重要特性
contentType: 'application/json',
data: JSON.stringify({
figureNum: figureNum,
remark: data.field.remark,
createTime: getDatetime(),
createUserID: CurrUserInfo.data.userid,
createUserName: CurrUserInfo.data.userName,
isDelete: 0
}), //参数值
type: "POST", //请求方式
success: function (req) {
//请求成功时处理
if (req.result.code == 1) {
layer.msg('保存成功', { time: 1000 }, function () {
// 关闭弹出层
var iframeIndex = parent.layer.getFrameIndex(window.name);
// 刷新父页面
window.parent.location.reload();
parent.layer.close(iframeIndex);
});
}
else if (req.result.code == 2) {
layer.msg(req.result.msg);
return false;
}
else {
layer.msg(req.result.msg);
return false;
}
},
error: function () {
/*错误信息处理*/
layer.msg("保存失败,请重试!");
return false;
},
});
return false;
});
return false;
});
});
</script>
</body>
</html>