Merge branch 'layui:main' into main

pull/1078/head
sunxiaobin89 2022-07-10 12:35:05 +08:00 committed by GitHub
commit d39bcb2538
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 77 additions and 75 deletions

View File

@ -16,7 +16,6 @@
</style> </style>
</head> </head>
<body> <body>
<form class="layui-form" method="get" lay-filter="top" id="AAA"> <form class="layui-form" method="get" lay-filter="top" id="AAA">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-inline"> <div class="layui-input-inline">
@ -264,9 +263,7 @@
<br><br><br> <br><br><br>
<script src="../src/layui.js"></script> <script src="../src/layui.js" src1="https://cdn.staticfile.org/layui/2.6.8/layui.js"></script>
<!-- <script src="../build/lay/dest/layui.all.js"></script> -->
<script> <script>
layui.use(['form', 'util', 'laydate'], function(){ layui.use(['form', 'util', 'laydate'], function(){
@ -288,6 +285,7 @@
/^\d+\.\b\d{2}\b$/ /^\d+\.\b\d{2}\b$/
,'金额必须为小数保留两位' ,'金额必须为小数保留两位'
] ]
//,n: [/^(\d)+$/, '数字校验']
}); });
/* /*

View File

@ -163,7 +163,7 @@ layui.use(['table', 'dropdown'], function(){
return td.find('select').val(); return td.find('select').val();
}} }}
,{field:'sign', title:'签名', minWidth: 200, style:'color: #5FB878', edit: 'textarea'} ,{field:'sign', title:'签名', minWidth: 200, style:'color: #5FB878', edit: 'textarea'}
,{field: 'experience', title: '积分', width: 100, sort: true, align:'center', totalRow: !1 ? '{{=d.LAY_COL.field}}' : '{{= d.TOTAL_NUMS }} 分 😊', templet: '<div><a href="" class="layui-table-link">{{ d.experience }}</a></div>'} ,{field: 'experience', title: '积分', width: 100, sort: true, align:'center', totalRow: !1 ? true : '{{= d.TOTAL_NUMS }} 分 😊', templet: '<div><a href="" class="layui-table-link">{{= d[d.LAY_COL.field] }}</a></div>'}
,{field:'ip', title:'IP', width: 120, align: 'right'} ,{field:'ip', title:'IP', width: 120, align: 'right'}
,{field:'checkin', title:'打卡', width: 100, sort: true, totalRow: '{{= parseInt(d.TOTAL_NUMS) }} 次'} ,{field:'checkin', title:'打卡', width: 100, sort: true, totalRow: '{{= parseInt(d.TOTAL_NUMS) }} 次'}
,{field:'joinTime', title:'加入时间', width: 120} ,{field:'joinTime', title:'加入时间', width: 120}
@ -405,7 +405,7 @@ layui.use(['table', 'dropdown'], function(){
}, function(value, index){ }, function(value, index){
obj.update({ obj.update({
email: value email: value
}); }, true);
/* /*
// 上述 obj.update() 只是在前端临时更新数据视图 // 上述 obj.update() 只是在前端临时更新数据视图
// 在实际业务中,当发送修改请求成功后,可再执行 reloadData 来重载数据 // 在实际业务中,当发送修改请求成功后,可再执行 reloadData 来重载数据
@ -448,7 +448,7 @@ layui.use(['table', 'dropdown'], function(){
var update = {}; var update = {};
update[field] = value; update[field] = value;
obj.update(update); obj.update(update, true);
}); });
}); });
</script> </script>

View File

@ -700,24 +700,28 @@ layui.define('layer', function(exports){
// 遍历元素绑定的验证规则 // 遍历元素绑定的验证规则
layui.each(vers, function(_, thisVer){ layui.each(vers, function(_, thisVer){
var isTrue //是否命中校验 var isTrue; // 是否命中校验
,errorText = '' //错误提示文本 var errorText = ''; // 错误提示文本
,isFn = typeof verify[thisVer] === 'function'; var rule = verify[thisVer]; // 获取校验规则
// 匹配验证规则 // 匹配验证规则
if(verify[thisVer]){ if(rule){
var isTrue = isFn ? errorText = verify[thisVer](value, item) : !verify[thisVer][0].test(value) var isTrue = typeof rule === 'function'
? errorText = rule(value, item)
: !rule[0].test(value);
// 是否属于美化替换后的表单元素 // 是否属于美化替换后的表单元素
,isForm2Elem = item.tagName.toLowerCase() === 'select' || /^checkbox|radio$/.test(item.type); var isForm2Elem = item.tagName.toLowerCase() === 'select' || (
/^checkbox|radio$/.test(item.type)
);
errorText = errorText || verify[thisVer][1]; errorText = errorText || rule[1];
if(thisVer === 'required'){ if(thisVer === 'required'){
errorText = othis.attr('lay-reqText') || errorText; errorText = othis.attr('lay-reqText') || errorText;
} }
//如果是必填项或者非空命中校验,则阻止提交,弹出提示 // 若为必填项或者非空命中校验,则阻止提交,弹出提示
if(isTrue){ if(isTrue){
// 提示层风格 // 提示层风格
if(verType === 'tips'){ if(verType === 'tips'){
@ -732,7 +736,7 @@ layui.define('layer', function(exports){
} else if(verType === 'alert') { } else if(verType === 'alert') {
layer.alert(errorText, {title: '提示', shadeClose: true}); layer.alert(errorText, {title: '提示', shadeClose: true});
} }
//如果返回的为字符或数字,则自动弹出默认提示框;否则由 verify 方法中处理提示 //返回的为字符或数字,则自动弹出默认提示框;否则由 verify 方法中处理提示
else if(/\bstring|number\b/.test(typeof errorText)){ else if(/\bstring|number\b/.test(typeof errorText)){
layer.msg(errorText, {icon: 5, shift: 6}); layer.msg(errorText, {icon: 5, shift: 6});
} }
@ -741,33 +745,17 @@ layui.define('layer', function(exports){
(isForm2Elem ? othis.next().find('input') : item).focus(); (isForm2Elem ? othis.next().find('input') : item).focus();
}, 7); }, 7);
/*
// 非移动设备自动定位焦点
if(!device.mobile){
setTimeout(function(){
(isForm2Elem ? othis.next().find('input') : item).focus();
}, 7);
} else { // 移动设备定位
$dom.scrollTop(function(){
try {
return (isForm2Elem ? othis.next() : othis).focus().offset().top - 15
} catch(e){
return 0;
}
}());
}
*/
othis.addClass(DANGER); othis.addClass(DANGER);
return stop = true; return stop = true;
} }
} }
}); });
if(stop) return stop; if(stop) return stop;
}); });
return !stop; return !stop;
} };
// 提交表单并校验 // 提交表单并校验
var submit = Form.prototype.submit = function(filter, callback){ var submit = Form.prototype.submit = function(filter, callback){

View File

@ -1146,9 +1146,9 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){
// 数据合计行 // 数据合计行
Class.prototype.renderTotal = function(data, totalRowData){ Class.prototype.renderTotal = function(data, totalRowData){
var that = this var that = this;
,options = that.config var options = that.config;
,totalNums = {}; var totalNums = {};
if(!options.totalRow) return; if(!options.totalRow) return;
@ -1172,29 +1172,33 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){
that.eachCols(function(i3, item3){ that.eachCols(function(i3, item3){
var field = item3.field || i3; var field = item3.field || i3;
// 合计数据的特定字段
var TOTAL_NUMS = totalRowData && totalRowData[item3.field];
// td 内容 // td 内容
var content = function(){ var content = function(){
var text = item3.totalRowText || '' var text = item3.totalRowText || '';
,decimals = 'totalRowDecimals' in item3 ? item3.totalRowDecimals : 2 var decimals = 'totalRowDecimals' in item3 ? item3.totalRowDecimals : 2;
,thisTotalNum = parseFloat(totalNums[field]).toFixed(decimals) var thisTotalNum = parseFloat(totalNums[field]).toFixed(decimals);
,tplData = { var tplData = {
LAY_COL: item3 LAY_COL: item3
} };
,getContent;
tplData[field] = thisTotalNum; tplData[field] = thisTotalNum;
// 获取自动计算的合并内容 // 获取自动计算的合并内容
getContent = item3.totalRow ? (parseTempData.call(that, { var getContent = item3.totalRow ? (parseTempData.call(that, {
item3: item3 item3: item3
,content: thisTotalNum ,content: thisTotalNum
,tplData: tplData ,tplData: tplData
}) || text) : text; }) || text) : text;
// 如果直接传入了合计行数据,则不输出自动计算的结果 // 如果直接传入了合计行数据,则不输出自动计算的结果
return totalRowData ? (totalRowData[item3.field] || getContent) : getContent; return TOTAL_NUMS || getContent;
}() }();
,td = ['<td data-field="'+ field +'" data-key="'+ options.index + '-'+ item3.key +'" '+ function(){
// td 容器
var td = ['<td data-field="'+ field +'" data-key="'+ options.index + '-'+ item3.key +'" '+ function(){
var attr = []; var attr = [];
if(item3.align) attr.push('align="'+ item3.align +'"'); // 对齐方式 if(item3.align) attr.push('align="'+ item3.align +'"'); // 对齐方式
if(item3.minWidth) attr.push('data-minwidth="'+ item3.minWidth +'"'); // 单元格最小宽度 if(item3.minWidth) attr.push('data-minwidth="'+ item3.minWidth +'"'); // 单元格最小宽度
@ -1219,8 +1223,8 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){
// 如果 totalRow 参数为字符类型,则解析为自定义模版 // 如果 totalRow 参数为字符类型,则解析为自定义模版
if(typeof totalRow === 'string'){ if(typeof totalRow === 'string'){
return laytpl(totalRow).render($.extend({ return laytpl(totalRow).render($.extend({
TOTAL_NUMS: totalNums[field] TOTAL_NUMS: TOTAL_NUMS || totalNums[field],
,LAY_COL: item3 LAY_COL: item3
}, item3)); }, item3));
} }
return content; return content;
@ -1773,7 +1777,7 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){
tr.remove(); tr.remove();
that.scrollPatch(); that.scrollPatch();
} }
,update: function(fields, ){ //修改行数据 ,update: function(fields, related){ //修改行数据
fields = fields || {}; fields = fields || {};
layui.each(fields, function(key, value){ layui.each(fields, function(key, value){
var td = tr.children('td[data-field="'+ key +'"]'); var td = tr.children('td[data-field="'+ key +'"]');
@ -1782,8 +1786,7 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){
// 更新缓存中的数据 // 更新缓存中的数据
if(key in data) data[key] = value; if(key in data) data[key] = value;
// 更新相应列视 // 更新相应列视图
// 若要更新其它列与之有关的动态模板,直接采用 reloadData 方法
that.eachCols(function(i, item3){ that.eachCols(function(i, item3){
if(item3.field == key){ if(item3.field == key){
cell.html(parseTempData.call(that, { cell.html(parseTempData.call(that, {
@ -1793,8 +1796,21 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){
})); }));
td.data('content', value); td.data('content', value);
} }
// 更新其他包含自定义模板且可能有所关联的列视图
else if(related && (item3.templet || item3.toolbar)){
var thisTd = tr.children('td[data-field="'+ (item3.field || i) +'"]');
var content = data[item3.field];
thisTd.children(ELEM_CELL).html(parseTempData.call(that, {
item3: item3
,content: content
,tplData: data
}));
thisTd.data('content', content);
}
}); });
}); });
that.renderForm(); that.renderForm();
} }
}, sets); }, sets);