…'),0!==r&&e.push(''+(n.last||n.pages)+" ")),e.join("")}(),next:n.next?''+n.next+" ":"",count:'\u5171 '+n.count+" \u6761 ",limit:(t=[''],layui.each(n.limits,function(e,a){t.push('"+a+" \u6761/\u9875 ")}),t.join("")+" "),refresh:['',' '," "].join(""),skip:['到第',' ','页确定 '," "].join("")};return['',(i=[],layui.each(n.layout,function(e,a){l[a]&&i.push(l[a])}),i.join("")),"
"].join("")},t.prototype.jump=function(e,a){if(e){var t=this,i=t.config,n=e.children,r=e[c]("button")[0],u=e[c]("input")[0],e=e[c]("select")[0],l=function(){var e=Number(u.value.replace(/\s|\D/g,""));e&&(i.curr=e,t.render())};if(a)return l();for(var s=0,p=n.length;si.pages||(i.curr=e,t.render())});e&&o.on(e,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),r&&o.on(r,"click",function(){l()})}},t.prototype.skip=function(t){var i,e;t&&(i=this,(e=t[c]("input")[0])&&o.on(e,"keyup",function(e){var a=this.value,e=e.keyCode;/^(37|38|39|40)$/.test(e)||(/\D/.test(a)&&(this.value=a.replace(/\D/,"")),13===e&&i.jump(t,!0))}))},t.prototype.render=function(e){var a=this,t=a.config,i=a.type(),n=a.view(),i=(2===i?t.elem&&(t.elem.innerHTML=n):3===i?t.elem.html(n):r[u](t.elem)&&(r[u](t.elem).innerHTML=n),t.jump&&t.jump(t,e),r[u]("layui-laypage-"+t.index));a.jump(i),t.hash&&!e&&(location.hash="!"+t.hash+"="+t.curr),a.skip(i)},{render:function(e){return new t(e).index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(a,e,t){return a.attachEvent?a.attachEvent("on"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1),this}});e("laypage",o)});!function(i,p){"use strict";var n=i.layui&&layui.define,l={getPath:i.lay&&lay.getPath?lay.getPath:"",link:function(e,t,a){v.path&&i.lay&&lay.layui&&lay.layui.link(v.path+e,t,a)}},e=i.LAYUI_GLOBAL||{},d="layui-laydate-id",v={v:"5.5.0",config:{weekStart:0},index:i.laydate&&i.laydate.v?1e5:0,path:e.laydate_dir||l.getPath,set:function(e){var t=this;return t.config=lay.extend({},t.config,e),t},ready:function(e){var t="laydate",a=(n?"modules/":"")+"laydate.css?v="+v.v;return n?layui["layui.all"]?"function"==typeof e&&e():layui.addcss(a,e,t):l.link(a,e,t),this}},s=function(){var t=this,e=t.config.id;return(s.that[e]=t).inst={hint:function(e){t.hint.call(t,e)},reload:function(e){t.reload.call(t,e)},config:t.config}},a="laydate",x="layui-this",k="laydate-disabled",h=[100,2e5],D="layui-laydate-static",w="layui-laydate-list",o="laydate-selected",r="layui-laydate-hint",y="laydate-day-prev",m="laydate-day-next",C=".laydate-btns-confirm",M="laydate-time-text",L="laydate-btns-time",T="layui-laydate-preview",E="layui-laydate-main",S="layui-laydate-shade",I=function(e){var t,a=this,n=(a.index=++v.index,a.config=lay.extend({},a.config,v.config,e),lay(e.elem||a.config.elem));return 1\u8bf7\u91cd\u65b0\u9009\u62e9",invalidDate:"\u4e0d\u5728\u6709\u6548\u65e5\u671f\u6216\u65f6\u95f4\u8303\u56f4\u5185",formatError:["\u65e5\u671f\u683c\u5f0f\u4e0d\u5408\u6cd5 \u5fc5\u987b\u9075\u5faa\u4e0b\u8ff0\u683c\u5f0f\uff1a "," \u5df2\u4e3a\u4f60\u91cd\u7f6e"],preview:"\u5f53\u524d\u9009\u4e2d\u7684\u7ed3\u679c"},en:{weeks:["Su","Mo","Tu","We","Th","Fr","Sa"],time:["Hours","Minutes","Seconds"],timeTips:"Select Time",startTime:"Start Time",endTime:"End Time",dateTips:"Select Date",month:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],tools:{confirm:"Confirm",clear:"Clear",now:"Now"},timeout:"End time cannot be less than start Time Please re-select",invalidDate:"Invalid date",formatError:["The date format error Must be followed\uff1a "," It has been reset"],preview:"The selected result"}};return e[this.config.lang]||e.cn},I.prototype.reload=function(e){this.config=lay.extend({},this.config,e),this.init()},I.prototype.init=function(){var r=this,o=r.config,e="static"===o.position,t={year:"yyyy",month:"yyyy-MM",date:"yyyy-MM-dd",time:"HH:mm:ss",datetime:"yyyy-MM-dd HH:mm:ss"};o.elem=lay(o.elem),o.eventElem=lay(o.eventElem),o.elem[0]&&("array"!==layui.type(o.theme)&&(o.theme=[o.theme]),o.fullPanel&&("datetime"!==o.type||o.range)&&delete o.fullPanel,r.rangeStr=o.range?"string"==typeof o.range?o.range:"-":"",r.rangeLinked=!(!o.range||!o.rangeLinked||"date"!==o.type&&"datetime"!==o.type),r.autoCalendarModel=function(){var e=r.rangeLinked;return r.rangeLinked=o.range&&("date"===o.type||"datetime"===o.type)&&(!r.startDate||!r.endDate||r.startDate&&r.endDate&&r.startDate.year===r.endDate.year&&r.startDate.month===r.endDate.month),lay(r.elem)[r.rangeLinked?"addClass":"removeClass"]("layui-laydate-linkage"),r.rangeLinked!=e},r.autoCalendarModel.auto=r.rangeLinked&&"auto"===o.rangeLinked,"array"===layui.type(o.range)&&(r.rangeElem=[lay(o.range[0]),lay(o.range[1])]),t[o.type]||(i.console&&console.error&&console.error("laydate type error:'"+o.type+"' is not supported"),o.type="date"),o.format===t.date&&(o.format=t[o.type]||t.date),r.format=s.formatArr(o.format),o.weekStart&&!/^[0-6]$/.test(o.weekStart)&&(t=r.lang(),o.weekStart=t.weeks.indexOf(o.weekStart),-1===o.weekStart&&(o.weekStart=0)),r.EXP_IF="",r.EXP_SPLIT="",lay.each(r.format,function(e,t){e=new RegExp(u).test(t)?"\\d{"+(new RegExp(u).test(r.format[0===e?e+1:e-1]||"")?/^yyyy|y$/.test(t)?4:t.length:/^yyyy$/.test(t)?"1,4":/^y$/.test(t)?"1,308":"1,2")+"}":"\\"+t;r.EXP_IF=r.EXP_IF+e,r.EXP_SPLIT=r.EXP_SPLIT+"("+e+")"}),r.EXP_IF_ONE=new RegExp("^"+r.EXP_IF+"$"),r.EXP_IF=new RegExp("^"+(o.range?r.EXP_IF+"\\s\\"+r.rangeStr+"\\s"+r.EXP_IF:r.EXP_IF)+"$"),r.EXP_SPLIT=new RegExp("^"+r.EXP_SPLIT+"$",""),r.isInput(o.elem[0])||"focus"===o.trigger&&(o.trigger="click"),o.elem.attr("lay-key",r.index),o.eventElem.attr("lay-key",r.index),o.elem.attr(d,o.id),o.mark=lay.extend({},o.calendar&&"cn"===o.lang?{"0-1-1":"\u5143\u65e6","0-2-14":"\u60c5\u4eba","0-3-8":"\u5987\u5973","0-3-12":"\u690d\u6811","0-4-1":"\u611a\u4eba","0-5-1":"\u52b3\u52a8","0-5-4":"\u9752\u5e74","0-6-1":"\u513f\u7ae5","0-9-10":"\u6559\u5e08","0-10-1":"\u56fd\u5e86","0-12-25":"\u5723\u8bde"}:{},o.mark),lay.each(["min","max"],function(e,t){var a=[],n=[];if("number"==typeof o[t])var i=o[t],l=new Date,l=r.newDate({year:l.getFullYear(),month:l.getMonth(),date:l.getDate(),hours:e?23:0,minutes:e?59:0,seconds:e?59:0}).getTime(),e=new Date(i?i<864e5?l+864e5*i:i:l),a=[e.getFullYear(),e.getMonth()+1,e.getDate()],n=[e.getHours(),e.getMinutes(),e.getSeconds()];else if("string"==typeof o[t])a=(o[t].match(/\d+-\d+-\d+/)||[""])[0].split("-"),n=(o[t].match(/\d+:\d+:\d+/)||[""])[0].split(":");else if("object"==typeof o[t])return o[t];o[t]={year:0|a[0]||(new Date).getFullYear(),month:a[1]?(0|a[1])-1:(new Date).getMonth(),date:0|a[2]||(new Date).getDate(),hours:0|n[0],minutes:0|n[1],seconds:0|n[2]}}),r.elemID="layui-laydate"+o.elem.attr("lay-key"),(o.show||e)&&r.render(),e||r.events(),o.value&&o.isInitValue&&("date"===layui.type(o.value)?r.setValue(r.parse(0,r.systemDate(o.value))):r.setValue(o.value)))},I.prototype.render=function(){var a,n,i,l,r=this,o=r.config,d=r.lang(),s="static"===o.position,y=r.elem=lay.elem("div",{id:r.elemID,"class":["layui-laydate",o.range?" layui-laydate-range":"",r.rangeLinked?" layui-laydate-linkage":"",s?" "+D:"",o.fullPanel?" laydate-theme-fullpanel":"",(a="",lay.each(o.theme,function(e,t){"default"===t||/^#/.test(t)||(a+=" laydate-theme-"+t)}),a)].join("")}),m=r.elemMain=[],u=r.elemHeader=[],c=r.elemCont=[],h=r.table=[],e=r.footer=lay.elem("div",{"class":"layui-laydate-footer"}),t=r.shortcut=lay.elem("ul",{"class":"layui-laydate-shortcut"}),f=(o.zIndex&&(y.style.zIndex=o.zIndex),lay.each(new Array(2),function(e){if(!o.range&&0'+d.timeTips+""),(o.range||"datetime"!==o.type||o.fullPanel)&&f.push(' '),lay.each(o.btns,function(e,t){var a=d.tools[t]||"btn";o.range&&"now"===t||(s&&"clear"===t&&(a="cn"===o.lang?"\u91cd\u7f6e":"Reset"),n.push(''+a+" "))}),f.push('"),f.join(""))),o.shortcuts&&(y.appendChild(t),lay(t).html((i=[],lay.each(o.shortcuts,function(e,t){i.push(''+t.text+" ")}),i.join(""))).find("li").on("click",function(e){var t=(o.shortcuts[this.dataset.index]||{}).value||[],n=(layui.isArray(t)||(t=[t]),o.type),t=(lay.each(t,function(e,t){var a=[o.dateTime,r.endDate][e];"time"===n&&"date"!==layui.type(t)?r.EXP_IF.test(t)&&(t=(t.match(r.EXP_SPLIT)||[]).slice(1),lay.extend(a,{hours:0|t[0],minutes:0|t[2],seconds:0|t[4]})):lay.extend(a,r.systemDate("date"===layui.type(t)?t:new Date(t))),"time"!==n&&"datetime"!==n||(r[["startTime","endTime"][e]]={hours:a.hours,minutes:a.minutes,seconds:a.seconds}),0===e?r.startDate=lay.extend({},a):r.endState=!0,"year"===n||"month"===n||"time"===n?r.listYM[e]=[a.year,a.month+1]:e&&r.autoCalendarModel.auto&&r.autoCalendarModel()}),r.checkDate("limit").calendar(null,null,"init"),lay(r.footer).find("."+L).removeClass(k));t&&"date"===t.attr("lay-type")&&t[0].click(),r.done(null,"change"),lay(this).addClass(x),"static"!==o.position&&!o.range&&o.autoConfirm&&("date"===n?r.choose(lay(y).find("td.layui-this")):"year"!==n&&"month"!==n||lay(m[0]).find("."+E+" li."+x+":not(.laydate-disabled)")[0]&&r.setValue(r.parse()).done().remove())})),lay.each(m,function(e,t){y.appendChild(t)}),o.showBottom&&y.appendChild(e),lay.elem("style")),g=[],t=(lay.each(o.theme,function(e,t){/^#/.test(t)&&(l=!0,g.push(["#{{id}} .layui-laydate-header{background-color:{{theme}};}","#{{id}} li.layui-this,#{{id}} td.layui-this>div{background-color:{{theme}} !important;}",-1!==o.theme.indexOf("circle")?"":"#{{id}} .layui-this{background-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,r.elemID).replace(/{{theme}}/g,t)))}),o.shortcuts&&o.range&&g.push("#{{id}}.layui-laydate-range{width: 628px;}".replace(/{{id}}/g,r.elemID)),g.length&&(g=g.join(""),"styleSheet"in f?(f.setAttribute("type","text/css"),f.styleSheet.cssText=g):f.innerHTML=g,l&&lay(y).addClass("laydate-theme-molv"),y.appendChild(f)),r.remove(I.thisElemDate),v.thisId=o.id,s?o.elem.append(y):(p.body.appendChild(y),r.position()),o.shade?'
':"");y.insertAdjacentHTML("beforebegin",t),r.checkDate().calendar(null,0,"init"),r.changeEvent(),I.thisElemDate=r.elemID,r.renderAdditional(),"function"==typeof o.ready&&o.ready(lay.extend({},o.dateTime,{month:o.dateTime.month+1})),r.preview()},I.prototype.remove=function(e){var t=this,a=t.config,n=lay("#"+(e||t.elemID));return n[0]&&(n.hasClass(D)||t.checkDate(function(){n.remove(),delete t.startDate,delete t.endDate,delete t.endState,delete t.startTime,delete t.endTime,delete v.thisId,"function"==typeof a.close&&a.close(t)}),lay("."+S).remove()),t},I.prototype.position=function(){var e=this.config;return lay.position(e.elem[0],this.elem,{position:e.position}),this},I.prototype.hint=function(e){var t=this,a=(t.config,lay.elem("div",{"class":r}));t.elem&&(a.innerHTML=(e="object"==typeof e?e||{}:{content:e}).content||"",lay(t.elem).find("."+r).remove(),t.elem.appendChild(a),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){lay(t.elem).find("."+r).remove()},"ms"in e?e.ms:3e3))},I.prototype.getAsYM=function(e,t,a){return a?t--:t++,t<0&&(t=11,e--),11h[1]&&(e.year=h[1],o=!0),11t&&(e.date=t,o=!0))},r=function(n,i,l){var r=["startTime","endTime"];i=(i.match(d.EXP_SPLIT)||[]).slice(1),l=l||0,s.range&&(d[r[l]]=d[r[l]]||{}),lay.each(d.format,function(e,t){var a=parseFloat(i[e]);i[e].lengthd.getDateTime(s.max)?(n=s.dateTime=lay.extend({},s.max),u=!0):d.getDateTime(n)d.getDateTime(s.max))&&(d.endDate=lay.extend({},s.max),u=!0),d.startTime={hours:s.dateTime.hours,minutes:s.dateTime.minutes,seconds:s.dateTime.seconds},d.endTime={hours:d.endDate.hours,minutes:d.endDate.minutes,seconds:d.endDate.seconds},"month"===s.type&&(s.dateTime.date=1,d.endDate.date=1)),u&&l&&(d.setValue(d.parse()),d.hint("value "+a.invalidDate+a.formatError[1])),d.startDate=d.startDate||l&&lay.extend({},s.dateTime),d.autoCalendarModel.auto&&d.autoCalendarModel(),d.endState=!s.range||!d.rangeLinked||!(!d.startDate||!d.endDate),e&&e(),d},I.prototype.mark=function(e,a){var n,t=this.config;return lay.each(t.mark,function(e,t){e=e.split("-");e[0]!=a[0]&&0!=e[0]||e[1]!=a[1]&&0!=e[1]||e[2]!=a[2]||(n=t||a[2])}),n&&e.find("div").html(''+n+" "),this},I.prototype.holidays=function(n,i){var e=this.config,l=["","work"];return"array"!==layui.type(e.holidays)||lay.each(e.holidays,function(a,e){lay.each(e,function(e,t){t===n.attr("lay-ymd")&&n.find("div").html('"+i[2]+" ")})}),this},I.prototype.limit=function(t){t=t||{};var i=this,e=i.config,l={},a=t.index>(t.time?0:41)?i.endDate:e.dateTime;return lay.each({now:lay.extend({},a,t.date||{}),min:e.min,max:e.max},function(e,a){var n;l[e]=i.newDate(lay.extend({year:a.year,month:"year"===t.type?0:a.month,date:"year"===t.type||"month"===t.type?1:a.date},(n={},lay.each(t.time,function(e,t){n[t]=a[t]}),n))).getTime()}),a=l.nowl.max,t.elem&&t.elem[a?"addClass":"removeClass"](k),a},I.prototype.thisDateTime=function(e){var t=this.config;return e?this.endDate:t.dateTime},I.prototype.calendar=function(e,t,a){var i,l,r,o=this,n=o.config,t=t?1:0,d=e||o.thisDateTime(t),s=new Date,y=o.lang(),m="date"!==n.type&&"datetime"!==n.type,u=lay(o.table[t]).find("td"),c=lay(o.elemHeader[t][2]).find("span");return d.yearh[1]&&(d.year=h[1],o.hint(y.invalidDate)),o.firstDate||(o.firstDate=lay.extend({},d)),s.setFullYear(d.year,d.month,1),i=(s.getDay()+(7-n.weekStart))%7,l=v.getEndDate(d.month||12,d.year),r=v.getEndDate(d.month+1,d.year),lay.each(u,function(e,t){var a=[d.year,d.month],n=0;(t=lay(t)).removeAttr("class"),e"+a[2]+""),o.mark(t,a).holidays(t,a).limit({elem:t,date:{year:a[0],month:a[1]-1,date:a[2]},index:e})}),lay(c[0]).attr("lay-ym",d.year+"-"+(d.month+1)),lay(c[1]).attr("lay-ym",d.year+"-"+(d.month+1)),"cn"===n.lang?(lay(c[0]).attr("lay-type","year").html(d.year+" \u5e74"),lay(c[1]).attr("lay-type","month").html(d.month+1+" \u6708")):(lay(c[0]).attr("lay-type","month").html(y.month[d.month]),lay(c[1]).attr("lay-type","year").html(d.year)),m&&(n.range?!e&&"init"===a||(o.listYM=[[(o.startDate||n.dateTime).year,(o.startDate||n.dateTime).month+1],[o.endDate.year,o.endDate.month+1]],o.list(n.type,0).list(n.type,1),"time"===n.type?o.setBtnStatus("\u65f6\u95f4",lay.extend({},o.systemDate(),o.startTime),lay.extend({},o.systemDate(),o.endTime)):o.setBtnStatus(!0)):(o.listYM=[[d.year,d.month+1]],o.list(n.type,0))),n.range&&"init"===a&&(o.rangeLinked?(s=o.getAsYM(d.year,d.month,t?"sub":null),o.calendar(lay.extend({},d,{year:s[0],month:s[1]}),1-t)):o.calendar(null,1-t)),n.range||(u=["hours","minutes","seconds"],o.limit({elem:lay(o.footer).find(".laydate-btns-now"),date:o.systemDate(),index:0,time:u}),o.limit({elem:lay(o.footer).find(C),index:0,time:u})),o.setBtnStatus(),lay(o.shortcut).find("li."+x).removeClass(x),n.range&&!m&&"init"!==a&&o.stampRange(),o},I.prototype.list=function(n,i){var l,r,e,o,d=this,s=d.config,y=d.rangeLinked?s.dateTime:[s.dateTime,d.endDate][i],m=d.lang(),t=s.range&&"date"!==s.type&&"datetime"!==s.type,u=lay.elem("ul",{"class":w+" "+{year:"laydate-year-list",month:"laydate-month-list",time:"laydate-time-list"}[n]}),a=d.elemHeader[i],c=lay(a[2]).find("span"),h=d.elemCont[i||0],f=lay(h).find("."+w)[0],g="cn"===s.lang,p=g?"\u5e74":"",v=d.listYM[i]||{},D=["hours","minutes","seconds"],T=["startTime","endTime"][i];return v[0]<1&&(v[0]=1),"year"===n?(e=l=v[0]-7,l<1&&(e=l=1),lay.each(new Array(15),function(e){var t=lay.elem("li",{"lay-ym":l}),a={year:l,month:0,date:1};l==v[0]&&lay(t).addClass(x),t.innerHTML=l+p,u.appendChild(t),d.limit({elem:lay(t),date:a,index:i,type:n}),l++}),lay(c[g?0:1]).attr("lay-ym",l-8+"-"+v[1]).html(e+p+" - "+(l-1)+p)):"month"===n?(lay.each(new Array(12),function(e){var t=lay.elem("li",{"lay-ym":e}),a={year:v[0],month:e,date:1};e+1==v[1]&&lay(t).addClass(x),t.innerHTML=m.month[e]+(g?"\u6708":""),u.appendChild(t),d.limit({elem:lay(t),date:a,index:i,type:n})}),lay(c[g?0:1]).attr("lay-ym",v[0]+"-"+v[1]).html(v[0]+p)):"time"===n&&(r=function(){lay(u).find("ol").each(function(a,e){lay(e).find("li").each(function(e,t){d.limit({elem:lay(t),date:[{hours:e},{hours:d[T].hours,minutes:e},{hours:d[T].hours,minutes:d[T].minutes,seconds:e}][a],index:i,time:[["hours"],["hours","minutes"],["hours","minutes","seconds"]][a]})})}),s.range||d.limit({elem:lay(d.footer).find(C),date:d[T],inedx:0,time:["hours","minutes","seconds"]})},s.range?d[T]||(d[T]="startTime"===T?y:d.endDate):d[T]=y,lay.each([24,60,60],function(t,e){var a=lay.elem("li"),n=[" "+m.time[t]+"
"];lay.each(new Array(e),function(e){n.push(""+lay.digit(e,2)+" ")}),a.innerHTML=n.join("")+" ",u.appendChild(a)}),r()),f&&h.removeChild(f),h.appendChild(u),"year"===n||"month"===n?(lay(d.elemMain[i]).addClass("laydate-ym-show"),lay(u).find("li").on("click",function(){var e=0|lay(this).attr("lay-ym");lay(this).hasClass(k)||(d.rangeLinked?lay.extend(y,{year:"year"===n?e:v[0],month:"year"===n?v[1]-1:e}):y[n]=e,"year"===s.type||"month"===s.type?(lay(u).find("."+x).removeClass(x),lay(this).addClass(x),"month"===s.type&&"year"===n&&(d.listYM[i][0]=e,t&&((i?d.endDate:y).year=e),d.list("month",i))):(d.checkDate("limit").calendar(y,i,"init"),d.closeList()),d.setBtnStatus(),!s.range&&s.autoConfirm&&("month"===s.type&&"month"===n||"year"===s.type&&"year"===n)&&d.setValue(d.parse()).done().remove(),d.autoCalendarModel.auto&&!d.rangeLinked?d.choose(lay(h).find("td.layui-this"),i):d.endState&&d.done(null,"change"),lay(d.footer).find("."+L).removeClass(k))})):(e=lay.elem("span",{"class":M}),o=function(){lay(u).find("ol").each(function(e){var a=this,t=lay(a).find("li");a.scrollTop=30*(d[T][D[e]]-2),a.scrollTop<=0&&t.each(function(e,t){if(!lay(this).hasClass(k))return a.scrollTop=30*(e-2),!0})})},c=lay(a[2]).find("."+M),o(),e.innerHTML=s.range?[m.startTime,m.endTime][i]:m.timeTips,lay(d.elemMain[i]).addClass("laydate-time-show"),c[0]&&c.remove(),a[2].appendChild(e),lay(u).find("ol").each(function(t){var a=this;lay(a).find("li").on("click",function(){var e=0|this.innerHTML;lay(this).hasClass(k)||(s.range?d[T][D[t]]=e:y[D[t]]=e,lay(a).find("."+x).removeClass(x),lay(this).addClass(x),r(),o(),(d.endDate||"time"===s.type||"datetime"===s.type&&s.fullPanel)&&d.done(null,"change"),d.setBtnStatus())})})),d},I.prototype.listYM=[],I.prototype.closeList=function(){var a=this;a.config;lay.each(a.elemCont,function(e,t){lay(this).find("."+w).remove(),lay(a.elemMain[e]).removeClass("laydate-ym-show laydate-time-show")}),lay(a.elem).find("."+M).remove()},I.prototype.setBtnStatus=function(e,t,a){var n=this,i=n.config,l=n.lang(),r=lay(n.footer).find(C);i.range&&"time"!==i.type&&(t=t||(n.rangeLinked?n.startDate:i.dateTime),a=a||n.endDate,i=!n.endState||n.newDate(t).getTime()>n.newDate(a).getTime(),n.limit({date:t})||n.limit({date:a})?r.addClass(k):r[i?"addClass":"removeClass"](k),e&&i&&n.hint("string"==typeof e?l.timeout.replace(/\u65e5\u671f/g,e):l.timeout))},I.prototype.parse=function(e,t){var a=this,n=a.config,t=t||("end"==e?lay.extend({},a.endDate,a.endTime):n.range?lay.extend({},a.rangeLinked?a.startDate:n.dateTime,a.startTime):n.dateTime),t=v.parse(t,a.format,1);return n.range&&e===undefined?t+" "+a.rangeStr+" "+a.parse("end"):t},I.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},I.prototype.getDateTime=function(e){return this.newDate(e).getTime()},I.prototype.setValue=function(e){var t=this,a=t.config,n=a.elem[0];return"static"===a.position||(e=e||"",t.isInput(n)?lay(n).val(e):(a=t.rangeElem)?("array"!==layui.type(e)&&(e=e.split(" "+t.rangeStr+" ")),a[0].val(e[0]||""),a[1].val(e[1]||"")):(0===lay(n).find("*").length&&lay(n).html(e),lay(n).attr("lay-date",e))),t},I.prototype.preview=function(){var e,t=this,a=t.config;a.isPreview&&(e=lay(t.elem).find("."+T),a=!a.range||(t.rangeLinked?t.endState:t.endDate)?t.parse():"",e.html(a),e.html()&&(e.css({color:"#16b777"}),setTimeout(function(){e.css({color:"#777"})},300)))},I.prototype.renderAdditional=function(){this.config.fullPanel&&this.list("time",0)},I.prototype.stampRange=function(){var n,i=this,l=i.config,r=i.rangeLinked?i.startDate:l.dateTime,e=lay(i.elem).find("td");l.range&&!i.endState&&lay(i.footer).find(C).addClass(k),r=r&&i.newDate({year:r.year,month:r.month,date:r.date}).getTime(),n=i.endState&&i.endDate&&i.newDate({year:i.endDate.year,month:i.endDate.month,date:i.endDate.date}).getTime(),lay.each(e,function(e,t){var a=lay(t).attr("lay-ymd").split("-"),a=i.newDate({year:a[0],month:a[1]-1,date:a[2]}).getTime();l.rangeLinked&&!i.startDate&&a===i.newDate(i.systemDate()).getTime()&&lay(t).addClass(lay(t).hasClass(y)||lay(t).hasClass(m)?"":"laydate-day-now"),lay(t).removeClass(o+" "+x),a!==r&&a!==n||(i.rangeLinked||!i.rangeLinked&&(e<42?a===r:a===n))&&lay(t).addClass(lay(t).hasClass(y)||lay(t).hasClass(m)?o:x),rn.getDateTime(i.max)&&(n[t]={hours:i.max.hours,minutes:i.max.minutes,seconds:i.max.seconds},lay.extend(l,n[t])))}),a||(n.startDate=lay.extend({},l)),n.endState&&!n.limit({date:n.thisDateTime(1-a)})&&(((r=n.endState&&n.autoCalendarModel.auto?n.autoCalendarModel():r)||n.rangeLinked&&n.endState)&&n.newDate(n.startDate)>n.newDate(n.endDate)&&(e=n.startDate.year===n.endDate.year&&n.startDate.month===n.endDate.month&&n.startDate.date===n.endDate.date,o=n.startDate,n.startDate=lay.extend({},n.endDate,e?{}:n.startTime),i.dateTime=lay.extend({},n.startDate),n.endDate=lay.extend({},o,e?{}:n.endTime),e&&(o=n.startTime,n.startTime=n.endTime,n.endTime=o)),r&&(i.dateTime=lay.extend({},n.startDate))),n.rangeLinked?(e=lay.extend({},l),!t||a||r||(o=n.getAsYM(l.year,l.month,"sub"),lay.extend(i.dateTime,{year:o[0],month:o[1]})),n.calendar(e,t,r?"init":null)):n.calendar(null,a,r?"init":null),n.endState&&n.done(null,"change")):"static"===i.position?n.calendar().done().done(null,"change"):"date"===i.type?i.autoConfirm?n.setValue(n.parse()).done().remove():n.calendar().done(null,"change"):"datetime"===i.type&&n.calendar().done(null,"change"))},I.prototype.tool=function(t,e){var a=this,n=a.config,i=a.lang(),l=n.dateTime,r="static"===n.position,o={datetime:function(){lay(t).hasClass(k)||(a.list("time",0),n.range&&a.list("time",1),lay(t).attr("lay-type","date").html(a.lang().dateTips))},date:function(){a.closeList(),lay(t).attr("lay-type","datetime").html(a.lang().timeTips)},clear:function(){r&&(lay.extend(l,a.firstDate),a.calendar()),n.range&&(delete n.dateTime,delete a.endDate,delete a.startTime,delete a.endTime),a.setValue(""),a.done(null,"onClear").done(["",{},{}]).remove()},now:function(){var e=new Date;if(lay(t).hasClass(k))return a.hint(i.tools.now+", "+i.invalidDate);lay.extend(l,a.systemDate(),{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}),a.setValue(a.parse()),r&&a.calendar(),a.done(null,"onNow").done().remove()},confirm:function(){if(n.range){if(lay(t).hasClass(k))return a.hint("time"===n.type?i.timeout.replace(/\u65e5\u671f/g,"\u65f6\u95f4"):i.timeout)}else if(lay(t).hasClass(k))return a.hint(i.invalidDate);a.setValue(a.parse()),a.done(null,"onConfirm").done().remove()}};o[e]&&o[e]()},I.prototype.change=function(n){var i=this,l=i.config,r=i.thisDateTime(n),o=l.range&&("year"===l.type||"month"===l.type),d=i.elemCont[n||0],s=i.listYM[n],e=function(e){var t=lay(d).find(".laydate-year-list")[0],a=lay(d).find(".laydate-month-list")[0];return t&&(s[0]=e?s[0]-15:s[0]+15,i.list("year",n)),a&&(e?s[0]--:s[0]++,i.list("month",n)),(t||a)&&(lay.extend(r,{year:s[0]}),o&&(r.year=s[0]),l.range||i.done(null,"change"),l.range||i.limit({elem:lay(i.footer).find(C),date:{year:s[0]}})),i.setBtnStatus(),t||a};return{prevYear:function(){e("sub")||(i.rangeLinked?(l.dateTime.year--,i.checkDate("limit").calendar(null,null,"init")):(r.year--,i.checkDate("limit").calendar(null,n),i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change")))},prevMonth:function(){i.rangeLinked&&(r=l.dateTime);var e=i.getAsYM(r.year,r.month,"sub");lay.extend(r,{year:e[0],month:e[1]}),i.checkDate("limit").calendar(null,null,"init"),i.rangeLinked||(i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change"))},nextMonth:function(){i.rangeLinked&&(r=l.dateTime);var e=i.getAsYM(r.year,r.month);lay.extend(r,{year:e[0],month:e[1]}),i.checkDate("limit").calendar(null,null,"init"),i.rangeLinked||(i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change"))},nextYear:function(){e()||(i.rangeLinked?(l.dateTime.year++,i.checkDate("limit").calendar(null,0,"init")):(r.year++,i.checkDate("limit").calendar(null,n),i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change")))}}},I.prototype.changeEvent=function(){var i=this;i.config;lay(i.elem).on("click",function(e){lay.stope(e)}).on("mousedown",function(e){lay.stope(e)}),lay.each(i.elemHeader,function(n,e){lay(e[0]).on("click",function(e){i.change(n).prevYear()}),lay(e[1]).on("click",function(e){i.change(n).prevMonth()}),lay(e[2]).find("span").on("click",function(e){var t=lay(this),a=t.attr("lay-ym"),t=t.attr("lay-type");a&&(a=a.split("-"),i.listYM[n]=[0|a[0],0|a[1]],i.list(t,n),lay(i.footer).find("."+L).addClass(k))}),lay(e[3]).on("click",function(e){i.change(n).nextMonth()}),lay(e[4]).on("click",function(e){i.change(n).nextYear()})}),lay.each(i.table,function(e,t){lay(t).find("td").on("click",function(){i.choose(lay(this),e)})}),lay(i.footer).find("span").on("click",function(){var e=lay(this).attr("lay-type");i.tool(this,e)})},I.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())||/INPUT|TEXTAREA/.test(e.tagName)},I.prototype.events=function(){var e,t=this,a=t.config;a.elem[0]&&!a.elem[0].eventHandler&&(a.elem.on(a.trigger,e=function(){v.thisId!==a.id&&t.render()}),a.elem[0].eventHandler=!0,a.eventElem.on(a.trigger,e),t.unbind=function(){t.remove(),a.elem.off(a.trigger,e),a.elem.removeAttr("lay-key"),a.elem.removeAttr(d),a.elem[0].eventHandler=!1,a.eventElem.off(a.trigger,e),a.eventElem.removeAttr("lay-key"),delete s.that[a.id]})},s.that={},s.getThis=function(e){var t=s.that[e];return!t&&n&&layui.hint().error(e?a+" instance with ID '"+e+"' not found":"ID argument required"),t},l.run=function(n){n(p).on("mousedown",function(e){var t,a;!v.thisId||(t=s.getThis(v.thisId))&&(a=t.config,e.target!==a.elem[0]&&e.target!==a.eventElem[0]&&e.target!==n(a.closeStop)[0]&&t.remove())}).on("keydown",function(e){var t;!v.thisId||(t=s.getThis(v.thisId))&&"static"!==t.config.position&&13===e.keyCode&&n("#"+t.elemID)[0]&&t.elemID===I.thisElemDate&&(e.preventDefault(),n(t.footer).find(C)[0].click())}),n(i).on("resize",function(){if(v.thisId){var e=s.getThis(v.thisId);if(e)return!(!e.elem||!n(".layui-laydate")[0])&&void e.position()}})},v.render=function(e){e=new I(e);return s.call(e)},v.reload=function(e,t){e=s.getThis(e);if(e)return e.reload(t)},v.getInst=function(e){e=s.getThis(e);if(e)return e.inst},v.hint=function(e,t){e=s.getThis(e);if(e)return e.hint(t)},v.unbind=function(e){e=s.getThis(e);if(e)return e.unbind()},v.close=function(e){e=s.getThis(e||v.thisId);if(e)return e.remove()},v.parse=function(a,n,i){return a=a||{},n=((n="string"==typeof n?s.formatArr(n):n)||[]).concat(),lay.each(n,function(e,t){/yyyy|y/.test(t)?n[e]=lay.digit(a.year,t.length):/MM|M/.test(t)?n[e]=lay.digit(a.month+(i||0),t.length):/dd|d/.test(t)?n[e]=lay.digit(a.date,t.length):/HH|H/.test(t)?n[e]=lay.digit(a.hours,t.length):/mm|m/.test(t)?n[e]=lay.digit(a.minutes,t.length):/ss|s/.test(t)&&(n[e]=lay.digit(a.seconds,t.length))}),n.join("")},v.getEndDate=function(e,t){var a=new Date;return a.setFullYear(t||a.getFullYear(),e||a.getMonth()+1,1),new Date(a.getTime()-864e5).getDate()},n?(v.ready(),layui.define("lay",function(e){v.path=layui.cache.dir,l.run(lay),e(a,v)})):"function"==typeof define&&define.amd?define(function(){return l.run(lay),v}):(v.ready(),l.run(i.lay),i.laydate=v)}(window,window.document);!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e):function(e){if(e.document)return t(e);throw new Error("jQuery requires a window with a document")}:t(e)}("undefined"!=typeof window?window:this,function(T,M){var f=[],g=T.document,c=f.slice,O=f.concat,R=f.push,P=f.indexOf,B={},W=B.toString,m=B.hasOwnProperty,y={},e="1.12.4",C=function(e,t){return new C.fn.init(e,t)},I=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,$=/^-ms-/,z=/-([\da-z])/gi,X=function(e,t){return t.toUpperCase()};function U(e){var t=!!e&&"length"in e&&e.length,n=C.type(e);return"function"!==n&&!C.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+a+")"+a+"*"),ee=new RegExp("="+a+"*([^\\]'\"]*?)"+a+"*\\]","g"),te=new RegExp(G),ne=new RegExp("^"+s+"$"),f={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),TAG:new RegExp("^("+s+"|[*])"),ATTR:new RegExp("^"+J),PSEUDO:new RegExp("^"+G),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+a+"*(even|odd|(([+-]|)(\\d*)n|)"+a+"*(?:([+-]|)"+a+"*(\\d+)|))"+a+"*\\)|)","i"),bool:new RegExp("^(?:"+Y+")$","i"),needsContext:new RegExp("^"+a+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+a+"*((?:-\\d)?\\d*)"+a+"*\\)|)(?=[^-]|$)","i")},re=/^(?:input|select|textarea|button)$/i,ie=/^h\d$/i,c=/^[^{]+\{\s*\[native \w/,oe=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ae=/[+~]/,se=/'|\\/g,d=new RegExp("\\\\([\\da-f]{1,6}"+a+"?|("+a+")|.)","ig"),p=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(65536+r):String.fromCharCode(r>>10|55296,1023&r|56320)},ue=function(){C()};try{D.apply(n=V.call(v.childNodes),v.childNodes),n[v.childNodes.length].nodeType}catch(F){D={apply:n.length?function(e,t){U.apply(e,V.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function H(e,t,n,r){var i,o,a,s,u,l,c,f,d=t&&t.ownerDocument,p=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==p&&9!==p&&11!==p)return n;if(!r&&((t?t.ownerDocument||t:v)!==E&&C(t),t=t||E,N)){if(11!==p&&(l=oe.exec(e)))if(i=l[1]){if(9===p){if(!(a=t.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(d&&(a=d.getElementById(i))&&y(t,a)&&a.id===i)return n.push(a),n}else{if(l[2])return D.apply(n,t.getElementsByTagName(e)),n;if((i=l[3])&&g.getElementsByClassName&&t.getElementsByClassName)return D.apply(n,t.getElementsByClassName(i)),n}if(g.qsa&&!A[e+" "]&&(!m||!m.test(e))){if(1!==p)d=t,f=e;else if("object"!==t.nodeName.toLowerCase()){for((s=t.getAttribute("id"))?s=s.replace(se,"\\$&"):t.setAttribute("id",s=k),o=(c=w(e)).length,u=ne.test(s)?"#"+s:"[id='"+s+"']";o--;)c[o]=u+" "+_(c[o]);f=c.join(","),d=ae.test(e)&&de(t.parentNode)||t}if(f)try{return D.apply(n,d.querySelectorAll(f)),n}catch(h){}finally{s===k&&t.removeAttribute("id")}}}return P(e.replace(L,"$1"),t,n,r)}function le(){var n=[];function r(e,t){return n.push(e+" ")>b.cacheLength&&delete r[n.shift()],r[e+" "]=t}return r}function q(e){return e[k]=!0,e}function h(e){var t=E.createElement("div");try{return!!e(t)}catch(F){return!1}finally{t.parentNode&&t.parentNode.removeChild(t)}}function ce(e,t){for(var n=e.split("|"),r=n.length;r--;)b.attrHandle[n[r]]=t}function fe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function x(a){return q(function(o){return o=+o,q(function(e,t){for(var n,r=a([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function de(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in g=H.support={},O=H.isXML=function(e){e=e&&(e.ownerDocument||e).documentElement;return!!e&&"HTML"!==e.nodeName},C=H.setDocument=function(e){var e=e?e.ownerDocument||e:v;return e!==E&&9===e.nodeType&&e.documentElement&&(t=(E=e).documentElement,N=!O(E),(e=E.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",ue,!1):e.attachEvent&&e.attachEvent("onunload",ue)),g.attributes=h(function(e){return e.className="i",!e.getAttribute("className")}),g.getElementsByTagName=h(function(e){return e.appendChild(E.createComment("")),!e.getElementsByTagName("*").length}),g.getElementsByClassName=c.test(E.getElementsByClassName),g.getById=h(function(e){return t.appendChild(e).id=k,!E.getElementsByName||!E.getElementsByName(k).length}),g.getById?(b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&N)return(e=t.getElementById(e))?[e]:[]},b.filter.ID=function(e){var t=e.replace(d,p);return function(e){return e.getAttribute("id")===t}}):(delete b.find.ID,b.filter.ID=function(e){var t=e.replace(d,p);return function(e){e="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return e&&e.value===t}}),b.find.TAG=g.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):g.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[i++];)1===n.nodeType&&r.push(n);return r},b.find.CLASS=g.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&N)return t.getElementsByClassName(e)},r=[],m=[],(g.qsa=c.test(E.querySelectorAll))&&(h(function(e){t.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]="+a+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\["+a+"*(?:value|"+Y+")"),e.querySelectorAll("[id~="+k+"-]").length||m.push("~="),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||m.push(".#.+[+~]")}),h(function(e){var t=E.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name"+a+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")})),(g.matchesSelector=c.test(i=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.msMatchesSelector))&&h(function(e){g.disconnectedMatch=i.call(e,"div"),i.call(e,"[s!='']:x"),r.push("!=",G)}),m=m.length&&new RegExp(m.join("|")),r=r.length&&new RegExp(r.join("|")),e=c.test(t.compareDocumentPosition),y=e||c.test(t.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,t=t&&t.parentNode;return e===t||!(!t||1!==t.nodeType||!(n.contains?n.contains(t):e.compareDocumentPosition&&16&e.compareDocumentPosition(t)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},$=e?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!g.sortDetached&&t.compareDocumentPosition(e)===n?e===E||e.ownerDocument===v&&y(v,e)?-1:t===E||t.ownerDocument===v&&y(v,t)?1:u?j(u,e)-j(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===E?-1:t===E?1:i?-1:o?1:u?j(u,e)-j(u,t):0;if(i===o)return fe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?fe(a[r],s[r]):a[r]===v?-1:s[r]===v?1:0}),E},H.matches=function(e,t){return H(e,null,null,t)},H.matchesSelector=function(e,t){if((e.ownerDocument||e)!==E&&C(e),t=t.replace(ee,"='$1']"),g.matchesSelector&&N&&!A[t+" "]&&(!r||!r.test(t))&&(!m||!m.test(t)))try{var n=i.call(e,t);if(n||g.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(F){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(d,p),e[3]=(e[3]||e[4]||e[5]||"").replace(d,p),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||H.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&H.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return f.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&te.test(n)&&(t=w(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(d,p).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+a+")"+e+"("+a+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(e){e=H.attr(e,t);return null==e?"!="===n:!n||(e+="","="===n?e===r:"!="===n?e!==r:"^="===n?r&&0===e.indexOf(r):"*="===n?r&&-1(?:<\/\1>|)$/,G=/^.[^:#\[\.,]*$/;function K(e,n,r){if(C.isFunction(n))return C.grep(e,function(e,t){return!!n.call(e,t,e)!==r});if(n.nodeType)return C.grep(e,function(e){return e===n!==r});if("string"==typeof n){if(G.test(n))return C.filter(n,e,r);n=C.filter(n,e)}return C.grep(e,function(e){return-1)[^>]*|#([\w-]*))$/,ee=((C.fn.init=function(e,t,n){if(!e)return this;if(n=n||Q,"string"!=typeof e)return e.nodeType?(this.context=this[0]=e,this.length=1,this):C.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(C):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),C.makeArray(e,this));if(!(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:Z.exec(e))||!r[1]&&t)return(!t||t.jquery?t||n:this.constructor(t)).find(e);if(r[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:g,!0)),J.test(r[1])&&C.isPlainObject(t))for(var r in t)C.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if((n=g.getElementById(r[2]))&&n.parentNode){if(n.id!==r[2])return Q.find(e);this.length=1,this[0]=n}return this.context=g,this.selector=e,this}).prototype=C.fn,Q=C(g),/^(?:parents|prev(?:Until|All))/),te={children:!0,contents:!0,next:!0,prev:!0};function ne(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t,n=C(e,this),r=n.length;return this.filter(function(){for(t=0;ta ",y.leadingWhitespace=3===S.firstChild.nodeType,y.tbody=!S.getElementsByTagName("tbody").length,y.htmlSerialize=!!S.getElementsByTagName("link").length,y.html5Clone="<:nav>"!==g.createElement("nav").cloneNode(!0).outerHTML,q.type="checkbox",q.checked=!0,k.appendChild(q),y.appendChecked=q.checked,S.innerHTML="",y.noCloneChecked=!!S.cloneNode(!0).lastChild.defaultValue,k.appendChild(S),(q=g.createElement("input")).setAttribute("type","radio"),q.setAttribute("checked","checked"),q.setAttribute("name","t"),S.appendChild(q),y.checkClone=S.cloneNode(!0).cloneNode(!0).lastChild.checked,y.noCloneEvent=!!S.addEventListener,S[C.expando]=1,y.attributes=!S.getAttribute(C.expando);var x={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:y.htmlSerialize?[0,"",""]:[1,"X","
"]};function b(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):undefined;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||C.nodeName(r,t)?o.push(r):C.merge(o,b(r,t));return t===undefined||t&&C.nodeName(e,t)?C.merge([e],o):o}function we(e,t){for(var n,r=0;null!=(n=e[r]);r++)C._data(n,"globalEval",!t||C._data(t[r],"globalEval"))}x.optgroup=x.option,x.tbody=x.tfoot=x.colgroup=x.caption=x.thead,x.th=x.td;var Te=/<|?\w+;/,Ce=/"!==f[1]||Ce.test(a)?0:u:u.firstChild)&&a.childNodes.length;o--;)C.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(C.merge(h,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=p.lastChild}else h.push(t.createTextNode(a));for(u&&p.removeChild(u),y.appendChecked||C.grep(b(h,"input"),Ee),g=0;a=h[g++];)if(r&&-1 ]","i"),Pe=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,Be=/
+
+
+
+示例标题
+
+
+
+
\ No newline at end of file
diff --git a/docs/.layui/DOCS_TEMPLATE_OPTIONS.md b/docs/.layui/DOCS_TEMPLATE_OPTIONS.md
new file mode 100644
index 00000000..2ccee5ab
--- /dev/null
+++ b/docs/.layui/DOCS_TEMPLATE_OPTIONS.md
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+ 属性名
+ 描述
+ 类型
+ 默认值
+
+
+
+
+AAA
+
+
+
+
+
+CCC
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
index 3e4a9376..ab7ba5a0 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,5 +1,4 @@
-
# Docs
-- https://layui.github.io
-- https://layui.gitee.io/v2
\ No newline at end of file
+- [最新文档](https://layui.dev)
+- [2.7 文档](https://layui.dev/2.7/)
\ No newline at end of file
diff --git a/docs/anim/index.md b/docs/anim/index.md
new file mode 100644
index 00000000..43d2de98
--- /dev/null
+++ b/docs/anim/index.md
@@ -0,0 +1,136 @@
+---
+title: 动画
+toc: true
+---
+
+
+
+# 动画
+
+> Layui 内置了几种常见的 `CSS3` 动画。
+
+示例
+
+
+
+
+
+对需要动画的标签添加 `class="layui-anim"` 基础类,再追加其他不同的动画类,即可让元素产生动画。
+
+动画列表
+
+点击下述绿色圆体,即可预览不同类名的动画效果。
+
+
+
+
+
+
diff --git a/docs/auxiliar/index.md b/docs/auxiliar/index.md
new file mode 100644
index 00000000..4b9963d1
--- /dev/null
+++ b/docs/auxiliar/index.md
@@ -0,0 +1,70 @@
+---
+title: 辅助元素 blockquote,fieldset,hr
+toc: true
+---
+
+# 辅助元素
+
+> 辅助元素是指对 `blockquote,fieldset,hr` 等标签的美化,主要是静态展示作用。
+
+引用
+
+
+
+
+
+字段集
+
+
+
+
+
+
+水平线
+
+
+
+
\ No newline at end of file
diff --git a/docs/badge/index.md b/docs/badge/index.md
new file mode 100644
index 00000000..9798e390
--- /dev/null
+++ b/docs/badge/index.md
@@ -0,0 +1,88 @@
+---
+title: 徽章 badge
+toc: true
+---
+
+# 徽章
+
+> 徽章 `badge` 通常作为修饰用途而存在,它们本身细小而并不显眼,但掺杂在其它元素中就显得尤为突出了。
+
+
+普通徽章
+
+
+
+
+
+
+小圆点
+
+
+
+
+
+
+徽章的搭配
+
+
+
+
+
+徽章还可以自由佩戴在其他更多元素中,此处不做逐一列举。
+
diff --git a/docs/base.md b/docs/base.md
new file mode 100644
index 00000000..6d0a96bc
--- /dev/null
+++ b/docs/base.md
@@ -0,0 +1,165 @@
+---
+title: 底层方法
+toc: true
+---
+
+# 底层方法
+
+> Layui 提供了一系列基础 API,以更好地辅助组件的使用。
+
+全局配置
+
+`layui.config(options);`
+
+您可以在 Layui 模块使用之前,采用该方法进行一些全局化的基础配置,其支持的属性如下:
+
+```
+layui.config({
+ base: '' // 设定 Layui 扩展模块的所在目录,一般与 extend 方法搭配使用
+ version: false, // 用于更新模块缓存,默认 false。若设为 true,即让浏览器不缓存。也可设为一个任意数值
+ dir: 'layui/', // layui 基础目录,用于动态导入 src/layui.js 时的内置模块的加载。一般无需设置
+ debug: false, // 用于开启调试模式,默认 false。若设为 true,则模块的引入节点会保留在页面
+});
+```
+
+
+
+
+链接解析
+
+`var url = layui.url(href);`
+
+参数 `href` 可选,默认自动读取当前页面 URL(`location.href`)。该方法用于将一段 URL 链接中的 `pathname、search、hash` 等属性进行对象化处理, 以下是对一个 URL 解析后的返回结果:
+
+```
+// 假设当前页面 url 为: https://domain.com/docs/base.html?a=1&c=3#/user/set/id=123/
+var url = layui.url();
+
+// url 返回结果为:
+{
+ "pathname": ["docs","base.html"], // 路径
+ "search": {"a":"1","c":"3"}, // 参数
+ "hash": { // hash 解析
+ "path": ["user","set",""], // hash 中的路径
+ "search": {"id":"123"}, // hash 中的参数
+ "hash": "", // hash 中的 hash
+ "href": "/user/set/id=123/" // hash 中的完整链接
+ }
+}
+```
+
+该方法通常可搭配 `location.hash` 和 `hashchange ` 事件,或 `history.pushState()` 和 `popstate` 事件使用,从而实现*单页面应用开发*。 Layui 的 AdminUI 主题模板则正是基于该方法完成的路由系统。
+
+
+本地存储
+
+本地存储是对 localStorage 和 sessionStorage 的友好封装,可更方便地管理本地数据。方法如下:
+
+- `layui.data(table, settings);` 即 localStorage,数据在浏览器中的持久化存储,除非物理删除。
+- `layui.sessionData(table, settings);` 即 sessionStorage ,数据在浏览器中的会话性存储,页面关闭后即失效。
+
+两者使用方式完全一致。其中参数 `table` 为表名,`settings` 是一个对象,用于设置 `key/value`。下面以 `layui.data()` 方法为例:
+
+```
+// 【增】:向 test 表插入一个 nickname 字段,如果该表不存在,则自动建立。
+layui.data('test', {
+ key: 'nickname',
+ value: '张三'
+});
+
+// 【删】:删除 test 表的 nickname 字段
+layui.data('test', {
+ key: 'nickname',
+ remove: true
+});
+layui.data('test', null); // 删除 test 表
+
+// 【改】:同【增】,会覆盖已经存储的数据
+
+// 【查】:向 test 表读取全部的数据
+var localTest = layui.data('test');
+console.log(localTest.nickname); // 获得“张三”
+```
+
+浏览器信息
+
+`var device = layui.device(key);`
+
+参数 `key` 可选。可利用该方法对不同的设备进行差异化处理,`device` 即为不同设备下返回的不同信息,如下:
+
+```
+{
+ os: "windows", // 当前浏览器所在的底层操作系统,如:Windows、Linux、Mac 等
+ ie: false, // 当前浏览器是否为 ie6-11 的版本,如果不是 ie 浏览器,则为 false
+ weixin: false, // 当前浏览器是否为微信 App 环境
+ android: false, // 当前浏览器是否为安卓系统环境
+ ios: false, // 当前浏览器是否为 IOS 系统环境
+ mobile: false // 当前浏览器是否为移动设备环境(v2.5.7 新增)
+}
+```
+
+有时,你的 App 可能会对 userAgent 插入一段特定标识,如:
+
+```
+Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 MYAPP/1.8.6 Safari/537.36
+```
+
+要验证当前页面是否在你的 App 环境中,即可通过上述 `MYAPP`(即 Native 给 Webview 插入的标识,可自由定义)来判断。
+
+```
+var device = layui.device('MYAPP');
+if(device.MYAPP){
+ alert('在 MYAPP 环境中');
+}
+```
+
+API 列表
+
+前面我们特别介绍了几个相对特殊的基础方法,而以下是 Layui 提供的全部基础 API:
+
+| API | 描述 |
+| --- | --- |
+| layui.cache | 获得 UI 的一些配置及临时缓存信息 |
+| layui.config(options) | 基础配置。[#用法](#config) |
+| layui.define([modules], callback) | 定义模块。[#用法](modules.html#define) |
+| layui.use([modules], callback) | 加载模块。[#用法](modules.html#use) |
+| layui.extend(obj) | 扩展模块。[#用法](modules.html#extend) |
+| layui.disuse([modules]) 2.7+ | 弃用模块,以便重新扩展新的同名模块。参数支持数组,即可同时弃用多个模块。 如:`layui.disuse(['table'])` |
+| layui.link(href) | 加载 CSS,`href` 即为 css 路径。一般用于动态加载你的外部 CSS 文件 |
+| layui.getStyle(node, name) | 获得一个原始 DOM 节点的 style 属性值,如: `layui.getStyle(document.body, 'font-size')` |
+| layui.img(src, callback, error) | 图片预加载 |
+| layui.each(obj, callback) | 对象(Array、Object、DOM 对象等)遍历,可用于取代 for 语句 |
+| layui.type(operand) 2.6.7+ | 获取基本数据类型和各类常见引用类型,如: `layui.type([]); // array` `layui.type({}); //object` `layui.type(new Date()); // date` |
+| layui.isArray(obj) 2.7+ | 对象是否为泛数组结构。如 Array、NodeList、jQuery 对象等 `layui.isArray([1,6]); // true` `layui.isArray($('div')); // true` |
+| layui.sort(obj, key, desc) | 将数组中的对象按某个成员重新对该数组排序,如:`layui.sort([{a: 3},{a: 1},{a: 5}], 'a'); // 返回:[{"a":1},{"a":3},{"a":5}]` |
+| layui.url(href) | 链接解析。[#用法](#url) |
+| layui.data(table, settings) | 持久化存储。[#用法](#data) |
+| layui.sessionData(table, settings) | 会话性存储。[#用法](#data) |
+| layui.device(key) | 获取浏览器信息。[#用法](#device) |
+| layui.hint() | 向控制台打印一些异常信息,目前只返回了 error 方法,如: `var hint = layui.hint();` `hint.error('出错啦');` |
+| layui.stope(e) | 阻止事件冒泡 |
+| layui.onevent(modName, events, callback) | 增加自定义模块事件,一般在内置组件中使用。 |
+| layui.event(modName, events, params) | 执行自定义模块事件,搭配 onevent 使用。注2.8+ :当 events 参数中未设定 filter 时则可重复执行该事件,否则只会执行一次最新添加的事件。 |
+| layui.off(events, modName) 2.5.7+ | 用于移除模块相关事件,如:`layui.off('select(filter)', 'form')`,那么`form.on('select(filter)', callback)`事件将会被移除 |
+| layui.factory(modName) | 用于获取模块对应的 `layui.define()` 的回调函数 |
+| var lay = layui.lay | 基础模块,提供了更多基础 API,一般供 Layui 内置组件中使用 |
+
+> 基础 API 是整个 UI 的有力支撑,我们在组件的使用过程中也经常会用到。
+
+
diff --git a/docs/button/index.md b/docs/button/index.md
new file mode 100644
index 00000000..ebd39b14
--- /dev/null
+++ b/docs/button/index.md
@@ -0,0 +1,213 @@
+---
+title: 按钮
+toc: true
+---
+
+# 按钮
+
+> 向任意 `HTML` 标签设定`class="layui-btn"` 建立一个基础按钮。通过追加格式为`layui-btn-{type}`的 `class` 来定义其它按钮风格。内置的按钮 `class` 可以进行任意组合,从而形成更多种按钮风格。
+
+按钮主题
+
+
+
+
+
+按钮尺寸
+
+
+
+
+
+按钮圆角
+
+
+
+
+
+按钮图标
+
+
+
+
+
+按钮混搭
+
+
+
+
+
+按钮组合
+
+
+
+
+
+按钮容器
+
+
+
+
+
+
+
+## 小贴士
+
+> 按钮的主题、尺寸、图标、圆角的交叉组合,可以形成丰富多样的按钮种类。其中颜色也可以根据使用场景自主更改。
\ No newline at end of file
diff --git a/docs/carousel/detail/demo.md b/docs/carousel/detail/demo.md
new file mode 100644
index 00000000..88ddf988
--- /dev/null
+++ b/docs/carousel/detail/demo.md
@@ -0,0 +1,215 @@
+常规用法
+
+
+
+
+
+- 在元素外层设置 `class="layui-carousel"` 来定义一个轮播容器
+- 在元素内层设置属性 `carousel-item` 用来定义条目容器
+
+属性配置预览
+
+
+
+
+
+填充图片轮播
+
+
+
+
\ No newline at end of file
diff --git a/docs/carousel/detail/options.md b/docs/carousel/detail/options.md
new file mode 100644
index 00000000..cc2dd333
--- /dev/null
+++ b/docs/carousel/detail/options.md
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
+ 属性名
+ 描述
+ 类型
+ 默认值
+
+
+
+
+elem
+
+
+绑定元素选择器或 DOM 对象
+
+
+string/DOM
+-
+
+
+width
+
+
+设定轮播容器宽度,值支持:*像素*、*auto*、*百分比*。
+
+
+string
+
+
+`600px`
+
+
+
+
+height
+
+
+设定轮播容器高度,值支持的类型同 `width` 属性
+
+
+string
+
+
+`280px`
+
+
+
+
+full
+
+
+是否全屏轮播
+
+
+boolean
+
+
+`false`
+
+
+
+
+anim
+
+
+轮播切换动画方式。可选值有:
+
+- `default` 左右切换
+- `updown` 上下切换
+- `fade` 渐隐渐显切换
+
+
+boolean
+
+
+`default`
+
+
+
+
+autoplay
+
+
+是否自动切换,可选值有:
+
+- `true` 自动滚动,鼠标移入会暂停、移出重新恢复
+- `false` 不自动滚动
+- `alway` 始终自动滚动,不受鼠标移入移出影响 2.7+
+
+
+
+boolean string
+
+
+`true`
+
+
+
+
+interval
+
+
+自动切换的时间间隔,单位: ms (毫秒),不能低于 800
+
+
+number
+
+
+`3000`
+
+
+
+
+index
+
+
+初始开始的条目下标
+
+
+number
+
+
+`0`
+
+
+
+
+arrow
+
+
+切换箭头默认显示状态,可选值有:
+
+- `hover` 鼠标悬停显示
+- `always` 始终显示
+- `none` 始终不显示
+
+
+string
+
+
+`hover`
+
+
+
+
+indicator
+
+
+指示器位置,可选值有:
+
+- `inside` 显示在容器内部
+- `outside` 显示在容器外部
+- `none` 不显示
+
+注 : 若设定了 `anim: 'updown'` ,则 `outside` 值无效
+
+
+string
+
+
+`inside`
+
+
+
+
+trigger
+
+
+指示器的触发事件
+
+
+string
+
+
+`click`
+
+
+
+
+
+
+
+
+
+[回调函数](#options.callback)
+
+
+
+
+
+
+change 2.7+
+
+
+
+轮播切换后的回调函数,返回一个对象参数。
+
+
+```
+carousel.render({
+ elem: '#id',
+ change: function(obj){
+ console.log(obj.index); // 当前条目的索引
+ console.log(obj.prevIndex); // 上一个条目的索引
+ console.log(obj.item); // 当前条目的元素对象
+ }
+});
+```
+
+注:在 `2.7` 之前的版本,需通过 carousel 的 `change` 事件来实现,如:
+
+```
+var carousel = layui.carousel;
+
+// 轮播渲染
+carousel.render(options);
+
+// 触发轮播切换事件
+carousel.on('change(filter)', function(obj){ // filter 对应轮播容器的 lay-filter 属性值
+ console.log(obj);
+});
+```
+
+
+
+
+
+
+### 贴士
+
+> 若轮播的填充内容为图片,且 `width` 或 `height` 为自适应,那么需动态获取父容器宽高,从而适配父容器。 当浏览器窗口尺寸发生变化时,可在窗口 `resize` 事件中通过轮播重载来重设宽高值。
\ No newline at end of file
diff --git a/docs/carousel/index.md b/docs/carousel/index.md
new file mode 100644
index 00000000..25a13d1e
--- /dev/null
+++ b/docs/carousel/index.md
@@ -0,0 +1,79 @@
+---
+title: 轮播组件 carousel
+toc: true
+---
+
+# 轮播组件
+
+> 轮播组件 `carousel` 主要适用于跑马灯/轮播等交互场景。它并非单纯地为焦点图而生,准确地说,它可以满足任何内容的轮播式切换操作,亦可胜任 `fullpage`(全屏上下轮播)的需求。
+
+示例
+
+
+
+
+{{- d.include("docs/carousel/detail/demo.md") }}
+
+
+API
+
+| API | 描述 |
+| --- | --- |
+| var carousel = layui.carousel | 获得 `carousel` 模块。 |
+| [var inst = carousel.render(options)](#render) | carousel 组件渲染,核心方法。 |
+| [inst.reload(options)](#reload) | 轮播实例重载 |
+| [inst.goto(index)](#goto) 2.8+ | 轮播切换到特定下标 |
+
+渲染
+
+`carousel.render(options);`
+
+- 参数 `options` : 基础属性配置项。[#详见属性](#options)
+
+该方法返回一个实例对象,包含操作当前实例的相关方法成员。
+
+```
+var inst = carousel.render(options);
+console.log(inst); // 得到当前实例对象
+```
+
+重载
+
+`inst.reload(options);`
+
+- 参数 `options` : 基础属性配置项。[#详见属性](#options)
+
+通过渲染返回的实例对象,可获得重载方法,用于实现对实例的属性重载。
+
+```
+var inst = carousel.render(options); // 轮播初始渲染
+inst.reload(options); // 轮播重载
+```
+
+详细用法可参考:[#示例](#demo)
+
+属性
+
+
+{{- d.include("docs/carousel/detail/options.md") }}
+
+
+
+切换
+
+`inst.goto(index);`
+
+- 参数 `index` : 轮播下标,从 `0` 开始计算
+
+通过渲染返回的实例对象,可获得切换方法,用于实现对轮播的手动定向切换。
+
+```
+var inst = carousel.render(options); // 轮播初始渲染
+inst.goto(0); // 轮播切换到第一项
+inst.goto(1); // 轮播切换到第二项
+```
diff --git a/docs/class/index.md b/docs/class/index.md
new file mode 100644
index 00000000..ef9ed6c1
--- /dev/null
+++ b/docs/class/index.md
@@ -0,0 +1,170 @@
+---
+title: 公共类 class
+toc: true
+---
+
+# 公共类
+
+> 公共类是 `layui.css` 中并不以组件形式存在的公共 `class` 选择器,而又能用于任何地方。
+
+普通类
+
+| className | 描述 |
+| --- | --- |
+| layui-main | 设置一个固定宽度为 `1160px` 的水平居中块 |
+| layui-border-box | 设置元素及其所有子元素均为 `box-sizing: content-box` 模型的容器 |
+| layui-clear | 清除前面的同级元素产生的浮动 |
+| layui-clear-space 2.8+ | 清除容器内的空白符 |
+| layui-inline | 设置元素为内联块状结构 |
+| layui-elip | 设置单行文本溢出并显示省略号 |
+| layui-unselect | 屏蔽选中 |
+| layui-disabled | 设置元素为不可点击状态 |
+| layui-circle | 设置元素为圆形。需确保 `width` 和 `height` 相同 |
+
+显示隐藏
+
+| className | 描述 |
+| --- | --- |
+| layui-show | 设置元素为 `display: block` 可见状态 |
+| layui-hide | 设置元素为 `display: none` 隐藏状态,且不占用空间 |
+| layui-show-v | 设置元素为 `visibility: visible` 可见状态 |
+| layui-hide-v | 设置元素为 `visibility: hidden` 不可见状态,且依旧占用空间 |
+
+
+三角实体
+
+| className | 描述 |
+| --- | --- |
+| layui-edge | 定义一个三角形基础类 |
+| layui-edge-top | 设置向上三角 |
+| layui-edge-right | 设置向右三角 |
+| layui-edge-bottom | 设置向下三角 |
+| layui-edge-left | 设置向左三角 |
+
+示例
+
+
+
+
+
+
+背景颜色
+
+| className | 背景色 | 预览 |
+| --- | --- | --- |
+| layui-bg-red | 红 |
|
+| layui-bg-orange | 橙 |
|
+| layui-bg-green | 绿 |
|
+| layui-bg-blue | 蓝 |
|
+| layui-bg-purple | 紫 |
|
+| layui-bg-black | 深 |
|
+| layui-bg-gray | 浅 |
|
+
+文字大小
+
+| className | 文字大小和预览 |
+| --- | --- |
+| layui-font-12 | 12px |
+| layui-font-13 2.8+ | 13px |
+| layui-font-14 | 14px |
+| layui-font-16 | 16px |
+| layui-font-18 | 18px |
+| layui-font-20 | 20px |
+| layui-font-22 2.8+ | 22px |
+| layui-font-24 2.8+ | 24px |
+| layui-font-26 2.8+ | 26px |
+| layui-font-28 2.8+ | 28px |
+| layui-font-30 2.8+ | 30px |
+| layui-font-32 2.8+ | 32px |
+
+文字颜色
+
+| className | 文字颜色和预览 |
+| --- | --- |
+| layui-font-red | 红 |
+| layui-font-orange | 橙 |
+| layui-font-green | 绿 |
+| layui-font-blue | 蓝 |
+| layui-font-purple | 紫 |
+| layui-font-black | 深 |
+| layui-font-gray | 浅 |
+
+文档容器
+
+通过设置 `class="layui-text"` 定义一段包含标题、段落、列表、链接等组合的文档区域。
+
+
+
+
\ No newline at end of file
diff --git a/docs/code/detail/options.md b/docs/code/detail/options.md
new file mode 100644
index 00000000..043945fd
--- /dev/null
+++ b/docs/code/detail/options.md
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+ 属性名
+ 描述
+ 类型
+ 默认值
+
+
+
+
+elem
+
+
+绑定元素选择器或 DOM 对象
+
+
+string/DOM
+-
+
+
+preview 2.8+
+
+
+是否开启 Code 预览功能,可选值有:
+
+- `true` 开启 Code 的普通预览
+- `false` 关闭 Code 预览(默认)
+- `"iframe"` 开启 Code 在 iframe 模式中预览
+
+当开启该属性时,`elem` 指定的元素需要设置成以下结构:
+
+```
+
+
+
+```
+
+
+boolean string
+
+
+`false`
+
+
+
+
+layout 2.8+
+
+
+开启预览后的面板布局方式,值为一个数组,数组的可选成员有:
+
+- `code` 代码区域
+- `preview` 预览区域
+
+面板将根据数组的排列顺序来显示,如:
+
+```
+layout: ['code', 'preview']
+```
+
+
+array
+-
+
+
+style 2.8+
+
+
+设置 Code 和预览区域的公共样式
+
+
+string
+-
+
+
+codeStyle 2.8+
+
+
+设置 Code 区域的局部样式,优先级高于 `style` 属性
+
+
+string
+-
+
+
+previewStyle 2.8+
+
+
+设置预览区域的局部样式,优先级高于 `style` 属性
+
+
+string
+-
+
+
+id 2.8+
+
+
+设置实例的唯一索引,以便用于其他操作
+
+
+string
+-
+
+
+className 2.8+
+
+
+追加实例面板的 `className`,以便对其自定义样式
+
+
+string
+-
+
+
+tools 2.8+
+
+
+用于开启 `preview` 属性后的面板头部右侧区域工具栏图标,值为一个数组,内置成员:
+
+- `full` 最大化显示
+- `window` 在新窗口预览。一般当 `layout: 'iframe'` 时开启,且 code 中须包含完整的 HTML 方可在新窗口正常预览。
+
+工具图标将根据数组的排列顺序来显示,如:
+
+```
+tools: ['full', 'window']
+```
+
+亦可自定义值,值对应[图标](../icon/) `className` 的 `layui-icon-` 后的名称,并通过 `toolsEvent` 回调函数中处理事件。
+
+
+array
+-
+
+
+toolsEvent 2.8+
+
+
+点击工具栏的回调函数,函数返回 `tools` 设置的名称,如:
+
+```
+toolsEvent: function(othis, type){
+ console.log(othis); // 当前图标元素对象
+ console.log(type); // tools 中设置的对应值
+}
+```
+
+通过该函数与 `tools` 属性的搭配,可实现对工具栏的扩展。
+
+
+function
+-
+
+
+text 2.8+
+
+
+自定义默认文本,值为一个对象,可选成员有:
+
+```
+text: {
+ code: '代码栏标题', // 默认: >
+ preview: '预览栏标题' // 默认: Preview
+}
+```
+
+
+object
+-
+
+
+header 2.8+
+
+
+是否开启 Code 栏头部区域
+
+
+boolean
+
+
+`false`
+
+
+
+
+about
+
+
+设置 Code 栏头部右上角信息。必须开启 `header` 属性后有效。
+
+
+string
+-
+
+
+ln
+
+
+是否显示 Code 区域的行号
+
+
+boolean
+
+
+`true`
+
+
+
+
+skin
+
+
+Code 容器的风格,可选值有:
+
+- `light` 浅色模式(默认)
+- `dark` 深色模式
+
+
+string
+-
+
+
+encode
+
+
+是否对 Code 区域自动转义 html 标签
+
+
+boolean
+
+
+`false`
+
+
+
+
+
+
+[done](#options.done) 2.8+
+
+
+
+
+
+组件渲染完毕的回调函数,函数返回一个 object 类型参数
+
+
+```
+done: function(obj){
+ var container = obj.container; // 当前面板的容器对象
+ obj.render(); // 对预览中的 `element,form` 等组件进行渲染
+}
+```
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/code/index.md b/docs/code/index.md
new file mode 100644
index 00000000..13d3bd4d
--- /dev/null
+++ b/docs/code/index.md
@@ -0,0 +1,42 @@
+---
+title: Code 预览组件 code
+toc: true
+---
+
+# Code 预览组件
+
+> 代码预览组件 `code` 主要用于对代码区块的修饰和对应的效果预览,如 Layui 各组件文档中的示例演示。
+
+
+方法
+
+`layui.code(options);`
+
+- 参数 `options` : 基础属性配置项。[#详见属性](#options)。
+
+属性除了在该方法中传递,也可以直接写在元素的 `lay-options` 属性上,如:
+
+
+
+
+
+属性
+
+
+{{- d.include("docs/code/detail/options.md") }}
+
\ No newline at end of file
diff --git a/docs/color/index.md b/docs/color/index.md
new file mode 100644
index 00000000..91fccd5b
--- /dev/null
+++ b/docs/color/index.md
@@ -0,0 +1,139 @@
+---
+title: 颜色
+toc: true
+---
+
+# 颜色
+
+> Layui 试图在清新与深沉之间寻求某种柔和,以不过分刺激大脑皮层的神经介质,反馈出经久耐看的微妙视图。您可以在我们精心调配的如下色系中合理搭配,减少不必要的违和感,从而使您的 Web 页面看上去尽可能融洽。
+
+基色调
+
+
+
+Layui 选取以象征清新与包容的「蓝绿色」作为主色调,它介于蓝与绿之间,亦可称之为「青色」,所谓青者,取之于蓝而深于绿,此间包罗万象,跨越时空。这也是我们对技术创作与人生哲学之间的一点思考。
+
+
+辅色调
+
+
+
+
+
#ff5722
+
错误 - Danger
+
+
+
+
+
#ffb800
+
警示 - Warning
+
+
+
+
+
+
#16b777
+
成功 - Success
+
+
+
+
+
+页面中同样也少不了辅助色彩的点缀,以对不同含义的内容加以区分。Layui 从暖色系(红/橙)和冷色系(绿/蓝)中,各自调取了我们认为最具代表性的颜色值,它们通常在不同的场景中发挥着不同的作用。
+
+中色调
+
+
+
+中性的颜色是页面中的重要组成部分,也被称之为无彩色系,一般用于文本、背景和边框等。它能对由彩色进行视觉冲淡,以达到和谐自然的效果。Layui 认为恰当的灰度调配代表着极简,这是一种神奇的色系,是视觉疲劳的栖息,低调而优雅,且永不过时。
+
+七色调
+
+
+
+ #ff5722 - 红
+
+
+ #ffb800 - 橙
+
+
+ #16baaa - 绿
+
+
+ #1e9fff - 蓝
+
+
+ #a233c6 - 紫
+
+
+ #2f363c - 深
+
+
+ #fafafa - 浅
+
+
+
+Layui 的色调基础,除了前面提到的主辅中色之外,还建立在以上罗列的七种颜色之上。你同样也可以遵循我们提供的色调方案去扩展你的页面元素,使得能与 Layui 的主题风格无缝融合。
+
+
+
+## 标语
+
+> 不热衷于视觉设计的开发者不是一个好作家。 —— 贤心
\ No newline at end of file
diff --git a/docs/colorpicker/detail/demo.md b/docs/colorpicker/detail/demo.md
new file mode 100644
index 00000000..a91901da
--- /dev/null
+++ b/docs/colorpicker/detail/demo.md
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+
+
+
+
+设置 RGB / RGBA
+
+
+
+
+
+
+
+
+
+开启透明度
+
+
+
+
+
+
+
+
+
+
+预定义颜色项
+
+
+
+
+
+
+
+
+
+全功能和回调的使用
+
+
+
+主题按钮
+
+
+演示:选择颜色并确定,改变上方按钮背景色
+
+
+
+
+颜色框尺寸
+
+
+
+
+
+
+
+
+
+
+同时绑定多个元素
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/colorpicker/detail/options.md b/docs/colorpicker/detail/options.md
new file mode 100644
index 00000000..2909382b
--- /dev/null
+++ b/docs/colorpicker/detail/options.md
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+ 属性名
+ 描述
+ 类型
+ 默认值
+
+
+
+
+elem
+
+
+绑定元素选择器或 DOM 对象
+
+
+string/DOM
+-
+
+
+color
+
+
+默认颜色值,值的格式跟随 `format` 属性的设定。
+
+
+string
+-
+
+
+format
+
+
+颜色显示/输入格式,支持 `hex` `rgb` 。 若同时开启 `alpha` 属性,则颜色值自动变为 `rgba`。
+
+
+string
+
+
+`hex`
+
+
+
+
+alpha
+
+
+是否开启透明度。当同时开启 `format: 'rga'` 时,`color` 值将采用 `rgba` 格式。
+
+
+boolean
+
+
+`false`
+
+
+
+
+predefine
+
+
+是否开启预定义颜色栏
+
+
+boolean
+
+
+`false`
+
+
+
+
+colors
+
+
+设置可选的颜色列表,需开启 `predefine: true` 有效。
+ 用法详见:[#预定义颜色项](#demo-predefine)
+
+
+array
+-
+
+
+size
+
+
+颜色框的尺寸,可选值: `lg` `sm` `xs`
+
+
+string
+
+
+`sm`
+
+
+
+
+
+
+
+
+
+[回调函数](#options.callback)
+
+
+
+
+
+
+change
+
+
+颜色被改变的回调函数。用法详见:[#示例](#demo-all)
+
+```
+change: function(value){
+ console.log(value); // 当前颜色值
+}
+```
+
+
+
+
+done
+
+
+颜色选择完毕的回调函数。点击“确认”和“清除”按钮均会触发
+
+```
+done: function(value){
+ console.log(value); // 当前选中的颜色值
+}
+```
+
+用法详见:[#示例](#demo-all)
+
+
+
+
+cancel 2.8+
+
+
+取消颜色选择的回调函数,一般点击非颜色选择面板区域触发。
+
+```
+cancel: function(value){
+ console.log(value); // 当前颜色值
+}
+```
+
+用法详见:[#示例](#demo-all)
+
+
+
+
+close 2.8+
+
+
+颜色选择面板被关闭后即触发。
+
+```
+close: function(value){
+ console.log(value); // 当前颜色值
+}
+```
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/colorpicker/index.md b/docs/colorpicker/index.md
new file mode 100644
index 00000000..ebd47163
--- /dev/null
+++ b/docs/colorpicker/index.md
@@ -0,0 +1,61 @@
+---
+title: 颜色选择器 colorpicker
+toc: true
+---
+
+# 颜色选择器
+
+> 颜色选择器 `colorpicker` 用于对颜色的快捷选择,支持 `hex,rgb,rgba` 三种颜色类型。
+
+示例
+
+
+{{- d.include("docs/colorpicker/detail/demo.md") }}
+
+
+
+
+API
+
+| API | 描述 |
+| --- | --- |
+| var colorpicker = layui.colorpicker | 获得 `colorpicker` 模块。 |
+| [colorpicker.render(options)](#render) | colorpicker 组件渲染,核心方法。 |
+
+
+渲染
+
+`colorpicker.render(options);`
+
+- 参数 `options` : 基础属性配置项。[#详见属性](#options)
+ 注 2.7+ : 除 `elem` 属性外,其他基础属性也可以直接写在元素的 `lay-options="{}"` 属性中。
+
+```
+
+
+
+
+
+```
+
+属性
+
+
+{{- d.include("docs/colorpicker/detail/options.md") }}
+
+
+## 兼容性
+
+> colorpicker 组件支持 `Chrome,Edge,Firefox` 等所有高级浏览器,不支持 IE10 低版本浏览器。
\ No newline at end of file
diff --git a/docs/dropdown/detail/demo.md b/docs/dropdown/detail/demo.md
new file mode 100644
index 00000000..08cb32b0
--- /dev/null
+++ b/docs/dropdown/detail/demo.md
@@ -0,0 +1,57 @@
+基础用法
+
+
+
+{{- d.include("docs/dropdown/examples/base.md") }}
+
+
+
+复杂结构
+
+
+
+{{- d.include("docs/dropdown/examples/complex.md") }}
+
+
+
+在表格中应用
+
+
+
+{{- d.include("docs/dropdown/examples/table.md") }}
+
+
+
+自定义事件
+
+
+
+{{- d.include("docs/dropdown/examples/on.md") }}
+
+
+
+
+
+
+
+{{- d.include("docs/dropdown/examples/contextmenu.md") }}
+
+
+
+水平对齐方式
+
+
+
+{{- d.include("docs/dropdown/examples/align.md") }}
+
+
+
+自定义内容
+
+如下以弹出一个 `tab` 为例
+
+
+
+{{- d.include("docs/dropdown/examples/content.md") }}
+
+
\ No newline at end of file
diff --git a/docs/dropdown/detail/options.data.md b/docs/dropdown/detail/options.data.md
new file mode 100644
index 00000000..256b88f0
--- /dev/null
+++ b/docs/dropdown/detail/options.data.md
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+ 属性名
+ 描述
+ 类型
+ 默认值
+
+
+
+
+title
+
+
+菜单标题
+
+
+string
+-
+
+
+id
+
+
+菜单 ID。用户菜单项唯一索引
+
+
+
+number/string
+-
+
+
+type
+
+
+菜单项的类型,支持的可选值如下:
+
+- `normal` 普通菜单项(默认)
+- `group` 纵向组合收缩菜单
+- `parent` 横向父级菜单
+- `-` 分割线
+
+
+string
+
+
+`normal`
+
+
+
+
+href
+
+
+菜单项的 url 地址。若填写,点击菜单将直接发生跳转。
+
+
+string
+-
+
+
+target
+
+
+菜单 url 打开方式,需设置 `href` 属性后才生效。 一般可设为 `_blank` 或 `_self` 等
+
+
+string
+
+
+`_self`
+
+
+
+
+disabled 2.8+
+
+
+菜单项是否禁用状态
+
+
+boolean
+
+
+`false`
+
+
+
+
+templet
+
+
+自定义当前菜单项模板,优先级高于基础属性 `templet`
+
+
+string/function
+-
+
+
+child
+
+
+子级菜单数据集合。参数同父级,可无限嵌套。
+
+
+array
+-
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/detail/options.md b/docs/dropdown/detail/options.md
new file mode 100644
index 00000000..406ec566
--- /dev/null
+++ b/docs/dropdown/detail/options.md
@@ -0,0 +1,266 @@
+
+
+
+
+
+
+
+
+
+ 属性名
+ 描述
+ 类型
+ 默认值
+
+
+
+
+elem
+
+
+绑定元素选择器或 DOM 对象
+
+
+string/DOM
+-
+
+
+
+
+[data](#options.data)
+
+
+
+
+下拉菜单的数据源。格式详见:[#data 格式](#options.data)
+
+
+array
+-
+
+
+trigger
+
+
+触发组件的事件类型。支持所有事件,如: `click,hover,mousedown,contextmenu` 等
+
+
+string
+
+
+`click`
+
+
+
+
+show
+
+
+是否渲染即显示组件面板。该属性一般在重载方法中传递。
+
+
+boolean
+
+
+`false`
+
+
+
+
+align
+
+
+下拉面板相对绑定元素的水平对齐方式。支持以下可选值:
+
+- `left` 左对齐(默认)
+- `center` 居中对齐
+- `right` 右对齐
+
+
+string
+
+
+`left`
+
+
+
+
+isAllowSpread
+
+
+是否允许菜单组展开收缩
+
+
+boolean
+
+
+`true`
+
+
+
+
+isSpreadItem
+
+
+是否初始展开子菜单
+
+
+boolean
+
+
+`true`
+
+
+
+
+delay
+
+
+延迟关闭的毫秒数。当 `trigger: 'hover'` 时才生效
+
+
+number
+
+
+`300`
+
+
+
+
+className
+
+
+自定义组件主容器的样式类名,从而在外部重新定义样式。
+
+
+string
+-
+
+
+style
+
+
+设置组件主容器的 `CSS` 样式。
+
+
+string
+-
+
+
+shade 2.8+
+
+
+设置弹出时的遮罩。支持以下方式赋值:
+
+- 若值为 `number` 类型,则表示为遮罩透明度,如:
+ `shade: 0.3`
+- 若值为 `array` 类型,则可同时设置透明度和背景色,如:
+ `shade: [0.3, '#000']`
+
+
+number array
+
+
+`0`
+
+
+
+
+templet
+
+
+全局定义菜单的列表模板,可添加任意 `html` 字符,且支持 [laytpl](../laytpl/) 模板语法。用法详见:[#示例](#demo-complex)
+
+注 2.8+ : 模板亦可采用函数写法:
+
+```
+templet: function(d){
+ return '> ' + d.title;
+}
+```
+
+
+string function
+-
+
+
+content
+
+
+ 自定义组件内容,从而替代默认的菜单结构。用法详见:[#示例](#demo-content)
+
+
+string
+-
+
+
+clickScope 2.8+
+
+
+设置触发点击事件的菜单范围。 支持以下可选值:
+
+- `all` : 即代表父子菜单均可触发事件
+
+默认无需设置,即父级菜单不触发事件
+
+
+string
+-
+
+
+
+
+
+
+
+[回调函数](#options.callback)
+
+
+
+
+
+
+ready
+
+
+组件成功弹出后的回调函数。返回的参数如下:
+
+```
+ready: function(elemPanel, elem){
+ console.log(elemPanel); // 组件面板元素对象
+ console.log(elem); // 当前组件绑定的目标元素对象
+}
+```
+
+
+
+
+
+
+[click](#options.click)
+
+
+
+
+
+菜单项被点击时的回调函数。返回的参数如下:
+
+
+```
+click: function(data, othis){
+ console.log(data); // 当前所点击的菜单项对应的数据
+ console.log(othis); // 当前所点击的菜单项元素对象
+ console.log(this.elem); // 当前组件绑定的目标元素对象,批量绑定中常用
+
+ // 若返回 false,则点击选项可不关闭面板 --- 2.8+
+ /*
+ return false;
+ */
+```
+
+用法详见:[#示例](#examples)
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/align.md b/docs/dropdown/examples/align.md
new file mode 100644
index 00000000..ef6910f1
--- /dev/null
+++ b/docs/dropdown/examples/align.md
@@ -0,0 +1,37 @@
+
+
+ 左对齐
+
+
+
+ 居中对齐
+
+
+
+ 右对齐
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/base.md b/docs/dropdown/examples/base.md
new file mode 100644
index 00000000..20bf7d37
--- /dev/null
+++ b/docs/dropdown/examples/base.md
@@ -0,0 +1,120 @@
+
+
+ 下拉菜单
+
+
+
+ 下拉菜单
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/complex.md b/docs/dropdown/examples/complex.md
new file mode 100644
index 00000000..1782a86a
--- /dev/null
+++ b/docs/dropdown/examples/complex.md
@@ -0,0 +1,128 @@
+
+ 无限层级 + 跳转 + 事件 + 自定义模板
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/content.md b/docs/dropdown/examples/content.md
new file mode 100644
index 00000000..9c74fda1
--- /dev/null
+++ b/docs/dropdown/examples/content.md
@@ -0,0 +1,39 @@
+
+ 自定义内容
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/contextmenu.md b/docs/dropdown/examples/contextmenu.md
new file mode 100644
index 00000000..4f3e4d54
--- /dev/null
+++ b/docs/dropdown/examples/contextmenu.md
@@ -0,0 +1,88 @@
+
+
+
+ 开启全局右键菜单
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/on.md b/docs/dropdown/examples/on.md
new file mode 100644
index 00000000..489fca0b
--- /dev/null
+++ b/docs/dropdown/examples/on.md
@@ -0,0 +1,37 @@
+
+
+ hover
+
+
+
+ mousedown
+
+
+
+ dblclick - 双击
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/reload.md b/docs/dropdown/examples/reload.md
new file mode 100644
index 00000000..97c424dc
--- /dev/null
+++ b/docs/dropdown/examples/reload.md
@@ -0,0 +1,39 @@
+
+ 下拉菜单
+
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/reloadData.md b/docs/dropdown/examples/reloadData.md
new file mode 100644
index 00000000..67a0e0c9
--- /dev/null
+++ b/docs/dropdown/examples/reloadData.md
@@ -0,0 +1,57 @@
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/examples/table.md b/docs/dropdown/examples/table.md
new file mode 100644
index 00000000..546ef5b0
--- /dev/null
+++ b/docs/dropdown/examples/table.md
@@ -0,0 +1,76 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/dropdown/index.md b/docs/dropdown/index.md
new file mode 100644
index 00000000..1c43ccc4
--- /dev/null
+++ b/docs/dropdown/index.md
@@ -0,0 +1,135 @@
+---
+title: 下拉菜单 dropdown
+toc: true
+---
+
+# 下拉菜单 2.6+
+
+> 下拉菜单 `dropdown` 是基于基础菜单结构衍生的多功能通用下拉菜单组件,它将原本静态呈现的菜单,通过各种事件的形式触发,从而以独立面板的形式弹出。不仅可用作常见的*下拉菜单*,更可用于*右键菜单*来实现更多的交互可能。
+
+示例
+
+
+{{- d.include("docs/dropdown/detail/demo.md") }}
+
+
+在 `content` 属性中传入任意的 html 内容,可替代默认的下拉菜单结构,从而实现更丰富的弹出内容。
+
+API
+
+| API | 描述 |
+| --- | --- |
+| var dropdown = layui.dropdown | 获得 `dropdown` 模块。 |
+| [dropdown.render(options)](#render) | dropdown 组件渲染,核心方法。 |
+| [dropdown.reload(id, options)](#reload) | 完整重载 |
+| [dropdown.reloadData(id, options)](#reload) 2.8+ | 仅重载数据或内容 |
+| [dropdown.close(id)](#close) | 关闭对应的组件面板 |
+
+渲染
+
+`dropdown.render(options);`
+
+- 参数 `options` : 基础属性配置项。[#详见属性](#options)
+ 注 2.8+ : 除 `elem` 属性外,其他基础属性也可以直接写在元素的 `lay-options="{}"` 属性中。
+
+```
+下拉菜单
+下拉菜单
+下拉菜单
+
+
+```
+
+属性
+
+
+{{- d.include("docs/dropdown/detail/options.md") }}
+
+
+data 格式
+
+
+{{- d.include("docs/dropdown/detail/options.data.md") }}
+
+
+
+重载
+
+即对一段已经渲染好的下拉菜单重新设置相关属性并渲染,可分为以下几种重载方式:
+
+| 重载方式 | API |
+| --- | --- |
+| [完整重载](#dropdown.reload) | [dropdown.reload(id, options, deep)](#dropdown.reload) |
+| [仅数据或内容重载](#dropdown.reloadData) 2.8+ | [dropdown.reloadData(id, options, deep)](#dropdown.reloadData) |
+
+
+两者重载的使用方式完全相同,区别只是在于参与重载时的属性差异及其对应的效果差异。一般按照实际需求选择使用。
+
+完整重载
+
+`dropdown.reload(id, options);`
+
+- 参数 `id` : 组件渲染时定义的 `id` 属性值
+- 参数 `options` : 基础属性配置项。[#详见属性](#options)
+
+该方法用于对下拉菜单进行完整重载,所有属性均可参与到重载中。
+
+
+
+{{- d.include("docs/dropdown/examples/reload.md") }}
+
+
+
+仅数据或内容重载 2.8+
+
+`dropdown.reloadData(id, options);`
+
+- 参数同 `dropdown.reload(id, options)` 参数
+
+使用该方法时,与数据无关的属性不会参与到重载中。因此若只是更新数据或内容,该方法可大幅提升体验。
+
+
+
+{{- d.include("docs/dropdown/examples/reloadData.md") }}
+
+
+
+
+关闭面板 2.8+
+
+`dropdown.close(id);`
+
+- 参数 `id` : 组件渲染时定义的 `id` 属性值
+
+该方法用于关闭对应的 `dropdown` 组件面板。
+
+```
+var dropdown = layui.dropdown;
+
+// 渲染
+dropdown.render({
+ elem: '', // 绑定元素选择器
+ id: 'test', // 自定义 id
+ // 其他属性 …
+});
+// 关闭对应的组件面板
+dropdown.close('test');
+```
\ No newline at end of file
diff --git a/docs/favicon.ico b/docs/favicon.ico
new file mode 100644
index 00000000..5457e78a
Binary files /dev/null and b/docs/favicon.ico differ
diff --git a/docs/fixbar/detail/demo.md b/docs/fixbar/detail/demo.md
new file mode 100644
index 00000000..97a686be
--- /dev/null
+++ b/docs/fixbar/detail/demo.md
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+ 自定义固定条示例 - Layui
+
+
+
+
+
+
+
+ 页 面 内 容 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/fixbar/detail/options.md b/docs/fixbar/detail/options.md
new file mode 100644
index 00000000..debfbc30
--- /dev/null
+++ b/docs/fixbar/detail/options.md
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+ 属性名
+ 描述
+ 类型
+ 默认值
+
+
+
+
+bars 2.8+
+
+
+设置固定工具条列表。可支持定义以下子属性:
+
+```
+bars: [
+ {
+ type: '', // bar 类型名,用于事件区分
+ icon: '', // bar 图标的 className
+ content: '', // bar 任意内容
+ style: '' // bar 任意样式
+ },
+ // …
+]
+```
+
+该属性比较灵活,具体用法可参考:[#示例](#examples)
+
+
+array
+
+
+查看默认值
+
+
+
+
+default 2.8+
+
+
+是否显示默认的固定条 ,如 `top` (点击可让滚动条置顶)等
+
+
+boolean
+
+
+`true`
+
+
+
+
+bgcolor
+
+
+固定条的默认背景色
+
+
+string
+-
+
+
+css
+
+
+工具条外层容器的任意 css 属性。如设置工具条的坐标:
+
+```
+css: {right: 32, bottom: 32}
+```
+
+
+object
+-
+
+
+target 2.8+
+
+
+插入固定条的目标元素选择器
+
+
+object
+
+
+`body`
+
+
+
+
+scroll 2.8+
+
+
+固定条最外层容器滚动条所在的元素,若不设置则默认取 `target` 属性值
+
+
+object
+
+
+`body`
+
+
+
+
+margin 2.8+
+
+
+用于设置默认 `TOP` 条出现滚动条的高度临界值
+
+
+number
+
+
+`200`
+
+
+
+
+duration 2.8+
+
+
+用于默认 `TOP` 条等动画时长
+
+
+number
+
+
+`200`
+
+
+
+
+on 2.8+
+
+
+用于定义固定条列表的任意事件,触发事件时的回调将返回 `bars` 属性的 `type` 值。
+
+```
+on: {
+ // 点击事件
+ click: function(type){
+ // bars 对属性应的 type 值
+ console.log(type);
+ },
+ // …
+}
+```
+
+该属性一般与 `bars` 属性搭配使用,具体用法可参考:[#示例](#examples)
+
+
+object
+-
+
+
+
+
+
+### 贴士
+
+> 灵活运用 `bars` 属性的 `content,style` 子属性,可实现更多丰富多样的固定条。
\ No newline at end of file
diff --git a/docs/fixbar/index.md b/docs/fixbar/index.md
new file mode 100644
index 00000000..3362d140
--- /dev/null
+++ b/docs/fixbar/index.md
@@ -0,0 +1,33 @@
+---
+title: 固定条组件 fixbar
+toc: true
+---
+
+# 固定条组件
+
+> 固定条组件 `fixbar` 是指当滚动条滑动时,始终固定在页面一侧的工具条元素,除了内置的 `TOP` 条功能外,还可以灵活地扩展任意自定义的工具条。在 `2.x` 版本中,`fixbar` 属于 `util` 模块的子集。
+
+示例
+
+
+{{- d.include("docs/fixbar/detail/demo.md") }}
+
+
+API
+
+| API | 描述 |
+| --- | --- |
+| var util = layui.util | 获得 `util` 模块。 |
+| [util.fixbar(options)](#fixbar) | fixbar 组件渲染,核心方法。 |
+
+渲染
+
+`util.fixbar(options);`
+
+- 参数 `options` : 基础属性配置项。[#详见属性](#options)
+
+属性
+
+
+{{- d.include("docs/fixbar/detail/options.md") }}
+
\ No newline at end of file
diff --git a/docs/flow/detail/demo.md b/docs/flow/detail/demo.md
new file mode 100644
index 00000000..02cc034e
--- /dev/null
+++ b/docs/flow/detail/demo.md
@@ -0,0 +1,61 @@
+滚动加载
+
+
+
+
+
+
+
+
+手动加载
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/flow/detail/options.md b/docs/flow/detail/options.md
new file mode 100644
index 00000000..f55adf04
--- /dev/null
+++ b/docs/flow/detail/options.md
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+ 属性名
+ 描述
+ 类型
+ 默认值
+
+
+
+
+elem
+
+
+绑定元素选择器或 DOM 对象
+
+
+string
+-
+
+
+scrollElem
+
+
+指定触发流加载的滚动条所在元素选择器。
+
+
+string
+
+
+`document`
+
+
+
+
+isAuto
+
+
+是否自动加载。 若设为 `false`,则会在列表底部生成一个「加载更多」的按钮,那么可点击该按钮加载下一页数据。
+
+
+boolean
+
+
+`true`
+
+
+
+
+end
+
+
+设置加载完毕后的最尾部的内容,可传入任意 HTML 字符。
+
+
+string
+
+
+没有更多了
+
+
+
+
+isLazyimg
+
+
+是否开启信息流中的图片懒加载。若设为 `true` ,则只会对在可视区域的图片进行按需加载。但同时,在拼接列表字符的时候,您不能给列表中的 ` ` 标签赋值 `src`,必须要用 `lay-src` 属性取代,如:
+
+```
+layui.each(data, function(index, item){
+ lis.push(' ');
+});
+```
+
+
+boolean
+
+
+`false`
+
+
+
+
+mb
+
+
+与底部的临界距离。 即当滚动条与底部产生该距离时,触发加载。 必须 `isAuto:true` 时有效。
+
+*小贴士*: 此处 `mb` 属性名是 css 中 `margin-bottom` 的简写,可并非国粹之语 😅
+
+
+number
+
+
+`50`
+
+
+
+
+done
+
+
+
+滚动条到达临界点触发加载的回调函数。函数返回的参数如下:
+
+
+```
+done: function(page, next){
+ console.log(page) // 获得当前页
+
+ // 执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
+ // 只有当前页小于总页数的情况下,才会继续出现加载更多
+ next('列表 HTML 片段', page < res.pages);
+}
+```
+
+详细用法可参考:[#示例](#examples)
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/flow/index.md b/docs/flow/index.md
new file mode 100644
index 00000000..be1ea987
--- /dev/null
+++ b/docs/flow/index.md
@@ -0,0 +1,90 @@
+---
+title: 流加载 flow
+toc: true
+---
+
+# 流加载
+
+> 流加载 `flow` 是用于在*信息流*和*图片列表*场景中的滚动按需加载,对前后端的体验和性能优化具有一定帮助。
+
+示例
+
+
+
+
+{{- d.include("docs/flow/detail/demo.md") }}
+
+
+API
+
+| API | 描述 |
+| --- | --- |
+| var flow = layui.flow | 获得 `flow` 模块。 |
+| [flow.load(options)](#load) | 信息流加载,核心方法。 |
+| [flow.lazyimg(options)](#lazyimg) | 图片懒加载。 |
+
+信息流
+
+`flow.load(options);`
+
+- 参数 `options` : 基础属性配置项。[#详见属性](#options)
+
+信息流是分页的另一种表现形式,新加载的内容不替换原有的内容,而是随着滚动条滚动而追加显示。[#详见示例](#examples)
+
+属性
+
+
+{{- d.include("docs/flow/detail/options.md") }}
+
+
+图片懒加载
+
+`flow.lazyimg(options);`
+
+- 参数 `options` : 属性配置项。可选项见下表。
+
+| 属性名 | 描述 |
+| --- | --- |
+| elem | 绑定容器中需进行懒加载的图片元素选择器 |
+| scrollElem | 滚动条所在元素选择器,默认 `document` 。 |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+无论滚动条上滑还是下滑,都会始终加载当前屏的图片。
+
diff --git a/docs/form/checkbox.md b/docs/form/checkbox.md
new file mode 100644
index 00000000..98c57a68
--- /dev/null
+++ b/docs/form/checkbox.md
@@ -0,0 +1,119 @@
+---
+title: 复选框
+toc: true
+---
+
+# 复选框
+
+> 复选框组件是对 ` ` 元素的美化替代,在原有的特性基础上,对 UI 进行了加强。
+
+
+默认风格
+
+
+
+
+
+
+
+
+
+
+
+- 属性 `title` 可设置复选框标题
+- 属性 `checked` 可设置默认选中
+- 属性 `disabled` 可设置禁用状态
+- 属性 `value` 可设置值,否则选中时返回的默认值为 `on`(浏览器默认机制)
+- 属性 `lay-skin` 可设置复选框风格,可选值:`tag`2.8+ ,`switch`,默认风格可不填
+
+特别地,当表单提交时,只有选中状态的复选框才能获取到 `value`,这点和浏览器原有的复选框机制相同。
+
+注 2.8+ : `lay-skin` 属性在之前版本默认为标签风格,新版本调整为默认原始风格(`lay-skin="primary"`)。
+
+标签风格
+
+
+
+
+
+
+
+
+
+
+
+
+开关风格
+
+
+
+
+
+
+
+
+
+
+
+
+在 `title` 属性中通过 `|` 分隔符可设置两种状态下的不同标题
+
+
+复选框事件
+
+`form.on('checkbox(filter)', callback);`
+
+- `checkbox` 为复选框事件固定名称
+- `filter` 为复选框元素对应的 `lay-filter` 属性值
+
+该事件在复选框选中或取消选中时触发。
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/form.demo.md b/docs/form/examples/form.demo.md
new file mode 100644
index 00000000..2f84b569
--- /dev/null
+++ b/docs/form/examples/form.demo.md
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
普通文本域
+
+ <textarea placeholder="请输入内容" class="layui-textarea"></textarea>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/form.grid.md b/docs/form/examples/form.grid.md
new file mode 100644
index 00000000..731ddb81
--- /dev/null
+++ b/docs/form/examples/form.grid.md
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Search
+ Reset
+
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/form.login.md b/docs/form/examples/form.login.md
new file mode 100644
index 00000000..39610aae
--- /dev/null
+++ b/docs/form/examples/form.login.md
@@ -0,0 +1,79 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/form.pane.md b/docs/form/examples/form.pane.md
new file mode 100644
index 00000000..fac32f12
--- /dev/null
+++ b/docs/form/examples/form.pane.md
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
文本域
+
+ <textarea placeholder="请输入内容" class="layui-textarea"></textarea>
+
+
+
+ 确认
+ 重置
+
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/form.reg.md b/docs/form/examples/form.reg.md
new file mode 100644
index 00000000..f4af24b0
--- /dev/null
+++ b/docs/form/examples/form.reg.md
@@ -0,0 +1,130 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/form.val.md b/docs/form/examples/form.val.md
new file mode 100644
index 00000000..41ba84f5
--- /dev/null
+++ b/docs/form/examples/form.val.md
@@ -0,0 +1,112 @@
+
+
+ 赋值
+ 取值
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
文本域
+
+ <textarea placeholder="请输入" class="layui-textarea" name="desc"></textarea>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/form.validate.md b/docs/form/examples/form.validate.md
new file mode 100644
index 00000000..ed3ff895
--- /dev/null
+++ b/docs/form/examples/form.validate.md
@@ -0,0 +1,56 @@
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/form.verify.md b/docs/form/examples/form.verify.md
new file mode 100644
index 00000000..62cfdee6
--- /dev/null
+++ b/docs/form/examples/form.verify.md
@@ -0,0 +1,50 @@
+
+
+
+
+
+ 提交
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/input.affix.custom.md b/docs/form/examples/input.affix.custom.md
new file mode 100644
index 00000000..01f29066
--- /dev/null
+++ b/docs/form/examples/input.affix.custom.md
@@ -0,0 +1,39 @@
+
+
+
\ No newline at end of file
diff --git a/docs/form/examples/input.group.md b/docs/form/examples/input.group.md
new file mode 100644
index 00000000..6ef3d65a
--- /dev/null
+++ b/docs/form/examples/input.group.md
@@ -0,0 +1,82 @@
+
\ No newline at end of file
diff --git a/docs/form/examples/input.pre.suf.md b/docs/form/examples/input.pre.suf.md
new file mode 100644
index 00000000..76d14cdb
--- /dev/null
+++ b/docs/form/examples/input.pre.suf.md
@@ -0,0 +1,94 @@
+
\ No newline at end of file
diff --git a/docs/form/index.md b/docs/form/index.md
new file mode 100644
index 00000000..1c85b2d6
--- /dev/null
+++ b/docs/form/index.md
@@ -0,0 +1,396 @@
+---
+title: 表单组件 form
+toc: true
+---
+
+# 表单组件 🔥
+
+> 表单组件`form`是包含输入框、选择框、复选框、开关、单选框等表单项组件的集合,主要用于对表单域进行各类动态化渲染和相关的交互操作。`form`是 Layui 最常用的组件之一。
+
+示例
+
+综合演示
+
+
+
+{{- d.include('docs/form/examples/form.demo.md') }}
+
+
+
+方框风格
+
+
+
+{{- d.include('docs/form/examples/form.pane.md') }}
+
+
+
+登录模板 2.8+
+
+
+
+{{- d.include('docs/form/examples/form.login.md') }}
+
+
+
+注册模板 2.8+
+
+
+
+{{- d.include('docs/form/examples/form.reg.md') }}
+
+
+
+更多其他表单模板均可自由布局实现,为了避免影响文档其他重要版面的阅读,我们就不做过多演示了。
+
+
+表单布局
+
+### 🌕 普通布局
+
+在上文的「[综合演示](#examples)」示例中,我们用的是 form 组件自身的普通布局。其要点为:
+
+- 通过 `class="layui-form"` 定义一个表单域,通常设置在``标签上, 或普通`` 标签亦可。
+- 通过 `class="layui-form-item"` 定义一个块级元素的表单项容器
+- 通过 `class="layui-form-label"` 定义标签
+- 通过 `class="layui-form-block"` 定义表单项父容器为块级元素
+- 通过 `class="layui-form-inline"` 或 `class="layui-inline"` 定义表单项父容器为行内块元素
+
+即必须按照规定的层级定义相应的 `class`。
+
+### 🌕 栅格布局
+
+form 还可以借助*栅格*实现更灵活的响应式布局。
+
+
+
+{{- d.include('docs/form/examples/form.grid.md') }}
+
+
+
+
API
+
+| API | 描述 |
+| --- | --- |
+| var form = layui.form | 获得 `form` 模块。 |
+| [form.render(type, filter)](#render) | 表单域组件渲染,核心方法。[#用法](#render) |
+| [form.verify(obj)](#verify) | 自定义表单验证的规则。[#用法](#verify) |
+| [form.validate(elem)](#validate)
2.7+ | 主动触发执行验证。[#用法](#validate) |
+| [form.val(filter, obj)](#val) | 表单赋值或取值。 [#用法](#val) |
+| [form.submit(filter, callback)](#submit)
2.7+ | 用于主动执行指定表单的提交。[#用法](#submit) |
+| [form.on(\'event(filter)\', callback)](#on) | 事件。[#用法](#on) |
+| form.config | 获取 form 组件全局配置项。 |
+| form.set(options) | 设置 form 组件全局配置项。 |
+
+
属性
+
+在表单域中,有时还需要定义一些特定属性来配合组件的使用,它们一般以 `lay-*` 为命名格式,如:
+
+```
+
+
+
+ 提交
+
+
+```
+
+以下为 `form` 组件的特定属性列表:
+
+| 属性 | 值 | 描述 |
+| --- | --- | --- |
+| title | 自定义 | 设置表单元素标题,一般用于 `checkbox,radio` 元素 |
+| lay-filter | 自定义 | 设置表单元素的过滤器,以便用于执行相关方法时的参数匹配 |
+| lay-verify | `required`必填项
`phone`手机号
`email`邮箱
`url`网址
`number`数字
`date`日期
`identity`身份证
`自定义规则值` | 设置表单项的验证规则,支持单条或多条规则(多条用`\|`分隔),如:
`lay-verify="required"`
`lay-verify="required\|email"`
`lay-verify="其他自定义规则值"`
自定义规则的用法:[#详见](#verify) |
+| lay-vertype | `tips`吸附层
`alert` 对话框
`msg` 默认 | 设置验证异常时的提示层模式 |
+| lay-reqtext | 自定义 | 设置*必填项*(`lay-verify="required"`)的默认提示文本 |
+| lay-affix | [#详见](input.html#affix) | 输入框动态点缀,`
`元素 **私有属性** |
+| lay-skin | [#详见](checkbox.html#default) | 设置 UI 风格。 `
` 元素 **私有属性** |
+| lay-search | 默认不区分大小写;
设置`cs`区分大小写 | 给 `select` 组件开启搜索功能。`
` 元素 **私有属性** |
+| lay-submit | 无需值 | 设置元素(一般为`` 标签)触发 `submit` 提交事件 |
+| lay-ignore | 无需值 | 设置表单元素忽略渲染,即让元素保留系统原始 UI 风格 |
+
+
+渲染
+
+`form.render(type, filter);`
+
+- 参数 `type` 可选,对应表单组件类型,支持:`input,select,checkbox,radio`;若不填,则指向所有类型。
+- 参数 `filter` 可选,对应 `class="layui-form"` 所在元素的 `lay-filter` 属性值,用于指定需渲染的表单区域。
+
+### **常规渲染**
+
+`form` 组件会在元素加载完毕后,自动对所有表单区域完成一次渲染,因此该方法主要用于对*动态插入*的表单元素的渲染。
+
+```
+
+ 动态插入的表单域
+
+
+
+```
+
+### **定向渲染** 2.7+
+
+该方法还允许指定表单元素的 jQuery 对象,从而完成定向渲染。且支持两种方式的指向:
+
+- 若 jQuery 对象指向表单域容器(`class="layui-form"`),则渲染该表单域中的所有表单项;2.8+
+- 若 jQuery 对象指向的不是表单域容器,则只对该对象进行渲染
+
+定向渲染在页面出现大量表单时,可以极大地减少表单组件渲染时的性能开销,建议灵活运用。
+
+```
+
+
+ A
+
+
+
+
+
+```
+
+### **忽略渲染**
+
+若表单域中的部分表单不需要 Layui 来渲染,那么可通过 `lay-ignore` 属性让其保留系统原始 UI 风格。
+
+
+
+
+
+ 正常渲染的 select
+
+
+
+
+ 忽略渲染的 select
+
+ 忽略渲染的 checkbox
+
+
+
+
+
+验证
+
+Layui 对表单做了相对巧妙的支持,只需在表单元素上设置 `lay-verify=""` 属性值即可指定验证规则,如:
+
+```
+
+
+
+
+ 提交
+
+```
+
+其中,`lay-verify` 属性的内置规则值可参考上文的:[#属性介绍](#attr)。 当表单提交时,会自动触发验证。
+
+自定义验证规则
+
+`form.verify(obj);`
+
+- 参数 `obj` 是一个对象,用于定义验证规则的集合。
+
+当内置的验证规则无法满足业务需求时,我们可以通过该方法自定义验证规则。如:
+
+
+
+{{- d.include('docs/form/examples/form.verify.md') }}
+
+
+
+更多「自定义验证规则」示例参考:
+
+> - 将 form 提示语显示在表单项旁边,并在提交时批量触发验证
+> - 重置 form 内置验证规则,让其:当非空值才进行验证;加了 required 时才验证非空
+
+
+主动触发验证 2.7+
+
+`form.validate(elem);`
+
+- 参数 `elem` 为元素选择器或 jQuery 对象; 若验证通过,该方法将返回 true,否则返回 false
+
+
+
+{{- d.include('docs/form/examples/form.validate.md') }}
+
+
+
+
+赋值/取值
+
+`form.val(filter, obj);`
+
+- 参数 `filter` 为表单域容器(`class="layui-form"`)的 `lay-filter` 属性值
+- 参数 `obj` 可选。若参数存在,则对表单域进行赋值;若参数不存在,则为对表单域进行取值。
+
+
+
+{{- d.include('docs/form/examples/form.val.md') }}
+
+
+
+
+提交
+
+表单的提交可以通过事件触发或方法触发
+
+### **提交事件**
+
+在表单域中,对指定按钮设置 `lay-submit` 属性,即意味着点击该按钮时,将触发提交事件。如:
+
+
+
+
+
+
+ 提交按钮
+ 普通按钮
+
+
+
+
+
+
+### **提交方法** 2.7+
+
+`form.submit(filter, callback);`
+
+- 参数 `filter` 为表单域容器的 `lay-filter` 属性值
+- 参数 `callback` 为执行提交事件后的回调函数
+
+使用该方法可以实现在任意位置对指定表单的主动提交,相比上述的提交事件更加灵活。
+
+
+
+
+ 表单内部
+
+
+
+
+
+
+
+任意位置按钮
+
+
+
+
+
+事件
+
+`form.on('event(filter)', callback);`
+
+- 参数 `event(filter)` 是一个特定结构。`event` 为事件名,支持:`select,checkbox,switch,radio,submit`;`filter` 为元素属性 `lay-filter` 对应的值,若不填,则指向所有同类组件的事件。
+- 参数 `callback` 为事件执行时的回调函数,并返回一个包含各种值的 `object` 类型的参数。
+
+如下以 `select` 事件为例:
+```
+// 指向所有 select 组件的选择事件
+form.on('select', function(data){
+ console.log(data);
+});
+
+// 指向元素为 ` ` 的选择事件
+form.on('select(test)', function(data){
+ console.log(data);
+});
+```
\ No newline at end of file
diff --git a/docs/form/input.md b/docs/form/input.md
new file mode 100644
index 00000000..46e7b5a7
--- /dev/null
+++ b/docs/form/input.md
@@ -0,0 +1,199 @@
+---
+title: 输入框 / 文本域
+toc: true
+---
+
+# 输入框
+
+> 输入框组件是对文本框` `和多行文本框``元素的扩展
+
+
+普通输入框
+
+
+
+
+
+
+ <textarea name="" placeholder="多行文本框" class="layui-textarea"></textarea>
+
+
+
+
+
+输入框点缀 2.8+
+
+输入框点缀是指给普通输入框附加其他元素来进行动静态修饰,其结构包含:*容器、前缀、输入框、后缀*。
+
+```
+
+```
+
+- 容器类:
+ - 前置和后置结构:`class="layui-input-group"`
+ - 前缀和后缀结构:`class="layui-input-wrap"`
+- 前缀类:`class="layui-input-prefix"`
+- 后缀类:`class="layui-input-suffix"`
+- 前缀显示分隔框:`class="layui-input-prefix layui-input-split"`
+- 后缀显示分隔框:`class="layui-input-suffix layui-input-split"`
+
+通过在不同层级中设置规定的 CSS 类来实现点缀布局,再按照不同需求,在前缀和后缀中放置图标等任意内容。
+
+
+前置和后置
+
+前置和后置结构是*输入框的自适应结构*,可以很灵活地控制前后置内容与输入框的宽度比例。
+
+- 结构:
+
+```
+
+```
+
+- 示例:
+
+
+
+{{- d.include('docs/form/examples/input.group.md') }}
+
+
+
+
+前缀和后缀
+
+输入框前缀和后缀是*输入框的纯修饰结构*,前缀和后缀宽度固定且其元素不可触及,即只能触及输入框本身。
+
+- 结构:
+
+```
+
+```
+
+- 示例:
+
+
+
+{{- d.include('docs/form/examples/input.pre.suf.md') }}
+
+
+
+注意「前置和后置」与「前缀和后缀」 二者使用时切勿混淆。
+
+
+动态点缀 2.8+
+
+该功能允许对输入框内容进行相关动态操作。通过对输入框元素设置 `lay-affix` 属性来开启动态点缀,且输入框元素必须放置在一个具有输入框点缀结构的容器中(上文有讲解)。如:
+
+```
+input 放在前后置容器中:
+
+
+
+
+input 放在前后缀容器中:
+
+
+
+```
+
+`lay-affix` 属性支持设置内置属性值和自定义值
+
+| 值 | 描述 |
+| --- | --- |
+| `lay-affix="eye"` | 密码框显隐 |
+| `lay-affix="clear"` | 内容清除 |
+| `lay-affix="自定义图标值"` | 值对应图标类`layui-icon-`后面的名称([#详见图标列表](../icon/#list))。 可通过「[点缀事件](#affix-event)」完成自定义操作 |
+
+
+密码显隐
+
+
+
+
+
+
+
+内容清除
+
+
+
+
+
+
+
+自定义动态点缀
+
+我们还可以对 `lay-affix` 属性设置任意图标值,从而实现自定义动态点缀功能。
+
+
+
+{{- d.include('docs/form/examples/input.affix.custom.md') }}
+
+
+
+输入框的自定义动态点缀功能,让原本单一的输入框有了更多的想象空间。
+
+
+点缀事件
+
+`form.on('input-affix(filter)', callback);`
+
+- `input-affix` 为输入框动态点缀事件固定名称
+- `filter` 为输入框对应的 `lay-filter` 属性值
+
+该事件在点击输入框的点缀图标时触发,通过该事件可以完成一些自定义操作。
+
+```
+form.on('input-affix(filter)', function(data){
+ var elem = data.elem; // 获取输入框 DOM 对象
+ var affix = data.affix; // 获取输入框 lay-affix 属性值
+});
+```
+
+
+
+
diff --git a/docs/form/radio.md b/docs/form/radio.md
new file mode 100644
index 00000000..64d43f56
--- /dev/null
+++ b/docs/form/radio.md
@@ -0,0 +1,103 @@
+---
+title: 单选框
+toc: true
+---
+
+# 单选框
+
+> 单选框组件是对 ` ` 元素的美化替代。
+
+普通单选框
+
+
+
+
+
+
+
+
+
+
+
+- 属性 `title` 可设置单选框标题
+- 属性 `checked` 可设置默认选中
+- 属性 `disabled` 可设置禁用状态
+- 属性 `value` 可设置值,否则选中时返回的默认值为 `on`(浏览器默认机制)。同组单选框一般设置相同值。
+
+自定义标题模板
+
+在 `radio` 元素后的相邻元素设置特定属性 `lay-radio`,可以与 `radio` 标题进行绑定。
+
+
+
+
+
+
+
+单选框事件
+
+`form.on('radio(filter)', callback);`
+
+- `radio` 为单选框事件固定名称
+- `filter` 为单选框元素对应的 `lay-filter` 属性值
+
+该事件在单选框被点击或选中时触发。
+
+
+
+
+
+
+
+
diff --git a/docs/form/select.md b/docs/form/select.md
new file mode 100644
index 00000000..e79641cd
--- /dev/null
+++ b/docs/form/select.md
@@ -0,0 +1,203 @@
+---
+title: 选择框
+toc: true
+---
+
+# 选择框
+
+> 选择框组件是对 `` 元素的美化替代,延续了原有的特性,且加入了搜索等扩展。
+
+
+普通选择框
+
+
+
+
+
+
+
+- 若第一项 `value` 为空,通常只作为选择框提示性引导;若第一项 `value` 不为空,则作为默认选中项。
+- 通过给选项添加 `selected` 属性优先设置默认选中项。
+- 通过给 `` 或 `` 标签设置 `disabled` 可禁用整个选择框或某个选项。
+
+在 `` 标签上同样支持设置表单的其他公共属性([#详见](./#attr))。
+
+分组选择框
+
+通过 `` 标签给选择框分组
+
+
+
+
+
+ 请选择
+
+ 选项 A-1
+ 选项 A-2
+ 选项 A-3
+
+
+ 选项 B-1
+ 选项 B-2
+
+
+
+
+
+
+
+搜索选择框
+
+在 `` 元素上设置 `lay-search` 可开启选择框的搜索功能
+
+
+
+
+
+
+
+
+选择框事件
+
+`form.on('select(filter)', callback);`
+
+- `select` 为选择框事件固定名称
+- `filter` 为选择框元素对应的 `lay-filter` 属性值
+
+该事件在选择框选项选中后触发。
+
+
+
+
+
+ 请选择
+ 选项 A
+ 选项 B
+ 选项 C
+
+
+
+
+
+
diff --git a/docs/icon/index.md b/docs/icon/index.md
new file mode 100644
index 00000000..3e3a852e
--- /dev/null
+++ b/docs/icon/index.md
@@ -0,0 +1,1174 @@
+---
+title: 图标
+toc: true
+---
+
+# 图标
+
+> Layui 图标采用字体形式,取材于阿里巴巴矢量图标库 `iconfont`,因此可以把一个 `icon` 看作是一个普通的文本,直接通过 `css` 即可设定其样式。图标支持 `font-class` 或 `unicode` 两种格式。
+
+示例
+
+
+
+
+
+ 你可以去定义它的颜色或者大小,如:
+
+
+
+
+
+通过对一个内联元素(如 ``标签)添加基础类 `class="layui-icon"` 来定义一个图标,然后对元素加上图标对应的 `font-class`,即可显示出你想要的图标,如上所示。
+
+
+图标列表(186 个)
+
+
+
+
+
Github
+

+
layui-icon-github
+
+
+
+
月亮
+

+
layui-icon-moon
+
+
+
+
错误
+

+
layui-icon-error
+
+
+
+
成功
+

+
layui-icon-success
+
+
+
+
问号
+

+
layui-icon-question
+
+
+
+
锁定
+

+
layui-icon-lock
+
+
+
+
+
显示
+

+
layui-icon-eye
+
+
+
+
隐藏
+

+
layui-icon-eye-invisible
+
+
+
+
清空/删除
+

+
layui-icon-clear
+
+
+
+
退格
+

+
layui-icon-backspace
+
+
+
+
禁用
+

+
layui-icon-disabled
+
+
+
+
感叹号/提示
+

+
layui-icon-tips-fill
+
+
+
+
+
测试/K线图
+

+
layui-icon-test
+
+
+
+
音乐/音符
+

+
layui-icon-music
+
+
+
+
Chrome
+

+
layui-icon-chrome
+
+
+
+
Firefox
+

+
layui-icon-firefox
+
+
+
+
Edge
+

+
layui-icon-edge
+
+
+
+
IE
+

+
layui-icon-ie
+
+
+
+
+
实心
+

+
layui-icon-heart-fill
+
+
+
+
空心
+

+
layui-icon-heart
+
+
+
+
太阳/明亮
+

+
layui-icon-light
+
+
+
+
时间/历史
+

+
layui-icon-time
+
+
+
+
+
蓝牙
+

+
layui-icon-bluetooth
+
+
+
+
@艾特
+

+
layui-icon-at
+
+
+
+
静音
+

+
layui-icon-mute
+
+
+
+
录音/麦克风
+

+
layui-icon-mike
+
+
+
+
密钥/钥匙
+

+
layui-icon-key
+
+
+
+
礼物/活动
+

+
layui-icon-gift
+
+
+
+
邮箱
+

+
layui-icon-email
+
+
+
+
RSS
+

+
layui-icon-rss
+
+
+
+
WiFi
+

+
layui-icon-wifi
+
+
+
+
退出/注销
+

+
layui-icon-logout
+
+
+
+
Android 安卓
+

+
layui-icon-android
+
+
+
+
Apple IOS 苹果
+

+
layui-icon-ios
+
+
+
+
Windows
+

+
layui-icon-windows
+
+
+
+
穿梭框
+

+
layui-icon-transfer
+
+
+
+
客服
+

+
layui-icon-service
+
+
+
+
减
+

+
layui-icon-subtraction
+
+
+
+
加
+

+
layui-icon-addition
+
+
+
+
滑块
+

+
layui-icon-slider
+
+
+
+
打印
+

+
layui-icon-print
+
+
+
+
导出
+

+
layui-icon-export
+
+
+
+
列
+

+
layui-icon-cols
+
+
+
+
退出全屏
+

+
layui-icon-screen-restore
+
+
+
+
全屏
+

+
layui-icon-screen-full
+
+
+
+
+
半星
+

+
layui-icon-rate-half
+
+
+
+
星星-空心
+

+
layui-icon-rate
+
+
+
+
星星-实心
+

+
layui-icon-rate-solid
+
+
+
+
手机
+

+
layui-icon-cellphone
+
+
+
+
验证码
+

+
layui-icon-vercode
+
+
+
+
微信
+

+
layui-icon-login-wechat
+
+
+
+
QQ
+

+
layui-icon-login-qq
+
+
+
+
+
微博
+

+
layui-icon-login-weibo
+
+
+
+
密码
+

+
layui-icon-password
+
+
+
+
用户名
+

+
layui-icon-username
+
+
+
+
刷新-粗
+

+
layui-icon-refresh-3
+
+
+
+
授权
+

+
layui-icon-auz
+
+
+
+
左向右伸缩菜单
+

+
layui-icon-spread-left
+
+
+
+
右向左伸缩菜单
+

+
layui-icon-shrink-right
+
+
+
+
+
雪花
+

+
layui-icon-snowflake
+
+
+
+
提示说明
+

+
layui-icon-tips
+
+
+
+
便签
+

+
layui-icon-note
+
+
+
+
主页
+

+
layui-icon-home
+
+
+
+
高级
+

+
layui-icon-senior
+
+
+
+
刷新
+

+
layui-icon-refresh
+
+
+
+
刷新
+

+
layui-icon-refresh-1
+
+
+
+
+
旗帜
+

+
layui-icon-flag
+
+
+
+
主题
+

+
layui-icon-theme
+
+
+
+
消息-通知
+

+
layui-icon-notice
+
+
+
+
网站
+

+
layui-icon-website
+
+
+
+
控制台
+

+
layui-icon-console
+
+
+
+
表情-惊讶
+

+
layui-icon-face-surprised
+
+
+
+
设置-空心
+

+
layui-icon-set
+
+
+
+
+
模板
+

+
layui-icon-template-1
+
+
+
+
应用
+

+
layui-icon-app
+
+
+
+
模板
+

+
layui-icon-template
+
+
+
+
赞
+

+
layui-icon-praise
+
+
+
+
踩
+

+
layui-icon-tread
+
+
+
+
男
+

+
layui-icon-male
+
+
+
+
+
女
+

+
layui-icon-female
+
+
+
+
相机-空心
+

+
layui-icon-camera
+
+
+
+
相机-实心
+

+
layui-icon-camera-fill
+
+
+
+
菜单-水平
+

+
layui-icon-more
+
+
+
+
菜单-垂直
+

+
layui-icon-more-vertical
+
+
+
+
金额-人民币
+

+
layui-icon-rmb
+
+
+
+
金额-美元
+

+
layui-icon-dollar
+
+
+
+
钻石-等级
+

+
layui-icon-diamond
+
+
+
+
+
火
+

+
layui-icon-fire
+
+
+
+
返回
+

+
layui-icon-return
+
+
+
+
位置-地图
+

+
layui-icon-location
+
+
+
+
办公-阅读
+

+
layui-icon-read
+
+
+
+
调查
+

+
layui-icon-survey
+
+
+
+
表情-微笑
+

+
layui-icon-face-smile
+
+
+
+
表情-哭泣
+

+
layui-icon-face-cry
+
+
+
+
+
购物车
+

+
layui-icon-cart-simple
+
+
+
+
购物车
+

+
layui-icon-cart
+
+
+
+
下一页
+

+
layui-icon-next
+
+
+
+
上一页
+

+
layui-icon-prev
+
+
+
+
上传-空心-拖拽
+

+
layui-icon-upload-drag
+
+
+
+
上传-实心
+

+
layui-icon-upload
+
+
+
+
下载-圆圈
+

+
layui-icon-download-circle
+
+
+
+
+
组件
+

+
layui-icon-component
+
+
+
+
文件-粗
+

+
layui-icon-file-b
+
+
+
+
用户
+

+
layui-icon-user
+
+
+
+
发现-实心
+

+
layui-icon-find-fill
+
+
+
+
loading
+

+
layui-icon-loading
+
+
+
+
loading
+

+
layui-icon-loading-1
+
+
+
+
添加
+

+
layui-icon-add-1
+
+
+
+
+
播放
+

+
layui-icon-play
+
+
+
+
暂停
+

+
layui-icon-pause
+
+
+
+
音频-耳机
+

+
layui-icon-headset
+
+
+
+
视频
+

+
layui-icon-video
+
+
+
+
语音-声音
+

+
layui-icon-voice
+
+
+
+
消息-通知-喇叭
+

+
layui-icon-speaker
+
+
+
+
删除线
+

+
layui-icon-fonts-del
+
+
+
+
+
代码
+

+
layui-icon-fonts-code
+
+
+
+
HTML
+

+
layui-icon-fonts-html
+
+
+
+
字体加粗
+

+
layui-icon-fonts-strong
+
+
+
+
删除链接
+

+
layui-icon-unlink
+
+
+
+
图片
+

+
layui-icon-picture
+
+
+
+
链接
+

+
layui-icon-link
+
+
+
+
表情-笑-粗
+

+
layui-icon-face-smile-b
+
+
+
+
+
左对齐
+

+
layui-icon-align-left
+
+
+
+
右对齐
+

+
layui-icon-align-right
+
+
+
+
居中对齐
+

+
layui-icon-align-center
+
+
+
+
字体-下划线
+

+
layui-icon-fonts-u
+
+
+
+
字体-斜体
+

+
layui-icon-fonts-i
+
+
+
+
Tabs 选项卡
+

+
layui-icon-tabs
+
+
+
+
单选框-选中
+

+
layui-icon-radio
+
+
+
+
+
单选框-候选
+

+
layui-icon-circle
+
+
+
+
编辑
+

+
layui-icon-edit
+
+
+
+
分享
+

+
layui-icon-share
+
+
+
+
删除
+

+
layui-icon-delete
+
+
+
+
表单
+

+
layui-icon-form
+
+
+
+
手机-细体
+

+
layui-icon-cellphone-fine
+
+
+
+
聊天 对话 沟通
+

+
layui-icon-dialogue
+
+
+
+
+
文字格式化
+

+
layui-icon-fonts-clear
+
+
+
+
窗口
+

+
layui-icon-layer
+
+
+
+
日期
+

+
layui-icon-date
+
+
+
+
水 下雨
+

+
layui-icon-water
+
+
+
+
代码-圆圈
+

+
layui-icon-code-circle
+
+
+
+
轮播组图
+

+
layui-icon-carousel
+
+
+
+
翻页
+

+
layui-icon-prev-circle
+
+
+
+
+
布局
+

+
layui-icon-layouts
+
+
+
+
工具
+

+
layui-icon-util
+
+
+
+
选择模板
+

+
layui-icon-templeate-1
+
+
+
+
上传-圆圈
+

+
layui-icon-upload-circle
+
+
+
+
树
+

+
layui-icon-tree
+
+
+
+
表格
+

+
layui-icon-table
+
+
+
+
图表
+

+
layui-icon-chart
+
+
+
+
+
图标 报表 屏幕
+

+
layui-icon-chart-screen
+
+
+
+
引擎
+

+
layui-icon-engine
+
+
+
+
下三角
+

+
layui-icon-triangle-d
+
+
+
+
右三角
+

+
layui-icon-triangle-r
+
+
+
+
文件
+

+
layui-icon-file
+
+
+
+
设置-小型
+

+
layui-icon-set-sm
+
+
+
+
减少-圆圈
+

+
layui-icon-reduce-circle
+
+
+
+
添加-圆圈
+

+
layui-icon-add-circle
+
+
+
+
+
+
404
+

+
layui-icon-404
+
+
+
+
关于
+

+
layui-icon-about
+
+
+
+
箭头 向上
+

+
layui-icon-up
+
+
+
+
箭头 向下
+

+
layui-icon-down
+
+
+
+
箭头 向左
+

+
layui-icon-left
+
+
+
+
箭头 向右
+

+
layui-icon-right
+
+
+
+
圆点
+

+
layui-icon-circle-dot
+
+
+
+
+
搜索
+

+
layui-icon-search
+
+
+
+
设置-实心
+

+
layui-icon-set-fill
+
+
+
+
群组
+

+
layui-icon-group
+
+
+
+
好友
+

+
layui-icon-friends
+
+
+
+
回复 评论 实心
+

+
layui-icon-reply-fill
+
+
+
+
菜单 隐身 实心
+

+
layui-icon-menu-fill
+
+
+
+
记录
+

+
layui-icon-log
+
+
+
+
+
图片-细体
+

+
layui-icon-picture-fine
+
+
+
+
表情-笑-细体
+

+
layui-icon-face-smile-fine
+
+
+
+
列表
+

+
layui-icon-list
+
+
+
+
发布 纸飞机
+

+
layui-icon-release
+
+
+
+
对 OK
+

+
layui-icon-ok
+
+
+
+
帮助
+

+
layui-icon-help
+
+
+
+
客服
+

+
layui-icon-chat
+
+
+
+
+
top 置顶
+

+
layui-icon-top
+
+
+
+
收藏-空心
+

+
layui-icon-star
+
+
+
+
收藏-实心
+

+
layui-icon-star-fill
+
+
+
+
关闭-实心
+
ဇ
+
layui-icon-close-fill
+
+
+
+
关闭-空心
+
ဆ
+
layui-icon-close
+
+
+
+
正确
+
စ
+
layui-icon-ok-circle
+
+
+
+
添加-圆圈-细体
+

+
layui-icon-add-circle-fine
+
+
+
+
+跨域处理
+
+由于浏览器存在同源策略,若 Layui 文件地址与你当前的页面地址*不在同一个域下*,即会出现图标跨域问题。因此,要么将 Layui 文件与网站放在同一服务器,要么对 Layui 文件所在的静态资源服务器的 `Response Headers` 添加:`Access-Control-Allow-Origin: *` 或对跨资源共享指定域名,即可解决图标跨域问题。
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 00000000..758dbfd2
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,119 @@
+---
+title: 开始使用
+toc: true
+---
+
+开始使用
+
+> Layui 是一套开源的 Web UI 组件库,采用自身轻量级模块化规范,遵循原生态的 HTML/CSS/JavaScript 开发模式,极易上手,拿来即用。其风格简约轻盈,而内在雅致丰盈,甚至包括文档在内的每一处细节都经过精心雕琢,非常适合网页界面的快速构建。Layui 区别于一众主流的前端框架,却并非逆道而行,而是信奉返璞归真之道。确切地说,它更多是面向于追求简单的务实主义者,即无需涉足各类构建工具,只需面向浏览器本身,便可将页面所需呈现的元素与交互信手拈来。
+
+
+ Layui
+
+
+
+
+
+ 谐音:类 UI
+ 用途:用于更简单快速地构建网页界面
+
+
+ 环境:全部主流 Web 浏览器(IE8 以下除外)
+ 特性:原生态开发 / 轻量级模块化 / 外简内丰 / 开箱即用
+
+
+
+
+下载引用
+
+您可以通过以下任意一种方式获得 Layui :
+
+### 🌕 官网下载
+
+您可以在我们的 [官网首页](/) 下载到 Layui 当前版本,它经过了自动化构建,更适合用于生产环境。目录结构如下:
+
+```
+layui/
+ ├─css
+ │ └─layui.css # 核心样式库
+ └─layui.js # 核心模块库
+```
+
+### 🌕 Git 下载
+
+> 您也可以通过 [GitHub](https://github.com/layui/layui/releases) 或 [Gitee](https://gitee.com/layui/layui/releases) 的 releases 列表下载,或直接下载整个仓库。
+
+
+
+
+
+
+
+### 🌕 npm 下载
+
+```
+npm i layui
+```
+
+### 🌕 第三方 CDN 方式引入:
+
+> UNPKG 和 CDNJS 均为第三方免费 CDN,资源通过 NPM/GitHub 进行同步。另外还可以采用国内的 [Staticfile CDN](https://www.staticfile.org/)。
+
+
+
+
+```
+
+
+
+
+
+
+