tem-r button:not(.disabled):active{background-color:#e5e6e7}.ui-form-item-pure input,.ui-form-item-pure textarea{padding-left:0}.ui-form-item-show label{color:#999}.ui-form-item-link:after{position:absolute;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM0QzFDNzMyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM0QzFDNzQyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzRDMUM3MTJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzRDMUM3MjJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pjs2Bb4AAAItSURBVHjazJhbK0RRGIb3DIOU/AG5kUTOgxmHceFGKf6BO+Vf+E8KKYcYg3FuMpNIDhFJXJAcp/GtvKumrzVs+zBrvfU2u689q6d3rb33+lYgl8tZvymZ3JOX7eQp8gT50fJA0Wj4z3tKbY5VR14hV5ObyWLkZ6sICtq4p4V8CjihevIWucoUQJFUmtUayTvkShMAL5DiGqs3IMlK3YBSgwrIZkBWmAAoIRMKyG2/IIMO/hMjbygepCS53ARAoQHyOqu1YbrLTADMAXJbASmSDOkGlOpTQHaQN72CdAuYBeQuq4cBWaIbUEJGC0Am3UIGPVoqMsk9Vu/CwxTQDSj0iSQPWD2C6Q7oBhT6AmRKAZkwAVDoowBkn+LdqQVQ6A2QhwrIuAmAEjKi2KrF/jPdfgIKveI7Pcfq/eSMCYBSD4pakymA0+RxVrsn15oAOEMeY7Vbcif5ys4ApT7CzZJHWO2G3I1fSyfgPHmY1a7x6bvT/ZpZUMBdOoHzI8El8pCiK+wq8CQXNcFlBdw51tyD00G9SnAVHV++zgDn6hzHiwTjCrgTTKvrQya3Ca5jA5CvY3IP+UlnTxJEb8zhjpDck1cL20mCAcBFWD2D2ovOvjiERojDpTGtnsL9N8EQegt+LJrC5vRN59lMORp0DrePNH2BswvYivXVzuoHSO7dz+2QHcAa6+eMOl87WHOffm8m7QCK7foog+tFi2mZACg3npPkRUxrtkitgvUtwAA5A3LWdzPizwAAAABJRU5ErkJggg==);content:"";height:.44rem;width:.32rem;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;right:.15rem;top:50%;margin-top:-.22rem;margin-right:-.1rem;background-size:50% auto;background-repeat:no-repeat;background-position:50%}.ui-form-item-checkbox,.ui-form-item-radio,.ui-form-item-switch{display:-webkit-box;-webkit-box-align:center}.ui-form-item .ui-switch{position:absolute;right:.1rem .15rem .11rem;top:50%;margin-top:-.155rem}.ui-switch{display:inline-block;vertical-align:middle}.ui-switch input{position:relative;width:.52rem;height:.31rem;-webkit-appearance:none;border:none;background:none;display:block}.ui-switch input:before{content:"";display:block;width:100%;height:100%;border:1px solid #dfe0e1;background-color:#fff;border-radius:.155rem;box-sizing:border-box;box-shadow:inset 0 0 0 0 #dfdfdf;background-clip:content-box}.ui-switch input:checked:before{border-color:#64bd63;background-color:#64bd63;transition:all .4s ease;box-shadow:inset 0 0 0 .16rem #64bd63}.ui-switch input:after{content:"";width:.29rem;height:.29rem;position:absolute;top:.01rem;left:0;border-radius:50%;background-color:#fff;box-shadow:0 .02rem .05rem 0 rgba(0,0,0,.4);transition:.3s;background-clip:padding-box}.ui-switch input:checked:after{left:.21rem}.ui-radio{display:inline-block;vertical-align:middle}.ui-radio input{display:block;width:.24rem;height:.24rem;position:relative;-webkit-appearance:none;border:0;background:none}.ui-radio input:before{content:"";display:block;width:100%;height:100%;border:1px solid #dfe0e1;border-radius:50%;box-sizing:border-box;background-color:#fff}.ui-radio input:checked:before{border-color:#00479d}.ui-radio input:checked:after{content:"";position:absolute;left:.06rem;top:.06rem;width:.12rem;height:.12rem;background:#00479d;border-radius:50%}.ui-checkbox{display:inline-block;width:.24rem;height:.24rem;vertical-align:middle;line-height:.24rem}.ui-checkbox input{position:relative;width:100%;height:100%;-webkit-appearance:none;background:none;border:none}.ui-checkbox input:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;border-radius:50%;box-sizing:border-box;border:1px solid #dfe0e1;background-color:#fff}.ui-checkbox-square input:before{top:6%;left:6%;width:88%;height:88%;border-radius:.03rem}.ui-checkbox input[type=checkbox]:checked:before{background:#00479d;border-color:#00479d}.ui-checkbox input[type=checkbox]:checked:after{content:"";position:absolute;width:.108rem;height:.0486rem;top:.07273rem;left:.0594rem;border:2px solid #fff;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.ui-checkbox-s{width:.204rem;height:.204rem}.ui-checkbox-s input[type=checkbox]:checked:after{width:.0918rem;height:.04131rem;top:.05694rem;left:.04488rem}.ui-input-wrap{height:.44rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-self:center;align-self:center}.ui-input-wrap .ui-btn,.ui-input-wrap i{margin-right:.1rem}.ui-input{height:.3rem;line-height:.3rem;margin:.07rem .1rem;background:#fff;padding-left:.1rem;-webkit-box-flex:1;flex-grow:1}.ui-input input{width:100%;height:100%;border:0;background:0 0;-webkit-appearance:none;outline:0}.ui-table{width:100%;border-collapse:collapse}.ui-table td,.ui-table th{text-align:center;background-color:#fff;padding:.05rem .025rem;border:1px solid #e0e0e0}.ui-table th{color:#333;font-size:.15rem;font-weight:500;background-color:#eee}.ui-table td{color:#666;font-size:.14rem}.ui-table-primary th{color:#00479d}.ui-table-bg-primary th{background-color:#00479d;color:#fff}.ui-table-odd tbody tr:nth-last-child(2n) td{background-color:#fafafa}.ui-table-border-none td,.ui-table-border-none th{border:none}.ui-table-border-row td,.ui-table-border-row th{border-width:0 0 1px}.ui-grid,.ui-grid-halve,.ui-grid-trisect{padding-left:.15rem;padding-right:.1rem;overflow:hidden;padding-top:.1rem}.ui-grid-halve li,.ui-grid-trisect li,.ui-grid li{padding-right:.05rem;padding-bottom:.1rem;float:left;position:relative;box-sizing:border-box}.ui-grid-trisect>li{width:33.3333%}.ui-grid-trisect-img{padding-top:149.47%}.ui-grid-trisect h4{position:relative;margin:.07rem 0 .03rem}.ui-grid-trisect h4 span{display:inline-block;margin-left:.12rem;color:#666}.ui-grid-halve>li{width:50%}.ui-grid-halve-img{padding-top:55.17%}.ui-grid-halve-img,.ui-grid-trisect-img{position:relative;width:100%}.ui-grid-halve-img>span,.ui-grid-trisect-img>span{z-index:1;background-repeat:no-repeat;-webkit-background-size:cover}.ui-grid-halve-img>span,.ui-grid-halve-img img,.ui-grid-trisect-img>span,.ui-grid-trisect-img img{width:100%;height:100%;position:absolute;top:0;left:0}.ui-grid-halve-img.active,.ui-grid-trisect-img.active{opacity:.5}.ui-row{display:block;overflow:hidden}.ui-col,.ui-row{box-sizing:border-box}.ui-col{float:left;width:100%}.ui-col-10{width:10%}.ui-col-20{width:20%}.ui-col-25{width:25%}.ui-col-33{width:33.33%}.ui-col-50{width:50%}.ui-col-67{width:66.6666%}.ui-col-75{width:75%}.ui-col-80{width:80%}.ui-col-90{width:90%}.ui-row-flex{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-sizing:border-box}.ui-row-flex>.ui-col{float:none;-webkit-box-flex:1;flex-grow:1;width:0;position:relative;overflow:auto}.ui-row-flex>.ui-col-2{-webkit-box-flex:2;flex-grow:2}.ui-row-flex>.ui-col-3{-webkit-box-flex:3;flex-grow:3}.ui-row-flex>.ui-col-4{-webkit-box-flex:4;flex-grow:4}.ui-row-flex>.ui-col-auto{-webkit-box-flex:0;flex-grow:0;width:auto;overflow:visible}.ui-row-flex-ver{-webkit-box-orient:vertical;flex-direction:column;height:100%}.ui-row-flex-ver>.ui-col{width:100%;height:0}.ui-row-flex-ver>.ui-col-auto{height:auto}.ui-flex-content{position:absolute;height:100%;width:100%;box-sizing:border-box;overflow:auto}.ui-grid-nine,.ui-grid-sixteen{position:relative;box-sizing:border-box;overflow:hidden}.ui-grid-nine>li,.ui-grid-sixteen>li{float:left;position:relative;box-sizing:border-box;padding:.2rem .1rem;font-size:.14rem;text-align:center;border-right:1px solid #eae9eb;border-bottom:1px solid #eae9eb}.ui-grid-nine>li:active,.ui-grid-sixteen>li:active{background:#f4f4f4}.ui-grid-nine .ui-icon,.ui-grid-sixteen .ui-icon{font-size:.32rem;display:block;line-height:.44rem}.ui-grid-nine .ui-badge,.ui-grid-nine .ui-badge-dot,.ui-grid-nine .ui-badge-muted,.ui-grid-nine .ui-badge-num,.ui-grid-sixteen .ui-badge,.ui-grid-sixteen .ui-badge-dot,.ui-grid-sixteen .ui-badge-muted,.ui-grid-sixteen .ui-badge-num{position:absolute;top:.15rem;left:65%;z-index:99}.ui-grid-nine>li p,.ui-grid-sixteen>li p{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ui-grid-nine>li a,.ui-grid-sixteen>li a{color:inherit;display:block;position:relative}.ui-grid-nine>li{width:33.3333%}.ui-grid-nine>li:nth-child(3n+1){border-left:1px solid #eae9eb}.ui-grid-nine>li:first-child,.ui-grid-nine>li:nth-child(2),.ui-grid-nine>li:nth-child(3){border-top:1px solid #eae9eb}.ui-grid-sixteen>li{width:25%}.ui-grid-sixteen>li:nth-child(4n+1){border-left:1px solid #eae9eb}.ui-grid-sixteen>li:first-child,.ui-grid-sixteen>li:nth-child(2),.ui-grid-sixteen>li:nth-child(3),.ui-grid-sixteen>li:nth-child(4){border-top:1px solid #eae9eb}.ui-center{-webkit-box-orient:vertical;-webkit-box-pack:center;-webkit-box-align:center;text-align:center;height:1.5rem}.ui-center,.ui-flex,.ui-tiled{width:100%;display:-webkit-box}.ui-flex,.ui-tiled{box-sizing:border-box}.ui-flex-ver{-webkit-box-orient:vertical}.ui-flex-pack-start{-webkit-box-pack:start}.ui-flex-pack-end{-webkit-box-pack:end}.ui-flex-pack-center{-webkit-box-pack:center}.ui-flex-align-start{-webkit-box-align:start}.ui-flex-align-end{-webkit-box-align:end}.ui-flex-align-center,.ui-tiled>li{-webkit-box-align:center}.ui-tiled>li{-webkit-box-flex:1;width:100%;text-align:center;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-pack:center}.ui-card{background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.3);margin:.1rem;border-radius:.03rem;font-size:.15rem}.ui-card,.ui-card-content{position:relative}.ui-card-content-inner{padding:.15rem;position:relative}.ui-card-footer,.ui-card-header{min-height:.44rem;position:relative;padding:.1rem .15rem;box-sizing:border-box;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:center;align-items:center}.ui-card-footer[valign=top],.ui-card-header[valign=top]{-webkit-box-align:start;align-items:flex-start}.ui-card-footer[valign=bottom],.ui-card-header[valign=bottom]{-webkit-box-align:end;align-items:flex-end}.ui-card-header{border-radius:2px 2px 0 0;font-size:.17rem;color:#333}.ui-card-header:after{content:"";position:absolute;left:0;bottom:0;right:auto;top:auto;height:1px;background-color:#e0e0e0;z-index:15;-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.ui-card-header .ui-card-cover,.ui-card-header:after{width:100%;display:block}.ui-card-footer{border-radius:0 0 .1rem .1rem;color:#666}.ui-card-footer:before{content:"";position:absolute;left:0;top:0;bottom:auto;right:auto;height:1px;width:100%;background-color:#e0e0e0;display:block;z-index:15;-webkit-transform-origin:50% 0;transform-origin:50% 0}.ui-card-footer.no-padding,.ui-card-header.no-padding{padding:0}.ui-list~.ui-list{margin-top:.1rem}.ui-list>ul{position:relative}.ui-list>ul:after,.ui-list>ul:before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background-color:#e7e7e7;z-index:1}.ui-list>ul:after{top:auto;bottom:0}.ui-list>ul>li{position:relative;box-sizing:border-box;background-color:#fff}.ui-list>ul>li:not(:last-child) .ui-list-item-inner:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background-color:#e7e7e7}.ui-list-item{padding-left:.15rem;-webkit-box-align:center;-webkit-align-self:center;align-self:center}.ui-list-item,.ui-list-item-inner{display:-webkit-box;display:-ms-flexbox;display:flex}.ui-list-item-inner{position:relative;min-height:.15rem;padding:.1rem .15rem .1rem 0;box-sizing:border-box;-webkit-box-flex:1;flex-grow:1;color:#333;font-size:.15rem;overflow:hidden}.ui-list-l .ui-list-item-inner{padding-top:.15rem;padding-bottom:.15rem}.ui-list-item-link,.ui-list-item-link:active{color:inherit}.ui-list-item-link .ui-list-item-inner{padding-right:.3rem}.ui-list-item-link:after{content:"";position:absolute;height:100%;width:.3rem;right:0;top:0;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM0QzFDNzMyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM0QzFDNzQyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzRDMUM3MTJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzRDMUM3MjJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pjs2Bb4AAAItSURBVHjazJhbK0RRGIb3DIOU/AG5kUTOgxmHceFGKf6BO+Vf+E8KKYcYg3FuMpNIDhFJXJAcp/GtvKumrzVs+zBrvfU2u689q6d3rb33+lYgl8tZvymZ3JOX7eQp8gT50fJA0Wj4z3tKbY5VR14hV5ObyWLkZ6sICtq4p4V8CjihevIWucoUQJFUmtUayTvkShMAL5DiGqs3IMlK3YBSgwrIZkBWmAAoIRMKyG2/IIMO/hMjbygepCS53ARAoQHyOqu1YbrLTADMAXJbASmSDOkGlOpTQHaQN72CdAuYBeQuq4cBWaIbUEJGC0Am3UIGPVoqMsk9Vu/CwxTQDSj0iSQPWD2C6Q7oBhT6AmRKAZkwAVDoowBkn+LdqQVQ6A2QhwrIuAmAEjKi2KrF/jPdfgIKveI7Pcfq/eSMCYBSD4pakymA0+RxVrsn15oAOEMeY7Vbcif5ys4ApT7CzZJHWO2G3I1fSyfgPHmY1a7x6bvT/ZpZUMBdOoHzI8El8pCiK+wq8CQXNcFlBdw51tyD00G9SnAVHV++zgDn6hzHiwTjCrgTTKvrQya3Ca5jA5CvY3IP+UlnTxJEb8zhjpDck1cL20mCAcBFWD2D2ovOvjiERojDpTGtnsL9N8EQegt+LJrC5vRN59lMORp0DrePNH2BswvYivXVzuoHSO7dz+2QHcAa6+eMOl87WHOffm8m7QCK7foog+tFi2mZACg3npPkRUxrtkitgvUtwAA5A3LWdzPizwAAAABJRU5ErkJggg==);background-size:.14rem;background-repeat:no-repeat;background-position:50%}.ui-list-item-title{-webkit-box-flex:1;flex-grow:1;font-size:.17rem;width:0}.ui-list-item-media,.ui-list-item-title{display:-webkit-box;display:-ms-flexbox;display:flex}.ui-list-item-media{padding:.1rem 0;-webkit-box-align:center;-webkit-align-self:center;align-self:center;margin-right:.15rem}.ui-list-item-after{margin-left:.05rem;font-size:.17rem}.ui-list-item-title-row{display:-webkit-box;display:-ms-flexbox;display:flex}.ui-list-media .ui-list-item-inner{-webkit-box-orient:vertical;flex-direction:column}.ui-list-item-text{padding-top:.03rem;color:#666;line-height:1.25}.ui-list-form .ui-list-item-label{width:35%;color:#444}.ui-list-form .ui-list-item-input-wrap{-webkit-box-flex:1;flex-grow:1;width:0;color:#777}.ui-list-form .ui-list-item-input-wrap .ui-list-item-input,.ui-list-form .ui-list-item-input-wrap .ui-list-item-textarea{display:block;box-sizing:border-box;width:100%;border:none;color:#777}.ui-list-form .ui-list-item-input-wrap .ui-list-item-textarea{resize:none;height:.65rem}.ui-list-item-textarea-lg{height:1.3rem}.ui-list-card .ui-list-item{margin:.1rem 0}.ui-list-card>ul:after,.ui-list-card>ul:before,.ui-list-card>ul>li:not(:last-child) .ui-list-item-inner:after{content:none}.ui-list-card>ul>li:before{content:"";position:absolute;left:0;right:0;top:0;bottom:auto;height:1px;background-color:#e7e7e7;z-index:1;-webkit-transform-origin:0 50%;transform-origin:0 50%}@media only screen and (-webkit-min-device-pixel-ratio:2){.ui-list-card>ul>li:before{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media only screen and (-webkit-min-device-pixel-ratio:3){.ui-list-card>ul>li:before{-webkit-transform:scaleY(.33);transform:scaleY(.33)}}.ui-list-card>ul>li:after{content:"";position:absolute;left:0;right:0;bottom:0;top:auto;height:1px;background-color:#e7e7e7;z-index:1;-webkit-transform-origin:0 50%;transform-origin:0 50%}@media only screen and (-webkit-min-device-pixel-ratio:2){.ui-list-card>ul>li:after{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media only screen and (-webkit-min-device-pixel-ratio:3){.ui-list-card>ul>li:after{-webkit-transform:scaleY(.33);transform:scaleY(.33)}}.ui-timeline{padding:.1rem}.ui-timeline-container{position:relative}.ui-timeline-container:before{content:"";position:absolute;top:0;bottom:0;width:.02rem;background:#ddd;left:.32rem;margin:0;border-radius:.02rem}.ui-timeline-container>li{position:relative;margin-bottom:.15rem}.ui-timeline-container>li:after,.ui-timeline-container>li:before{content:" ";display:table}.ui-timeline-container>li:after{clear:both}.ui-timeline-container>li>.ui-timeline-item{margin-top:0;background:#fff;color:#444;margin-left:.6rem;padding:0;position:relative}.ui-timeline-container>li>.ui-timeline-item:after{border-radius:6px;border:1px solid #c8c7cc;display:block;content:"";position:absolute;top:0;right:0;bottom:0;left:0;-webkit-transform-origin:0 0;-webkit-transform:scale(1);pointer-events:none}.ui-timeline-container>li>.ui-timeline-item>.ui-timeline-time{color:#999;float:right;padding:.1rem;font-size:.12rem}.ui-timeline-container>li>.ui-timeline-item>.ui-timeline-header{margin:0;color:#555;padding:.1rem;font-size:.875em;position:relative}.ui-timeline-container>li>.ui-timeline-item>.ui-timeline-header:after{border-bottom:1px solid #ddd;display:block;content:"";position:absolute;top:0;right:0;bottom:0;left:0;-webkit-transform-origin:0 0;-webkit-transform:scale(1);pointer-events:none}.ui-timeline-container>li>.ui-timeline-item>.ui-timeline-body,.ui-timeline-container>li>.ui-timeline-item>.ui-timeline-footer{padding:.1rem;font-size:.875em}.ui-timeline-container>li>.ui-timeline-item>.ui-timeline-footer{background-color:#f4f4f4}.ui-timeline-container>li.ui-time-label>span{padding:.05rem;display:inline-block;background-color:#d2d6de;border-radius:4px;color:#fff}.ui-timeline-container>li>.ui-time-label{width:.5rem;font-size:.75em;left:.08rem;border-radius:4px}.ui-timeline-container>li>.ui-iconfont,.ui-timeline-container>li>.ui-time-label{height:.3rem;line-height:.3rem;position:absolute;color:#fff;background:#d2d6de;text-align:center;top:0}.ui-timeline-container>li>.ui-iconfont{width:.3rem;font-size:.15rem;border-radius:50%;left:.18rem}.ui-toolbar{position:relative;height:.44rem;background-color:#00479d;box-sizing:border-box;color:#fff;line-height:.44rem}.ui-toolbar>.ui-fn-left,.ui-toolbar>.ui-fn-right{position:relative;z-index:9;padding:0 .1rem;box-sizing:border-box}.ui-toolbar-title{position:absolute;width:100%;font-size:.17rem;font-weight:400;line-height:.44rem;text-align:center;white-space:nowrap;top:0;left:0}.ui-toolbar .ui-toolbar-btn{position:relative;display:inline-block;font-size:.14rem;line-height:1;text-align:center;white-space:nowrap;cursor:pointer;padding:.06rem;min-width:.5rem;border-radius:3px;color:#00479d;background-color:#fff;border:none;outline:none;margin-top:.09rem}.ui-toolbar-btn.ui-active,.ui-toolbar-btn:active{color:#fff;background-color:#00306a}.ui-toolbar .ui-icon{font-size:.32rem;color:#fff;line-height:.44rem;vertical-align:top}.ui-toolbar a{color:#fff}.ui-toolbar .ui-btn-link{top:0;padding:0;font-size:.16rem;line-height:.44rem;color:#fff;background-color:transparent;border:none}.ui-toolbar .ui-mtab{top:.09rem;margin:0 .1rem}.ui-mtab{position:relative;display:table;table-layout:fixed;overflow:hidden}.ui-mtab .ui-mtab-item{display:table-cell;width:1%;font-size:.14rem;line-height:1.8;color:#00479d;text-align:center;border:1px solid #00306a;background-color:#fff}.ui-mtab .ui-mtab-item:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.ui-mtab .ui-mtab-item:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.ui-mtab .ui-mtab-item.ui-active{color:#fff;background-color:#00306a}.ui-mtab .ui-mtab-item:not(.ui-active):active{background-color:#005ed0}.ui-mtab .ui-mtab-item:not(:last-child){border-right:none}.ui-nav{width:100%;font-size:.16rem;position:relative;text-align:center;box-sizing:border-box}.ui-nav .ui-nav-main{height:.45rem;line-height:.45rem;background-color:#00479d;padding:0 .6rem 0 0;margin:0}.ui-nav .ui-nav-main.ui-nav-3 .ui-nav-item{width:33.333%}.ui-nav .ui-nav-main .ui-nav-item{float:left;width:20%}.ui-nav .ui-nav-main .ui-nav-item a{display:block;color:#fff}.ui-nav .ui-nav-btn{position:absolute;top:0;right:0;width:.6rem;box-sizing:border-box}.ui-nav .ui-nav-btn .ui-icon{color:#fff;font-size:.32rem;display:block;line-height:.45rem}.ui-nav-sub{min-width:.6rem;position:absolute;top:100%;right:0;z-index:99}.ui-nav-sub>li{border-top:1px solid #fff}.ui-nav-sub>li>a{display:block;height:.32rem;line-height:.36rem;background:#00479d;color:#fff;text-align:center;padding:0 .06rem}.ui-badge,.ui-badge-corner,.ui-badge-cornernum,.ui-badge-muted,.ui-badge-num{display:inline-block;text-align:center;background:#f74c31;color:#fff;font-size:.11rem;line-height:.16rem;border-radius:.08rem;padding:0 .06rem;background-clip:padding-box}.ui-badge-muted{background:#b6cae0}.ui-badge-num{height:.19rem;line-height:.2rem;font-size:.12rem;min-width:.19rem;border-radius:.1rem}.ui-badge-wrap{position:relative;text-align:center}.ui-badge-corner{position:absolute;height:.2rem;line-height:.2rem;top:-.03rem;right:-.08rem}.ui-badge-cornernum{position:absolute;height:.19rem;line-height:.19rem;font-size:.12rem;border-radius:.1rem;top:-.05rem;right:-.05rem}.ui-badge-dot{display:inline-block;width:.08rem;height:.08rem;background:#ff2600;border-radius:.1rem}.ui-reddot,.ui-reddot-border,.ui-reddot-s{position:relative;display:inline-block;line-height:.22rem;padding:0 .06rem}.ui-reddot-border:after,.ui-reddot-s:after,.ui-reddot:after{content:"";position:absolute;display:block;width:.08rem;height:.08rem;background-color:#ff2600;border-radius:50%;right:-.03rem;top:-.03rem;background-clip:padding-box}.ui-reddot-static{display:block;width:.08rem;height:.08rem;padding:0}.ui-reddot-static:after{top:0;right:0}.ui-reddot-border:before{content:"";position:absolute;display:block;width:.08rem;height:.08rem;background-color:#fff;border-radius:50%;right:-.04rem;top:-.04rem;background-clip:padding-box;padding:.01rem}.ui-reddot-s:after{width:.06rem;height:.06rem;top:-.05rem;right:-.05rem}.ui-category{text-align:center;padding-bottom:.12rem;background-color:#fff}.ui-category:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.ui-category-item{width:25%;padding:.12rem 0 0;float:left;color:#333;font-size:.14rem;position:relative;box-sizing:border-box}.ui-category-4{width:25%}.ui-category-5{width:20%}.ui-category .ui-category-icon{display:block;border-radius:.03rem;width:.44rem;height:.44rem;margin:.08rem auto;position:relative}.ui-category .ui-category-label{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ui-category-item .ui-icon{color:#fff;display:block;line-height:.44rem;font-size:.32rem}.ui-category-item .ui-badge-cornernum{top:10%;left:65%;right:auto}.ui-navbar{position:relative;display:table;table-layout:fixed;width:100%;box-sizing:border-box;padding:0;background-color:#f8f8f8;min-height:.45rem;border-top:1px solid #e0e0e0}.ui-navbar .ui-navbar-item{display:table-cell;width:1%;color:#999;text-align:center;vertical-align:middle;padding:.03rem 0}.ui-navbar .ui-navbar-item.ui-active,.ui-navbar .ui-navbar-item:active{color:#00479d}.ui-navbar .ui-navbar-item .ui-icon{position:relative;font-size:.3rem;line-height:.3rem}.ui-navbar .ui-navbar-item .ui-navbar-item-label{display:block;font-size:.12rem;line-height:1.25}.ui-nav-content{height:100%;width:100%;overflow:hidden}.ui-nav-content>ul{position:relative;width:200%;height:100%;overflow:hidden;transition:all .3s ease-out 0s}.ui-nav-content>ul>li{position:absolute;left:0;top:0;width:50%;height:100%;overflow:auto;z-index:0;background-color:#f8f8f8}.ui-nav-content>ul>li:first-child{z-index:1}.ui-nav-content>ul>li.ui-show~li.ui-show{left:50%}.ui-nav-content>ul>li.ui-active,.ui-nav-content>ul>li.ui-show{z-index:10}.ui-no-animation{transition-duration:0s!important}.ui-nav-content-right{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}.ui-picker{height:2rem;width:100%;background-color:#ddd;position:relative;overflow:hidden}.ui-picker-selectbox{box-sizing:border-box;border-bottom:1px solid #ccc;border-top:1px solid #ccc}.ui-picker-selectbox,.ui-picker ul{position:absolute;width:100%;top:50%;height:.36rem;margin-top:-.18rem}.ui-picker ul{-webkit-transform:perspective(1000px) rotateY(0deg) rotateX(0deg);transform:perspective(1000px) rotateY(0deg) rotateX(0deg);transition:.15s ease-out;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.ui-picker ul li{line-height:.36rem;text-align:center;position:absolute;top:0;width:90%;left:5%;height:.36rem;visibility:hidden;box-sizing:border-box;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ui-picker ul li.ui-visible{visibility:visible}.ui-picker ul li.ui-highlight{color:#000}.ui-noanimate{transition:none!important}.ui-poppicker{position:fixed;bottom:0;left:0;right:0;-webkit-transform:translateY(3rem);transform:translateY(3rem);transition:.3s ease-out;z-index:9999}.ui-poppicker.ui-active{-webkit-transform:translateY(0);transform:translateY(0)}.ui-poppicker-body .ui-picker{float:left}.ui-dtpicker .ui-picker{float:left;width:20%}.ui-picker-backup{position:fixed;z-index:998;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.3)}.ui-poppicker{background-color:#eee}.ui-poppicker-header{box-sizing:border-box;padding:.06rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;justify-content:space-between}.ui-poppicker-header button{display:block}.ui-poppicker-title{overflow:hidden}.ui-poppicker-title label{float:left;width:20%;text-align:center;border-top:1px solid #ccc;padding:.03rem 0;border-bottom:1px solid #ccc;color:#999}.ui-poppicker[data-type=date] .ui-picker,.ui-poppicker[data-type=date] label{width:33.33%}.ui-poppicker[data-type=date] .ui-dtpicker-h,.ui-poppicker[data-type=date] .ui-dtpicker-mi,.ui-poppicker[data-type=date] .ui-picker[data-id=picker-h],.ui-poppicker[data-type=date] .ui-picker[data-id=picker-mi]{display:none}.ui-poppicker[data-type=time] .ui-picker,.ui-poppicker[data-type=time] label{width:50%}.ui-poppicker[data-type=time] .ui-dtpicker-d,.ui-poppicker[data-type=time] .ui-dtpicker-m,.ui-poppicker[data-type=time] .ui-dtpicker-y,.ui-poppicker[data-type=time] .ui-picker[data-id=picker-d],.ui-poppicker[data-type=time] .ui-picker[data-id=picker-m],.ui-poppicker[data-type=time] .ui-picker[data-id=picker-y]{display:none}.ui-poppicker[data-type=hour] .ui-picker,.ui-poppicker[data-type=hour] label{width:25%}.ui-poppicker[data-type=hour] .ui-dtpicker-mi,.ui-poppicker[data-type=hour] .ui-picker[data-id=picker-mi]{display:none}.ui-poppicker[data-type=month] .ui-picker,.ui-poppicker[data-type=month] label{width:50%}.ui-poppicker[data-type=month] .ui-dtpicker-d,.ui-poppicker[data-type=month] .ui-dtpicker-h,.ui-poppicker[data-type=month] .ui-dtpicker-mi,.ui-poppicker[data-type=month] .ui-picker[data-id=picker-d],.ui-poppicker[data-type=month] .ui-picker[data-id=picker-h],.ui-poppicker[data-type=month] .ui-picker[data-id=picker-mi]{display:none}.ui-page,.ui-pages{position:absolute;top:0;left:0;right:0;bottom:0;z-index:0;overflow:hidden;background-color:#f8f8f8}.ui-pages{z-index:10000}.ui-pages-zero{z-index:-1}.ui-page-iframe{height:100%;width:100%;margin:0;padding:0;border:none}.ui-page{display:none}.ui-page.ui-show{z-index:10;display:block}.ui-page:first-child{z-index:1;display:block}.ui-page.ui-anim,.ui-pages.ui-anim{overflow:auto;box-shadow:-.01rem 0 rgba(0,0,0,.6)}.ui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes c{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes d{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.ui-slideRightOut{-webkit-animation-name:d;animation-name:d}.ui-slideRightIn{-webkit-animation-name:c;animation-name:c}.ipu-ui-progress{overflow:hidden;width:100%;height:.02rem;font-size:0;line-height:0;background-color:#e2e2e2;box-sizing:border-box}.ipu-ui-progress span{display:block;width:100%;height:100%;font-size:0;line-height:0;background:#00479d;transition:.3s;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.ui-progressbar-success span{background-color:#4cd964}.ui-progressbar-warning span{background-color:#ff4222}.ui-progressbar-highlight span{background-color:#ff8444}.ui-carousel{width:100%;overflow:hidden;position:relative}.ui-carousel-wrapper{width:2000%;overflow:hidden}.ui-carousel-wrapper>li{float:left;width:5%}.ui-carousel-indicator{position:absolute;bottom:.15rem;right:.15rem}.ui-carousel-indicator li{float:left;width:.1rem;height:.1rem;border-radius:50%;background-color:#fff;margin:0 .035rem}.ui-carousel-indicator li.ui-active{background-color:#666}.ui-carousel-animate{transition:all .2s ease-out .1s}.ui-hammer-carousel .ui-carousel-wrapper{font-size:0;position:relative;white-space:nowrap;display:block;width:auto;overflow:visible}.ui-hammer-carousel .ui-carousel-wrapper>li{position:relative;display:inline-block;width:100%;font-size:.15rem;vertical-align:top;white-space:normal;float:none}.ui-modal-overlay,.ui-popup-overlay,.ui-preloader-indicator-overlay{position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.4);z-index:10600;visibility:hidden;opacity:0;transition-duration:.3s}.ui-modal-overlay.ui-modal-overlay-visible,.ui-popup-overlay.ui-modal-overlay-visible,.ui-preloader-indicator-overlay.ui-modal-overlay-visible{visibility:visible;opacity:1}.ui-popup-overlay{z-index:10200}.ui-modal{position:absolute;width:2.7rem;z-index:11000;top:50%;left:50%;margin-left:-1.35rem;margin-top:0;text-align:center;border-radius:7px;opacity:0;-webkit-transform:translateZ(0) scale(1.185);transform:translateZ(0) scale(1.185);transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;color:#333;display:none}.ui-modal.ui-modal-in{opacity:1;transition-duration:.3s;-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}.ui-modal.ui-modal-out{opacity:0;z-index:10999;transition-duration:.3s;-webkit-transform:translateZ(0) scale(.815);transform:translateZ(0) scale(.815)}.ui-modal-inner{padding:.15rem;border-bottom:1px solid #b5b5b5;border-radius:7px 7px 0 0;position:relative;background:#e8e8e8}.ui-modal-title{font-weight:500;font-size:.18rem;text-align:center}.ui-modal-title+.ui-modal-text{margin-top:.05rem}.ui-modal-buttons{height:.44rem;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ui-modal-buttons.ui-modal-buttons-vertical{display:block;height:auto}.ui-modal-button{width:100%;padding:0 .05rem;height:.44rem;font-size:.17rem;line-height:.44rem;text-align:center;color:#00479d;background:#e8e8e8;position:relative;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;box-sizing:border-box;border-right:1px solid #b5b5b5;-webkit-box-flex:1;flex-grow:1}.ui-modal-button:first-child{border-radius:0 0 0 7px}.ui-modal-button:last-child{border-right:none;border-radius:0 0 7px 0}.ui-modal-button:first-child:last-child{border-radius:0 0 7px 7px}.ui-modal-button.ui-modal-button-bold{font-weight:500}.ui-modal-button.active-state,html:not(.ui-watch-active-state) .ui-modal-button:active{background:#d4d4d4}.ui-modal-buttons-vertical .ui-modal-button{border-right:none;border-top:none;border-bottom:1px solid #b5b5b5;border-radius:0}.ui-modal-buttons-vertical .ui-modal-button:last-child{border-radius:0 0 7px 7px;border-bottom:none}.ui-modal-no-buttons .ui-modal-inner{border-radius:7px;border-bottom:none}.ui-modal-no-buttons .ui-modal-buttons{display:none}.ui-actions-modal{position:absolute;left:0;bottom:0;z-index:11000;width:100%;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.ui-actions-modal.ui-modal-in{transition-duration:.3s;-webkit-transform:translateZ(0);transform:translateZ(0)}.ui-actions-modal.ui-modal-out{z-index:10999;transition-duration:.3s;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.ui-actions-modal-group{margin:.08rem}.ui-actions-modal-button,.ui-actions-modal-label{width:100%;text-align:center;font-weight:400;margin:0;background:hsla(0,0%,95%,.95);box-sizing:border-box;display:block;position:relative;border-bottom:1px solid #d2d2d6}.ui-actions-modal-button.ui-actions-modal-button-bold,.ui-actions-modal-label.ui-actions-modal-button-bold{font-weight:500}.ui-actions-modal-button.ui-actions-modal-button-warning,.ui-actions-modal-button.ui-color-warning,.ui-actions-modal-label.ui-actions-modal-button-warning,.ui-actions-modal-label.ui-color-warning{color:#ff4222}.ui-actions-modal-button.ui-bg-warning,.ui-actions-modal-label.ui-bg-warning{background:#ff4222;color:#fff}.ui-actions-modal-button.ui-bg-warning:active,.ui-actions-modal-label.ui-bg-warning:active{background:#e20}.ui-actions-modal-button:first-child,.ui-actions-modal-label:first-child{border-radius:4px 4px 0 0}.ui-actions-modal-button:last-child,.ui-actions-modal-label:last-child{border-bottom:none;border-radius:0 0 4px 4px}.ui-actions-modal-button:first-child:last-child,.ui-actions-modal-label:first-child:last-child{border-radius:4px}.ui-actions-modal-button.ui-disabled,.ui-actions-modal-label.ui-disabled{opacity:.95;color:#8e8e93}.ui-actions-modal-button{cursor:pointer;line-height:.43rem;font-size:.2rem;color:#00479d}.ui-actions-modal-button.ui-active-state,.ui-actions-modal-button:active{background:#dcdcdc}.ui-actions-modal-label{font-size:.14rem;line-height:1.3;min-height:.44rem;padding:.08rem .1rem;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}input.ui-modal-text-input{box-sizing:border-box;height:.3rem;background:#fff;margin:0;margin-top:.15rem;padding:0 .05rem;border:1px solid #a0a0a0;border-radius:5px;width:100%;font-size:.14rem;font-family:inherit;display:block;box-shadow:0 0 0 transparent;-webkit-appearance:none;appearance:none}input.ui-modal-text-input+input.ui-modal-text-input{margin-top:.05rem}input.ui-modal-text-input.ui-modal-text-input-double{border-radius:5px 5px 0 0}input.ui-modal-text-input.ui-modal-text-input-double+input.ui-modal-text-input{margin-top:0;border-top:0;border-radius:0 0 5px 5px}.ui-login-screen,.ui-popup{position:absolute;left:0;top:0;width:100%;height:100%;z-index:10400;background:#fff;box-sizing:border-box;display:none;overflow:auto;-webkit-overflow-scrolling:touch;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.ui-login-screen.ui-modal-in,.ui-login-screen.ui-modal-out,.ui-popup.ui-modal-in,.ui-popup.ui-modal-out{transition-duration:.3s}.ui-login-screen.ui-modal-in,.ui-popup.ui-modal-in{-webkit-transform:translateZ(0);transform:translateZ(0)}.ui-login-screen.ui-modal-out,.ui-popup.ui-modal-out{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}html.ui-with-statusbar-overlay .ui-popup{height:calc(100% - 20px);top:20px}html.ui-with-statusbar-overlay .ui-popup-overlay{z-index:9800}@media (max-height:629px),(max-width:629px){html.ui-with-statusbar-overlay .ui-popup{height:calc(100% - 20px);top:20px}html.ui-with-statusbar-overlay .ui-popup-overlay{z-index:9800}}.ui-modal .ui-preloader{width:.34rem;height:.34rem}.ui-preloader-indicator-overlay{visibility:visible;opacity:0;background:none}.ui-preloader-indicator-modal{position:absolute;left:50%;top:50%;padding:.08rem;margin-left:-.25rem;margin-top:-.25rem;background:rgba(0,0,0,.8);z-index:11000;border-radius:5px}.ui-preloader-indicator-modal .ui-preloader{display:block;width:.34rem;height:.34rem}.ui-toast{background:rgba(0,0,0,.8);border-radius:20px;color:#fff;padding:0 .16rem;height:.4rem;line-height:.4rem;font-size:.16rem;width:auto}.ui-preloader{display:inline-block;width:1rem;height:1rem;-webkit-transform-origin:50%;transform-origin:50%;-webkit-animation:b 1s steps(12) infinite;animation:b 1s steps(12) infinite}.ui-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E");background-position:50%;background-size:100%;background-repeat:no-repeat}.ui-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}.ui-refresh-wrapper{position:relative;min-height:100%;box-sizing:border-box}.ui-refresh-wrapper .ui-refresh-loading{display:inline-block;box-sizing:border-box;height:.2rem;width:.2rem;border-radius:100%;border:.02rem solid #666;border-bottom-color:transparent;vertical-align:middle;-webkit-animation:a .75s linear infinite;animation:a .75s linear infinite}.ui-refresh-top{top:-.4rem;position:absolute;left:0;right:0;line-height:.4rem;height:.4rem;text-align:center;box-sizing:border-box}.ui-refresh-top.ui-refresh-top-loading .ui-refresh-loading{display:inline-block}.ui-refresh-top .ui-refresh-loading,.ui-refresh-top.ui-refresh-top-loading .ui-refresh-arrow{display:none}.ui-refresh-top.ui-refresh-toload .ui-refresh-arrow{-webkit-transform:rotate(180deg) translateZ(0);transform:rotate(180deg) translateZ(0)}.ui-refresh-bottom{display:none;position:static;box-sizing:border-box;right:0;line-height:.4rem;height:.4rem;text-align:center}.ui-refresh-content{overflow:auto}.ui-refresh-arrow{position:absolute;left:50%;top:50%;width:.13rem;height:.2rem;margin-left:-.065rem;margin-top:-.1rem;background:no-repeat 50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 26 40'%3E%3Cpath fill='%238c8c8c' d='M9 22V0h8v22h9L13.5 40 0 22z'/%3E%3C/svg%3E");background-size:contain;-webkit-transform:rotate(0deg) translateZ(0);transform:rotate(0deg) translateZ(0);transition-duration:.3s}.ui-tab-title{display:-webkit-box;display:-ms-flexbox;display:flex;box-sizing:border-box;background-color:#fff}.ui-tab-title>li{width:0;-webkit-box-flex:1;flex-grow:1;text-align:center;line-height:.45rem;box-sizing:border-box}.ui-tab-title>li.active{position:relative}.ui-tab-title-link>li{border-bottom:1px solid #e0e0e0}.ui-tab-title-link>li.ui-active{border-bottom:2px solid #00479d;color:#00479d}.ui-tab-title-button{color:#00479d;border:1px solid #00479d;border-radius:.03rem;margin:.1rem}.ui-tab-title-button>li{border-left:1px solid #00479d;font-size:.12rem;line-height:2}.ui-tab-title-button>li.ui-active{background-color:#00479d;color:#fff;border-bottom:none}.ui-tab-title-button>li:first-child{border-left:none}.ui-tab-title-button>li:last-child{border-right:none}.ui-tab-body-wrapper>li{display:none}.ui-tab-body-wrapper>li.ui-active{display:block}.ui-tab-fixed{position:relative;height:100%;width:100%;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;flex-direction:column}.ui-tab-fixed>.ui-tab-title{-webkit-box-flex:0;flex-grow:0}.ui-tab-fixed>.ui-tab-body{-webkit-box-flex:1;flex-grow:1;position:relative}.ui-tab-fixed>.ui-tab-body>.ui-tab-body-wrapper{width:100%;height:100%;position:absolute;font-size:0;white-space:nowrap;overflow-x:visible}.ui-tab-fixed>.ui-tab-body>.ui-tab-body-wrapper>li{height:100%;font-size:.15rem;display:inline-block;white-space:normal;vertical-align:top;width:100%;overflow:auto}.ui-fn-left{float:left}.ui-fn-right{float:right}.ui-fn-clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.ui-fn-show{display:block}.ui-fn-hide{display:none}.ui-fn-hide-visibility{visibility:hidden}.ui-border-t{border-top:1px solid #dfe0e1}.ui-border-b,.ui-border-tb{border-bottom:1px solid #dfe0e1}.ui-border-tb{border-top:1px solid #dfe0e1}.ui-border-l{border-left:1px solid #dfe0e1}.ui-border-r{border-right:1px solid #dfe0e1}.ui-border{border:1px solid #dfe0e1}.ui-bg-color-1{background:#ffa54b}.ui-bg-color-2{background:#9bcd46}.ui-bg-color-3{background:#9669e1}.ui-bg-color-4{background:#41b9f5}.ui-bg-color-5{background:#f57d6e}.ui-bg-color-6{background:#fa82a5}.ui-bg-color-7{background:#41c8cd}.ui-bg-color-8{background:#5f9be6}.ui-txt-color-1{color:#ffa54b}.ui-txt-color-2{color:#9bcd46}.ui-txt-color-3{color:#9669e1}.ui-txt-color-4{color:#41b9f5}.ui-txt-color-5{color:#f57d6e}.ui-txt-color-6{color:#fa82a5}.ui-txt-color-7{color:#41c8cd}.ui-txt-color-8{color:#5f9be6}.ui-fn-m{margin:.1rem}.ui-fn-m-lr{margin-left:.1rem;margin-right:.1rem}.ui-fn-m-tb{margin-bottom:.1rem}.ui-fn-m-t,.ui-fn-m-tb{margin-top:.1rem}.ui-fn-m-l{margin-left:.1rem}.ui-fn-m-r{margin-right:.1rem}.ui-fn-m-b{margin-bottom:.1rem}.ui-fn-p{padding:.1rem}.ui-fn-p-lr{padding-left:.1rem;padding-right:.1rem}.ui-fn-p-tb{padding-bottom:.1rem}.ui-fn-p-t,.ui-fn-p-tb{padding-top:.1rem}.ui-fn-p-l{padding-left:.1rem}.ui-fn-p-r{padding-right:.1rem}.ui-fn-p-b{padding-bottom:.1rem}.ui-fn-copy{-webkit-user-select:text;user-select:text}.ui-fn-txt-row{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} 2 2
/*# sourceMappingURL=ui.min.css.map */

+ 1 - 1
ipu/dist/css/ui.min.css.map

@ -1 +1 @@
1
{"version":3,"sources":["ui.css"],"names":[],"mappings":"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","file":"ui.min.css","sourcesContent":["@charset \"UTF-8\";\nhtml {\n  font-size: 85.33333px; }\n\n@media screen and (min-width: 320px) and (max-width: 350px) {\n  html {\n    font-size: 85.33333px; } }\n\n@media screen and (min-width: 350px) and (max-width: 375px) {\n  html {\n    font-size: 93.33333px; } }\n\n@media screen and (min-width: 375px) and (max-width: 384px) {\n  html {\n    font-size: 100px; } }\n\n@media screen and (min-width: 384px) and (max-width: 400px) {\n  html {\n    font-size: 102.4px; } }\n\n@media screen and (min-width: 400px) and (max-width: 414px) {\n  html {\n    font-size: 106.66667px; } }\n\n@media screen and (min-width: 414px) and (max-width: 450px) {\n  html {\n    font-size: 110.4px; } }\n\n@media screen and (min-width: 450px) and (max-width: 480px) {\n  html {\n    font-size: 120px; } }\n\n@media screen and (min-width: 480px) and (max-width: 520px) {\n  html {\n    font-size: 128px; } }\n\n@media screen and (min-width: 520px) and (max-width: 640px) {\n  html {\n    font-size: 138.66667px; } }\n\n@media screen and (min-width: 640px) {\n  html {\n    font-size: 170.66667px; } }\n\nbody, h1, h2, h3, h4, h5, h6, hr, p, blockquote,\ndl, dt, dd, ul, ol, li,\npre,\nfieldset, lengend, button, input, textarea,\nth, td {\n  margin: 0;\n  padding: 0; }\n\nh1, h2, h3, h4, h5, h6 {\n  font-weight: normal;\n  font-size: 100%; }\n\naddress, cite, dfn, em, var, i, strong {\n  font-style: normal; }\n\nul, ol {\n  list-style: none; }\n\na {\n  text-decoration: none; }\n\nfieldset, img {\n  border: none; }\n\nbutton, input, select, textarea {\n  font: inherit; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ncaption, th {\n  text-align: left; }\n\nins {\n  text-decoration: none; }\n\ndel {\n  text-decoration: line-through; }\n\n* {\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\nhtml, body {\n  height: 100%;\n  position: relative; }\n\nbody {\n  font-family: Arial, Helvetica, sans-serif;\n  line-height: 1.5;\n  font-size: 0.15rem;\n  color: #666;\n  background-color: #f8f8f8;\n  -webkit-user-select: none; }\n\n/*\r\nbutton{\r\n    -webkit-appearance: none;\r\n    border: 0;\r\n    background: none;\r\n}\r\n*/\n:focus {\n  outline: 0;\n  -webkit-tap-highlight-color: transparent; }\n\na {\n  color: #00479d; }\n\na:active {\n  color: #00306a; }\n\nimg {\n  max-width: 100%; }\n\n.ui-txt-xxl {\n  font-size: 0.24rem; }\n\n.ui-txt-xl {\n  font-size: 0.2rem; }\n\n.ui-txt-l {\n  font-size: 0.17rem; }\n\n.ui-txt-m {\n  font-size: 0.15rem; }\n\n.ui-txt-s {\n  font-size: 0.14rem; }\n\n.ui-txt-xs {\n  font-size: 0.13rem; }\n\n.ui-txt-rl {\n  font-size: 1.2em; }\n\n.ui-txt-rs {\n  font-size: 0.85em; }\n\n.ui-txt-black {\n  color: #000; }\n\n.ui-txt-dark {\n  color: #333; }\n\n.ui-txt-default {\n  color: #666; }\n\n.ui-txt-gray {\n  color: #999; }\n\n.ui-txt-light {\n  color: #ccc; }\n\n.ui-txt-white {\n  color: #fff; }\n\n.ui-txt-primary {\n  color: #00479d; }\n\n.ui-txt-warning {\n  color: #ff4222; }\n\n.ui-txt-success {\n  color: #4cd964; }\n\n.ui-txt-highlight {\n  color: #ff8444; }\n\n.ui-txt-center {\n  text-align: center; }\n\n.ui-txt-left {\n  text-align: left; }\n\n.ui-txt-right {\n  text-align: right; }\n\n.ui-txt-justify {\n  text-align: justify; }\n\n@-webkit-keyframes ui-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  50% {\n    -webkit-transform: rotate(180deg);\n    transform: rotate(180deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes ui-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  50% {\n    -webkit-transform: rotate(180deg);\n    transform: rotate(180deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@-webkit-keyframes ui-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes ui-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n.ui-icon.fa:before {\n  font-size: .75em;\n  display: block;\n  min-height: 1.333em;\n  /*\r\n    min-width: 1.333em;*/\n  text-align: center; }\n\n.ui-icon.fa {\n  font-size: .32rem;\n  line-height: 100%; }\n\n.ui-btn {\n  display: inline-block;\n  position: relative;\n  min-width: 0.75rem;\n  padding: 0 0.075rem;\n  font-size: 0.14rem;\n  line-height: 2.4;\n  color: #fff;\n  text-align: center;\n  background-color: #00479d;\n  border: 0;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  border-radius: 0.03rem;\n  -webkit-appearance: none; }\n  .ui-btn:not(.ui-disabled):not(:disabled):active, .ui-btn.ui-active {\n    background: #00306a; }\n  .ui-btn.ui-disabled, .ui-btn:disabled {\n    opacity: .5; }\n  .ui-btn .ui-icon {\n    font-size: inherit;\n    line-height: inherit;\n    margin-right: .03rem; }\n\n.ui-btn-s {\n  padding: 0 0.06375rem;\n  min-width: 0.6375rem;\n  font-size: 0.119rem; }\n\n.ui-btn-l {\n  padding: 0 0.09rem;\n  min-width: 0.9rem;\n  font-size: 0.168rem; }\n\n.ui-btn-warning {\n  background-color: #ff4222; }\n  .ui-btn-warning:not(.ui-disabled):not(:disabled):active, .ui-btn-warning.ui-active {\n    background-color: #ee2200; }\n\n.ui-btn-highlight {\n  background-color: #ff8444; }\n  .ui-btn-highlight:not(.ui-disabled):not(:disabled):active, .ui-btn-highlight.ui-active {\n    background: #ff6211; }\n\n.ui-btn-success {\n  background-color: #4cd964; }\n  .ui-btn-success:not(.ui-disabled):not(:disabled):active, .ui-btn-success.ui-active {\n    background: #2ac845; }\n\n.ui-btn-block {\n  display: block;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-btn-wrap {\n  padding: .1rem;\n  overflow: auto; }\n\n.ui-img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto; }\n\n.ui-img-border {\n  border-radius: 0.03rem; }\n\n.ui-img-circle {\n  border-radius: 50%; }\n\n.ui-img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: .05rem;\n  border: 1px solid #dfe0e1;\n  border-radius: 0.03rem;\n  background-color: #fff;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-form {\n  background-color: #fff;\n  border-top: 1px solid #e0e0e0; }\n\n.ui-form-item {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  position: relative;\n  font-size: 0.15rem;\n  padding: 0.1rem 0.15rem 0.11rem;\n  border-bottom: 1px solid #e0e0e0; }\n  .ui-form-item label:not(.ui-switch):not(.ui-checkbox):not(.ui-radio) {\n    width: 0.9rem;\n    position: absolute;\n    text-align: left;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box; }\n  .ui-form-item input,\n  .ui-form-item textarea {\n    width: 100%;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    -webkit-appearance: none;\n    border: 0;\n    background: none;\n    padding-left: 0.9rem; }\n  .ui-form-item input[type=\"checkbox\"], .ui-form-item input[type=\"radio\"] {\n    padding-left: 0; }\n  .ui-form-item .ui-icon-close {\n    position: absolute;\n    top: 0;\n    right: .06rem; }\n\n.ui-form-item-order > a, .ui-form-item-link > a {\n  display: block; }\n\n.ui-form-item-order:active {\n  background-color: #e5e6e7; }\n\n.ui-form-item-textarea {\n  height: 0.65rem; }\n\n.ui-form-item-textarea label {\n  vertical-align: top; }\n\n.ui-form-item-textarea textarea {\n  margin-top: 0.15rem;\n  border: none;\n  resize: none; }\n\n.ui-form-item-textarea textarea:focus {\n  outline: none; }\n\n.ui-form-item-link > li:after {\n  position: absolute;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM0QzFDNzMyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM0QzFDNzQyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzRDMUM3MTJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzRDMUM3MjJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pjs2Bb4AAAItSURBVHjazJhbK0RRGIb3DIOU/AG5kUTOgxmHceFGKf6BO+Vf+E8KKYcYg3FuMpNIDhFJXJAcp/GtvKumrzVs+zBrvfU2u689q6d3rb33+lYgl8tZvymZ3JOX7eQp8gT50fJA0Wj4z3tKbY5VR14hV5ObyWLkZ6sICtq4p4V8CjihevIWucoUQJFUmtUayTvkShMAL5DiGqs3IMlK3YBSgwrIZkBWmAAoIRMKyG2/IIMO/hMjbygepCS53ARAoQHyOqu1YbrLTADMAXJbASmSDOkGlOpTQHaQN72CdAuYBeQuq4cBWaIbUEJGC0Am3UIGPVoqMsk9Vu/CwxTQDSj0iSQPWD2C6Q7oBhT6AmRKAZkwAVDoowBkn+LdqQVQ6A2QhwrIuAmAEjKi2KrF/jPdfgIKveI7Pcfq/eSMCYBSD4pakymA0+RxVrsn15oAOEMeY7Vbcif5ys4ApT7CzZJHWO2G3I1fSyfgPHmY1a7x6bvT/ZpZUMBdOoHzI8El8pCiK+wq8CQXNcFlBdw51tyD00G9SnAVHV++zgDn6hzHiwTjCrgTTKvrQya3Ca5jA5CvY3IP+UlnTxJEb8zhjpDck1cL20mCAcBFWD2D2ovOvjiERojDpTGtnsL9N8EQegt+LJrC5vRN59lMORp0DrePNH2BswvYivXVzuoHSO7dz+2QHcAa6+eMOl87WHOffm8m7QCK7foog+tFi2mZACg3npPkRUxrtkitgvUtwAA5A3LWdzPizwAAAABJRU5ErkJggg==);\n  content: '';\n  height: .44rem;\n  width: .32rem;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -webkit-text-stroke-width: 0.2px;\n  right: .15rem;\n  top: 50%;\n  margin-top: -.22rem;\n  margin-right: -.1rem;\n  -webkit-background-size: 50% auto;\n  background-size: 50% auto;\n  background-repeat: no-repeat;\n  background-position: center center; }\n\n.ui-form-item-l label {\n  color: #00479d;\n  text-align: center; }\n\n.ui-form-item-r .ui-icon-close {\n  right: 1.25rem; }\n\n.ui-form-item-l input:not([type=\"checkbox\"]):not([type=\"radio\"]) {\n  padding-left: 1.15rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-form-item-r {\n  padding-right: 0; }\n\n.ui-form-item-r input:not([type=\"checkbox\"]):not([type=\"radio\"]) {\n  padding-left: 0;\n  padding-right: 1.5rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-form-item-r button {\n  /*width: 110px;*/\n  /*\r\n\theight: $lh-form-item;*/\n  position: absolute;\n  top: .1rem;\n  right: 0.15rem; }\n\n.ui-form-item-r button.disabled {\n  color: #ddd; }\n\n.ui-form-item-r button:not(.disabled):active {\n  background-color: #e5e6e7; }\n\n.ui-form-item-pure input,\n.ui-form-item-pure textarea {\n  padding-left: 0; }\n\n/* 表单展示项 */\n.ui-form-item-show label {\n  color: #999; }\n\n.ui-form-item-link:after {\n  position: absolute;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM0QzFDNzMyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM0QzFDNzQyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzRDMUM3MTJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzRDMUM3MjJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pjs2Bb4AAAItSURBVHjazJhbK0RRGIb3DIOU/AG5kUTOgxmHceFGKf6BO+Vf+E8KKYcYg3FuMpNIDhFJXJAcp/GtvKumrzVs+zBrvfU2u689q6d3rb33+lYgl8tZvymZ3JOX7eQp8gT50fJA0Wj4z3tKbY5VR14hV5ObyWLkZ6sICtq4p4V8CjihevIWucoUQJFUmtUayTvkShMAL5DiGqs3IMlK3YBSgwrIZkBWmAAoIRMKyG2/IIMO/hMjbygepCS53ARAoQHyOqu1YbrLTADMAXJbASmSDOkGlOpTQHaQN72CdAuYBeQuq4cBWaIbUEJGC0Am3UIGPVoqMsk9Vu/CwxTQDSj0iSQPWD2C6Q7oBhT6AmRKAZkwAVDoowBkn+LdqQVQ6A2QhwrIuAmAEjKi2KrF/jPdfgIKveI7Pcfq/eSMCYBSD4pakymA0+RxVrsn15oAOEMeY7Vbcif5ys4ApT7CzZJHWO2G3I1fSyfgPHmY1a7x6bvT/ZpZUMBdOoHzI8El8pCiK+wq8CQXNcFlBdw51tyD00G9SnAVHV++zgDn6hzHiwTjCrgTTKvrQya3Ca5jA5CvY3IP+UlnTxJEb8zhjpDck1cL20mCAcBFWD2D2ovOvjiERojDpTGtnsL9N8EQegt+LJrC5vRN59lMORp0DrePNH2BswvYivXVzuoHSO7dz+2QHcAa6+eMOl87WHOffm8m7QCK7foog+tFi2mZACg3npPkRUxrtkitgvUtwAA5A3LWdzPizwAAAABJRU5ErkJggg==);\n  content: '';\n  height: .44rem;\n  width: .32rem;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -webkit-text-stroke-width: 0.2px;\n  right: .15rem;\n  top: 50%;\n  margin-top: -.22rem;\n  margin-right: -.1rem;\n  -webkit-background-size: 50% auto;\n  background-size: 50% auto;\n  background-repeat: no-repeat;\n  background-position: center center; }\n\n.ui-form-item-checkbox,\n.ui-form-item-radio,\n.ui-form-item-switch {\n  display: -webkit-box;\n  -webkit-box-align: center; }\n\n.ui-form-item .ui-switch {\n  position: absolute;\n  right: 0.1rem 0.15rem 0.11rem;\n  top: 50%;\n  margin-top: -0.155rem; }\n\n.ui-switch {\n  display: inline-block;\n  vertical-align: middle; }\n  .ui-switch input {\n    position: relative;\n    width: 0.52rem;\n    height: 0.31rem;\n    -webkit-appearance: none;\n    border: none;\n    background: none;\n    display: block; }\n    .ui-switch input:before {\n      content: '';\n      display: block;\n      width: 100%;\n      height: 100%;\n      border: 1px solid #dfe0e1;\n      background-color: #fff;\n      border-radius: 0.155rem;\n      -webkit-box-sizing: border-box;\n      box-sizing: border-box;\n      -webkit-box-shadow: #dfdfdf 0 0 0 0 inset;\n      box-shadow: #dfdfdf 0 0 0 0 inset;\n      -webkit-background-clip: content-box;\n      background-clip: content-box; }\n    .ui-switch input:checked:before {\n      border-color: #64bd63;\n      background-color: #64bd63;\n      -webkit-transition: all ease 400ms;\n      transition: all ease 400ms;\n      -webkit-box-shadow: #64bd63 0 0 0 0.16rem inset;\n      box-shadow: #64bd63 0 0 0 0.16rem inset; }\n    .ui-switch input:after {\n      content: '';\n      width: 0.29rem;\n      height: 0.29rem;\n      position: absolute;\n      top: .01rem;\n      left: .0rem;\n      border-radius: 50%;\n      background-color: #fff;\n      -webkit-box-shadow: 0 0.02rem 0.05rem 0 rgba(0, 0, 0, 0.4);\n      box-shadow: 0 0.02rem 0.05rem 0 rgba(0, 0, 0, 0.4);\n      -webkit-transition: 300ms;\n      transition: 300ms;\n      -webkit-background-clip: padding-box;\n      background-clip: padding-box; }\n    .ui-switch input:checked:after {\n      left: 0.21rem; }\n\n.ui-radio {\n  display: inline-block;\n  vertical-align: middle; }\n\n.ui-radio input {\n  display: block;\n  width: 0.24rem;\n  height: 0.24rem;\n  position: relative;\n  -webkit-appearance: none;\n  border: 0;\n  background: none; }\n\n.ui-radio input:before {\n  content: '';\n  display: block;\n  width: 100%;\n  height: 100%;\n  border: 1px solid #dfe0e1;\n  border-radius: 50%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  background-color: #fff; }\n\n.ui-radio input:checked:before {\n  border-color: #00479d; }\n\n.ui-radio input:checked:after {\n  content: '';\n  position: absolute;\n  left: 0.06rem;\n  top: 0.06rem;\n  width: 0.12rem;\n  height: 0.12rem;\n  background: #00479d;\n  border-radius: 50%; }\n\n.ui-checkbox {\n  display: inline-block;\n  width: 0.24rem;\n  height: 0.24rem;\n  vertical-align: middle;\n  line-height: 0.24rem; }\n\n.ui-checkbox input {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  -webkit-appearance: none;\n  background: none;\n  border: none; }\n\n.ui-checkbox input:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border-radius: 50%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  border: 1px solid #dfe0e1;\n  background-color: #fff; }\n\n.ui-checkbox-square input:before {\n  top: 6%;\n  left: 6%;\n  width: 88%;\n  height: 88%;\n  border-radius: 0.03rem; }\n\n.ui-checkbox input[type=checkbox]:checked:before {\n  background: #00479d;\n  border-color: #00479d; }\n\n.ui-checkbox input[type=checkbox]:checked:after {\n  content: '';\n  position: absolute;\n  width: 0.108rem;\n  height: 0.0486rem;\n  top: 0.07273rem;\n  left: 0.0594rem;\n  border: 2px solid #fff;\n  border-top: none;\n  border-right: none;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg); }\n\n.ui-checkbox-s {\n  width: 0.204rem;\n  height: 0.204rem; }\n\n.ui-checkbox-s input[type=checkbox]:checked:after {\n  width: 0.0918rem;\n  height: 0.04131rem;\n  top: 0.05694rem;\n  left: 0.04488rem; }\n\n.ui-input-wrap {\n  height: .44rem;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-self: center;\n  align-self: center; }\n  .ui-input-wrap .ui-btn, .ui-input-wrap i {\n    margin-right: .1rem; }\n\n.ui-input {\n  height: .3rem;\n  line-height: .3rem;\n  margin: .07rem .1rem;\n  background: #fff;\n  padding-left: .1rem;\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1; }\n\n.ui-input input {\n  width: 100%;\n  height: 100%;\n  border: 0;\n  background: 0 0;\n  -webkit-appearance: none;\n  outline: 0; }\n\n.ui-table {\n  width: 100%;\n  border-collapse: collapse; }\n\n.ui-table td, .ui-table th {\n  text-align: center;\n  background-color: #fff;\n  padding: .05rem .025rem;\n  border: 1px solid #e0e0e0; }\n\n.ui-table th {\n  color: #333;\n  font-size: .15rem;\n  font-weight: 500;\n  background-color: #eee; }\n\n.ui-table td {\n  color: #666;\n  font-size: .14rem; }\n\n.ui-table-primary th {\n  color: #00479d; }\n\n.ui-table-bg-primary th {\n  background-color: #00479d;\n  color: #fff; }\n\n.ui-table-odd tbody tr:nth-last-child(2n) td {\n  background-color: #fafafa; }\n\n.ui-table-border-none th, .ui-table-border-none td {\n  border: none; }\n\n.ui-table-border-row th, .ui-table-border-row td {\n  border-width: 0 0 1px  0; }\n\n.ui-grid, .ui-grid-trisect, .ui-grid-halve {\n  padding-left: .15rem;\n  padding-right: .1rem;\n  overflow: hidden;\n  padding-top: .1rem; }\n  .ui-grid li, .ui-grid-trisect li, .ui-grid-halve li {\n    padding-right: .05rem;\n    padding-bottom: .1rem;\n    float: left;\n    position: relative;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box; }\n\n.ui-grid-trisect > li {\n  width: 33.3333%; }\n\n.ui-grid-trisect-img {\n  padding-top: 149.47%; }\n\n.ui-grid-trisect h4 {\n  position: relative;\n  margin: .07rem 0 .03rem; }\n\n.ui-grid-trisect h4 span {\n  display: inline-block;\n  margin-left: .12rem;\n  color: #666; }\n\n.ui-grid-halve > li {\n  width: 50%; }\n\n.ui-grid-halve-img {\n  padding-top: 55.17%; }\n\n.ui-grid-trisect-img, .ui-grid-halve-img {\n  position: relative;\n  width: 100%; }\n  .ui-grid-trisect-img > span, .ui-grid-halve-img > span {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1;\n    background-repeat: no-repeat;\n    -webkit-background-size: cover; }\n  .ui-grid-trisect-img img, .ui-grid-halve-img img {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    left: 0;\n    top: 0; }\n  .ui-grid-trisect-img.active, .ui-grid-halve-img.active {\n    opacity: .5; }\n\n.ui-row {\n  display: block;\n  overflow: hidden;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-col {\n  float: left;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  width: 100%; }\n\n.ui-col-10 {\n  width: 10%; }\n\n.ui-col-20 {\n  width: 20%; }\n\n.ui-col-25 {\n  width: 25%; }\n\n.ui-col-33 {\n  width: 33.33%; }\n\n.ui-col-50 {\n  width: 50%; }\n\n.ui-col-67 {\n  width: 66.6666%; }\n\n.ui-col-75 {\n  width: 75%; }\n\n.ui-col-80 {\n  width: 80%; }\n\n.ui-col-90 {\n  width: 90%; }\n\n.ui-row-flex {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  width: 100%;\n  -webkit-box-sizing: border-box; }\n  .ui-row-flex > .ui-col {\n    float: none;\n    -webkit-box-flex: 1;\n    -webkit-flex-grow: 1;\n    flex-grow: 1;\n    width: 0;\n    position: relative;\n    overflow: auto; }\n  .ui-row-flex > .ui-col-2 {\n    -webkit-box-flex: 2;\n    -webkit-flex-grow: 2;\n    flex-grow: 2; }\n  .ui-row-flex > .ui-col-3 {\n    -webkit-box-flex: 3;\n    -webkit-flex-grow: 3;\n    flex-grow: 3; }\n  .ui-row-flex > .ui-col-4 {\n    -webkit-box-flex: 4;\n    -webkit-flex-grow: 4;\n    flex-grow: 4; }\n  .ui-row-flex > .ui-col-auto {\n    -webkit-box-flex: 0;\n    -webkit-flex-grow: 0;\n    flex-grow: 0;\n    width: auto;\n    overflow: visible; }\n\n.ui-row-flex-ver {\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  flex-direction: column;\n  height: 100%; }\n  .ui-row-flex-ver > .ui-col {\n    width: 100%;\n    height: 0; }\n  .ui-row-flex-ver > .ui-col-auto {\n    height: auto; }\n\n.ui-flex-content {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow: auto; }\n\n.ui-grid-nine, .ui-grid-sixteen {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow: hidden; }\n  .ui-grid-nine > li, .ui-grid-sixteen > li {\n    float: left;\n    position: relative;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    padding: 0.2rem 0.1rem;\n    font-size: 0.14rem;\n    text-align: center;\n    border-right: 1px solid #eae9eb;\n    border-bottom: 1px solid #eae9eb; }\n    .ui-grid-nine > li:active, .ui-grid-sixteen > li:active {\n      background: #f4f4f4; }\n  .ui-grid-nine .ui-icon, .ui-grid-sixteen .ui-icon {\n    font-size: 0.32rem;\n    display: block;\n    line-height: 0.44rem; }\n  .ui-grid-nine .ui-badge, .ui-grid-nine .ui-badge-muted, .ui-grid-nine .ui-badge-num, .ui-grid-nine .ui-badge-dot, .ui-grid-sixteen .ui-badge, .ui-grid-sixteen .ui-badge-muted, .ui-grid-sixteen .ui-badge-num, .ui-grid-sixteen .ui-badge-dot {\n    position: absolute;\n    top: 0.15rem;\n    left: 65%;\n    z-index: 99; }\n  .ui-grid-nine > li p, .ui-grid-sixteen > li p {\n    display: block;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis; }\n  .ui-grid-nine > li a, .ui-grid-sixteen > li a {\n    color: inherit;\n    display: block;\n    position: relative; }\n\n.ui-grid-nine > li {\n  width: 33.3333%; }\n  .ui-grid-nine > li:nth-child(3n+1) {\n    border-left: 1px solid #eae9eb; }\n  .ui-grid-nine > li:nth-child(1), .ui-grid-nine > li:nth-child(2), .ui-grid-nine > li:nth-child(3) {\n    border-top: 1px solid #eae9eb; }\n\n.ui-grid-sixteen > li {\n  width: 25%; }\n  .ui-grid-sixteen > li:nth-child(4n+1) {\n    border-left: 1px solid #eae9eb; }\n  .ui-grid-sixteen > li:nth-child(1), .ui-grid-sixteen > li:nth-child(2), .ui-grid-sixteen > li:nth-child(3), .ui-grid-sixteen > li:nth-child(4) {\n    border-top: 1px solid #eae9eb; }\n\n.ui-center {\n  width: 100%;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-box-pack: center;\n  -webkit-box-align: center;\n  text-align: center;\n  height: 1.5rem; }\n\n.ui-flex,\n.ui-tiled {\n  display: -webkit-box;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-flex-ver {\n  -webkit-box-orient: vertical; }\n\n.ui-flex-pack-start {\n  -webkit-box-pack: start; }\n\n.ui-flex-pack-end {\n  -webkit-box-pack: end; }\n\n.ui-flex-pack-center {\n  -webkit-box-pack: center; }\n\n.ui-flex-align-start {\n  -webkit-box-align: start; }\n\n.ui-flex-align-end {\n  -webkit-box-align: end; }\n\n.ui-flex-align-center {\n  -webkit-box-align: center; }\n\n.ui-tiled > li {\n  -webkit-box-flex: 1;\n  width: 100%;\n  text-align: center;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-box-pack: center;\n  -webkit-box-align: center; }\n\n.ui-card {\n  background: #fff;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n  margin: 0.1rem;\n  position: relative;\n  border-radius: 0.03rem;\n  font-size: 0.15rem; }\n\n.ui-card-content {\n  position: relative; }\n\n.ui-card-content-inner {\n  padding: 0.15rem;\n  position: relative; }\n\n.ui-card-header,\n.ui-card-footer {\n  min-height: 0.44rem;\n  position: relative;\n  padding: 0.1rem 0.15rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  justify-content: space-between;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  align-items: center; }\n\n.ui-card-header[valign=\"top\"],\n.ui-card-footer[valign=\"top\"] {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  align-items: flex-start; }\n\n.ui-card-header[valign=\"bottom\"],\n.ui-card-footer[valign=\"bottom\"] {\n  -webkit-box-align: end;\n  -webkit-align-items: flex-end;\n  align-items: flex-end; }\n\n.ui-card-header {\n  border-radius: 2px 2px 0 0;\n  font-size: .17rem;\n  color: #333; }\n\n.ui-card-header:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  right: auto;\n  top: auto;\n  height: 1px;\n  width: 100%;\n  background-color: #e0e0e0;\n  display: block;\n  z-index: 15;\n  -webkit-transform-origin: 50% 100%;\n  transform-origin: 50% 100%; }\n\n.ui-card-header .ui-card-cover {\n  width: 100%;\n  display: block; }\n\n.ui-card-footer {\n  border-radius: 0 0 0.1rem 0.1rem;\n  color: #666; }\n\n.ui-card-footer:before {\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: auto;\n  right: auto;\n  height: 1px;\n  width: 100%;\n  background-color: #e0e0e0;\n  display: block;\n  z-index: 15;\n  -webkit-transform-origin: 50% 0%;\n  transform-origin: 50% 0%; }\n\n.ui-card-header.no-padding, .ui-card-footer.no-padding {\n  padding: 0; }\n\n.ui-list ~ .ui-list {\n  margin-top: .1rem; }\n\n.ui-list > ul {\n  position: relative; }\n\n.ui-list > ul:before,\n.ui-list > ul:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  height: 1px;\n  background-color: #e7e7e7;\n  z-index: 1; }\n\n.ui-list > ul:after {\n  top: auto;\n  bottom: 0; }\n\n.ui-list > ul > li {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  background-color: #fff; }\n\n.ui-list > ul > li:not(:last-child) .ui-list-item-inner:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 1px;\n  background-color: #e7e7e7; }\n\n.ui-list-item {\n  padding-left: 0.15rem;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-self: center;\n  align-self: center; }\n\n.ui-list-item-inner {\n  position: relative;\n  min-height: 0.15rem;\n  padding: 0.1rem 0.15rem 0.1rem 0;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1;\n  color: #333;\n  font-size: .15rem;\n  overflow: hidden; }\n\n.ui-list-l .ui-list-item-inner {\n  padding-top: 0.15rem;\n  padding-bottom: 0.15rem; }\n\n.ui-list-item-link, .ui-list-item-link:active {\n  color: inherit; }\n\n.ui-list-item-link .ui-list-item-inner {\n  padding-right: 0.3rem; }\n\n.ui-list-item-link:after {\n  content: '';\n  position: absolute;\n  height: 100%;\n  width: 0.3rem;\n  right: 0;\n  top: 0;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM0QzFDNzMyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM0QzFDNzQyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzRDMUM3MTJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzRDMUM3MjJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pjs2Bb4AAAItSURBVHjazJhbK0RRGIb3DIOU/AG5kUTOgxmHceFGKf6BO+Vf+E8KKYcYg3FuMpNIDhFJXJAcp/GtvKumrzVs+zBrvfU2u689q6d3rb33+lYgl8tZvymZ3JOX7eQp8gT50fJA0Wj4z3tKbY5VR14hV5ObyWLkZ6sICtq4p4V8CjihevIWucoUQJFUmtUayTvkShMAL5DiGqs3IMlK3YBSgwrIZkBWmAAoIRMKyG2/IIMO/hMjbygepCS53ARAoQHyOqu1YbrLTADMAXJbASmSDOkGlOpTQHaQN72CdAuYBeQuq4cBWaIbUEJGC0Am3UIGPVoqMsk9Vu/CwxTQDSj0iSQPWD2C6Q7oBhT6AmRKAZkwAVDoowBkn+LdqQVQ6A2QhwrIuAmAEjKi2KrF/jPdfgIKveI7Pcfq/eSMCYBSD4pakymA0+RxVrsn15oAOEMeY7Vbcif5ys4ApT7CzZJHWO2G3I1fSyfgPHmY1a7x6bvT/ZpZUMBdOoHzI8El8pCiK+wq8CQXNcFlBdw51tyD00G9SnAVHV++zgDn6hzHiwTjCrgTTKvrQya3Ca5jA5CvY3IP+UlnTxJEb8zhjpDck1cL20mCAcBFWD2D2ovOvjiERojDpTGtnsL9N8EQegt+LJrC5vRN59lMORp0DrePNH2BswvYivXVzuoHSO7dz+2QHcAa6+eMOl87WHOffm8m7QCK7foog+tFi2mZACg3npPkRUxrtkitgvUtwAA5A3LWdzPizwAAAABJRU5ErkJggg==);\n  -webkit-background-size: 0.14rem 0.14rem;\n  background-size: 0.14rem;\n  background-repeat: no-repeat;\n  background-position: center center; }\n\n.ui-list-item-title {\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  font-size: .17rem;\n  width: 0; }\n\n.ui-list-item-media {\n  padding: 0.1rem 0;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-self: center;\n  align-self: center;\n  margin-right: 0.15rem; }\n\n.ui-list-item-after {\n  margin-left: 0.05rem;\n  font-size: .17rem; }\n\n.ui-list-item-title-row {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex; }\n\n.ui-list-media .ui-list-item-inner {\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.ui-list-media .ui-list-item {\n  /* -webkit-box-align: stretch;*/ }\n\n.ui-list-item-text {\n  padding-top: .03rem;\n  color: #666;\n  line-height: 1.25; }\n\n.ui-list-form .ui-list-item-label {\n  width: 35%;\n  color: #444; }\n\n.ui-list-form .ui-list-item-input-wrap {\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1;\n  width: 0%;\n  color: #777; }\n  .ui-list-form .ui-list-item-input-wrap .ui-list-item-input, .ui-list-form .ui-list-item-input-wrap .ui-list-item-textarea {\n    display: block;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    width: 100%;\n    border: none;\n    color: #777; }\n  .ui-list-form .ui-list-item-input-wrap .ui-list-item-textarea {\n    resize: none;\n    height: .65rem; }\n\n.ui-list-card .ui-list-item {\n  margin: .1rem 0; }\n\n.ui-list-card > ul:after,\n.ui-list-card > ul:before,\n.ui-list-card > ul > li:not(:last-child) .ui-list-item-inner:after {\n  content: none; }\n\n.ui-list-card > ul > li:before {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: auto;\n  height: 1px;\n  background-color: #e7e7e7;\n  z-index: 1;\n  -webkit-transform-origin: 0% 50%;\n  transform-origin: 0% 50%; }\n  @media only screen and (-webkit-min-device-pixel-ratio: 2) {\n    .ui-list-card > ul > li:before {\n      -webkit-transform: scaleY(0.5);\n      transform: scaleY(0.5); } }\n  @media only screen and (-webkit-min-device-pixel-ratio: 3) {\n    .ui-list-card > ul > li:before {\n      -webkit-transform: scaleY(0.33);\n      transform: scaleY(0.33); } }\n\n.ui-list-card > ul > li:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: auto;\n  height: 1px;\n  background-color: #e7e7e7;\n  z-index: 1;\n  -webkit-transform-origin: 0% 50%;\n  transform-origin: 0% 50%; }\n  @media only screen and (-webkit-min-device-pixel-ratio: 2) {\n    .ui-list-card > ul > li:after {\n      -webkit-transform: scaleY(0.5);\n      transform: scaleY(0.5); } }\n  @media only screen and (-webkit-min-device-pixel-ratio: 3) {\n    .ui-list-card > ul > li:after {\n      -webkit-transform: scaleY(0.33);\n      transform: scaleY(0.33); } }\n\n.ui-timeline {\n  padding: 0.1rem; }\n\n.ui-timeline-container {\n  position: relative; }\n  .ui-timeline-container:before {\n    content: '';\n    position: absolute;\n    top: 0px;\n    bottom: 0;\n    width: .02rem;\n    background: #ddd;\n    left: .32rem;\n    margin: 0;\n    border-radius: .02rem; }\n  .ui-timeline-container > li {\n    position: relative;\n    margin-bottom: .15rem; }\n\n.ui-timeline-container > li:before,\n.ui-timeline-container > li:after {\n  content: \" \";\n  display: table; }\n\n.ui-timeline-container > li:after {\n  clear: both; }\n\n.ui-timeline-container > li > .ui-timeline-item {\n  margin-top: 0px;\n  background: #fff;\n  color: #444;\n  margin-left: .6rem;\n  padding: 0;\n  position: relative; }\n\n.ui-timeline-container > li > .ui-timeline-item:after {\n  border-radius: 6px;\n  border: 1px solid #c8c7cc;\n  display: block;\n  content: '';\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  -webkit-transform-origin: 0 0;\n  -webkit-transform: scale(1);\n  pointer-events: none; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-time {\n  color: #999;\n  float: right;\n  padding: .1rem;\n  font-size: .12rem; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-header {\n  margin: 0;\n  color: #555;\n  padding: .1rem;\n  font-size: 0.875em;\n  position: relative; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-header:after {\n  border-bottom: 1px solid #ddd;\n  display: block;\n  content: '';\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  -webkit-transform-origin: 0 0;\n  -webkit-transform: scale(1);\n  pointer-events: none; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-body,\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-footer {\n  padding: .1rem;\n  font-size: 0.875em; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-footer {\n  background-color: #f4f4f4; }\n\n.ui-timeline-container > li.ui-time-label > span {\n  padding: .05rem;\n  display: inline-block;\n  background-color: #d2d6de;\n  border-radius: 4px;\n  color: #ffffff; }\n\n.ui-timeline-container > li > .ui-time-label {\n  width: .5rem;\n  height: .3rem;\n  font-size: 0.75em;\n  line-height: .3rem;\n  position: absolute;\n  color: #ffffff;\n  background: #d2d6de;\n  text-align: center;\n  left: .08rem;\n  top: 0;\n  border-radius: 4px; }\n\n.ui-timeline-container > li > .ui-iconfont {\n  width: .3rem;\n  height: .3rem;\n  font-size: .15rem;\n  line-height: .3rem;\n  position: absolute;\n  color: #ffffff;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: .18rem;\n  top: 0; }\n\n.ui-toolbar {\n  position: relative;\n  height: 0.44rem;\n  background-color: #00479d;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  color: #fff;\n  line-height: 0.44rem; }\n\n.ui-toolbar > .ui-fn-left,\n.ui-toolbar > .ui-fn-right {\n  position: relative;\n  z-index: 9;\n  padding: 0 0.1rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-toolbar-title {\n  position: absolute;\n  width: 100%;\n  font-size: .17rem;\n  font-weight: normal;\n  line-height: 0.44rem;\n  text-align: center;\n  white-space: nowrap;\n  top: 0;\n  left: 0; }\n\n.ui-toolbar .ui-toolbar-btn {\n  position: relative;\n  display: inline-block;\n  font-size: .14rem;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  cursor: pointer;\n  padding: .06rem;\n  min-width: .5rem;\n  border-radius: 3px;\n  color: #00479d;\n  background-color: #fff;\n  border: none;\n  outline: none;\n  margin-top: .09rem; }\n\n.ui-toolbar-btn.ui-active, .ui-toolbar-btn:active {\n  color: #fff;\n  background-color: #00306a; }\n\n.ui-toolbar .ui-icon {\n  font-size: .32rem;\n  color: #fff;\n  line-height: 0.44rem;\n  vertical-align: top; }\n\n.ui-toolbar a {\n  color: #fff; }\n\n.ui-toolbar .ui-btn-link {\n  top: 0;\n  padding: 0;\n  font-size: .16rem;\n  line-height: 0.44rem;\n  color: #fff;\n  background-color: transparent;\n  border: none; }\n\n.ui-toolbar .ui-mtab {\n  top: .09rem;\n  margin: 0 0.1rem; }\n\n.ui-mtab {\n  position: relative;\n  display: table;\n  table-layout: fixed;\n  overflow: hidden; }\n\n.ui-mtab .ui-mtab-item {\n  display: table-cell;\n  width: 1%;\n  font-size: .14rem;\n  line-height: 1.8;\n  color: #00479d;\n  text-align: center;\n  border: 1px solid #00306a;\n  background-color: #fff; }\n  .ui-mtab .ui-mtab-item:first-child {\n    border-top-left-radius: 3px;\n    border-bottom-left-radius: 3px; }\n  .ui-mtab .ui-mtab-item:last-child {\n    border-top-right-radius: 3px;\n    border-bottom-right-radius: 3px; }\n  .ui-mtab .ui-mtab-item.ui-active {\n    color: #fff;\n    background-color: #00306a; }\n  .ui-mtab .ui-mtab-item:not(.ui-active):active {\n    background-color: #005ed0; }\n  .ui-mtab .ui-mtab-item:not(:last-child) {\n    border-right: none; }\n\n.ui-nav {\n  width: 100%;\n  font-size: .16rem;\n  position: relative;\n  text-align: center;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-nav .ui-nav-main {\n  height: .45rem;\n  line-height: .45rem;\n  background-color: #00479d;\n  padding: 0 .6rem 0 0;\n  margin: 0; }\n\n.ui-nav .ui-nav-main.ui-nav-3 .ui-nav-item {\n  width: 33.333%; }\n\n.ui-nav .ui-nav-main .ui-nav-item {\n  float: left;\n  width: 20%; }\n\n.ui-nav .ui-nav-main .ui-nav-item a {\n  display: block;\n  color: #fff; }\n\n.ui-nav .ui-nav-btn {\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: .6rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-nav .ui-nav-btn .ui-icon {\n  color: #fff;\n  font-size: .32rem;\n  display: block;\n  line-height: .45rem; }\n\n.ui-nav-sub {\n  min-width: .6rem;\n  position: absolute;\n  top: 100%;\n  right: 0;\n  z-index: 99; }\n  .ui-nav-sub > li {\n    border-top: 1px solid #fff; }\n    .ui-nav-sub > li > a {\n      display: block;\n      height: .32rem;\n      line-height: .36rem;\n      background: #00479d;\n      color: #fff;\n      text-align: center;\n      padding: 0 .06rem; }\n\n.ui-badge, .ui-badge-muted, .ui-badge-num, .ui-badge-corner, .ui-badge-cornernum {\n  display: inline-block;\n  text-align: center;\n  background: #f74c31;\n  color: #fff;\n  font-size: .11rem;\n  line-height: .16rem;\n  border-radius: .08rem;\n  padding: 0 .06rem;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box; }\n\n.ui-badge-muted {\n  background: #b6cae0; }\n\n.ui-badge-num {\n  height: .19rem;\n  line-height: .2rem;\n  font-size: .12rem;\n  min-width: .19rem;\n  border-radius: .1rem; }\n\n.ui-badge-wrap {\n  position: relative;\n  text-align: center; }\n\n.ui-badge-corner {\n  position: absolute;\n  height: .2rem;\n  line-height: .2rem;\n  top: -.03rem;\n  right: -.08rem; }\n\n.ui-badge-cornernum {\n  position: absolute;\n  height: .19rem;\n  line-height: .19rem;\n  font-size: .12rem;\n  border-radius: .1rem;\n  top: -.05rem;\n  right: -.05rem; }\n\n.ui-badge-dot {\n  display: inline-block;\n  width: .08rem;\n  height: .08rem;\n  background: #ff2600;\n  border-radius: .1rem; }\n\n.ui-reddot, .ui-reddot-border, .ui-reddot-s {\n  position: relative;\n  display: inline-block;\n  line-height: .22rem;\n  padding: 0 .06rem; }\n  .ui-reddot:after, .ui-reddot-border:after, .ui-reddot-s:after {\n    content: '';\n    position: absolute;\n    display: block;\n    width: .08rem;\n    height: .08rem;\n    background-color: #ff2600;\n    border-radius: 50%;\n    right: -.03rem;\n    top: -.03rem;\n    -webkit-background-clip: padding-box;\n    background-clip: padding-box; }\n\n.ui-reddot-static {\n  display: block;\n  width: .08rem;\n  height: .08rem;\n  padding: 0; }\n  .ui-reddot-static:after {\n    top: 0;\n    right: 0; }\n\n/* 带白边的 */\n.ui-reddot-border:before {\n  content: '';\n  position: absolute;\n  display: block;\n  width: .08rem;\n  height: .08rem;\n  background-color: #fff;\n  border-radius: 50%;\n  right: -.04rem;\n  top: -.04rem;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  padding: .01rem; }\n\n/* 小号的 */\n.ui-reddot-s:after {\n  width: .06rem;\n  height: .06rem;\n  top: -.05rem;\n  right: -.05rem; }\n\n.ui-category {\n  text-align: center;\n  padding-bottom: 0.12rem;\n  background-color: #fff; }\n  .ui-category:after {\n    visibility: hidden;\n    display: block;\n    font-size: 0;\n    content: \" \";\n    clear: both;\n    height: 0; }\n\n.ui-category-item {\n  width: 25%;\n  padding: 0.12rem 0 0;\n  float: left;\n  color: #333;\n  font-size: 0.14rem;\n  position: relative;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-category-4 {\n  width: 25%; }\n\n.ui-category-5 {\n  width: 20%; }\n\n.ui-category .ui-category-icon {\n  display: block;\n  border-radius: 0.03rem;\n  width: 0.44rem;\n  height: 0.44rem;\n  margin: .08rem auto;\n  position: relative; }\n\n.ui-category .ui-category-label {\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\n.ui-category-item .ui-icon {\n  color: #fff;\n  display: block;\n  line-height: 0.44rem;\n  font-size: .32rem; }\n\n.ui-category-item .ui-badge-cornernum {\n  top: 10%;\n  left: 65%;\n  right: auto; }\n\n.ui-navbar {\n  position: relative;\n  display: table;\n  table-layout: fixed;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 0;\n  background-color: #f8f8f8;\n  min-height: 0.45rem;\n  border-top: 1px solid #e0e0e0; }\n\n.ui-navbar .ui-navbar-item {\n  display: table-cell;\n  width: 1%;\n  color: #999;\n  text-align: center;\n  vertical-align: middle;\n  padding: .03rem 0 .03rem; }\n\n.ui-navbar .ui-navbar-item.ui-active, .ui-navbar .ui-navbar-item:active {\n  color: #00479d; }\n\n.ui-navbar .ui-navbar-item .ui-icon {\n  position: relative;\n  font-size: .3rem;\n  line-height: .3rem; }\n\n.ui-navbar .ui-navbar-item .ui-navbar-item-label {\n  display: block;\n  font-size: .12rem;\n  line-height: 1.25; }\n\n.ui-nav-content {\n  height: 100%;\n  width: 100%;\n  overflow: hidden; }\n  .ui-nav-content > ul {\n    position: relative;\n    width: 200%;\n    height: 100%;\n    overflow: hidden;\n    -webkit-transition: all 300ms ease-out 0s;\n    transition: all 300ms ease-out 0s; }\n    .ui-nav-content > ul > li {\n      position: absolute;\n      left: 0;\n      top: 0;\n      width: 50%;\n      height: 100%;\n      overflow: auto;\n      z-index: 0;\n      background-color: #f8f8f8; }\n      .ui-nav-content > ul > li:first-child {\n        z-index: 1; }\n      .ui-nav-content > ul > li.ui-show ~ li.ui-show {\n        left: 50%; }\n      .ui-nav-content > ul > li.ui-show, .ui-nav-content > ul > li.ui-active {\n        z-index: 10; }\n\n.ui-no-animation {\n  -webkit-transition-duration: 0s !important;\n  transition-duration: 0s !important; }\n\n.ui-nav-content-right {\n  -webkit-transform: translate3d(-50%, 0, 0);\n  transform: translate3d(-50%, 0, 0); }\n\n.ui-picker {\n  height: 2rem;\n  width: 100%;\n  background-color: #ddd;\n  position: relative;\n  overflow: hidden; }\n\n.ui-picker-selectbox {\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  height: 0.36rem;\n  margin-top: -0.18rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  border-bottom: 1px solid #ccc;\n  border-top: 1px solid #ccc; }\n\n.ui-picker ul {\n  height: 0.36rem;\n  margin-top: -0.18rem;\n  position: absolute;\n  top: 50%;\n  width: 100%;\n  -webkit-transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n  transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n  -webkit-transition: 150ms ease-out;\n  transition: 150ms ease-out;\n  /* 动画效果 */\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n  /* 3d位空间显示 */ }\n\n.ui-picker ul li {\n  line-height: 0.36rem;\n  text-align: center;\n  position: absolute;\n  top: 0;\n  width: 90%;\n  left: 5%;\n  height: 0.36rem;\n  overflow: hidden;\n  visibility: hidden;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\n.ui-picker ul li.ui-visible {\n  visibility: visible; }\n\n.ui-picker ul li.ui-highlight {\n  color: #000; }\n\n.ui-noanimate {\n  -webkit-transition: none !important;\n  transition: none !important; }\n\n.ui-poppicker {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  -webkit-transform: translateY(3rem);\n  transform: translateY(3rem);\n  -webkit-transition: 300ms ease-out;\n  transition: 300ms ease-out;\n  /* 动画效果 */\n  z-index: 9999; }\n\n.ui-poppicker.ui-active {\n  -webkit-transform: translateY(0px);\n  transform: translateY(0px); }\n\n.ui-poppicker-body .ui-picker {\n  float: left; }\n\n.ui-dtpicker .ui-picker {\n  float: left;\n  width: 20%; }\n\n.ui-picker-backup {\n  position: fixed;\n  z-index: 998;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background-color: rgba(0, 0, 0, 0.3); }\n\n.ui-poppicker {\n  background-color: #eee; }\n\n.ui-poppicker-header {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 0.06rem;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  justify-content: space-between; }\n\n.ui-poppicker-header button {\n  display: block; }\n\n.ui-poppicker-title {\n  overflow: hidden; }\n  .ui-poppicker-title label {\n    float: left;\n    width: 20%;\n    text-align: center;\n    border-top: 1px solid #ccc;\n    padding: 0.03rem 0;\n    border-bottom: 1px solid #ccc;\n    color: #999; }\n\n.ui-poppicker[data-type='date'] label, .ui-poppicker[data-type='date'] .ui-picker {\n  width: 33.33%; }\n\n.ui-poppicker[data-type='date'] .ui-dtpicker-h,\n.ui-poppicker[data-type='date'] .ui-dtpicker-mi,\n.ui-poppicker[data-type='date'] .ui-picker[data-id='picker-h'],\n.ui-poppicker[data-type='date'] .ui-picker[data-id='picker-mi'] {\n  display: none; }\n\n.ui-poppicker[data-type='time'] label, .ui-poppicker[data-type='time'] .ui-picker {\n  width: 50%; }\n\n.ui-poppicker[data-type='time'] .ui-dtpicker-y,\n.ui-poppicker[data-type='time'] .ui-dtpicker-m,\n.ui-poppicker[data-type='time'] .ui-dtpicker-d,\n.ui-poppicker[data-type='time'] .ui-picker[data-id='picker-y'],\n.ui-poppicker[data-type='time'] .ui-picker[data-id='picker-m'],\n.ui-poppicker[data-type='time'] .ui-picker[data-id='picker-d'] {\n  display: none; }\n\n.ui-poppicker[data-type='hour'] label, .ui-poppicker[data-type='hour'] .ui-picker {\n  width: 25%; }\n\n.ui-poppicker[data-type='hour'] .ui-dtpicker-mi,\n.ui-poppicker[data-type='hour'] .ui-picker[data-id='picker-mi'] {\n  display: none; }\n\n.ui-poppicker[data-type='month'] label, .ui-poppicker[data-type='month'] .ui-picker {\n  width: 50%; }\n\n.ui-poppicker[data-type='month'] .ui-dtpicker-d,\n.ui-poppicker[data-type='month'] .ui-dtpicker-h,\n.ui-poppicker[data-type='month'] .ui-dtpicker-mi,\n.ui-poppicker[data-type='month'] .ui-picker[data-id='picker-d'],\n.ui-poppicker[data-type='month'] .ui-picker[data-id='picker-h'],\n.ui-poppicker[data-type='month'] .ui-picker[data-id='picker-mi'] {\n  display: none; }\n\n.ui-pages,\n.ui-page {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  overflow: hidden;\n  z-index: 0; }\n\n.ui-page-iframe {\n  height: 100%;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n  border: none; }\n\n.ui-page {\n  background-color: #f8f8f8;\n  display: none; }\n\n.ui-welcome-page {\n  z-index: 20;\n  display: block; }\n\n.ui-page.ui-show {\n  z-index: 10;\n  display: block; }\n\n.ui-page:first-child {\n  z-index: 1;\n  display: block; }\n\n.ui-page.ui-anim {\n  -webkit-animation-duration: 300ms;\n  animation-duration: 300ms;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n  -webkit-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out; }\n\n@-webkit-keyframes slideRightIn {\n  0% {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); }\n  100% {\n    -webkit-transform: translate3d(0%, 0, 0);\n    transform: translate3d(0%, 0, 0); } }\n\n@-webkit-keyframes slideRightOut {\n  0% {\n    -webkit-transform: translate3d(0%, 0, 0);\n    transform: translate3d(0%, 0, 0); }\n  100% {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); } }\n\n.ui-slideRightOut {\n  -webkit-animation-name: slideRightOut;\n  animation-name: slideRightOut; }\n\n.ui-slideRightIn {\n  -webkit-animation-name: slideRightIn;\n  animation-name: slideRightIn; }\n\n/*进度条*/\n.ipu-ui-progress {\n  overflow: hidden;\n  width: 100%;\n  height: 0.02rem;\n  font-size: 0;\n  line-height: 0;\n  background-color: #e2e2e2;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ipu-ui-progress span {\n  display: block;\n  width: 100%;\n  height: 100%;\n  font-size: 0;\n  line-height: 0;\n  background: #00479d;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0); }\n\n.ui-progressbar-success span {\n  background-color: #4cd964; }\n\n.ui-progressbar-warning span {\n  background-color: #ff4222; }\n\n.ui-progressbar-highlight span {\n  background-color: #ff8444; }\n\n.ui-carousel {\n  width: 100%;\n  overflow: hidden;\n  position: relative; }\n\n.ui-carousel-wrapper {\n  width: 2000%;\n  /*默认20倍*/\n  overflow: hidden;\n  /* 撑起高度 */ }\n\n.ui-carousel-wrapper > li {\n  float: left;\n  width: 5%; }\n\n.ui-carousel-indicator {\n  position: absolute;\n  bottom: .15rem;\n  right: .15rem; }\n\n.ui-carousel-indicator li {\n  float: left;\n  width: .1rem;\n  height: .1rem;\n  border-radius: 50%;\n  background-color: #fff;\n  margin: 0 .035rem; }\n\n.ui-carousel-indicator li.ui-active {\n  background-color: #666; }\n\n.ui-carousel-animate {\n  -webkit-transition: all 200ms ease-out 100ms;\n  transition: all 200ms ease-out 100ms; }\n\n.ui-hammer-carousel .ui-carousel-wrapper {\n  font-size: 0;\n  position: relative;\n  white-space: nowrap;\n  display: block;\n  width: auto;\n  overflow: visible; }\n  .ui-hammer-carousel .ui-carousel-wrapper > li {\n    position: relative;\n    display: inline-block;\n    width: 100%;\n    font-size: 0.15rem;\n    vertical-align: top;\n    white-space: normal;\n    float: none; }\n\n.ui-modal-overlay, .ui-preloader-indicator-overlay, .ui-popup-overlay {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.4);\n  z-index: 10600;\n  visibility: hidden;\n  opacity: 0;\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms; }\n  .ui-modal-overlay.ui-modal-overlay-visible, .ui-preloader-indicator-overlay.ui-modal-overlay-visible, .ui-popup-overlay.ui-modal-overlay-visible {\n    visibility: visible;\n    opacity: 1; }\n\n.ui-popup-overlay {\n  z-index: 10200; }\n\n.ui-modal {\n  position: absolute;\n  width: 2.7rem;\n  z-index: 11000;\n  top: 50%;\n  left: 50%;\n  margin-left: -1.35rem;\n  margin-top: 0;\n  text-align: center;\n  border-radius: 7px;\n  opacity: 0;\n  -webkit-transform: translate3d(0, 0, 0) scale(1.185);\n  transform: translate3d(0, 0, 0) scale(1.185);\n  -webkit-transition-property: opacity, -webkit-transform;\n  transition-property: opacity, -webkit-transform;\n  transition-property: transform, opacity;\n  transition-property: transform, opacity, -webkit-transform;\n  color: #333;\n  display: none; }\n  .ui-modal.ui-modal-in {\n    opacity: 1;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transform: translate3d(0, 0, 0) scale(1);\n    transform: translate3d(0, 0, 0) scale(1); }\n  .ui-modal.ui-modal-out {\n    opacity: 0;\n    z-index: 10999;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transform: translate3d(0, 0, 0) scale(0.815);\n    transform: translate3d(0, 0, 0) scale(0.815); }\n\n.ui-modal-inner {\n  padding: 0.15rem;\n  border-bottom: 1px solid #b5b5b5;\n  border-radius: 7px 7px 0 0;\n  position: relative;\n  background: #e8e8e8; }\n\n.ui-modal-title {\n  font-weight: 500;\n  font-size: 0.18rem;\n  text-align: center; }\n  .ui-modal-title + .ui-modal-text {\n    margin-top: 0.05rem; }\n\n.ui-modal-buttons {\n  height: 0.44rem;\n  overflow: hidden;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  justify-content: center; }\n  .ui-modal-buttons.ui-modal-buttons-vertical {\n    display: block;\n    height: auto; }\n\n.ui-modal-button {\n  width: 100%;\n  padding: 0 .05rem;\n  height: 0.44rem;\n  font-size: 0.17rem;\n  line-height: 0.44rem;\n  text-align: center;\n  color: #00479d;\n  background: #e8e8e8;\n  display: block;\n  position: relative;\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  cursor: pointer;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  border-right: 1px solid #b5b5b5;\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1; }\n  .ui-modal-button:first-child {\n    border-radius: 0 0 0 7px; }\n  .ui-modal-button:last-child {\n    border-right: none;\n    border-radius: 0 0 7px 0; }\n  .ui-modal-button:first-child:last-child {\n    border-radius: 0 0 7px 7px; }\n  .ui-modal-button.ui-modal-button-bold {\n    font-weight: 500; }\n  html:not(.ui-watch-active-state) .ui-modal-button:active, .ui-modal-button.active-state {\n    background: #d4d4d4; }\n  .ui-modal-buttons-vertical .ui-modal-button {\n    border-right: none;\n    border-top: none;\n    border-bottom: 1px solid #b5b5b5;\n    border-radius: 0; }\n    .ui-modal-buttons-vertical .ui-modal-button:last-child {\n      border-radius: 0 0 7px 7px;\n      border-bottom: none; }\n\n.ui-modal-no-buttons .ui-modal-inner {\n  border-radius: 7px;\n  border-bottom: none; }\n\n.ui-modal-no-buttons .ui-modal-buttons {\n  display: none; }\n\n.ui-actions-modal {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  z-index: 11000;\n  width: 100%;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n  .ui-actions-modal.ui-modal-in {\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .ui-actions-modal.ui-modal-out {\n    z-index: 10999;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n\n.ui-actions-modal-group {\n  margin: .08rem; }\n\n.ui-actions-modal-button, .ui-actions-modal-label {\n  width: 100%;\n  text-align: center;\n  font-weight: normal;\n  margin: 0;\n  background: rgba(243, 243, 243, 0.95);\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: block;\n  position: relative;\n  border-bottom: 1px solid #d2d2d6; }\n  .ui-actions-modal-button.ui-actions-modal-button-bold, .ui-actions-modal-label.ui-actions-modal-button-bold {\n    font-weight: 500; }\n  .ui-actions-modal-button.ui-actions-modal-button-warning, .ui-actions-modal-label.ui-actions-modal-button-warning {\n    color: #ff4222; }\n  .ui-actions-modal-button.ui-color-warning, .ui-actions-modal-label.ui-color-warning {\n    color: #ff4222; }\n  .ui-actions-modal-button.ui-bg-warning, .ui-actions-modal-label.ui-bg-warning {\n    background: #ff4222;\n    color: white; }\n    .ui-actions-modal-button.ui-bg-warning:active, .ui-actions-modal-label.ui-bg-warning:active {\n      background: #ee2200; }\n  .ui-actions-modal-button:first-child, .ui-actions-modal-label:first-child {\n    border-radius: 4px 4px 0 0; }\n  .ui-actions-modal-button:last-child, .ui-actions-modal-label:last-child {\n    border-bottom: none;\n    border-radius: 0 0 4px 4px; }\n  .ui-actions-modal-button:first-child:last-child, .ui-actions-modal-label:first-child:last-child {\n    border-radius: 4px; }\n  .ui-actions-modal-button.ui-disabled, .ui-actions-modal-label.ui-disabled {\n    opacity: 0.95;\n    color: #8e8e93; }\n\n.ui-actions-modal-button {\n  cursor: pointer;\n  line-height: .43rem;\n  font-size: .2rem;\n  color: #00479d; }\n  .ui-actions-modal-button:active, .ui-actions-modal-button.ui-active-state {\n    background: #dcdcdc; }\n\n.ui-actions-modal-label {\n  font-size: .14rem;\n  line-height: 1.3;\n  min-height: .44rem;\n  padding: .08rem .1rem;\n  color: #666;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  justify-content: center;\n  -ms-flex-line-pack: center;\n  -webkit-align-content: center;\n  align-content: center;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\ninput.ui-modal-text-input {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  height: .30rem;\n  background: #fff;\n  margin: 0;\n  margin-top: .15rem;\n  padding: 0 .05rem;\n  border: 1px solid #a0a0a0;\n  border-radius: 5px;\n  width: 100%;\n  font-size: .14rem;\n  font-family: inherit;\n  display: block;\n  -webkit-box-shadow: 0 0 0 transparent;\n  box-shadow: 0 0 0 transparent;\n  -webkit-appearance: none;\n  appearance: none; }\n  input.ui-modal-text-input + input.ui-modal-text-input {\n    margin-top: .05rem; }\n  input.ui-modal-text-input.ui-modal-text-input-double {\n    border-radius: 5px 5px 0 0; }\n    input.ui-modal-text-input.ui-modal-text-input-double + input.ui-modal-text-input {\n      margin-top: 0;\n      border-top: 0;\n      border-radius: 0 0 5px 5px; }\n\n.ui-popup, .ui-login-screen {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 10400;\n  background: #fff;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: none;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: -webkit-transform;\n  transition-property: transform;\n  transition-property: transform, -webkit-transform;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n  .ui-popup.ui-modal-in, .ui-popup.ui-modal-out, .ui-login-screen.ui-modal-in, .ui-login-screen.ui-modal-out {\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms; }\n  .ui-popup.ui-modal-in, .ui-login-screen.ui-modal-in {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .ui-popup.ui-modal-out, .ui-login-screen.ui-modal-out {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n\nhtml.ui-with-statusbar-overlay .ui-popup {\n  height: -webkit-calc(100% - 20px);\n  height: calc(100% - 20px);\n  top: 20px; }\n\nhtml.ui-with-statusbar-overlay .ui-popup-overlay {\n  z-index: 9800; }\n\n@media all and (max-width: 629px), (max-height: 629px) {\n  html.ui-with-statusbar-overlay .ui-popup {\n    height: -webkit-calc(100% - 20px);\n    height: calc(100% - 20px);\n    top: 20px; }\n  html.ui-with-statusbar-overlay .ui-popup-overlay {\n    z-index: 9800; } }\n\n.ui-modal .ui-preloader {\n  width: .34rem;\n  height: .34rem; }\n\n.ui-preloader-indicator-overlay {\n  visibility: visible;\n  opacity: 0;\n  background: none; }\n\n.ui-preloader-indicator-modal {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  padding: .08rem;\n  margin-left: -.25rem;\n  margin-top: -.25rem;\n  background: rgba(0, 0, 0, 0.8);\n  z-index: 11000;\n  border-radius: 5px; }\n  .ui-preloader-indicator-modal .ui-preloader {\n    display: block;\n    width: .34rem;\n    height: .34rem; }\n\n.ui-toast {\n  background: rgba(0, 0, 0, 0.8);\n  border-radius: 20px;\n  color: white;\n  padding: 0 .16rem;\n  height: .4rem;\n  line-height: .4rem;\n  font-size: .16rem;\n  width: auto; }\n\n/* === Preloader === */\n.ui-preloader {\n  display: inline-block;\n  width: 1rem;\n  height: 1rem;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: ui-preloader-spin 1s steps(12, end) infinite;\n  animation: ui-preloader-spin 1s steps(12, end) infinite; }\n\n.ui-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  -webkit-background-size: 100% 100%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.ui-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n.ui-refresh-wrapper {\n  position: relative;\n  min-height: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n  .ui-refresh-wrapper .ui-refresh-loading {\n    display: inline-block;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    height: .2rem;\n    width: .2rem;\n    border-radius: 100%;\n    border: 0.02rem solid #666;\n    border-bottom-color: transparent;\n    vertical-align: middle;\n    -webkit-animation: ui-rotate 0.75s linear infinite;\n    animation: ui-rotate 0.75s linear infinite; }\n\n.ui-refresh-top {\n  top: -0.4rem;\n  position: absolute;\n  left: 0;\n  right: 0;\n  line-height: 0.4rem;\n  height: 0.4rem;\n  text-align: center;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n  .ui-refresh-top.ui-refresh-top-loading .ui-refresh-loading {\n    display: inline-block; }\n  .ui-refresh-top.ui-refresh-top-loading .ui-refresh-arrow {\n    display: none; }\n  .ui-refresh-top .ui-refresh-loading {\n    display: none; }\n  .ui-refresh-top.ui-refresh-toload .ui-refresh-arrow {\n    -webkit-transform: rotate(180deg) translate3d(0, 0, 0);\n    transform: rotate(180deg) translate3d(0, 0, 0); }\n\n.ui-refresh-bottom {\n  display: none;\n  position: static;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  right: 0;\n  line-height: 0.4rem;\n  height: 0.4rem;\n  text-align: center; }\n\n.ui-refresh-content {\n  overflow: auto; }\n\n.ui-refresh-arrow {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 0.13rem;\n  height: 0.2rem;\n  margin-left: -0.065rem;\n  margin-top: -0.1rem;\n  background: no-repeat center;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2026%2040'%3E%3Cpolygon%20points%3D'9%2C22%209%2C0%2017%2C0%2017%2C22%2026%2C22%2013.5%2C40%200%2C22'%20fill%3D'%238c8c8c'%2F%3E%3C%2Fsvg%3E\");\n  -webkit-background-size: contain;\n  background-size: contain;\n  -webkit-transform: rotate(0deg) translate3d(0, 0, 0);\n  transform: rotate(0deg) translate3d(0, 0, 0);\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms; }\n\n.ui-tab-title {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  background-color: #fff; }\n  .ui-tab-title > li {\n    width: 0%;\n    -webkit-box-flex: 1;\n    -webkit-flex-grow: 1;\n    flex-grow: 1;\n    text-align: center;\n    line-height: 0.45rem;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box; }\n    .ui-tab-title > li.active {\n      position: relative; }\n\n.ui-tab-title-link > li {\n  border-bottom: 1px solid #e0e0e0; }\n  .ui-tab-title-link > li.ui-active {\n    border-bottom: 2px solid #00479d;\n    color: #00479d; }\n\n.ui-tab-title-button {\n  color: #00479d;\n  border: 1px solid #00479d;\n  border-radius: 0.03rem;\n  margin: .1rem; }\n  .ui-tab-title-button > li {\n    border-left: 1px solid #00479d;\n    font-size: 0.12rem;\n    line-height: 2; }\n    .ui-tab-title-button > li.ui-active {\n      background-color: #00479d;\n      color: #fff;\n      border-bottom: none; }\n    .ui-tab-title-button > li:first-child {\n      border-left: none; }\n    .ui-tab-title-button > li:last-child {\n      border-right: none; }\n\n.ui-tab-body-wrapper > li {\n  display: none; }\n  .ui-tab-body-wrapper > li.ui-active {\n    display: block; }\n\n.ui-tab-fixed {\n  position: relative;\n  height: 100%;\n  width: 100%;\n  overflow: hidden;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n  .ui-tab-fixed > .ui-tab-title {\n    -webkit-box-flex: 0;\n    -webkit-flex-grow: 0;\n    flex-grow: 0; }\n  .ui-tab-fixed > .ui-tab-body {\n    -webkit-box-flex: 1;\n    -webkit-flex-grow: 1;\n    flex-grow: 1;\n    position: relative; }\n    .ui-tab-fixed > .ui-tab-body > .ui-tab-body-wrapper {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      font-size: 0;\n      white-space: nowrap;\n      overflow-x: visible; }\n      .ui-tab-fixed > .ui-tab-body > .ui-tab-body-wrapper > li {\n        height: 100%;\n        font-size: 0.15rem;\n        display: inline-block;\n        white-space: normal;\n        vertical-align: top;\n        width: 100%;\n        overflow: auto; }\n\n.ui-fn-left {\n  float: left; }\n\n.ui-fn-right {\n  float: right; }\n\n.ui-fn-clear:after {\n  visibility: hidden;\n  display: block;\n  font-size: 0;\n  content: \" \";\n  clear: both;\n  height: 0; }\n\n.ui-fn-show {\n  display: block; }\n\n.ui-fn-hide {\n  display: none; }\n\n.ui-border-t {\n  border-top: 1px solid #dfe0e1; }\n\n.ui-border-b {\n  border-bottom: 1px solid #dfe0e1; }\n\n.ui-border-tb {\n  border-top: 1px solid #dfe0e1;\n  border-bottom: 1px solid #dfe0e1; }\n\n.ui-border-l {\n  border-left: 1px solid #dfe0e1; }\n\n.ui-border-r {\n  border-right: 1px solid #dfe0e1; }\n\n.ui-border {\n  border: 1px solid #dfe0e1; }\n\n.ui-bg-color-1 {\n  background: #ffa54b; }\n\n.ui-bg-color-2 {\n  background: #9bcd46; }\n\n.ui-bg-color-3 {\n  background: #9669e1; }\n\n.ui-bg-color-4 {\n  background: #41b9f5; }\n\n.ui-bg-color-5 {\n  background: #f57d6e; }\n\n.ui-bg-color-6 {\n  background: #fa82a5; }\n\n.ui-bg-color-7 {\n  background: #41c8cd; }\n\n.ui-bg-color-8 {\n  background: #5f9be6; }\n\n.ui-txt-color-1 {\n  color: #ffa54b; }\n\n.ui-txt-color-2 {\n  color: #9bcd46; }\n\n.ui-txt-color-3 {\n  color: #9669e1; }\n\n.ui-txt-color-4 {\n  color: #41b9f5; }\n\n.ui-txt-color-5 {\n  color: #f57d6e; }\n\n.ui-txt-color-6 {\n  color: #fa82a5; }\n\n.ui-txt-color-7 {\n  color: #41c8cd; }\n\n.ui-txt-color-8 {\n  color: #5f9be6; }\n\n.ui-fn-m {\n  margin: 0.1rem; }\n\n.ui-fn-m-lr {\n  margin-left: 0.1rem;\n  margin-right: 0.1rem; }\n\n.ui-fn-m-tb {\n  margin-top: 0.1rem;\n  margin-bottom: 0.1rem; }\n\n.ui-fn-m-t {\n  margin-top: 0.1rem; }\n\n.ui-fn-m-l {\n  margin-left: 0.1rem; }\n\n.ui-fn-m-r {\n  margin-right: 0.1rem; }\n\n.ui-fn-m-b {\n  margin-bottom: 0.1rem; }\n\n.ui-fn-p {\n  padding: 0.1rem; }\n\n.ui-fn-p-lr {\n  padding-left: 0.1rem;\n  padding-right: 0.1rem; }\n\n.ui-fn-p-tb {\n  padding-top: 0.1rem;\n  padding-bottom: 0.1rem; }\n\n.ui-fn-p-t {\n  padding-top: 0.1rem; }\n\n.ui-fn-p-l {\n  padding-left: 0.1rem; }\n\n.ui-fn-p-r {\n  padding-right: 0.1rem; }\n\n.ui-fn-p-b {\n  padding-bottom: 0.1rem; }\n\n.ui-fn-txt-row {\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\n/*# sourceMappingURL=ui.css.map */\n"],"sourceRoot":"/source/"}
1
{"version":3,"sources":["ui.css"],"names":[],"mappings":"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","file":"ui.min.css","sourcesContent":["@charset \"UTF-8\";\nhtml {\n  font-size: 85.33333px; }\n\n@media screen and (min-width: 320px) and (max-width: 350px) {\n  html {\n    font-size: 85.33333px; } }\n\n@media screen and (min-width: 350px) and (max-width: 375px) {\n  html {\n    font-size: 93.33333px; } }\n\n@media screen and (min-width: 375px) and (max-width: 384px) {\n  html {\n    font-size: 100px; } }\n\n@media screen and (min-width: 384px) and (max-width: 400px) {\n  html {\n    font-size: 102.4px; } }\n\n@media screen and (min-width: 400px) and (max-width: 414px) {\n  html {\n    font-size: 106.66667px; } }\n\n@media screen and (min-width: 414px) and (max-width: 450px) {\n  html {\n    font-size: 110.4px; } }\n\n@media screen and (min-width: 450px) and (max-width: 480px) {\n  html {\n    font-size: 120px; } }\n\n@media screen and (min-width: 480px) and (max-width: 520px) {\n  html {\n    font-size: 128px; } }\n\n@media screen and (min-width: 520px) and (max-width: 640px) {\n  html {\n    font-size: 138.66667px; } }\n\n@media screen and (min-width: 640px) {\n  html {\n    font-size: 170.66667px; } }\n\nbody, h1, h2, h3, h4, h5, h6, hr, p, blockquote,\ndl, dt, dd, ul, ol, li,\npre,\nfieldset, lengend, button, input, textarea,\nth, td {\n  margin: 0;\n  padding: 0; }\n\nh1, h2, h3, h4, h5, h6 {\n  font-weight: normal;\n  font-size: 100%; }\n\naddress, cite, dfn, em, var, i, strong {\n  font-style: normal; }\n\nul, ol {\n  list-style: none; }\n\na {\n  text-decoration: none; }\n\nfieldset, img {\n  border: none; }\n\nbutton, input, select, textarea {\n  font: inherit; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ncaption, th {\n  text-align: left; }\n\nins {\n  text-decoration: none; }\n\ndel {\n  text-decoration: line-through; }\n\n* {\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n  word-break: break-all; }\n\nhtml, body {\n  height: 100%;\n  position: relative; }\n\nbody {\n  font-family: Arial, Helvetica, sans-serif;\n  line-height: 1.5;\n  font-size: 0.15rem;\n  color: #666;\n  background-color: #f8f8f8;\n  -webkit-user-select: none; }\n\n/*\r\nbutton{\r\n    -webkit-appearance: none;\r\n    border: 0;\r\n    background: none;\r\n}\r\n*/\n:focus {\n  outline: 0;\n  -webkit-tap-highlight-color: transparent; }\n\na {\n  color: #00479d; }\n\na:active {\n  color: #00306a; }\n\nimg {\n  max-width: 100%; }\n\n.ui-txt-xxl {\n  font-size: 0.24rem; }\n\n.ui-txt-xl {\n  font-size: 0.2rem; }\n\n.ui-txt-l {\n  font-size: 0.17rem; }\n\n.ui-txt-m {\n  font-size: 0.15rem; }\n\n.ui-txt-s {\n  font-size: 0.14rem; }\n\n.ui-txt-xs {\n  font-size: 0.13rem; }\n\n.ui-txt-rl {\n  font-size: 1.2em; }\n\n.ui-txt-rs {\n  font-size: 0.85em; }\n\n.ui-txt-black {\n  color: #000; }\n\n.ui-txt-dark {\n  color: #333; }\n\n.ui-txt-default {\n  color: #666; }\n\n.ui-txt-gray {\n  color: #999; }\n\n.ui-txt-light {\n  color: #ccc; }\n\n.ui-txt-white {\n  color: #fff; }\n\n.ui-txt-primary {\n  color: #00479d; }\n\n.ui-txt-warning {\n  color: #ff4222; }\n\n.ui-txt-success {\n  color: #4cd964; }\n\n.ui-txt-highlight {\n  color: #ff8444; }\n\n.ui-txt-center {\n  text-align: center; }\n\n.ui-txt-left {\n  text-align: left; }\n\n.ui-txt-right {\n  text-align: right; }\n\n.ui-txt-justify {\n  text-align: justify; }\n\n@-webkit-keyframes ui-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  50% {\n    -webkit-transform: rotate(180deg);\n    transform: rotate(180deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes ui-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  50% {\n    -webkit-transform: rotate(180deg);\n    transform: rotate(180deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@-webkit-keyframes ui-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes ui-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n.ui-icon.fa:before {\n  font-size: .75em;\n  display: block;\n  min-height: 1.333em;\n  /*\r\n    min-width: 1.333em;*/\n  text-align: center; }\n\n.ui-icon.fa {\n  font-size: .32rem;\n  line-height: 100%; }\n\n.ui-btn {\n  display: inline-block;\n  position: relative;\n  min-width: 0.75rem;\n  padding: 0 0.075rem;\n  font-size: 0.14rem;\n  line-height: 2.4;\n  color: #fff;\n  text-align: center;\n  background-color: #00479d;\n  border: 0;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  border-radius: 0.03rem;\n  -webkit-appearance: none; }\n  .ui-btn:not(.ui-disabled):not(:disabled):active, .ui-btn.ui-active {\n    background: #00306a; }\n  .ui-btn.ui-disabled, .ui-btn:disabled {\n    opacity: .5; }\n  .ui-btn .ui-icon {\n    font-size: inherit;\n    line-height: inherit;\n    margin-right: .03rem; }\n\n.ui-btn-s {\n  padding: 0 0.06375rem;\n  min-width: 0.6375rem;\n  font-size: 0.119rem; }\n\n.ui-btn-l {\n  padding: 0 0.09rem;\n  min-width: 0.9rem;\n  font-size: 0.168rem; }\n\n.ui-btn-warning {\n  background-color: #ff4222; }\n  .ui-btn-warning:not(.ui-disabled):not(:disabled):active, .ui-btn-warning.ui-active {\n    background-color: #ee2200; }\n\n.ui-btn-highlight {\n  background-color: #ff8444; }\n  .ui-btn-highlight:not(.ui-disabled):not(:disabled):active, .ui-btn-highlight.ui-active {\n    background: #ff6211; }\n\n.ui-btn-success {\n  background-color: #4cd964; }\n  .ui-btn-success:not(.ui-disabled):not(:disabled):active, .ui-btn-success.ui-active {\n    background: #2ac845; }\n\n.ui-btn-block {\n  display: block;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-btn-wrap {\n  padding: .1rem;\n  overflow: auto; }\n\n.ui-img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto; }\n\n.ui-img-border {\n  border-radius: 0.03rem; }\n\n.ui-img-circle {\n  border-radius: 50%; }\n\n.ui-img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: .05rem;\n  border: 1px solid #dfe0e1;\n  border-radius: 0.03rem;\n  background-color: #fff;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-form {\n  background-color: #fff;\n  border-top: 1px solid #e0e0e0; }\n\n.ui-form-item {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  position: relative;\n  font-size: 0.15rem;\n  padding: 0.1rem 0.15rem 0.11rem;\n  border-bottom: 1px solid #e0e0e0; }\n  .ui-form-item label:not(.ui-switch):not(.ui-checkbox):not(.ui-radio) {\n    width: 0.9rem;\n    position: absolute;\n    text-align: left;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box; }\n  .ui-form-item input,\n  .ui-form-item textarea {\n    width: 100%;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    -webkit-appearance: none;\n    border: 0;\n    background: none;\n    padding-left: 0.9rem; }\n  .ui-form-item input[type=\"checkbox\"], .ui-form-item input[type=\"radio\"] {\n    padding-left: 0; }\n  .ui-form-item .ui-icon-close {\n    position: absolute;\n    top: 0;\n    right: .06rem; }\n\n.ui-form-item-order > a, .ui-form-item-link > a {\n  display: block; }\n\n.ui-form-item-order:active {\n  background-color: #e5e6e7; }\n\n.ui-form-item-textarea {\n  height: 0.65rem; }\n\n.ui-form-item-textarea label {\n  vertical-align: top; }\n\n.ui-form-item-textarea textarea {\n  margin-top: 0.15rem;\n  border: none;\n  resize: none; }\n\n.ui-form-item-textarea textarea:focus {\n  outline: none; }\n\n.ui-form-item-link > li:after {\n  position: absolute;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM0QzFDNzMyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM0QzFDNzQyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzRDMUM3MTJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzRDMUM3MjJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pjs2Bb4AAAItSURBVHjazJhbK0RRGIb3DIOU/AG5kUTOgxmHceFGKf6BO+Vf+E8KKYcYg3FuMpNIDhFJXJAcp/GtvKumrzVs+zBrvfU2u689q6d3rb33+lYgl8tZvymZ3JOX7eQp8gT50fJA0Wj4z3tKbY5VR14hV5ObyWLkZ6sICtq4p4V8CjihevIWucoUQJFUmtUayTvkShMAL5DiGqs3IMlK3YBSgwrIZkBWmAAoIRMKyG2/IIMO/hMjbygepCS53ARAoQHyOqu1YbrLTADMAXJbASmSDOkGlOpTQHaQN72CdAuYBeQuq4cBWaIbUEJGC0Am3UIGPVoqMsk9Vu/CwxTQDSj0iSQPWD2C6Q7oBhT6AmRKAZkwAVDoowBkn+LdqQVQ6A2QhwrIuAmAEjKi2KrF/jPdfgIKveI7Pcfq/eSMCYBSD4pakymA0+RxVrsn15oAOEMeY7Vbcif5ys4ApT7CzZJHWO2G3I1fSyfgPHmY1a7x6bvT/ZpZUMBdOoHzI8El8pCiK+wq8CQXNcFlBdw51tyD00G9SnAVHV++zgDn6hzHiwTjCrgTTKvrQya3Ca5jA5CvY3IP+UlnTxJEb8zhjpDck1cL20mCAcBFWD2D2ovOvjiERojDpTGtnsL9N8EQegt+LJrC5vRN59lMORp0DrePNH2BswvYivXVzuoHSO7dz+2QHcAa6+eMOl87WHOffm8m7QCK7foog+tFi2mZACg3npPkRUxrtkitgvUtwAA5A3LWdzPizwAAAABJRU5ErkJggg==);\n  content: '';\n  height: .44rem;\n  width: .32rem;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -webkit-text-stroke-width: 0.2px;\n  right: .15rem;\n  top: 50%;\n  margin-top: -.22rem;\n  margin-right: -.1rem;\n  -webkit-background-size: 50% auto;\n  background-size: 50% auto;\n  background-repeat: no-repeat;\n  background-position: center center; }\n\n.ui-form-item-l label {\n  color: #00479d;\n  text-align: center; }\n\n.ui-form-item-r .ui-icon-close {\n  right: 1.25rem; }\n\n.ui-form-item-l input:not([type=\"checkbox\"]):not([type=\"radio\"]) {\n  padding-left: 1.15rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-form-item-r {\n  padding-right: 0; }\n\n.ui-form-item-r input:not([type=\"checkbox\"]):not([type=\"radio\"]) {\n  padding-left: 0;\n  padding-right: 1.5rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-form-item-r button {\n  /*width: 110px;*/\n  /*\r\n\theight: $lh-form-item;*/\n  position: absolute;\n  top: .1rem;\n  right: 0.15rem; }\n\n.ui-form-item-r button.disabled {\n  color: #ddd; }\n\n.ui-form-item-r button:not(.disabled):active {\n  background-color: #e5e6e7; }\n\n.ui-form-item-pure input,\n.ui-form-item-pure textarea {\n  padding-left: 0; }\n\n/* 表单展示项 */\n.ui-form-item-show label {\n  color: #999; }\n\n.ui-form-item-link:after {\n  position: absolute;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM0QzFDNzMyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM0QzFDNzQyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzRDMUM3MTJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzRDMUM3MjJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pjs2Bb4AAAItSURBVHjazJhbK0RRGIb3DIOU/AG5kUTOgxmHceFGKf6BO+Vf+E8KKYcYg3FuMpNIDhFJXJAcp/GtvKumrzVs+zBrvfU2u689q6d3rb33+lYgl8tZvymZ3JOX7eQp8gT50fJA0Wj4z3tKbY5VR14hV5ObyWLkZ6sICtq4p4V8CjihevIWucoUQJFUmtUayTvkShMAL5DiGqs3IMlK3YBSgwrIZkBWmAAoIRMKyG2/IIMO/hMjbygepCS53ARAoQHyOqu1YbrLTADMAXJbASmSDOkGlOpTQHaQN72CdAuYBeQuq4cBWaIbUEJGC0Am3UIGPVoqMsk9Vu/CwxTQDSj0iSQPWD2C6Q7oBhT6AmRKAZkwAVDoowBkn+LdqQVQ6A2QhwrIuAmAEjKi2KrF/jPdfgIKveI7Pcfq/eSMCYBSD4pakymA0+RxVrsn15oAOEMeY7Vbcif5ys4ApT7CzZJHWO2G3I1fSyfgPHmY1a7x6bvT/ZpZUMBdOoHzI8El8pCiK+wq8CQXNcFlBdw51tyD00G9SnAVHV++zgDn6hzHiwTjCrgTTKvrQya3Ca5jA5CvY3IP+UlnTxJEb8zhjpDck1cL20mCAcBFWD2D2ovOvjiERojDpTGtnsL9N8EQegt+LJrC5vRN59lMORp0DrePNH2BswvYivXVzuoHSO7dz+2QHcAa6+eMOl87WHOffm8m7QCK7foog+tFi2mZACg3npPkRUxrtkitgvUtwAA5A3LWdzPizwAAAABJRU5ErkJggg==);\n  content: '';\n  height: .44rem;\n  width: .32rem;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -webkit-text-stroke-width: 0.2px;\n  right: .15rem;\n  top: 50%;\n  margin-top: -.22rem;\n  margin-right: -.1rem;\n  -webkit-background-size: 50% auto;\n  background-size: 50% auto;\n  background-repeat: no-repeat;\n  background-position: center center; }\n\n.ui-form-item-checkbox,\n.ui-form-item-radio,\n.ui-form-item-switch {\n  display: -webkit-box;\n  -webkit-box-align: center; }\n\n.ui-form-item .ui-switch {\n  position: absolute;\n  right: 0.1rem 0.15rem 0.11rem;\n  top: 50%;\n  margin-top: -0.155rem; }\n\n.ui-switch {\n  display: inline-block;\n  vertical-align: middle; }\n  .ui-switch input {\n    position: relative;\n    width: 0.52rem;\n    height: 0.31rem;\n    -webkit-appearance: none;\n    border: none;\n    background: none;\n    display: block; }\n    .ui-switch input:before {\n      content: '';\n      display: block;\n      width: 100%;\n      height: 100%;\n      border: 1px solid #dfe0e1;\n      background-color: #fff;\n      border-radius: 0.155rem;\n      -webkit-box-sizing: border-box;\n      box-sizing: border-box;\n      -webkit-box-shadow: #dfdfdf 0 0 0 0 inset;\n      box-shadow: #dfdfdf 0 0 0 0 inset;\n      -webkit-background-clip: content-box;\n      background-clip: content-box; }\n    .ui-switch input:checked:before {\n      border-color: #64bd63;\n      background-color: #64bd63;\n      -webkit-transition: all ease 400ms;\n      transition: all ease 400ms;\n      -webkit-box-shadow: #64bd63 0 0 0 0.16rem inset;\n      box-shadow: #64bd63 0 0 0 0.16rem inset; }\n    .ui-switch input:after {\n      content: '';\n      width: 0.29rem;\n      height: 0.29rem;\n      position: absolute;\n      top: .01rem;\n      left: .0rem;\n      border-radius: 50%;\n      background-color: #fff;\n      -webkit-box-shadow: 0 0.02rem 0.05rem 0 rgba(0, 0, 0, 0.4);\n      box-shadow: 0 0.02rem 0.05rem 0 rgba(0, 0, 0, 0.4);\n      -webkit-transition: 300ms;\n      transition: 300ms;\n      -webkit-background-clip: padding-box;\n      background-clip: padding-box; }\n    .ui-switch input:checked:after {\n      left: 0.21rem; }\n\n.ui-radio {\n  display: inline-block;\n  vertical-align: middle; }\n\n.ui-radio input {\n  display: block;\n  width: 0.24rem;\n  height: 0.24rem;\n  position: relative;\n  -webkit-appearance: none;\n  border: 0;\n  background: none; }\n\n.ui-radio input:before {\n  content: '';\n  display: block;\n  width: 100%;\n  height: 100%;\n  border: 1px solid #dfe0e1;\n  border-radius: 50%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  background-color: #fff; }\n\n.ui-radio input:checked:before {\n  border-color: #00479d; }\n\n.ui-radio input:checked:after {\n  content: '';\n  position: absolute;\n  left: 0.06rem;\n  top: 0.06rem;\n  width: 0.12rem;\n  height: 0.12rem;\n  background: #00479d;\n  border-radius: 50%; }\n\n.ui-checkbox {\n  display: inline-block;\n  width: 0.24rem;\n  height: 0.24rem;\n  vertical-align: middle;\n  line-height: 0.24rem; }\n\n.ui-checkbox input {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  -webkit-appearance: none;\n  background: none;\n  border: none; }\n\n.ui-checkbox input:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border-radius: 50%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  border: 1px solid #dfe0e1;\n  background-color: #fff; }\n\n.ui-checkbox-square input:before {\n  top: 6%;\n  left: 6%;\n  width: 88%;\n  height: 88%;\n  border-radius: 0.03rem; }\n\n.ui-checkbox input[type=checkbox]:checked:before {\n  background: #00479d;\n  border-color: #00479d; }\n\n.ui-checkbox input[type=checkbox]:checked:after {\n  content: '';\n  position: absolute;\n  width: 0.108rem;\n  height: 0.0486rem;\n  top: 0.07273rem;\n  left: 0.0594rem;\n  border: 2px solid #fff;\n  border-top: none;\n  border-right: none;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg); }\n\n.ui-checkbox-s {\n  width: 0.204rem;\n  height: 0.204rem; }\n\n.ui-checkbox-s input[type=checkbox]:checked:after {\n  width: 0.0918rem;\n  height: 0.04131rem;\n  top: 0.05694rem;\n  left: 0.04488rem; }\n\n.ui-input-wrap {\n  height: .44rem;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-self: center;\n  align-self: center; }\n  .ui-input-wrap .ui-btn, .ui-input-wrap i {\n    margin-right: .1rem; }\n\n.ui-input {\n  height: .3rem;\n  line-height: .3rem;\n  margin: .07rem .1rem;\n  background: #fff;\n  padding-left: .1rem;\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1; }\n\n.ui-input input {\n  width: 100%;\n  height: 100%;\n  border: 0;\n  background: 0 0;\n  -webkit-appearance: none;\n  outline: 0; }\n\n.ui-table {\n  width: 100%;\n  border-collapse: collapse; }\n\n.ui-table td, .ui-table th {\n  text-align: center;\n  background-color: #fff;\n  padding: .05rem .025rem;\n  border: 1px solid #e0e0e0; }\n\n.ui-table th {\n  color: #333;\n  font-size: .15rem;\n  font-weight: 500;\n  background-color: #eee; }\n\n.ui-table td {\n  color: #666;\n  font-size: .14rem; }\n\n.ui-table-primary th {\n  color: #00479d; }\n\n.ui-table-bg-primary th {\n  background-color: #00479d;\n  color: #fff; }\n\n.ui-table-odd tbody tr:nth-last-child(2n) td {\n  background-color: #fafafa; }\n\n.ui-table-border-none th, .ui-table-border-none td {\n  border: none; }\n\n.ui-table-border-row th, .ui-table-border-row td {\n  border-width: 0 0 1px  0; }\n\n.ui-grid, .ui-grid-trisect, .ui-grid-halve {\n  padding-left: .15rem;\n  padding-right: .1rem;\n  overflow: hidden;\n  padding-top: .1rem; }\n  .ui-grid li, .ui-grid-trisect li, .ui-grid-halve li {\n    padding-right: .05rem;\n    padding-bottom: .1rem;\n    float: left;\n    position: relative;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box; }\n\n.ui-grid-trisect > li {\n  width: 33.3333%; }\n\n.ui-grid-trisect-img {\n  padding-top: 149.47%; }\n\n.ui-grid-trisect h4 {\n  position: relative;\n  margin: .07rem 0 .03rem; }\n\n.ui-grid-trisect h4 span {\n  display: inline-block;\n  margin-left: .12rem;\n  color: #666; }\n\n.ui-grid-halve > li {\n  width: 50%; }\n\n.ui-grid-halve-img {\n  padding-top: 55.17%; }\n\n.ui-grid-trisect-img, .ui-grid-halve-img {\n  position: relative;\n  width: 100%; }\n  .ui-grid-trisect-img > span, .ui-grid-halve-img > span {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1;\n    background-repeat: no-repeat;\n    -webkit-background-size: cover; }\n  .ui-grid-trisect-img img, .ui-grid-halve-img img {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    left: 0;\n    top: 0; }\n  .ui-grid-trisect-img.active, .ui-grid-halve-img.active {\n    opacity: .5; }\n\n.ui-row {\n  display: block;\n  overflow: hidden;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-col {\n  float: left;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  width: 100%; }\n\n.ui-col-10 {\n  width: 10%; }\n\n.ui-col-20 {\n  width: 20%; }\n\n.ui-col-25 {\n  width: 25%; }\n\n.ui-col-33 {\n  width: 33.33%; }\n\n.ui-col-50 {\n  width: 50%; }\n\n.ui-col-67 {\n  width: 66.6666%; }\n\n.ui-col-75 {\n  width: 75%; }\n\n.ui-col-80 {\n  width: 80%; }\n\n.ui-col-90 {\n  width: 90%; }\n\n.ui-row-flex {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  width: 100%;\n  -webkit-box-sizing: border-box; }\n  .ui-row-flex > .ui-col {\n    float: none;\n    -webkit-box-flex: 1;\n    -webkit-flex-grow: 1;\n    flex-grow: 1;\n    width: 0;\n    position: relative;\n    overflow: auto; }\n  .ui-row-flex > .ui-col-2 {\n    -webkit-box-flex: 2;\n    -webkit-flex-grow: 2;\n    flex-grow: 2; }\n  .ui-row-flex > .ui-col-3 {\n    -webkit-box-flex: 3;\n    -webkit-flex-grow: 3;\n    flex-grow: 3; }\n  .ui-row-flex > .ui-col-4 {\n    -webkit-box-flex: 4;\n    -webkit-flex-grow: 4;\n    flex-grow: 4; }\n  .ui-row-flex > .ui-col-auto {\n    -webkit-box-flex: 0;\n    -webkit-flex-grow: 0;\n    flex-grow: 0;\n    width: auto;\n    overflow: visible; }\n\n.ui-row-flex-ver {\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  flex-direction: column;\n  height: 100%; }\n  .ui-row-flex-ver > .ui-col {\n    width: 100%;\n    height: 0; }\n  .ui-row-flex-ver > .ui-col-auto {\n    height: auto; }\n\n.ui-flex-content {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow: auto; }\n\n.ui-grid-nine, .ui-grid-sixteen {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow: hidden; }\n  .ui-grid-nine > li, .ui-grid-sixteen > li {\n    float: left;\n    position: relative;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    padding: 0.2rem 0.1rem;\n    font-size: 0.14rem;\n    text-align: center;\n    border-right: 1px solid #eae9eb;\n    border-bottom: 1px solid #eae9eb; }\n    .ui-grid-nine > li:active, .ui-grid-sixteen > li:active {\n      background: #f4f4f4; }\n  .ui-grid-nine .ui-icon, .ui-grid-sixteen .ui-icon {\n    font-size: 0.32rem;\n    display: block;\n    line-height: 0.44rem; }\n  .ui-grid-nine .ui-badge, .ui-grid-nine .ui-badge-muted, .ui-grid-nine .ui-badge-num, .ui-grid-nine .ui-badge-dot, .ui-grid-sixteen .ui-badge, .ui-grid-sixteen .ui-badge-muted, .ui-grid-sixteen .ui-badge-num, .ui-grid-sixteen .ui-badge-dot {\n    position: absolute;\n    top: 0.15rem;\n    left: 65%;\n    z-index: 99; }\n  .ui-grid-nine > li p, .ui-grid-sixteen > li p {\n    display: block;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis; }\n  .ui-grid-nine > li a, .ui-grid-sixteen > li a {\n    color: inherit;\n    display: block;\n    position: relative; }\n\n.ui-grid-nine > li {\n  width: 33.3333%; }\n  .ui-grid-nine > li:nth-child(3n+1) {\n    border-left: 1px solid #eae9eb; }\n  .ui-grid-nine > li:nth-child(1), .ui-grid-nine > li:nth-child(2), .ui-grid-nine > li:nth-child(3) {\n    border-top: 1px solid #eae9eb; }\n\n.ui-grid-sixteen > li {\n  width: 25%; }\n  .ui-grid-sixteen > li:nth-child(4n+1) {\n    border-left: 1px solid #eae9eb; }\n  .ui-grid-sixteen > li:nth-child(1), .ui-grid-sixteen > li:nth-child(2), .ui-grid-sixteen > li:nth-child(3), .ui-grid-sixteen > li:nth-child(4) {\n    border-top: 1px solid #eae9eb; }\n\n.ui-center {\n  width: 100%;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-box-pack: center;\n  -webkit-box-align: center;\n  text-align: center;\n  height: 1.5rem; }\n\n.ui-flex,\n.ui-tiled {\n  display: -webkit-box;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-flex-ver {\n  -webkit-box-orient: vertical; }\n\n.ui-flex-pack-start {\n  -webkit-box-pack: start; }\n\n.ui-flex-pack-end {\n  -webkit-box-pack: end; }\n\n.ui-flex-pack-center {\n  -webkit-box-pack: center; }\n\n.ui-flex-align-start {\n  -webkit-box-align: start; }\n\n.ui-flex-align-end {\n  -webkit-box-align: end; }\n\n.ui-flex-align-center {\n  -webkit-box-align: center; }\n\n.ui-tiled > li {\n  -webkit-box-flex: 1;\n  width: 100%;\n  text-align: center;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-box-pack: center;\n  -webkit-box-align: center; }\n\n.ui-card {\n  background: #fff;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n  margin: 0.1rem;\n  position: relative;\n  border-radius: 0.03rem;\n  font-size: 0.15rem; }\n\n.ui-card-content {\n  position: relative; }\n\n.ui-card-content-inner {\n  padding: 0.15rem;\n  position: relative; }\n\n.ui-card-header,\n.ui-card-footer {\n  min-height: 0.44rem;\n  position: relative;\n  padding: 0.1rem 0.15rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  justify-content: space-between;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  align-items: center; }\n\n.ui-card-header[valign=\"top\"],\n.ui-card-footer[valign=\"top\"] {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  align-items: flex-start; }\n\n.ui-card-header[valign=\"bottom\"],\n.ui-card-footer[valign=\"bottom\"] {\n  -webkit-box-align: end;\n  -webkit-align-items: flex-end;\n  align-items: flex-end; }\n\n.ui-card-header {\n  border-radius: 2px 2px 0 0;\n  font-size: .17rem;\n  color: #333; }\n\n.ui-card-header:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  right: auto;\n  top: auto;\n  height: 1px;\n  width: 100%;\n  background-color: #e0e0e0;\n  display: block;\n  z-index: 15;\n  -webkit-transform-origin: 50% 100%;\n  transform-origin: 50% 100%; }\n\n.ui-card-header .ui-card-cover {\n  width: 100%;\n  display: block; }\n\n.ui-card-footer {\n  border-radius: 0 0 0.1rem 0.1rem;\n  color: #666; }\n\n.ui-card-footer:before {\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: auto;\n  right: auto;\n  height: 1px;\n  width: 100%;\n  background-color: #e0e0e0;\n  display: block;\n  z-index: 15;\n  -webkit-transform-origin: 50% 0%;\n  transform-origin: 50% 0%; }\n\n.ui-card-header.no-padding, .ui-card-footer.no-padding {\n  padding: 0; }\n\n.ui-list ~ .ui-list {\n  margin-top: .1rem; }\n\n.ui-list > ul {\n  position: relative; }\n\n.ui-list > ul:before,\n.ui-list > ul:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  height: 1px;\n  background-color: #e7e7e7;\n  z-index: 1; }\n\n.ui-list > ul:after {\n  top: auto;\n  bottom: 0; }\n\n.ui-list > ul > li {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  background-color: #fff; }\n\n.ui-list > ul > li:not(:last-child) .ui-list-item-inner:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 1px;\n  background-color: #e7e7e7; }\n\n.ui-list-item {\n  padding-left: 0.15rem;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-self: center;\n  align-self: center; }\n\n.ui-list-item-inner {\n  position: relative;\n  min-height: 0.15rem;\n  padding: 0.1rem 0.15rem 0.1rem 0;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1;\n  color: #333;\n  font-size: .15rem;\n  overflow: hidden; }\n\n.ui-list-l .ui-list-item-inner {\n  padding-top: 0.15rem;\n  padding-bottom: 0.15rem; }\n\n.ui-list-item-link, .ui-list-item-link:active {\n  color: inherit; }\n\n.ui-list-item-link .ui-list-item-inner {\n  padding-right: 0.3rem; }\n\n.ui-list-item-link:after {\n  content: '';\n  position: absolute;\n  height: 100%;\n  width: 0.3rem;\n  right: 0;\n  top: 0;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM0QzFDNzMyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM0QzFDNzQyREM0MTFFNUJDNTI4OTMzMEE0RjBENzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzRDMUM3MTJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzRDMUM3MjJEQzQxMUU1QkM1Mjg5MzMwQTRGMEQ3MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pjs2Bb4AAAItSURBVHjazJhbK0RRGIb3DIOU/AG5kUTOgxmHceFGKf6BO+Vf+E8KKYcYg3FuMpNIDhFJXJAcp/GtvKumrzVs+zBrvfU2u689q6d3rb33+lYgl8tZvymZ3JOX7eQp8gT50fJA0Wj4z3tKbY5VR14hV5ObyWLkZ6sICtq4p4V8CjihevIWucoUQJFUmtUayTvkShMAL5DiGqs3IMlK3YBSgwrIZkBWmAAoIRMKyG2/IIMO/hMjbygepCS53ARAoQHyOqu1YbrLTADMAXJbASmSDOkGlOpTQHaQN72CdAuYBeQuq4cBWaIbUEJGC0Am3UIGPVoqMsk9Vu/CwxTQDSj0iSQPWD2C6Q7oBhT6AmRKAZkwAVDoowBkn+LdqQVQ6A2QhwrIuAmAEjKi2KrF/jPdfgIKveI7Pcfq/eSMCYBSD4pakymA0+RxVrsn15oAOEMeY7Vbcif5ys4ApT7CzZJHWO2G3I1fSyfgPHmY1a7x6bvT/ZpZUMBdOoHzI8El8pCiK+wq8CQXNcFlBdw51tyD00G9SnAVHV++zgDn6hzHiwTjCrgTTKvrQya3Ca5jA5CvY3IP+UlnTxJEb8zhjpDck1cL20mCAcBFWD2D2ovOvjiERojDpTGtnsL9N8EQegt+LJrC5vRN59lMORp0DrePNH2BswvYivXVzuoHSO7dz+2QHcAa6+eMOl87WHOffm8m7QCK7foog+tFi2mZACg3npPkRUxrtkitgvUtwAA5A3LWdzPizwAAAABJRU5ErkJggg==);\n  -webkit-background-size: 0.14rem 0.14rem;\n  background-size: 0.14rem;\n  background-repeat: no-repeat;\n  background-position: center center; }\n\n.ui-list-item-title {\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  font-size: .17rem;\n  width: 0; }\n\n.ui-list-item-media {\n  padding: 0.1rem 0;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-self: center;\n  align-self: center;\n  margin-right: 0.15rem; }\n\n.ui-list-item-after {\n  margin-left: 0.05rem;\n  font-size: .17rem; }\n\n.ui-list-item-title-row {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex; }\n\n.ui-list-media .ui-list-item-inner {\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.ui-list-media .ui-list-item {\n  /* -webkit-box-align: stretch;*/ }\n\n.ui-list-item-text {\n  padding-top: .03rem;\n  color: #666;\n  line-height: 1.25; }\n\n.ui-list-form .ui-list-item-label {\n  width: 35%;\n  color: #444; }\n\n.ui-list-form .ui-list-item-input-wrap {\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1;\n  width: 0%;\n  color: #777; }\n  .ui-list-form .ui-list-item-input-wrap .ui-list-item-input, .ui-list-form .ui-list-item-input-wrap .ui-list-item-textarea {\n    display: block;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    width: 100%;\n    border: none;\n    color: #777; }\n  .ui-list-form .ui-list-item-input-wrap .ui-list-item-textarea {\n    resize: none;\n    height: .65rem; }\n\n.ui-list-item-textarea-lg {\n  height: 1.3rem; }\n\n.ui-list-card .ui-list-item {\n  margin: .1rem 0; }\n\n.ui-list-card > ul:after,\n.ui-list-card > ul:before,\n.ui-list-card > ul > li:not(:last-child) .ui-list-item-inner:after {\n  content: none; }\n\n.ui-list-card > ul > li:before {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: auto;\n  height: 1px;\n  background-color: #e7e7e7;\n  z-index: 1;\n  -webkit-transform-origin: 0% 50%;\n  transform-origin: 0% 50%; }\n  @media only screen and (-webkit-min-device-pixel-ratio: 2) {\n    .ui-list-card > ul > li:before {\n      -webkit-transform: scaleY(0.5);\n      transform: scaleY(0.5); } }\n  @media only screen and (-webkit-min-device-pixel-ratio: 3) {\n    .ui-list-card > ul > li:before {\n      -webkit-transform: scaleY(0.33);\n      transform: scaleY(0.33); } }\n\n.ui-list-card > ul > li:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: auto;\n  height: 1px;\n  background-color: #e7e7e7;\n  z-index: 1;\n  -webkit-transform-origin: 0% 50%;\n  transform-origin: 0% 50%; }\n  @media only screen and (-webkit-min-device-pixel-ratio: 2) {\n    .ui-list-card > ul > li:after {\n      -webkit-transform: scaleY(0.5);\n      transform: scaleY(0.5); } }\n  @media only screen and (-webkit-min-device-pixel-ratio: 3) {\n    .ui-list-card > ul > li:after {\n      -webkit-transform: scaleY(0.33);\n      transform: scaleY(0.33); } }\n\n.ui-timeline {\n  padding: 0.1rem; }\n\n.ui-timeline-container {\n  position: relative; }\n  .ui-timeline-container:before {\n    content: '';\n    position: absolute;\n    top: 0px;\n    bottom: 0;\n    width: .02rem;\n    background: #ddd;\n    left: .32rem;\n    margin: 0;\n    border-radius: .02rem; }\n  .ui-timeline-container > li {\n    position: relative;\n    margin-bottom: .15rem; }\n\n.ui-timeline-container > li:before,\n.ui-timeline-container > li:after {\n  content: \" \";\n  display: table; }\n\n.ui-timeline-container > li:after {\n  clear: both; }\n\n.ui-timeline-container > li > .ui-timeline-item {\n  margin-top: 0px;\n  background: #fff;\n  color: #444;\n  margin-left: .6rem;\n  padding: 0;\n  position: relative; }\n\n.ui-timeline-container > li > .ui-timeline-item:after {\n  border-radius: 6px;\n  border: 1px solid #c8c7cc;\n  display: block;\n  content: '';\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  -webkit-transform-origin: 0 0;\n  -webkit-transform: scale(1);\n  pointer-events: none; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-time {\n  color: #999;\n  float: right;\n  padding: .1rem;\n  font-size: .12rem; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-header {\n  margin: 0;\n  color: #555;\n  padding: .1rem;\n  font-size: 0.875em;\n  position: relative; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-header:after {\n  border-bottom: 1px solid #ddd;\n  display: block;\n  content: '';\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  -webkit-transform-origin: 0 0;\n  -webkit-transform: scale(1);\n  pointer-events: none; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-body,\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-footer {\n  padding: .1rem;\n  font-size: 0.875em; }\n\n.ui-timeline-container > li > .ui-timeline-item > .ui-timeline-footer {\n  background-color: #f4f4f4; }\n\n.ui-timeline-container > li.ui-time-label > span {\n  padding: .05rem;\n  display: inline-block;\n  background-color: #d2d6de;\n  border-radius: 4px;\n  color: #ffffff; }\n\n.ui-timeline-container > li > .ui-time-label {\n  width: .5rem;\n  height: .3rem;\n  font-size: 0.75em;\n  line-height: .3rem;\n  position: absolute;\n  color: #ffffff;\n  background: #d2d6de;\n  text-align: center;\n  left: .08rem;\n  top: 0;\n  border-radius: 4px; }\n\n.ui-timeline-container > li > .ui-iconfont {\n  width: .3rem;\n  height: .3rem;\n  font-size: .15rem;\n  line-height: .3rem;\n  position: absolute;\n  color: #ffffff;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: .18rem;\n  top: 0; }\n\n.ui-toolbar {\n  position: relative;\n  height: 0.44rem;\n  background-color: #00479d;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  color: #fff;\n  line-height: 0.44rem; }\n\n.ui-toolbar > .ui-fn-left,\n.ui-toolbar > .ui-fn-right {\n  position: relative;\n  z-index: 9;\n  padding: 0 0.1rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-toolbar-title {\n  position: absolute;\n  width: 100%;\n  font-size: .17rem;\n  font-weight: normal;\n  line-height: 0.44rem;\n  text-align: center;\n  white-space: nowrap;\n  top: 0;\n  left: 0; }\n\n.ui-toolbar .ui-toolbar-btn {\n  position: relative;\n  display: inline-block;\n  font-size: .14rem;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  cursor: pointer;\n  padding: .06rem;\n  min-width: .5rem;\n  border-radius: 3px;\n  color: #00479d;\n  background-color: #fff;\n  border: none;\n  outline: none;\n  margin-top: .09rem; }\n\n.ui-toolbar-btn.ui-active, .ui-toolbar-btn:active {\n  color: #fff;\n  background-color: #00306a; }\n\n.ui-toolbar .ui-icon {\n  font-size: .32rem;\n  color: #fff;\n  line-height: 0.44rem;\n  vertical-align: top; }\n\n.ui-toolbar a {\n  color: #fff; }\n\n.ui-toolbar .ui-btn-link {\n  top: 0;\n  padding: 0;\n  font-size: .16rem;\n  line-height: 0.44rem;\n  color: #fff;\n  background-color: transparent;\n  border: none; }\n\n.ui-toolbar .ui-mtab {\n  top: .09rem;\n  margin: 0 0.1rem; }\n\n.ui-mtab {\n  position: relative;\n  display: table;\n  table-layout: fixed;\n  overflow: hidden; }\n\n.ui-mtab .ui-mtab-item {\n  display: table-cell;\n  width: 1%;\n  font-size: .14rem;\n  line-height: 1.8;\n  color: #00479d;\n  text-align: center;\n  border: 1px solid #00306a;\n  background-color: #fff; }\n  .ui-mtab .ui-mtab-item:first-child {\n    border-top-left-radius: 3px;\n    border-bottom-left-radius: 3px; }\n  .ui-mtab .ui-mtab-item:last-child {\n    border-top-right-radius: 3px;\n    border-bottom-right-radius: 3px; }\n  .ui-mtab .ui-mtab-item.ui-active {\n    color: #fff;\n    background-color: #00306a; }\n  .ui-mtab .ui-mtab-item:not(.ui-active):active {\n    background-color: #005ed0; }\n  .ui-mtab .ui-mtab-item:not(:last-child) {\n    border-right: none; }\n\n.ui-nav {\n  width: 100%;\n  font-size: .16rem;\n  position: relative;\n  text-align: center;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-nav .ui-nav-main {\n  height: .45rem;\n  line-height: .45rem;\n  background-color: #00479d;\n  padding: 0 .6rem 0 0;\n  margin: 0; }\n\n.ui-nav .ui-nav-main.ui-nav-3 .ui-nav-item {\n  width: 33.333%; }\n\n.ui-nav .ui-nav-main .ui-nav-item {\n  float: left;\n  width: 20%; }\n\n.ui-nav .ui-nav-main .ui-nav-item a {\n  display: block;\n  color: #fff; }\n\n.ui-nav .ui-nav-btn {\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: .6rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-nav .ui-nav-btn .ui-icon {\n  color: #fff;\n  font-size: .32rem;\n  display: block;\n  line-height: .45rem; }\n\n.ui-nav-sub {\n  min-width: .6rem;\n  position: absolute;\n  top: 100%;\n  right: 0;\n  z-index: 99; }\n  .ui-nav-sub > li {\n    border-top: 1px solid #fff; }\n    .ui-nav-sub > li > a {\n      display: block;\n      height: .32rem;\n      line-height: .36rem;\n      background: #00479d;\n      color: #fff;\n      text-align: center;\n      padding: 0 .06rem; }\n\n.ui-badge, .ui-badge-muted, .ui-badge-num, .ui-badge-corner, .ui-badge-cornernum {\n  display: inline-block;\n  text-align: center;\n  background: #f74c31;\n  color: #fff;\n  font-size: .11rem;\n  line-height: .16rem;\n  border-radius: .08rem;\n  padding: 0 .06rem;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box; }\n\n.ui-badge-muted {\n  background: #b6cae0; }\n\n.ui-badge-num {\n  height: .19rem;\n  line-height: .2rem;\n  font-size: .12rem;\n  min-width: .19rem;\n  border-radius: .1rem; }\n\n.ui-badge-wrap {\n  position: relative;\n  text-align: center; }\n\n.ui-badge-corner {\n  position: absolute;\n  height: .2rem;\n  line-height: .2rem;\n  top: -.03rem;\n  right: -.08rem; }\n\n.ui-badge-cornernum {\n  position: absolute;\n  height: .19rem;\n  line-height: .19rem;\n  font-size: .12rem;\n  border-radius: .1rem;\n  top: -.05rem;\n  right: -.05rem; }\n\n.ui-badge-dot {\n  display: inline-block;\n  width: .08rem;\n  height: .08rem;\n  background: #ff2600;\n  border-radius: .1rem; }\n\n.ui-reddot, .ui-reddot-border, .ui-reddot-s {\n  position: relative;\n  display: inline-block;\n  line-height: .22rem;\n  padding: 0 .06rem; }\n  .ui-reddot:after, .ui-reddot-border:after, .ui-reddot-s:after {\n    content: '';\n    position: absolute;\n    display: block;\n    width: .08rem;\n    height: .08rem;\n    background-color: #ff2600;\n    border-radius: 50%;\n    right: -.03rem;\n    top: -.03rem;\n    -webkit-background-clip: padding-box;\n    background-clip: padding-box; }\n\n.ui-reddot-static {\n  display: block;\n  width: .08rem;\n  height: .08rem;\n  padding: 0; }\n  .ui-reddot-static:after {\n    top: 0;\n    right: 0; }\n\n/* 带白边的 */\n.ui-reddot-border:before {\n  content: '';\n  position: absolute;\n  display: block;\n  width: .08rem;\n  height: .08rem;\n  background-color: #fff;\n  border-radius: 50%;\n  right: -.04rem;\n  top: -.04rem;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n  padding: .01rem; }\n\n/* 小号的 */\n.ui-reddot-s:after {\n  width: .06rem;\n  height: .06rem;\n  top: -.05rem;\n  right: -.05rem; }\n\n.ui-category {\n  text-align: center;\n  padding-bottom: 0.12rem;\n  background-color: #fff; }\n  .ui-category:after {\n    visibility: hidden;\n    display: block;\n    font-size: 0;\n    content: \" \";\n    clear: both;\n    height: 0; }\n\n.ui-category-item {\n  width: 25%;\n  padding: 0.12rem 0 0;\n  float: left;\n  color: #333;\n  font-size: 0.14rem;\n  position: relative;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ui-category-4 {\n  width: 25%; }\n\n.ui-category-5 {\n  width: 20%; }\n\n.ui-category .ui-category-icon {\n  display: block;\n  border-radius: 0.03rem;\n  width: 0.44rem;\n  height: 0.44rem;\n  margin: .08rem auto;\n  position: relative; }\n\n.ui-category .ui-category-label {\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\n.ui-category-item .ui-icon {\n  color: #fff;\n  display: block;\n  line-height: 0.44rem;\n  font-size: .32rem; }\n\n.ui-category-item .ui-badge-cornernum {\n  top: 10%;\n  left: 65%;\n  right: auto; }\n\n.ui-navbar {\n  position: relative;\n  display: table;\n  table-layout: fixed;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 0;\n  background-color: #f8f8f8;\n  min-height: 0.45rem;\n  border-top: 1px solid #e0e0e0; }\n\n.ui-navbar .ui-navbar-item {\n  display: table-cell;\n  width: 1%;\n  color: #999;\n  text-align: center;\n  vertical-align: middle;\n  padding: .03rem 0 .03rem; }\n\n.ui-navbar .ui-navbar-item.ui-active, .ui-navbar .ui-navbar-item:active {\n  color: #00479d; }\n\n.ui-navbar .ui-navbar-item .ui-icon {\n  position: relative;\n  font-size: .3rem;\n  line-height: .3rem; }\n\n.ui-navbar .ui-navbar-item .ui-navbar-item-label {\n  display: block;\n  font-size: .12rem;\n  line-height: 1.25; }\n\n.ui-nav-content {\n  height: 100%;\n  width: 100%;\n  overflow: hidden; }\n  .ui-nav-content > ul {\n    position: relative;\n    width: 200%;\n    height: 100%;\n    overflow: hidden;\n    -webkit-transition: all 300ms ease-out 0s;\n    transition: all 300ms ease-out 0s; }\n    .ui-nav-content > ul > li {\n      position: absolute;\n      left: 0;\n      top: 0;\n      width: 50%;\n      height: 100%;\n      overflow: auto;\n      z-index: 0;\n      background-color: #f8f8f8; }\n      .ui-nav-content > ul > li:first-child {\n        z-index: 1; }\n      .ui-nav-content > ul > li.ui-show ~ li.ui-show {\n        left: 50%; }\n      .ui-nav-content > ul > li.ui-show, .ui-nav-content > ul > li.ui-active {\n        z-index: 10; }\n\n.ui-no-animation {\n  -webkit-transition-duration: 0s !important;\n  transition-duration: 0s !important; }\n\n.ui-nav-content-right {\n  -webkit-transform: translate3d(-50%, 0, 0);\n  transform: translate3d(-50%, 0, 0); }\n\n.ui-picker {\n  height: 2rem;\n  width: 100%;\n  background-color: #ddd;\n  position: relative;\n  overflow: hidden; }\n\n.ui-picker-selectbox {\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  height: 0.36rem;\n  margin-top: -0.18rem;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  border-bottom: 1px solid #ccc;\n  border-top: 1px solid #ccc; }\n\n.ui-picker ul {\n  height: 0.36rem;\n  margin-top: -0.18rem;\n  position: absolute;\n  top: 50%;\n  width: 100%;\n  -webkit-transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n  transform: perspective(1000px) rotateY(0deg) rotateX(0deg);\n  -webkit-transition: 150ms ease-out;\n  transition: 150ms ease-out;\n  /* 动画效果 */\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n  /* 3d位空间显示 */ }\n\n.ui-picker ul li {\n  line-height: 0.36rem;\n  text-align: center;\n  position: absolute;\n  top: 0;\n  width: 90%;\n  left: 5%;\n  height: 0.36rem;\n  overflow: hidden;\n  visibility: hidden;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\n.ui-picker ul li.ui-visible {\n  visibility: visible; }\n\n.ui-picker ul li.ui-highlight {\n  color: #000; }\n\n.ui-noanimate {\n  -webkit-transition: none !important;\n  transition: none !important; }\n\n.ui-poppicker {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  -webkit-transform: translateY(3rem);\n  transform: translateY(3rem);\n  -webkit-transition: 300ms ease-out;\n  transition: 300ms ease-out;\n  /* 动画效果 */\n  z-index: 9999; }\n\n.ui-poppicker.ui-active {\n  -webkit-transform: translateY(0px);\n  transform: translateY(0px); }\n\n.ui-poppicker-body .ui-picker {\n  float: left; }\n\n.ui-dtpicker .ui-picker {\n  float: left;\n  width: 20%; }\n\n.ui-picker-backup {\n  position: fixed;\n  z-index: 998;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background-color: rgba(0, 0, 0, 0.3); }\n\n.ui-poppicker {\n  background-color: #eee; }\n\n.ui-poppicker-header {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 0.06rem;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  justify-content: space-between; }\n\n.ui-poppicker-header button {\n  display: block; }\n\n.ui-poppicker-title {\n  overflow: hidden; }\n  .ui-poppicker-title label {\n    float: left;\n    width: 20%;\n    text-align: center;\n    border-top: 1px solid #ccc;\n    padding: 0.03rem 0;\n    border-bottom: 1px solid #ccc;\n    color: #999; }\n\n.ui-poppicker[data-type='date'] label, .ui-poppicker[data-type='date'] .ui-picker {\n  width: 33.33%; }\n\n.ui-poppicker[data-type='date'] .ui-dtpicker-h,\n.ui-poppicker[data-type='date'] .ui-dtpicker-mi,\n.ui-poppicker[data-type='date'] .ui-picker[data-id='picker-h'],\n.ui-poppicker[data-type='date'] .ui-picker[data-id='picker-mi'] {\n  display: none; }\n\n.ui-poppicker[data-type='time'] label, .ui-poppicker[data-type='time'] .ui-picker {\n  width: 50%; }\n\n.ui-poppicker[data-type='time'] .ui-dtpicker-y,\n.ui-poppicker[data-type='time'] .ui-dtpicker-m,\n.ui-poppicker[data-type='time'] .ui-dtpicker-d,\n.ui-poppicker[data-type='time'] .ui-picker[data-id='picker-y'],\n.ui-poppicker[data-type='time'] .ui-picker[data-id='picker-m'],\n.ui-poppicker[data-type='time'] .ui-picker[data-id='picker-d'] {\n  display: none; }\n\n.ui-poppicker[data-type='hour'] label, .ui-poppicker[data-type='hour'] .ui-picker {\n  width: 25%; }\n\n.ui-poppicker[data-type='hour'] .ui-dtpicker-mi,\n.ui-poppicker[data-type='hour'] .ui-picker[data-id='picker-mi'] {\n  display: none; }\n\n.ui-poppicker[data-type='month'] label, .ui-poppicker[data-type='month'] .ui-picker {\n  width: 50%; }\n\n.ui-poppicker[data-type='month'] .ui-dtpicker-d,\n.ui-poppicker[data-type='month'] .ui-dtpicker-h,\n.ui-poppicker[data-type='month'] .ui-dtpicker-mi,\n.ui-poppicker[data-type='month'] .ui-picker[data-id='picker-d'],\n.ui-poppicker[data-type='month'] .ui-picker[data-id='picker-h'],\n.ui-poppicker[data-type='month'] .ui-picker[data-id='picker-mi'] {\n  display: none; }\n\n.ui-pages,\n.ui-page {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 0;\n  overflow: hidden;\n  background-color: #f8f8f8; }\n\n.ui-pages {\n  z-index: 10000; }\n\n.ui-pages-zero {\n  z-index: -1; }\n\n.ui-page-iframe {\n  height: 100%;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n  border: none; }\n\n.ui-page {\n  display: none; }\n\n.ui-page.ui-show {\n  z-index: 10;\n  display: block; }\n\n.ui-page:first-child {\n  z-index: 1;\n  display: block; }\n\n.ui-pages.ui-anim, .ui-page.ui-anim {\n  overflow: auto;\n  -webkit-box-shadow: -0.01rem 0rem rgba(0, 0, 0, 0.6);\n  box-shadow: -0.01rem 0rem rgba(0, 0, 0, 0.6); }\n\n.ui-anim {\n  -webkit-animation-duration: 300ms;\n  animation-duration: 300ms;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n  -webkit-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out; }\n\n@-webkit-keyframes slideRightIn {\n  0% {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); }\n  100% {\n    -webkit-transform: translate3d(0%, 0, 0);\n    transform: translate3d(0%, 0, 0); } }\n\n@-webkit-keyframes slideRightOut {\n  0% {\n    -webkit-transform: translate3d(0%, 0, 0);\n    transform: translate3d(0%, 0, 0); }\n  100% {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); } }\n\n.ui-slideRightOut {\n  -webkit-animation-name: slideRightOut;\n  animation-name: slideRightOut; }\n\n.ui-slideRightIn {\n  -webkit-animation-name: slideRightIn;\n  animation-name: slideRightIn; }\n\n/*进度条*/\n.ipu-ui-progress {\n  overflow: hidden;\n  width: 100%;\n  height: 0.02rem;\n  font-size: 0;\n  line-height: 0;\n  background-color: #e2e2e2;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.ipu-ui-progress span {\n  display: block;\n  width: 100%;\n  height: 100%;\n  font-size: 0;\n  line-height: 0;\n  background: #00479d;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0); }\n\n.ui-progressbar-success span {\n  background-color: #4cd964; }\n\n.ui-progressbar-warning span {\n  background-color: #ff4222; }\n\n.ui-progressbar-highlight span {\n  background-color: #ff8444; }\n\n.ui-carousel {\n  width: 100%;\n  overflow: hidden;\n  position: relative; }\n\n.ui-carousel-wrapper {\n  width: 2000%;\n  /*默认20倍*/\n  overflow: hidden;\n  /* 撑起高度 */ }\n\n.ui-carousel-wrapper > li {\n  float: left;\n  width: 5%; }\n\n.ui-carousel-indicator {\n  position: absolute;\n  bottom: .15rem;\n  right: .15rem; }\n\n.ui-carousel-indicator li {\n  float: left;\n  width: .1rem;\n  height: .1rem;\n  border-radius: 50%;\n  background-color: #fff;\n  margin: 0 .035rem; }\n\n.ui-carousel-indicator li.ui-active {\n  background-color: #666; }\n\n.ui-carousel-animate {\n  -webkit-transition: all 200ms ease-out 100ms;\n  transition: all 200ms ease-out 100ms; }\n\n.ui-hammer-carousel .ui-carousel-wrapper {\n  font-size: 0;\n  position: relative;\n  white-space: nowrap;\n  display: block;\n  width: auto;\n  overflow: visible; }\n  .ui-hammer-carousel .ui-carousel-wrapper > li {\n    position: relative;\n    display: inline-block;\n    width: 100%;\n    font-size: 0.15rem;\n    vertical-align: top;\n    white-space: normal;\n    float: none; }\n\n.ui-modal-overlay, .ui-preloader-indicator-overlay, .ui-popup-overlay {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.4);\n  z-index: 10600;\n  visibility: hidden;\n  opacity: 0;\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms; }\n  .ui-modal-overlay.ui-modal-overlay-visible, .ui-preloader-indicator-overlay.ui-modal-overlay-visible, .ui-popup-overlay.ui-modal-overlay-visible {\n    visibility: visible;\n    opacity: 1; }\n\n.ui-popup-overlay {\n  z-index: 10200; }\n\n.ui-modal {\n  position: absolute;\n  width: 2.7rem;\n  z-index: 11000;\n  top: 50%;\n  left: 50%;\n  margin-left: -1.35rem;\n  margin-top: 0;\n  text-align: center;\n  border-radius: 7px;\n  opacity: 0;\n  -webkit-transform: translate3d(0, 0, 0) scale(1.185);\n  transform: translate3d(0, 0, 0) scale(1.185);\n  -webkit-transition-property: opacity, -webkit-transform;\n  transition-property: opacity, -webkit-transform;\n  transition-property: transform, opacity;\n  transition-property: transform, opacity, -webkit-transform;\n  color: #333;\n  display: none; }\n  .ui-modal.ui-modal-in {\n    opacity: 1;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transform: translate3d(0, 0, 0) scale(1);\n    transform: translate3d(0, 0, 0) scale(1); }\n  .ui-modal.ui-modal-out {\n    opacity: 0;\n    z-index: 10999;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transform: translate3d(0, 0, 0) scale(0.815);\n    transform: translate3d(0, 0, 0) scale(0.815); }\n\n.ui-modal-inner {\n  padding: 0.15rem;\n  border-bottom: 1px solid #b5b5b5;\n  border-radius: 7px 7px 0 0;\n  position: relative;\n  background: #e8e8e8; }\n\n.ui-modal-title {\n  font-weight: 500;\n  font-size: 0.18rem;\n  text-align: center; }\n  .ui-modal-title + .ui-modal-text {\n    margin-top: 0.05rem; }\n\n.ui-modal-buttons {\n  height: 0.44rem;\n  overflow: hidden;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  justify-content: center; }\n  .ui-modal-buttons.ui-modal-buttons-vertical {\n    display: block;\n    height: auto; }\n\n.ui-modal-button {\n  width: 100%;\n  padding: 0 .05rem;\n  height: 0.44rem;\n  font-size: 0.17rem;\n  line-height: 0.44rem;\n  text-align: center;\n  color: #00479d;\n  background: #e8e8e8;\n  display: block;\n  position: relative;\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  cursor: pointer;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  border-right: 1px solid #b5b5b5;\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  flex-grow: 1; }\n  .ui-modal-button:first-child {\n    border-radius: 0 0 0 7px; }\n  .ui-modal-button:last-child {\n    border-right: none;\n    border-radius: 0 0 7px 0; }\n  .ui-modal-button:first-child:last-child {\n    border-radius: 0 0 7px 7px; }\n  .ui-modal-button.ui-modal-button-bold {\n    font-weight: 500; }\n  html:not(.ui-watch-active-state) .ui-modal-button:active, .ui-modal-button.active-state {\n    background: #d4d4d4; }\n  .ui-modal-buttons-vertical .ui-modal-button {\n    border-right: none;\n    border-top: none;\n    border-bottom: 1px solid #b5b5b5;\n    border-radius: 0; }\n    .ui-modal-buttons-vertical .ui-modal-button:last-child {\n      border-radius: 0 0 7px 7px;\n      border-bottom: none; }\n\n.ui-modal-no-buttons .ui-modal-inner {\n  border-radius: 7px;\n  border-bottom: none; }\n\n.ui-modal-no-buttons .ui-modal-buttons {\n  display: none; }\n\n.ui-actions-modal {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  z-index: 11000;\n  width: 100%;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n  .ui-actions-modal.ui-modal-in {\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .ui-actions-modal.ui-modal-out {\n    z-index: 10999;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n\n.ui-actions-modal-group {\n  margin: .08rem; }\n\n.ui-actions-modal-button, .ui-actions-modal-label {\n  width: 100%;\n  text-align: center;\n  font-weight: normal;\n  margin: 0;\n  background: rgba(243, 243, 243, 0.95);\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: block;\n  position: relative;\n  border-bottom: 1px solid #d2d2d6; }\n  .ui-actions-modal-button.ui-actions-modal-button-bold, .ui-actions-modal-label.ui-actions-modal-button-bold {\n    font-weight: 500; }\n  .ui-actions-modal-button.ui-actions-modal-button-warning, .ui-actions-modal-label.ui-actions-modal-button-warning {\n    color: #ff4222; }\n  .ui-actions-modal-button.ui-color-warning, .ui-actions-modal-label.ui-color-warning {\n    color: #ff4222; }\n  .ui-actions-modal-button.ui-bg-warning, .ui-actions-modal-label.ui-bg-warning {\n    background: #ff4222;\n    color: white; }\n    .ui-actions-modal-button.ui-bg-warning:active, .ui-actions-modal-label.ui-bg-warning:active {\n      background: #ee2200; }\n  .ui-actions-modal-button:first-child, .ui-actions-modal-label:first-child {\n    border-radius: 4px 4px 0 0; }\n  .ui-actions-modal-button:last-child, .ui-actions-modal-label:last-child {\n    border-bottom: none;\n    border-radius: 0 0 4px 4px; }\n  .ui-actions-modal-button:first-child:last-child, .ui-actions-modal-label:first-child:last-child {\n    border-radius: 4px; }\n  .ui-actions-modal-button.ui-disabled, .ui-actions-modal-label.ui-disabled {\n    opacity: 0.95;\n    color: #8e8e93; }\n\n.ui-actions-modal-button {\n  cursor: pointer;\n  line-height: .43rem;\n  font-size: .2rem;\n  color: #00479d; }\n  .ui-actions-modal-button:active, .ui-actions-modal-button.ui-active-state {\n    background: #dcdcdc; }\n\n.ui-actions-modal-label {\n  font-size: .14rem;\n  line-height: 1.3;\n  min-height: .44rem;\n  padding: .08rem .1rem;\n  color: #666;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  justify-content: center;\n  -ms-flex-line-pack: center;\n  -webkit-align-content: center;\n  align-content: center;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\ninput.ui-modal-text-input {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  height: .30rem;\n  background: #fff;\n  margin: 0;\n  margin-top: .15rem;\n  padding: 0 .05rem;\n  border: 1px solid #a0a0a0;\n  border-radius: 5px;\n  width: 100%;\n  font-size: .14rem;\n  font-family: inherit;\n  display: block;\n  -webkit-box-shadow: 0 0 0 transparent;\n  box-shadow: 0 0 0 transparent;\n  -webkit-appearance: none;\n  appearance: none; }\n  input.ui-modal-text-input + input.ui-modal-text-input {\n    margin-top: .05rem; }\n  input.ui-modal-text-input.ui-modal-text-input-double {\n    border-radius: 5px 5px 0 0; }\n    input.ui-modal-text-input.ui-modal-text-input-double + input.ui-modal-text-input {\n      margin-top: 0;\n      border-top: 0;\n      border-radius: 0 0 5px 5px; }\n\n.ui-popup, .ui-login-screen {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 10400;\n  background: #fff;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  display: none;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: -webkit-transform;\n  transition-property: transform;\n  transition-property: transform, -webkit-transform;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n  .ui-popup.ui-modal-in, .ui-popup.ui-modal-out, .ui-login-screen.ui-modal-in, .ui-login-screen.ui-modal-out {\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms; }\n  .ui-popup.ui-modal-in, .ui-login-screen.ui-modal-in {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .ui-popup.ui-modal-out, .ui-login-screen.ui-modal-out {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n\nhtml.ui-with-statusbar-overlay .ui-popup {\n  height: -webkit-calc(100% - 20px);\n  height: calc(100% - 20px);\n  top: 20px; }\n\nhtml.ui-with-statusbar-overlay .ui-popup-overlay {\n  z-index: 9800; }\n\n@media all and (max-width: 629px), (max-height: 629px) {\n  html.ui-with-statusbar-overlay .ui-popup {\n    height: -webkit-calc(100% - 20px);\n    height: calc(100% - 20px);\n    top: 20px; }\n  html.ui-with-statusbar-overlay .ui-popup-overlay {\n    z-index: 9800; } }\n\n.ui-modal .ui-preloader {\n  width: .34rem;\n  height: .34rem; }\n\n.ui-preloader-indicator-overlay {\n  visibility: visible;\n  opacity: 0;\n  background: none; }\n\n.ui-preloader-indicator-modal {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  padding: .08rem;\n  margin-left: -.25rem;\n  margin-top: -.25rem;\n  background: rgba(0, 0, 0, 0.8);\n  z-index: 11000;\n  border-radius: 5px; }\n  .ui-preloader-indicator-modal .ui-preloader {\n    display: block;\n    width: .34rem;\n    height: .34rem; }\n\n.ui-toast {\n  background: rgba(0, 0, 0, 0.8);\n  border-radius: 20px;\n  color: white;\n  padding: 0 .16rem;\n  height: .4rem;\n  line-height: .4rem;\n  font-size: .16rem;\n  width: auto; }\n\n/* === Preloader === */\n.ui-preloader {\n  display: inline-block;\n  width: 1rem;\n  height: 1rem;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: ui-preloader-spin 1s steps(12, end) infinite;\n  animation: ui-preloader-spin 1s steps(12, end) infinite; }\n\n.ui-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  -webkit-background-size: 100% 100%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.ui-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n.ui-refresh-wrapper {\n  position: relative;\n  min-height: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n  .ui-refresh-wrapper .ui-refresh-loading {\n    display: inline-block;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    height: .2rem;\n    width: .2rem;\n    border-radius: 100%;\n    border: 0.02rem solid #666;\n    border-bottom-color: transparent;\n    vertical-align: middle;\n    -webkit-animation: ui-rotate 0.75s linear infinite;\n    animation: ui-rotate 0.75s linear infinite; }\n\n.ui-refresh-top {\n  top: -0.4rem;\n  position: absolute;\n  left: 0;\n  right: 0;\n  line-height: 0.4rem;\n  height: 0.4rem;\n  text-align: center;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box; }\n  .ui-refresh-top.ui-refresh-top-loading .ui-refresh-loading {\n    display: inline-block; }\n  .ui-refresh-top.ui-refresh-top-loading .ui-refresh-arrow {\n    display: none; }\n  .ui-refresh-top .ui-refresh-loading {\n    display: none; }\n  .ui-refresh-top.ui-refresh-toload .ui-refresh-arrow {\n    -webkit-transform: rotate(180deg) translate3d(0, 0, 0);\n    transform: rotate(180deg) translate3d(0, 0, 0); }\n\n.ui-refresh-bottom {\n  display: none;\n  position: static;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  right: 0;\n  line-height: 0.4rem;\n  height: 0.4rem;\n  text-align: center; }\n\n.ui-refresh-content {\n  overflow: auto; }\n\n.ui-refresh-arrow {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 0.13rem;\n  height: 0.2rem;\n  margin-left: -0.065rem;\n  margin-top: -0.1rem;\n  background: no-repeat center;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2026%2040'%3E%3Cpolygon%20points%3D'9%2C22%209%2C0%2017%2C0%2017%2C22%2026%2C22%2013.5%2C40%200%2C22'%20fill%3D'%238c8c8c'%2F%3E%3C%2Fsvg%3E\");\n  -webkit-background-size: contain;\n  background-size: contain;\n  -webkit-transform: rotate(0deg) translate3d(0, 0, 0);\n  transform: rotate(0deg) translate3d(0, 0, 0);\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms; }\n\n.ui-tab-title {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  background-color: #fff; }\n  .ui-tab-title > li {\n    width: 0%;\n    -webkit-box-flex: 1;\n    -webkit-flex-grow: 1;\n    flex-grow: 1;\n    text-align: center;\n    line-height: 0.45rem;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box; }\n    .ui-tab-title > li.active {\n      position: relative; }\n\n.ui-tab-title-link > li {\n  border-bottom: 1px solid #e0e0e0; }\n  .ui-tab-title-link > li.ui-active {\n    border-bottom: 2px solid #00479d;\n    color: #00479d; }\n\n.ui-tab-title-button {\n  color: #00479d;\n  border: 1px solid #00479d;\n  border-radius: 0.03rem;\n  margin: .1rem; }\n  .ui-tab-title-button > li {\n    border-left: 1px solid #00479d;\n    font-size: 0.12rem;\n    line-height: 2; }\n    .ui-tab-title-button > li.ui-active {\n      background-color: #00479d;\n      color: #fff;\n      border-bottom: none; }\n    .ui-tab-title-button > li:first-child {\n      border-left: none; }\n    .ui-tab-title-button > li:last-child {\n      border-right: none; }\n\n.ui-tab-body-wrapper > li {\n  display: none; }\n  .ui-tab-body-wrapper > li.ui-active {\n    display: block; }\n\n.ui-tab-fixed {\n  position: relative;\n  height: 100%;\n  width: 100%;\n  overflow: hidden;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n  .ui-tab-fixed > .ui-tab-title {\n    -webkit-box-flex: 0;\n    -webkit-flex-grow: 0;\n    flex-grow: 0; }\n  .ui-tab-fixed > .ui-tab-body {\n    -webkit-box-flex: 1;\n    -webkit-flex-grow: 1;\n    flex-grow: 1;\n    position: relative; }\n    .ui-tab-fixed > .ui-tab-body > .ui-tab-body-wrapper {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      font-size: 0;\n      white-space: nowrap;\n      overflow-x: visible; }\n      .ui-tab-fixed > .ui-tab-body > .ui-tab-body-wrapper > li {\n        height: 100%;\n        font-size: 0.15rem;\n        display: inline-block;\n        white-space: normal;\n        vertical-align: top;\n        width: 100%;\n        overflow: auto; }\n\n.ui-fn-left {\n  float: left; }\n\n.ui-fn-right {\n  float: right; }\n\n.ui-fn-clear:after {\n  visibility: hidden;\n  display: block;\n  font-size: 0;\n  content: \" \";\n  clear: both;\n  height: 0; }\n\n.ui-fn-show {\n  display: block; }\n\n.ui-fn-hide {\n  display: none; }\n\n.ui-fn-hide-visibility {\n  visibility: hidden; }\n\n.ui-border-t {\n  border-top: 1px solid #dfe0e1; }\n\n.ui-border-b {\n  border-bottom: 1px solid #dfe0e1; }\n\n.ui-border-tb {\n  border-top: 1px solid #dfe0e1;\n  border-bottom: 1px solid #dfe0e1; }\n\n.ui-border-l {\n  border-left: 1px solid #dfe0e1; }\n\n.ui-border-r {\n  border-right: 1px solid #dfe0e1; }\n\n.ui-border {\n  border: 1px solid #dfe0e1; }\n\n.ui-bg-color-1 {\n  background: #ffa54b; }\n\n.ui-bg-color-2 {\n  background: #9bcd46; }\n\n.ui-bg-color-3 {\n  background: #9669e1; }\n\n.ui-bg-color-4 {\n  background: #41b9f5; }\n\n.ui-bg-color-5 {\n  background: #f57d6e; }\n\n.ui-bg-color-6 {\n  background: #fa82a5; }\n\n.ui-bg-color-7 {\n  background: #41c8cd; }\n\n.ui-bg-color-8 {\n  background: #5f9be6; }\n\n.ui-txt-color-1 {\n  color: #ffa54b; }\n\n.ui-txt-color-2 {\n  color: #9bcd46; }\n\n.ui-txt-color-3 {\n  color: #9669e1; }\n\n.ui-txt-color-4 {\n  color: #41b9f5; }\n\n.ui-txt-color-5 {\n  color: #f57d6e; }\n\n.ui-txt-color-6 {\n  color: #fa82a5; }\n\n.ui-txt-color-7 {\n  color: #41c8cd; }\n\n.ui-txt-color-8 {\n  color: #5f9be6; }\n\n.ui-fn-m {\n  margin: 0.1rem; }\n\n.ui-fn-m-lr {\n  margin-left: 0.1rem;\n  margin-right: 0.1rem; }\n\n.ui-fn-m-tb {\n  margin-top: 0.1rem;\n  margin-bottom: 0.1rem; }\n\n.ui-fn-m-t {\n  margin-top: 0.1rem; }\n\n.ui-fn-m-l {\n  margin-left: 0.1rem; }\n\n.ui-fn-m-r {\n  margin-right: 0.1rem; }\n\n.ui-fn-m-b {\n  margin-bottom: 0.1rem; }\n\n.ui-fn-p {\n  padding: 0.1rem; }\n\n.ui-fn-p-lr {\n  padding-left: 0.1rem;\n  padding-right: 0.1rem; }\n\n.ui-fn-p-tb {\n  padding-top: 0.1rem;\n  padding-bottom: 0.1rem; }\n\n.ui-fn-p-t {\n  padding-top: 0.1rem; }\n\n.ui-fn-p-l {\n  padding-left: 0.1rem; }\n\n.ui-fn-p-r {\n  padding-right: 0.1rem; }\n\n.ui-fn-p-b {\n  padding-bottom: 0.1rem; }\n\n.ui-fn-copy {\n  -webkit-user-select: text;\n  user-select: text; }\n\n.ui-fn-txt-row {\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\n/*# sourceMappingURL=ui.css.map */\n"]}

+ 150 - 80
ipu/dist/js/ipu.js

@ -1146,17 +1146,44 @@
1146 1146
        });
1147 1147
    };
1148 1148
1149
    ipu.showPreloader = function (title) {
1150
        ipu.hidePreloader();
1149
    var minLoad = false;        // 是否最小时间调用方式
1150
    var loadOverTime = false;   // 是否超过最小调用时间
1151
    var loadEnd = false;        // 是否调用结束
1152
    var loadTimeOut = null;     // 延时调用ID
1153
1154
    ipu.showPreloader = function (title, minTime) {
1155
        ipu.hidePreloader(true);
1156
1151 1157
        ipu.showPreloader.preloaderModal = ipu.modal({
1152 1158
            title: title || defaults.modalPreloaderTitle,
1153 1159
            text: '<div class="ipu-preloader"></div>'
1154 1160
        });
1155 1161
1162
        if(minTime){
1163
            minLoad = true;
1164
            loadTimeOut = setTimeout(function () {
1165
                loadOverTime = true;
1166
                if(loadEnd){
1167
                    ipu.hidePreloader();
1168
                }
1169
            }, minTime);
1170
        }
1171
1156 1172
        return ipu.showPreloader.preloaderModal;
1157 1173
    };
1158
    ipu.hidePreloader = function () {
1159
        ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);
1174
    ipu.hidePreloader = function (force) {
1175
        if(force || !minLoad || (minLoad && loadOverTime)){
1176
            if(force && loadTimeOut){
1177
                window.clearTimeout(loadTimeOut);
1178
            }
1179
            ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);
1180
            minLoad = false; // 重置各标志位
1181
            loadOverTime = false;
1182
            loadEnd = false;
1183
            loadTimeOut = null;
1184
        }else{
1185
            loadEnd = true;
1186
        }
1160 1187
    };
1161 1188
    ipu.showIndicator = function () {
1162 1189
        if ($('.ipu-preloader-indicator-modal')[0]) return;
@ -1230,6 +1257,7 @@
1230 1257
        modal = $(modal);
1231 1258
        var isModal = modal.hasClass('ipu-modal'),
1232 1259
            isNotToast = !modal.hasClass('ipu-toast');
1260
            isNotToast = false; // 强制打开新窗口
1233 1261
        if ($('.ipu-modal.ipu-modal-in:not(.ipu-modal-out)').length && defaults.modalStack && isModal && isNotToast) {
1234 1262
            ipu.modalStack.push(function () {
1235 1263
                ipu.openModal(modal, cb);
@ -1504,49 +1532,81 @@
1504 1532
        form.submit();
1505 1533
    }
1506 1534
1535
    // 检查是否有ipu-pages的结构
1536
    function checkPages() {
1537
        if(!hasPages){
1538
            pagesObj = $(".ipu-pages"); // pagesObj为空则进行jquery取值
1539
            if(pagesObj.size() == 0){
1540
                pagesObj =  $("<div class='ipu-pages'><div class='ipu-page ipu-show "+zeroPageClass+"' id='"+pageIdPrefix+"0'></div>").appendTo("body");
1541
            }
1542
            hasPages = true;
1543
        }
1544
    }
1545
1546
    // 站位页面
1547
    function isZeroPage(page) {
1548
        return $(page).hasClass(zeroPageClass);
1549
    }
1550
1507 1551
    var page = {};
1552
    var hasPages = false;
1553
    var maps = {};
1554
    var pageNo = 1; // 编号0留给主页面或当前页面,或没有
1555
    var pageIdPrefix = "ipuPage-";
1556
    var pagesObj = null;
1557
    var animateInClass = "ipu-anim ipu-slideRightIn";
1558
    var animateOutClass  = "ipu-anim ipu-slideRightOut";
1559
    var eventName = "ipuUIPageBack";
1560
    var zeroPageClass = 'ipu-page-zero';
1561
    var zeroPagesClass = 'ipu-pages-zero';
1508 1562
1509 1563
    page.options = {     // 那个窗口执行open,默认父窗口
1510 1564
        target: window.parent, // 默认执行父窗口
1511
        backIndex: 1,    // 默认回退一页
1512
        closeIndex: 1,   // 默认关闭最近一个页面
1565
        backIndex: -1,    // 默认回退一页
1566
        closeIndex: -1,   // 默认关闭最近一个页面
1513 1567
        params:{},        // post的默认参数
1514
        animate: true,     // 是否动画
1568
        animate: true,     // 是否动画效果
1569
        showLoading: true,   // 是否显示加载消息
1570
        loadingMessage: '正在加载中',
1571
        method : null,     // 请求方式,用户不需要设置
1572
        minMessageTime: 500, // 最小显示加载时间,避免出现闪现的情况
1515 1573
        callBack:function () { // 事件回调
1516
1517 1574
        }
1518 1575
    };
1519 1576
1520
    var maps = {};
1521
    var pageNo = 0;
1522
1523 1577
    // 当前页面加载,针对顶层父窗口
1524 1578
    page.openPage = function (url, options) {
1525
        var overTime = false; // 超过100ms豪秒
1526
        var transEnd = false; // 动画结束
1579
        var newPage = null;
1580
        var nowPageNo = pageIdPrefix + (pageNo++);
1581
        maps[nowPageNo] = url;
1527 1582
1528
        if(options.animate) {
1529
            var animateClass = " ipu-anim ipu-slideRightIn ";
1530
            ipu.showPreloader('正在加载中');
1531
            setTimeout(function () {
1532
                overTime = true;
1533
                if (transEnd) {
1534
                    ipu.hidePreloader();
1535
                }
1536
            }, 50);  // 保证最少显示100ms,不出现闪现的情况
1583
        checkPages();
1584
1585
        if(options.showLoading){
1586
            ipu.showPreloader(options.loadingMessage, options.minMessageTime);
1537 1587
        }
1538 1588
1539
        var nowPageNo ='pageNo-'+(pageNo++);
1540
        maps[nowPageNo] = url;
1541
        var newPage = $("<div class='ipu-page' id='"+nowPageNo+"'><iframe class='ipu-page-iframe' src='"+url+"'></iframe></div>")
1589
        if(options.method == 'post'){
1590
            newPage = $("<div class='ipu-page' id='"+nowPageNo+"'><iframe class='ipu-page-iframe'></iframe></div>");
1591
        }else{
1592
            newPage = $("<div class='ipu-page' id='"+nowPageNo+"'><iframe class='ipu-page-iframe' src='"+url+"'></iframe></div>");
1593
        }
1594
1595
        var zeroPage = isZeroPage($(".ipu-page:last", pagesObj));
1596
        var animatePage = newPage;
1597
        if(zeroPage){
1598
            animatePage = pagesObj.addClass(zeroPagesClass);
1599
        }
1542 1600
1543 1601
        function end() {
1544
            if(!overTime){
1545
                transEnd = true;
1546
            }else{
1602
            if(options.showLoading) {
1547 1603
                ipu.hidePreloader();
1548 1604
            }
1549
            newPage.removeClass(animateClass);
1605
1606
            if(options.animate) {
1607
                animatePage.removeClass(animateInClass);
1608
            }
1609
1550 1610
            newPage.siblings(".ipu-show").removeClass('ipu-show');
1551 1611
            if(options.callBack){
1552 1612
                options.callBack();
@ -1554,70 +1614,62 @@
1554 1614
        }
1555 1615
1556 1616
        $(".ipu-page-iframe", newPage).one('load', function () {
1617
            newPage.addClass("ipu-show").width(); // 强制生效,否则可能出现页面闪现,无动画情况
1618
1619
            if(zeroPage){
1620
                animatePage.removeClass(zeroPagesClass);
1621
            }
1557 1622
            if(options.animate){
1558
                newPage.addClass("ipu-show"+animateClass).animationEnd(end);
1623
                animatePage.addClass(animateInClass).animationEnd(end);
1559 1624
            }else{
1560
                newPage.addClass("ipu-show");
1561 1625
                end();
1562 1626
            }
1563 1627
        });
1564
        newPage.appendTo(".ipu-pages");
1565
    };
1566 1628
1567
    page.postPage = function (url, options) {
1568
        ipu.showPreloader('正在加载中');
1569
        var nowPageNo ='pageNo-'+(pageNo++);
1570
        maps[nowPageNo] = url;
1571
        var newPage = $("<div class='ipu-page' id='"+nowPageNo+"'><iframe class='ipu-page-iframe' src=''></iframe></div>");
1572
1573
        var overTime = false; // 超过100ms豪秒
1574
        var transEnd = false; // 动画结束
1575
1576
        if(options.animate){
1577
            setTimeout(function () {
1578
                overTime = true;
1579
                if(transEnd){
1580
                    ipu.hidePreloader();
1581
                }
1582
            }, 80);  // 保证最少显示100ms,不出现闪现的情况
1629
        newPage.appendTo(pagesObj);
1630
        if(options.method == 'post') {
1631
            var pageDoc = $(".ipu-page-iframe", newPage)[0].contentDocument;
1632
            submitForm(pageDoc, url, options.params);
1583 1633
        }
1634
    };
1584 1635
1585
        $(".ipu-page-iframe", newPage).one('load', function () { // 第一次为初始化
1586
            newPage.addClass("ipu-show ipu-anim ipu-slideRightIn").animationEnd(function (e) {
1587
                if(!overTime){
1588
                    transEnd = true;
1589
                }else{
1590
                    ipu.hidePreloader();
1591
                }
1592
                newPage.removeClass("ipu-anim ipu-slideRightIn");
1593
                newPage.siblings(".ipu-show").removeClass('ipu-show');
1594
                if(options.callBack){
1595
                    options.callBack();
1596
                }
1597
            });
1598
        });
1599
        newPage.appendTo(".ipu-pages");
1600
        var pageDoc =  $(".ipu-page-iframe", newPage)[0].contentDocument;
1601
        submitForm(pageDoc, url, options.params);
1636
    // post方式加载页面
1637
    page.postPage = function (url, options) {
1638
        options.method = 'post';
1639
        page.openPage(url, options);
1602 1640
    };
1603 1641
1604 1642
    // 当前页面后退,针对顶层父窗口
1605 1643
    page.backPage = function (options) {
1606 1644
        var backIndex = options.backIndex;
1607 1645
        var page = null;
1608
        var nowPage = $(".ipu-page.ipu-show");
1646
        var nowPage = $(".ipu-page.ipu-show", pagesObj);
1609 1647
1610 1648
        if(backIndex == 0){
1611
            page = nowPage.prevAll(".ipu-page-main");
1612
        }else {
1649
            page = $(".ipu-page:first", pagesObj);
1650
        }else { // 越界的情况
1613 1651
            var prevPage = nowPage.prevAll(".ipu-page");
1614
            page= $(prevPage[options.backIndex - 1]);
1652
            if(backIndex < 0){
1653
                page= $(prevPage[-backIndex - 1]);
1654
            }else{
1655
                page= $(prevPage[prevPage.size() - backIndex]);
1656
            }
1615 1657
        }
1616
        page.addClass("ipu-show"); //显示前一个
1617 1658
1618
        nowPage.removeClass("ipu-active").addClass("ipu-anim ipu-slideRightOut").animationEnd(function () {
1619
            $(this).removeClass("ipu-show ipu-anim ipu-slideRightOut");
1659
        var animatePage = nowPage;
1660
        var zeroPage = isZeroPage(page);
1661
1662
        // 主页面模式时
1663
        if(zeroPage){
1664
            animatePage = pagesObj;
1665
        }else{
1666
            page.addClass("ipu-show"); //显示前一个
1667
        }
1668
1669
        function end (){
1670
            $(this).removeClass(animateOutClass);
1620 1671
            page.nextAll(".ipu-page").remove();
1672
1621 1673
            var iframe = $(".ipu-page-iframe", page);
1622 1674
            var nowDoc;
1623 1675
@ -1627,8 +1679,12 @@
1627 1679
                nowDoc = iframe[0].contentDocument;
1628 1680
            }
1629 1681
1682
            if(zeroPage){
1683
                pagesObj.addClass(zeroPagesClass);
1684
            }
1685
1630 1686
            var evt = nowDoc.createEvent('Event');
1631
            evt.initEvent('ipuUIPageBack', true, true);
1687
            evt.initEvent(eventName, true, true);
1632 1688
            if(options.data){
1633 1689
                evt.data = options.data;
1634 1690
            }
@ -1636,14 +1692,27 @@
1636 1692
            if(options.callBack){
1637 1693
                options.callBack();
1638 1694
            }
1639
        });
1695
        }
1696
1697
        if(options.animate){
1698
            animatePage.addClass(animateOutClass).animationEnd(end);
1699
        }else{
1700
            end();
1701
        }
1640 1702
    };
1641 1703
1642 1704
    // 往前关闭窗口
1643 1705
    page.closePage = function (options) {
1644
        var closePage = options.closeIndex - 1;
1645
        var prevPage = $(".ipu-page.ipu-show").prevAll(".ipu-page");
1646
        $(prevPage[closePage]).remove();
1706
        var closeIndex = options.closeIndex;
1707
        var prevPage = $(".ipu-page.ipu-show", pagesObj).prevAll(".ipu-page");
1708
1709
        if(closeIndex < 0){
1710
            closeIndex = -closeIndex -1;
1711
        }else{
1712
            closeIndex = prevPage.size() - closeIndex;
1713
        }
1714
1715
        $(prevPage[closeIndex]).remove();
1647 1716
        if(options.callBack){
1648 1717
            options.callBack();
1649 1718
        }
@ -1658,7 +1727,8 @@
1658 1727
    // post方法
1659 1728
    page.post = function (url, options) {
1660 1729
        options = $.extend({}, this.options, options);
1661
        options.target.ipu.page.postPage(url, options);
1730
        options.method = 'post';
1731
        options.target.ipu.page.openPage(url, options);
1662 1732
    };
1663 1733
1664 1734
    // 调用父窗口,回退
@ -1682,7 +1752,7 @@
1682 1752
1683 1753
    // 添加回调事件
1684 1754
    page.onBack = function (back) {
1685
        $("body").on('ipuUIPageBack', function (e) {
1755
        $("body").on(eventName, function (e) {
1686 1756
            var data = e.originalEvent.data;
1687 1757
            back(data);
1688 1758
        });

+ 1 - 1
ipu/dist/js/ipu.js.map

@ -1 +1 @@
1
{"version":3,"sources":["ipu-prefix.js","carousel.js","dtPicker.js","hammerCarousel.js","modal.js","navBar.js","pages.js","picker.js","popPicker.js","progressBar.js","refresh.js","tab.js","_device.js","ipu-suffix.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"ipu.js","sourcesContent":["(function () {\r\n    function setup(jQuery, iScroll, Hammer, FastClick) {\r\n        var ipu = {};\r\n","// Carousel\r\n(function (ipu, $, iscroll) {\r\n// carouselSlt应该是唯一的,否则怎么支撑多个回调,如果用户不需要多个回调,也不主动调用,则可以,先不管吧???\r\n    function Carousel(slt, options) {\r\n        this.options = options = $.extend({}, this.defaultOpt, options);\r\n        this.el = $(slt).eq(0);  // 一次只能实例化一个\r\n        this.autoPlay = options.autoPlay;\r\n         this.hasIndicator = options.indicator;\r\n        this.callBack = options.callBack;\r\n        this.currentIndex = null;\r\n\r\n        this._init();\r\n        this.play();\r\n    }\r\n\r\n    Carousel.prototype = {\r\n        defaultOpt: {\r\n            index: null,            // 默认显示索引,未设置时先查找对就active,未找到时是0\r\n            autoPlay: false,       //  是否自动播放\r\n            duration: 3000,         //  自动播放延时\r\n            indicator: false,       // 是否生成指示器\r\n            indicatorPosition: 'center',  // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok\r\n            callBack: null           // 变更时回调函数\r\n        },\r\n        _init: function () {\r\n            var wrapper = $(\">.ui-carousel-wrapper\", this.el);\r\n            var carouselItems = $(\">li\", wrapper);\r\n            this.carouselItems = carouselItems;\r\n            this.size = carouselItems.size();\r\n            that = this;\r\n\r\n            if (this.options.index == null) {\r\n                var activeIndex = carouselItems.filter(\".ui-active\").index();\r\n                this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n            }\r\n\r\n            if (this.hasIndicator) {\r\n                this._addIndicator();\r\n            }\r\n            $(window).resize(function () {\r\n                that.refresh();\r\n            });\r\n            var scrollOpt = {\r\n                snap: \"li\",          // carousel效果\r\n                momentum: false,     // 移除惯性处理\r\n                scrollX: true,       // X轴移动\r\n                scrollY:false,\r\n                hScrollbar: false,   // 没有纵向滚动条\r\n                onScrollStart: function () {\r\n                    that._pause();\r\n                },\r\n                onTouchEnd: function () {\r\n                    // 后面优化\r\n                    /*\r\n                     if (that.iscroll.currPageX == that.size - 1) {\r\n                     that.show(that.size - 2);\r\n                     }\r\n                     */\r\n                },\r\n                onScrollEnd: function () {\r\n                    that._end();\r\n                }\r\n            };\r\n            this.iscroll = new iscroll(this.el.get(0), scrollOpt);\r\n            this.show(this.options.index, 0);\r\n        },\r\n        stop: function () {\r\n            this._pause();\r\n            this.autoPlay=false;\r\n        },\r\n        _pause: function () {\r\n            if (this.autoPlay && this.timeoutId) {\r\n                clearTimeout(this.timeoutId);\r\n                this.timeoutId = null;\r\n            }\r\n        },\r\n        prev: function () {\r\n            var index = this.currentIndex == 0 ? this.size - 1 : this.currentIndex - 1;\r\n            this.show(index);\r\n        },\r\n        next: function () {\r\n            var index = this.currentIndex == this.size - 1 ? 0 : this.currentIndex + 1;\r\n            this.show(index);\r\n        },\r\n        show: function (index, time) {\r\n            this._pause();\r\n            this.iscroll.scrollToPage(index, 0, time);\r\n        },\r\n        play: function () {\r\n            this.autoPlay=true;\r\n            this._play();\r\n        },\r\n        refresh: function () {\r\n            var that = this;\r\n            that.show(this.currentIndex);\r\n        },\r\n        _play: function () {\r\n            if (this.autoPlay && !this.timeoutId) {\r\n                var that = this;\r\n                this.timeoutId = setTimeout(function () {\r\n                    this.timeoutId = null;\r\n                    that.next();\r\n                }, that.options.duration);\r\n            }\r\n        },\r\n        _end: function () {\r\n            var currentIndex = this.iscroll.currPageX;\r\n            if (currentIndex != this.currentIndex) {\r\n                if (this.callBack) {\r\n                    this.callBack(currentIndex, this.currentIndex);\r\n                }\r\n                this.currentIndex = currentIndex;\r\n\r\n                if (this.hasIndicator) {\r\n                    this.indicatorIndexs.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n                }\r\n                this.carouselItems.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n            }\r\n            this._play();\r\n        },\r\n        _addIndicator: function () {\r\n            var html = \"\";\r\n            for (var i = 0; i < this.size; i++) {\r\n                html += \"<li></li>\";\r\n            }\r\n            html = \"<ul class='ui-carousel-indicator'>\" + html + \"</ul>\";\r\n            this.indicator = $(html).appendTo(this.el);\r\n            this.indicatorIndexs = $(\"li\", this.indicator);\r\n        },\r\n        destroy: function () {\r\n            // 自己怎么销毁,相关事件移除??\r\n            this.iscroll.destroy();\r\n        }\r\n    };\r\n\r\n    ipu.carousel =  function (slt, options) {\r\n        return new Carousel(slt, options);\r\n    };\r\n\r\n})(ipu || window, jQuery, iScroll);\r\n","// dtPicker  此版本最大值与最小值,存在问题,当时间跨过一天时\r\n(function (ipu, $) {\r\n    var Picker = ipu.Picker;\r\n    var defaultPickerDate = new Date();   // 有些时间不齐全。如time,需要一个默认日期来运算\r\n\r\n\r\n    // show方法调用时,若没有值,则为当前值,还是有值就不变动了,点了确认按钮后,就不再变动了\r\n    // 日期范围的选择处理\r\n    function DtPicker(options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n\r\n        if(!Picker){\r\n            Picker = ipu.Picker;\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    DtPicker.prototype.defaultOptions = {\r\n        template: '<div class=\"ui-poppicker ui-dtpicker\">\\\r\n                        <div class=\"ui-poppicker-header\">\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-cancel\">取消</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-ok\">确定</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-clear\">清除</button>\\\r\n                        </div>\\\r\n                        <div class=\"ui-poppicker-title\">\\\r\n                            <label class=\"ui-dtpicker-y\"></label>\\\r\n                            <label class=\"ui-dtpicker-m\"></label>\\\r\n                            <label class=\"ui-dtpicker-d\"></label>\\\r\n                            <label class=\"ui-dtpicker-h\"></label>\\\r\n                            <label class=\"ui-dtpicker-mi\"></label>\\\r\n                        </div>\\\r\n                        <div>\\\r\n                        <div class=\"ui-poppicker-body\">\\\r\n                            <div class=\"ui-picker\" data-id=\"picker-y\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-m\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-d\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-h\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-mi\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                        </div>\\\r\n                    </div>',\r\n        buttons: ['取消', '确认', '清除'],\r\n        labels: ['年', '月', '日', '时', '分'],\r\n        type: 'datetime',       // date, time, datetime, hour, month\r\n        customData: {},  // 自定义数据\r\n        hasClear: false,    // 是否显示清除按钮\r\n        callBack: function () { // 选择数据时的回调函数\r\n        }\r\n        // beginDate: Date类型,或毫秒值\r\n        // endDate: 同上\r\n    };\r\n\r\n    DtPicker.prototype._init = function () {\r\n        var self = this;\r\n        this.mask = this.createMask();\r\n\r\n        var _picker = this.holder = $(this.options.template).appendTo(\"body\");\r\n        var ui = self.ui = {\r\n            picker: this.holder,\r\n            ok: $('.ui-poppicker-btn-ok', _picker),\r\n            cancel: $('.ui-poppicker-btn-cancel', _picker),\r\n            clear: $('.ui-poppicker-btn-clear', _picker),\r\n            buttons: $('.ui-poppicker-header .ui-btn', _picker),\r\n            labels: $('.ui-poppicker-title label', _picker)\r\n        };\r\n\r\n\r\n        ui.i = new Picker($('[data-id=\"picker-mi\"]', _picker), {listen: false}); // 分钟变更无需要处理\r\n\r\n        ui.h = new Picker($('[data-id=\"picker-h\"]', _picker), {         // 小时变更,有最小值或最大值,需要变更分钟\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null && (self.options.beginMonth || self.options.endMonth)) {\r\n                    self._createMinutes();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.d = new Picker($('[data-id=\"picker-d\"]', _picker), { //仅提供了beginDate时,触发day,hours,minutes的change\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null && (self.options.beginMonth || self.options.endMonth)) {\r\n                    self._createHours();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.m = new Picker($('[data-id=\"picker-m\"]', _picker), { // 月变更时,总要变更day\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null) {\r\n                    self._createDay();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.y = new Picker($('[data-id=\"picker-y\"]', _picker), { // 年发生变更,如果没有结束月,此时有所有的月,是不需要变更月的,只需要变更day\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index != null) {\r\n                    if (self.options.beginMonth || self.options.endMonth) {\r\n                        self._createMonth();\r\n                    } else {\r\n                        self._createDay();\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n\r\n\r\n\r\n        self._create();\r\n\r\n        var ui = self.ui;\r\n        //设定label\r\n        self._setLabels();\r\n        self._setButtons();\r\n        //设定类型\r\n        ui.picker.attr('data-type', this.options.type);\r\n\r\n        //设定默认值\r\n\r\n        self._setSelectedValue(this.options.value);\r\n\r\n        //防止滚动穿透 TODO:待确认情况\r\n        /* self.ui.picker.addEventListener($.EVENT_START, function (event) {\r\n         event.preventDefault();\r\n         }, false);\r\n         self.ui.picker.addEventListener($.EVENT_MOVE, function (event) {\r\n         event.preventDefault();\r\n         }, false);*/\r\n    };\r\n\r\n    DtPicker.prototype.getSelected = function () {\r\n        var self = this;\r\n        var ui = self.ui;\r\n        var type = self.options.type;\r\n        var selected = {\r\n            type: type,\r\n            y: ui.y.getSelectedItem(),\r\n            m: ui.m.getSelectedItem(),\r\n            d: ui.d.getSelectedItem(),\r\n            h: ui.h.getSelectedItem(),\r\n            i: ui.i.getSelectedItem(),\r\n            toString: function () {\r\n                return this.value;\r\n            }\r\n        };\r\n        switch (type) {\r\n            case 'datetime':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text;\r\n                break;\r\n            case 'date':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text;\r\n                break;\r\n            case 'time':\r\n                selected.value = selected.h.value + ':' + selected.i.value;\r\n                selected.text = selected.h.text + ':' + selected.i.text;\r\n                break;\r\n            case 'month':\r\n                selected.value = selected.y.value + '-' + selected.m.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text;\r\n                break;\r\n            case 'hour':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text;\r\n                break;\r\n        }\r\n        return selected;\r\n    };\r\n\r\n    DtPicker.prototype._setSelectedValue = function (value) {\r\n        var self = this;\r\n        var ui = self.ui;\r\n\r\n        if(!value){\r\n            if(this.options.type == 'time'){\r\n                value = '00:00';\r\n            }else{\r\n                value = defaultPickerDate.getFullYear()+'-'+(defaultPickerDate.getMonth()+1)+'-'+defaultPickerDate.getDate()+' '\r\n                    + defaultPickerDate.getHours() + ':' + defaultPickerDate.getMinutes();\r\n            }\r\n        }\r\n        var parsedValue = self._parseSetValue(value);\r\n\r\n        ui.y.setListen(true);\r\n        ui.m.setListen(false);\r\n        ui.d.setListen(false);\r\n        ui.h.setListen(false);\r\n        ui.i.setListen(false);\r\n        ui.y.setSelectedValue(parsedValue.y);\r\n\r\n        ui.m.setListen(true);\r\n        ui.m.setSelectedValue(parsedValue.m);\r\n\r\n        ui.d.setListen(true);\r\n        ui.d.setSelectedValue(parsedValue.d);\r\n\r\n        ui.h.setListen(true);\r\n        ui.h.setSelectedValue(parsedValue.h);\r\n\r\n        ui.i.setListen(true);\r\n        ui.i.setSelectedValue(parsedValue.i);\r\n\r\n        this.value = this.getSelected().value;\r\n    };\r\n\r\n    DtPicker.prototype.setSelectedValue = function (value) {\r\n        this._setSelectedValue(value);\r\n    };\r\n\r\n    DtPicker.prototype.isLeapYear = function (year) {\r\n        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);\r\n    };\r\n\r\n    DtPicker.prototype._inArray = function (array, item) {\r\n        for (var index in array) {\r\n            var _item = array[index];\r\n            if (_item === item) return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    DtPicker.prototype.getDayNum = function (year, month) {\r\n        var self = this;\r\n        if (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) {\r\n            return 31;\r\n        } else if (self._inArray([4, 6, 9, 11], month)) {\r\n            return 30;\r\n        } else if (self.isLeapYear(year)) {\r\n            return 29;\r\n        } else {\r\n            return 28;\r\n        }\r\n    };\r\n\r\n    DtPicker.prototype._fill = function (num) {\r\n        num = num.toString();\r\n        if (num.length < 2) {\r\n            num = 0 + num;\r\n        }\r\n        return num;\r\n    };\r\n\r\n    DtPicker.prototype._isBeginYear = function () {\r\n        return this.options.beginYear === parseInt(this.ui.y.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginMonth = function () {\r\n        return this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginDay = function () {\r\n        return this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginHours = function () {\r\n        return this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndYear = function () {\r\n        return this.options.endYear === parseInt(this.ui.y.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndMonth = function () {\r\n        return this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndDay = function () {\r\n        return this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndHours = function () {\r\n        return this._isEndDay() && this.options.endHours === parseInt(this.ui.h.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._createYear = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        //生成年列表\r\n        var yArray = [];\r\n        if (options.customData.y) {\r\n            yArray = options.customData.y;\r\n        } else {\r\n            var yBegin = options.beginYear;\r\n            var yEnd = options.endYear;\r\n            for (var y = yBegin; y <= yEnd; y++) {\r\n                yArray.push({\r\n                    text: y + '',\r\n                    value: y\r\n                });\r\n            }\r\n        }\r\n        ui.y.setItems(yArray);\r\n        //ui.y.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createMonth = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成月列表\r\n        var mArray = [];\r\n        if (options.customData.m) {\r\n            mArray = options.customData.m;\r\n        } else {\r\n            var m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1;\r\n            var maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12;\r\n            for (; m <= maxMonth; m++) {\r\n                var val = self._fill(m);\r\n                mArray.push({\r\n                    text: val,\r\n                    value: m\r\n                });\r\n            }\r\n        }\r\n        ui.m.setItems(mArray);\r\n        //ui.m.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createDay = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成日列表\r\n        var dArray = [];\r\n        if (options.customData.d) {\r\n            dArray = options.customData.d;\r\n        } else {\r\n            var d = self._isBeginMonth() ? options.beginDay : 1;\r\n            var maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.getSelectedValue()), parseInt(this.ui.m.getSelectedValue()));\r\n            for (; d <= maxDay; d++) {\r\n                var val = self._fill(d);\r\n                dArray.push({\r\n                    text: val,\r\n                    value: d\r\n                });\r\n            }\r\n        }\r\n        ui.d.setItems(dArray);\r\n        //current = current || ui.d.getSelectedValue();\r\n        //ui.d.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createHours = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        //生成时列表\r\n        var hArray = [];\r\n        if (options.customData.h) {\r\n            hArray = options.customData.h;\r\n        } else {\r\n            var h = self._isBeginDay() ? options.beginHours : 0;\r\n            var maxHours = self._isEndDay() ? options.endHours : 23;\r\n            for (; h <= maxHours; h++) {\r\n                var val = self._fill(h);\r\n                hArray.push({\r\n                    text: val,\r\n                    value: h\r\n                });\r\n            }\r\n        }\r\n        ui.h.setItems(hArray);\r\n        //ui.h.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createMinutes = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成分列表\r\n        var iArray = [];\r\n        if (options.customData.i) {\r\n            iArray = options.customData.i;\r\n        } else {\r\n            var i = self._isBeginHours() ? options.beginMinutes : 0;\r\n            var maxMinutes = self._isEndHours() ? options.endMinutes : 59;\r\n            for (; i <= maxMinutes; i++) {\r\n                var val = self._fill(i);\r\n                iArray.push({\r\n                    text: val,\r\n                    value: i\r\n                });\r\n            }\r\n        }\r\n        ui.i.setItems(iArray);\r\n        //ui.i.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._setLabels = function () {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        ui.labels.each(function (i, label) {\r\n            label.innerText = options.labels[i];\r\n        });\r\n    };\r\n\r\n    DtPicker.prototype._setButtons = function () {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        ui.cancel.text(options.buttons[0]);\r\n        ui.ok.text(options.buttons[1]);\r\n\r\n        if(options.hasClear){\r\n            ui.clear.text(options.buttons[2])\r\n        }else{\r\n            ui.clear.hide();\r\n        }\r\n\r\n        ui.buttons.each(function (index) {\r\n            $(this).click(function () {\r\n                self.clickCall(index);\r\n            })\r\n        })\r\n    };\r\n\r\n    // 解析设置的值,目前是字符串,完整日期格式 2012-12-12 12:21\r\n    DtPicker.prototype._parseSetValue = function (value) {\r\n        var now = defaultPickerDate;\r\n        var type = this.options.type;\r\n\r\n        var rs = {\r\n            y: now.getFullYear(),\r\n            m: now.getMonth()+1,\r\n            d: now.getDate(),\r\n            h: now.getHours(),\r\n            i: now.getMinutes()\r\n        };\r\n\r\n        if(value instanceof Date){\r\n            if( type == 'time'){\r\n                valu= +value.getHours()+\":\"+value.getMinutes();\r\n            }else{\r\n                value = value.getFullYear()+'-'+(value.getMonth()+1)+'-'+value.getDate()+ ' '\r\n                    +value.getHours()+\":\"+value.getMinutes();\r\n            }\r\n        }\r\n\r\n        var parts = value.replace(\":\", \"-\").replace(\" \", \"-\").split(\"-\");\r\n        for(var i=0, j=parts.length; i<j; i++){\r\n            parts[i] = parseInt(parts[i]);\r\n        }\r\n\r\n        if(type == 'datetime'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = parts[3];    //\r\n            rs.i = parts[4];\r\n        }else if(type == 'date'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = 0;    //\r\n            rs.i = 0;\r\n        }else if(type == 'time'){\r\n            rs.h = parts[0];    //\r\n            rs.i = parts[1];\r\n        }else if(type == 'hour'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = parts[3];    //\r\n            rs.i = 0;\r\n        }else if(type == 'month'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = 1;    //\r\n            rs.h = 0;    //\r\n            rs.i = 0;\r\n        }\r\n\r\n        return rs;\r\n    };\r\n\r\n    DtPicker.prototype._create = function () {\r\n        var self = this;\r\n        var options = this.options;\r\n        var now = defaultPickerDate;\r\n\r\n        var beginDate = options.beginDate;\r\n        if(beginDate){\r\n            beginDate = this._parseSetValue(beginDate);\r\n            options.beginYear = beginDate.y;\r\n            options.beginMonth = beginDate.m;\r\n            options.beginDay = beginDate.d;\r\n            options.beginHours = beginDate.h;\r\n            options.beginMinutes = beginDate.i;\r\n        }else if(options.type == 'time'){\r\n            options.beginYear =  now.getFullYear();\r\n            options.beginMonth = now.getMonth() + 1;\r\n            options.beginDay = now.getDate();\r\n            options.beginHours = 0;\r\n            options.beginMinutes = 0;\r\n        }else {\r\n            options.beginYear =  now.getFullYear() - 5;\r\n        }\r\n\r\n        var endDate = options.endDate;\r\n        if (endDate) { //设定了结束日期\r\n            endDate = this._parseSetValue(endDate);\r\n            options.endYear = endDate.y;\r\n            options.endMonth = endDate.m;\r\n            options.endDay = endDate.d;\r\n            options.endHours = endDate.h;\r\n            options.endMinutes = endDate.i;\r\n        }else if(options.type == 'time'){\r\n            options.endYear =  now.getFullYear();\r\n            options.endMonth = now.getMonth() + 1;\r\n            options.endDay = now.getDate();\r\n            options.endHours = 24;\r\n            options.endMinutes = 59;\r\n        }else {\r\n            options.endYear =  options.beginYear + 10 ;\r\n        }\r\n\r\n        //生成\r\n        self._createYear();\r\n        self._createMonth();\r\n        self._createDay();\r\n        self._createHours();\r\n        self._createMinutes();\r\n    };\r\n\r\n    // 更新选择框,更新当前值\r\n    DtPicker.prototype.setBeginDate = function (date) {\r\n        this.options.beginDate = date;\r\n        this._create();\r\n    };\r\n\r\n    // 判断最大最小值合理性\r\n    DtPicker.prototype.setEndDate = function (date) {\r\n        this.options.endDate = date;\r\n        this._create();\r\n    };\r\n\r\n    DtPicker.prototype.dispose = function () {\r\n        var self = this;\r\n        self.hide();\r\n        setTimeout(function () {\r\n            self.ui.picker.parentNode.removeChild(self.ui.picker);\r\n            for (var name in self) {\r\n                self[name] = null;\r\n                delete self[name];\r\n            }\r\n            self.disposed = true;\r\n        }, 300);\r\n    };\r\n\r\n    DtPicker.prototype.show = function (callBack) {\r\n        if (callBack) {\r\n            this.options.callBack = callBack;\r\n        }\r\n        this.mask.show();\r\n        this.setSelectedValue(this.value);\r\n        this.holder.addClass(\"ui-active\");\r\n    };\r\n\r\n    DtPicker.prototype.clickCall = function(index){\r\n        var self = this;\r\n        var sltDate = self.getSelected();\r\n        var rs = self.options.callBack.call(this , sltDate, index);\r\n        if (rs !== false) {\r\n            if(index == 1){ // 假定确认按钮在第二个位置,传回true则存储当前值\r\n                self.value = sltDate.value;\r\n            }else if(index == 2){\r\n                self.value = null;\r\n            }\r\n            self.hide();\r\n        }\r\n    };\r\n\r\n    DtPicker.prototype.hide = function () {\r\n        this.mask.close();\r\n        this.holder.removeClass(\"ui-active\");\r\n    };\r\n\r\n    // 应该移除callback参数,提取出业成一个工具方法\r\n    DtPicker.prototype.createMask = function(callback) {\r\n        var self = this;\r\n        var element = document.createElement('div');\r\n        element.classList.add(\"ui-picker-backup\");\r\n        //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n        element.addEventListener('click', function() {\r\n            self.clickCall(0);\r\n        });\r\n        var mask = [element];\r\n        mask._show = false;\r\n        mask.show = function() {\r\n            mask._show = true;\r\n            element.setAttribute('style', 'opacity:1');\r\n            document.body.appendChild(element);\r\n            return mask;\r\n        };\r\n        mask._remove = function() {\r\n            if (mask._show) {\r\n                mask._show = false;\r\n                element.setAttribute('style', 'opacity:0');\r\n                setTimeout(function() {\r\n                    var body = document.body;\r\n                    element.parentNode === body && body.removeChild(element);\r\n                }, 350);\r\n            }\r\n            return mask;\r\n        };\r\n        mask.close = function() {\r\n            if(mask._show){\r\n                if (callback) {\r\n                    if (callback() !== false) {\r\n                        mask._remove();\r\n                    }\r\n                } else {\r\n                    mask._remove();\r\n                }\r\n            }\r\n        };\r\n        return mask;\r\n    };\r\n\r\n    ipu.dtPicker = function(options){\r\n        return new DtPicker(options);\r\n    };\r\n})(ipu || window, jQuery);\r\n","// 支持非循环\r\n// size命名用的有点混淆。。\r\n// 不能支持元素隐藏时,使用百比分处理移动距离。。。?\r\n// 支持两个以内容显示\r\n// 支持类似snap实现\r\n// 理想是移除carousel.js的实现,用hammerCarousel.js实现所有相关功能\r\n\r\n(function (ipu, $, Hammer) {\r\n    function HammerCarousel(navSlt, options) {\r\n        this.options = options = $.extend({}, this.defaultOptions, options);\r\n        this.el = $(navSlt).get(0);\r\n        this._init();\r\n    }\r\n\r\n    // 直接替换掉了prototype对象,可能不是个好选择\r\n    HammerCarousel.prototype = {\r\n        defaultOptions: {\r\n            index: null,        // 默认显示第几个项,其实挺没用的,默认显示第一个,用户再调用一下显示第几个,作用一样现在。\r\n            autoPlay: false,    // 是否自动轮播\r\n            duration: 3000,     // 轮播间隔\r\n            indicator: false,  //是否生成指示器,即小点点\r\n            callBack: null,  // 轮播后回调函数\r\n            clickBack: null   // 各子项用户点击事件\r\n            //indicatorPosition: 'center',  // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok,参考humUI和mui\r\n        },\r\n        _init: function () {\r\n            this.wrapper = $(\">.ui-carousel-wrapper\", this.el);\r\n            this.carouselItems = $(\">li\", this.wrapper);\r\n\r\n\r\n            this.showSize = 1; // 假设一屏默认显示1个,所以做循环显示只需要复制一个子项\r\n            this.carouselItemSizes = [];\r\n            this.currentIndex = 0;\r\n            this.moveLen = 0;\r\n            this.lastItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来判断是复制项\r\n\r\n            // 这里假设每个元素都是相等的\r\n            this.carouselItems.slice(0, this.showSize).clone().appendTo(this.wrapper); // 如果做无限循环则要这样处理\r\n            this.size = this.carouselItems.size();\r\n\r\n            var self = this;\r\n            if(this.options.clickBack){\r\n                $(\">li\", this.wrapper).each(function (i) {\r\n                    $(this).click(function () {\r\n                        self.options.clickBack.call(this, i%self.size);\r\n                    });\r\n                })\r\n            }\r\n\r\n            this.sizeCount();\r\n            var that = this;\r\n\r\n            this.hammer = new Hammer.Manager(this.el); // 避免因为li里面的内容高度不够,而不能触发相关事件\r\n            this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_HORIZONTAL, threshold: 10}));\r\n            this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this.onPan, this));\r\n\r\n            $(window).resize(function () { // 在尺寸变化时,处理,是否可以考虑只在宽度变化时处理,横屏事件?\r\n                that.refresh();\r\n            });\r\n\r\n            if (this.options.index == null) {\r\n                var activeIndex = this.carouselItems.filter(\".ui-active\").index();\r\n                this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n            }\r\n\r\n            if (this.options.indicator) {\r\n                this._addIndicator();\r\n            }\r\n\r\n            this.show(this.options.index);\r\n        },\r\n        stop: function () {\r\n            this._pause();\r\n            this.options.autoPlay = false;\r\n        },\r\n        _pause: function () {\r\n            if (this.timeoutId) {\r\n                clearTimeout(this.timeoutId);\r\n                this.timeoutId = null;\r\n            }\r\n        },\r\n        prev: function () {\r\n            var index = this.currentIndex == 0 ? this.size - 1 : this.currentIndex - 1;\r\n            if (index == this.size - 1) {\r\n                this._show(this.size, false);\r\n                this.wrapper.width();\r\n            }\r\n            this._show(index, true);\r\n        },\r\n        next: function () {//下一张\r\n            var index = this.currentIndex == this.size ? 1 : this.currentIndex + 1;\r\n            if (index == 1) {\r\n                this._show(0, false);\r\n                this.wrapper.width();\r\n            }\r\n            this._show(index, true);\r\n        },\r\n        show: function (index) {//跳到指定索引处\r\n            // 用户指定跳时,在当前index==0时,涉及一个最近跳转处理,目前未处理,...不管了\r\n            if (index > this.size || index < 0) {\r\n                console.error(\"index超出范围!\");\r\n            } else {\r\n                this._show(index); // 默认追加动画\r\n            }\r\n        },\r\n        play: function () {\r\n            this.options.autoPlay = true;\r\n            this._play();\r\n        },\r\n        _play: function () {\r\n            if (this.options.autoPlay && !this.timeoutId) {\r\n                var that = this;\r\n                this.timeoutId = setTimeout(function () {\r\n                    that.timeoutId = null;//清空这个timeoutId,代表该次处理已经执行了\r\n                    that.next();\r\n                }, that.options.duration);\r\n            }\r\n        },\r\n        _end: function () {//移动结束时调用\r\n            var currentIndex = this.currentIndex;\r\n\r\n            if (this.options.callBack) {\r\n                this.options.callBack(currentIndex, this.lastItem);//返回当前索引,以及是滞最后一项参数\r\n            }\r\n\r\n            if (this.indicator) {\r\n                this.indicatorIndexs.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n            }\r\n            this.carouselItems.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n\r\n            this._play();//处理自动播放\r\n        },\r\n        _addIndicator: function () {\r\n            var html = \"\";\r\n            for (var i = 0; i < this.size; i++) {\r\n                html += \"<li></li>\";\r\n            }\r\n            html = \"<ul class='ui-carousel-indicator'>\" + html + \"</ul>\";\r\n            this.indicator = $(html).appendTo(this.el);\r\n            this.indicatorIndexs = $(\"li\", this.indicator);\r\n        },\r\n        sizeCount: function () {\r\n            this.wrapperSize = this.wrapper.outerWidth(true);\r\n            this.itemSize = this.carouselItems.eq(0).outerWidth(true);\r\n            this.mostSize = this.size * this.itemSize; // 宽度*数量\r\n            $(this.wrapper).removeClass(\"ui-carousel-animate\").width();\r\n\r\n            var that = this;\r\n            $(\">li\", this.wrapper).each(function (index, dom) { // 此处要注意,最后一个子项是后加进入的,要重新使用jquery处理一下,不能直接使用this.xx来处理\r\n                that.carouselItemSizes[index] = $(this).position().left;\r\n            });\r\n        },\r\n        refresh: function () {\r\n            if (this.wrapperSize != this.wrapper.outerWidth(true)) {\r\n                this.sizeCount();\r\n                this._show(this.currentIndex, true); //新的位置\r\n            }\r\n        },\r\n        move: function (moveLen) { // 类似mouseMove时的处理函数\r\n            this._pause();\r\n            $(this.wrapper).removeClass(\"ui-carousel-animate\");\r\n            var move = (this.moveLen - moveLen) % this.mostSize;\r\n            move = (move + this.mostSize) % this.mostSize;\r\n            this.displayMoveLen = move;\r\n\r\n            move = -move + \"px\";\r\n            $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n        },\r\n        _show: function (index, animate) { // 知道最终移动到的项时,调用\r\n            if (animate !== false) { // 默认值为true\r\n                animate = true;\r\n            }\r\n\r\n            this._pause();\r\n            $(this.wrapper).toggleClass(\"ui-carousel-animate\", animate);\r\n            this.currentIndex = index % this.size;\r\n            //this.currentIndex = index;\r\n            this.lastItem = index == this.size;\r\n            var move = this.carouselItemSizes[index];\r\n            this.moveLen = move;\r\n            move = -move + \"px\";\r\n\r\n            $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n            if (animate) {\r\n                this._end();\r\n            }\r\n        },\r\n        onPan: function (ev) {\r\n            var delta = ev.deltaX;\r\n            // pancancel与panend,有效的pan事件结束与无效的pan事件结束?\r\n            if (ev.type == 'panend' || ev.type == 'pancancel') {\r\n                var value = delta / this.itemSize;\r\n                var intValue = parseInt(Math.abs(value));               // 取整数\r\n                var decimal = Math.abs(value) % 1;                   // 取小数\r\n\r\n                if (decimal > 0.2) { // 滑动超过页面宽20%;\r\n                    intValue = intValue + 1;\r\n                }\r\n                if (value > 0) {\r\n                    intValue = -intValue;\r\n                }\r\n\r\n                var index = (this.currentIndex + intValue) % this.size;\r\n                index = (index + this.size) % this.size; // 因为可能是个负值,转换成正值\r\n\r\n                // 当前位移大于一个项的长度,这由move方法导致的,所以此时只能是最后一项在显示,所以要显示最后一项\r\n                if (index == 0 && this.displayMoveLen > this.itemSize) {\r\n                    index = this.size;\r\n                }\r\n                this._show(index);\r\n            } else if (ev.type == 'panmove'){\r\n                this.move(delta);\r\n            }\r\n        }\r\n    };\r\n\r\n    ipu.hammerCarousel = function (slt, options) {\r\n        return new HammerCarousel(slt, options);\r\n    };\r\n})(ipu || window, jQuery,  Hammer);\r\n","(function (ipu, $) {\r\n    //$ extends\r\n    function __dealCssEvent(eventNameArr, callback) {\r\n        // console.log('__dealCssEvent');\r\n        var events = eventNameArr,\r\n            i, dom = this;// jshint ignore:line\r\n\r\n        function fireCallBack(e) {\r\n            /*jshint validthis:true */\r\n            if (e.target !== this) return;\r\n            callback.call(this, e);\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.off(events[i], fireCallBack);\r\n            }\r\n        }\r\n\r\n        if (callback) {\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.on(events[i], fireCallBack);\r\n            }\r\n        }\r\n    }\r\n\r\n    $.fn.transitionEnd = function (callback) {\r\n        // console.log('transitionEnd');\r\n        __dealCssEvent.call(this, ['webkitTransitionEnd', 'transitionend'], callback);\r\n        return this;\r\n    };\r\n\r\n\r\n\r\n    var _modalTemplateTempDiv = document.createElement('div');\r\n\r\n    var defaults = {\r\n        modalStack: true,\r\n        modalButtonOk: '确定',\r\n        modalButtonCancel: '取消',\r\n        modalPreloaderTitle: '加载中',\r\n        modalContainer: document.body ? document.body : 'body'\r\n    };\r\n\r\n    ipu.modalStack = [];\r\n\r\n    ipu.modalStackClearQueue = function () {\r\n        if (ipu.modalStack.length) {\r\n            (ipu.modalStack.shift())();\r\n        }\r\n    };\r\n    ipu.modal = function (params) {\r\n        params = params || {};\r\n        var modalHTML = '';\r\n        var buttonsHTML = '';\r\n        if (params.buttons && params.buttons.length > 0) {\r\n            for (var i = 0; i < params.buttons.length; i++) {\r\n                buttonsHTML += '<span class=\"ui-modal-button' + (params.buttons[i].bold ? ' ui-modal-button-bold' : '') + '\">' + params.buttons[i].text + '</span>';\r\n            }\r\n        }\r\n        var extraClass = params.extraClass || '';\r\n        var titleHTML = params.title ? '<div class=\"ui-modal-title\">' + params.title + '</div>' : '';\r\n        var textHTML = params.text ? '<div class=\"ui-modal-text\">' + params.text + '</div>' : '';\r\n        var afterTextHTML = params.afterText ? params.afterText : '';\r\n        var noButtons = !params.buttons || params.buttons.length === 0 ? 'ui-modal-no-buttons' : '';\r\n        var verticalButtons = params.verticalButtons ? 'ui-modal-buttons-vertical' : '';\r\n        modalHTML = '<div class=\"ui-modal ' + extraClass + ' ' + noButtons + '\"><div class=\"ui-modal-inner\">' + (titleHTML + textHTML + afterTextHTML) + '</div><div class=\"ui-modal-buttons ' + verticalButtons + '\">' + buttonsHTML + '</div></div>';\r\n\r\n        _modalTemplateTempDiv.innerHTML = modalHTML;\r\n\r\n        var modal = $(_modalTemplateTempDiv).children();\r\n\r\n        $(defaults.modalContainer).append(modal[0]);\r\n\r\n        // Add events on buttons\r\n        modal.find('.ui-modal-button').each(function (index, el) {\r\n            $(el).on('click', function (e) {\r\n                if (params.buttons[index].close !== false) ipu.closeModal(modal);\r\n                if (params.buttons[index].onClick) params.buttons[index].onClick(modal, e);\r\n                if (params.onClick) params.onClick(modal, index);\r\n            });\r\n        });\r\n        ipu.openModal(modal);\r\n        return modal[0];\r\n    };\r\n    ipu.alert = function (text, title, callbackOk) {\r\n        if (typeof title === 'function') {\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            buttons: [{text: defaults.modalButtonOk, bold: true, onClick: callbackOk}]\r\n        });\r\n    };\r\n    ipu.confirm = function (text, title, callbackOk, callbackCancel) {\r\n        if (typeof title === 'function') {\r\n            callbackCancel = arguments[2];\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            buttons: [\r\n                {text: defaults.modalButtonCancel, omodalButtonCancelnClick: callbackCancel},\r\n                {text: defaults.modalButtonOk, bold: true, onClick: callbackOk}\r\n            ]\r\n        });\r\n    };\r\n    ipu.prompt = function (text, title, callbackOk, callbackCancel) {\r\n        if (typeof title === 'function') {\r\n            callbackCancel = arguments[2];\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            afterText: '<input type=\"text\" class=\"ui-modal-text-input\">',\r\n            buttons: [\r\n                {\r\n                    text: defaults.modalButtonCancel\r\n                },\r\n                {\r\n                    text: defaults.modalButtonOk,\r\n                    bold: true\r\n                }\r\n            ],\r\n            onClick: function (modal, index) {\r\n                if (index === 0 && callbackCancel) callbackCancel($(modal).find('.ui-modal-text-input').val());\r\n                if (index === 1 && callbackOk) callbackOk($(modal).find('.ui-modal-text-input').val());\r\n            }\r\n        });\r\n    };\r\n\r\n    ipu.showPreloader = function (title) {\r\n        ipu.hidePreloader();\r\n        ipu.showPreloader.preloaderModal = ipu.modal({\r\n            title: title || defaults.modalPreloaderTitle,\r\n            text: '<div class=\"ui-preloader\"></div>'\r\n        });\r\n\r\n        return ipu.showPreloader.preloaderModal;\r\n    };\r\n    ipu.hidePreloader = function () {\r\n        ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);\r\n    };\r\n    ipu.showIndicator = function () {\r\n        if ($('.ui-preloader-indicator-modal')[0]) return;\r\n        $(defaults.modalContainer).append('<div class=\"ui-preloader-indicator-overlay\"></div><div class=\"ui-preloader-indicator-modal\"><span class=\"ui-preloader ui-preloader-white\"></span></div>');\r\n    };\r\n    ipu.hideIndicator = function () {\r\n        $('.ui-preloader-indicator-overlay, .ui-preloader-indicator-modal').remove();\r\n    };\r\n    // Action Sheet\r\n    ipu.actions = function (params) {\r\n        var modal, groupSelector, buttonSelector;\r\n        params = params || [];\r\n\r\n        if (params.length > 0 && !$.isArray(params[0])) {\r\n            params = [params];\r\n        }\r\n        var modalHTML;\r\n        var buttonsHTML = '';\r\n        for (var i = 0; i < params.length; i++) {\r\n            for (var j = 0; j < params[i].length; j++) {\r\n                if (j === 0) buttonsHTML += '<div class=\"ui-actions-modal-group\">';\r\n                var button = params[i][j];\r\n                var buttonClass = button.label ? 'ui-actions-modal-label' : 'ui-actions-modal-button';\r\n                if (button.bold) buttonClass += ' ui-actions-modal-button-bold';\r\n                if (button.color) buttonClass += ' ui-color-' + button.color;\r\n                if (button.bg) buttonClass += ' ui-bg-' + button.bg;\r\n                if (button.disabled) buttonClass += ' disabled';\r\n                buttonsHTML += '<span class=\"' + buttonClass + '\">' + button.text + '</span>';\r\n                if (j === params[i].length - 1) buttonsHTML += '</div>';\r\n            }\r\n        }\r\n        modalHTML = '<div class=\"ui-actions-modal\">' + buttonsHTML + '</div>';\r\n        _modalTemplateTempDiv.innerHTML = modalHTML;\r\n        modal = $(_modalTemplateTempDiv).children();\r\n        $(defaults.modalContainer).append(modal[0]);\r\n        groupSelector = '.ui-actions-modal-group';\r\n        buttonSelector = '.ui-actions-modal-button';\r\n\r\n        var groups = modal.find(groupSelector);\r\n        groups.each(function (index, el) {\r\n            var groupIndex = index;\r\n            $(el).children().each(function (index, el) {\r\n                var buttonIndex = index;\r\n                var buttonParams = params[groupIndex][buttonIndex];\r\n                var clickTarget;\r\n                if ($(el).is(buttonSelector)) clickTarget = $(el);\r\n                // if (toPopover && $(el).find(buttonSelector).length > 0) clickTarget = $(el).find(buttonSelector);\r\n\r\n                if (clickTarget) {\r\n                    clickTarget.on('click', function (e) {\r\n                        if (buttonParams.close !== false) ipu.closeModal(modal);\r\n                        if (buttonParams.onClick) buttonParams.onClick(modal, e);\r\n                    });\r\n                }\r\n            });\r\n        });\r\n        ipu.openModal(modal);\r\n        return modal[0];\r\n    };\r\n\r\n    //显示一个消息,会在2秒钟后自动消失\r\n    ipu.toast = function (msg, duration, extraclass) {\r\n        var $toast = $('<div class=\"ui-modal ui-toast ' + (extraclass || '') + '\">' + msg + '</div>').appendTo(document.body);\r\n        ipu.openModal($toast, function () {\r\n            setTimeout(function () {\r\n                ipu.closeModal($toast);\r\n            }, duration || 2000);\r\n        });\r\n    };\r\n    ipu.openModal = function (modal, cb) {\r\n        modal = $(modal);\r\n        var isModal = modal.hasClass('ui-modal'),\r\n            isNotToast = !modal.hasClass('ui-toast');\r\n        if ($('.ui-modal.ui-modal-in:not(.ui-modal-out)').length && defaults.modalStack && isModal && isNotToast) {\r\n            ipu.modalStack.push(function () {\r\n                ipu.openModal(modal, cb);\r\n            });\r\n            return;\r\n        }\r\n        var isPopup = modal.hasClass('ui-popup');\r\n        var isLoginScreen = modal.hasClass('ui-login-screen');\r\n        var isPickerModal = modal.hasClass('ui-picker-modal');\r\n        var isToast = modal.hasClass('ui-toast');\r\n        if (isModal) {\r\n            modal.show();\r\n            modal.css({\r\n                marginTop: -Math.round(modal.outerHeight() / 2) + 'px'\r\n            });\r\n        }\r\n        if (isToast) {\r\n            modal.css({\r\n                marginLeft: -Math.round(modal.outerWidth() / 2 / 1.185) + 'px' //1.185 是初始化时候的放大效果\r\n            });\r\n        }\r\n\r\n        var overlay;\r\n        if (!isLoginScreen && !isPickerModal && !isToast) {\r\n            if ($('.ui-modal-overlay').length === 0 && !isPopup) {\r\n                $(defaults.modalContainer).append('<div class=\"ui-modal-overlay\"></div>');\r\n            }\r\n            if ($('.ui-popup-overlay').length === 0 && isPopup) {\r\n                $(defaults.modalContainer).append('<div class=\"ui-popup-overlay\"></div>');\r\n            }\r\n            overlay = isPopup ? $('.ui-popup-overlay') : $('.ui-modal-overlay');\r\n        }\r\n\r\n        //Make sure that styles are applied, trigger relayout;\r\n        var clientLeft = modal[0].clientLeft;\r\n\r\n        // Trugger open event\r\n        modal.trigger('open');\r\n\r\n        // Picker modal body class\r\n        if (isPickerModal) {\r\n            $(defaults.modalContainer).addClass('ui-with-picker-modal');\r\n        }\r\n\r\n        // Classes for transition in\r\n        if (!isLoginScreen && !isPickerModal && !isToast) overlay.addClass('ui-modal-overlay-visible');\r\n        modal.removeClass('ui-modal-out').addClass('ui-modal-in').transitionEnd(function (e) {\r\n            if (modal.hasClass('ui-modal-out')) modal.trigger('closed');\r\n            else modal.trigger('opened');\r\n        });\r\n        // excute callback\r\n        if (typeof cb === 'function') {\r\n            cb.call(this);\r\n        }\r\n        return true;\r\n    };\r\n    ipu.closeModal = function (modal) {\r\n        modal = $(modal || '.ui-modal-in');\r\n        if (typeof modal !== 'undefined' && modal.length === 0) {\r\n            return;\r\n        }\r\n        var isModal = modal.hasClass('ui-modal'),\r\n            isPopup = modal.hasClass('ui-popup'),\r\n            isToast = modal.hasClass('ui-toast'),\r\n            isLoginScreen = modal.hasClass('ui-login-screen'),\r\n            isPickerModal = modal.hasClass('ui-picker-modal'),\r\n            removeOnClose = modal.hasClass('ui-remove-on-close'),\r\n            overlay = isPopup ? $('.ui-popup-overlay') : $('.ui-modal-overlay');\r\n        if (isPopup) {\r\n            if (modal.length === $('.ui-popup.ui-modal-in').length) {\r\n                overlay.removeClass('ui-modal-overlay-visible');\r\n            }\r\n        }\r\n        else if (!(isPickerModal || isToast)) {\r\n            overlay.removeClass('ui-modal-overlay-visible');\r\n        }\r\n        modal.trigger('close');\r\n\r\n        // Picker modal body class\r\n        if (isPickerModal) {\r\n            $(defaults.modalContainer).removeClass('ui-with-picker-modal');\r\n            $(defaults.modalContainer).addClass('ui-picker-modal-closing');\r\n        }\r\n\r\n        modal.removeClass('ui-modal-in').addClass('ui-modal-out').transitionEnd(function (e) {\r\n            if (modal.hasClass('ui-modal-out')) modal.trigger('closed');\r\n            else modal.trigger('opened');\r\n\r\n            if (isPickerModal) {\r\n                $(defaults.modalContainer).removeClass('ui-picker-modal-closing');\r\n            }\r\n            if (isPopup || isLoginScreen || isPickerModal) {\r\n                modal.removeClass('ui-modal-out').hide();\r\n                if (removeOnClose && modal.length > 0) {\r\n                    modal.remove();\r\n                }\r\n            }\r\n            else {\r\n                modal.remove();\r\n            }\r\n        });\r\n        if (isModal && defaults.modalStack) {\r\n            ipu.modalStackClearQueue();\r\n        }\r\n\r\n        return true;\r\n    };\r\n    function handleClicks(e) {\r\n        /*jshint validthis:true */\r\n        var clicked = $(this);\r\n        var url = clicked.attr('href');\r\n\r\n\r\n        //Collect Clicked data- attributes\r\n       /* var clickedData = clicked.dataset();\r\n\r\n        // Popup\r\n        var popup;\r\n        if (clicked.hasClass('ui-open-popup')) {\r\n            if (clickedData.popup) {\r\n                popup = clickedData.popup;\r\n            }\r\n            else popup = '.ui-popup';\r\n            ipu.popup(popup);\r\n        }\r\n        if (clicked.hasClass('ui-close-popup')) {\r\n            if (clickedData.popup) {\r\n                popup = clickedData.popup;\r\n            }\r\n            else popup = '.ui-popup.modal-in';\r\n            ipu.closeModal(popup);\r\n        }*/\r\n\r\n        // Close Modal\r\n        if (clicked.hasClass('ui-modal-overlay')) {\r\n            if ($('.ui-modal.ui-modal-in').length > 0 && defaults.modalCloseByOutside)\r\n                ipu.closeModal('.ui-modal.ui-modal-in');\r\n            if ($('.ui-actions-modal.ui-modal-in').length > 0 && defaults.actionsCloseByOutside)\r\n                ipu.closeModal('.ui-actions-modal.ui-modal-in');\r\n\r\n        }\r\n        if (clicked.hasClass('ui-popup-overlay')) {\r\n            if ($('.ui-popup.ui-modal-in').length > 0 && defaults.popupCloseByOutside)\r\n                ipu.closeModal('.ui-popup.modal-in');\r\n        }\r\n    }\r\n\r\n    $(document).on('click', ' .ui-modal-overlay, .ui-popup-overlay, .ui-close-popup, .ui-open-popup, .ui-close-picker', handleClicks);\r\n})(ipu || window, jQuery);\r\n","(function (ipu, $) {\r\n    NavBar.prototype.defaultOpt = {\r\n        animate: false,           // 默认有动画\r\n        contentSlt: \".ui-nav-content\",\r\n        callBack: function (currentIndex, lastIndex) { // currentIndex: 当前索引,lastIndex上一次索引(第一次时为null)\r\n        }\r\n    };\r\n\r\n    function NavBar(slt, options) {\r\n        this.options = $.extend({}, this.defaultOpt, options);\r\n        this.content = $(this.options.contentSlt);\r\n        this.nav = $(slt);\r\n        this.wrapper = $(\">ul\", this.content);\r\n        this.contents = $(\">li\", this.wrapper);\r\n        this.navs = $(\">a\", this.nav);\r\n        var me = this;\r\n\r\n        var activeIndex = this.navs.filter(\".ui-active\").index(); // 查找默认有active的索引\r\n        if (activeIndex == -1) {\r\n            activeIndex = this.contents.filter(\".ui-active\").index(); // 查找默认有active的索引\r\n        }\r\n        this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n\r\n        if (!this.options.animate) {\r\n            this.wrapper.addClass(\"ui-no-animation\")\r\n        }\r\n\r\n        this.navs.each(function (index, i) {\r\n            $(this).click(function () {\r\n                me.show(index);\r\n            });\r\n        });\r\n\r\n        this.lastIndex = null;\r\n        this.currentIndex = null;\r\n        me.show(this.options.index);\r\n    }\r\n\r\n    NavBar.prototype.show = function (index) {\r\n        if (this.currentIndex != index) {\r\n            var currentContent = $(this.contents[index]).addClass(\"ui-show\");\r\n\r\n            if (this.options.animate) {\r\n                if (this.lastIndex != null && this.lastIndex != index) {\r\n                    $(this.contents[this.lastIndex]).removeClass(\"ui-show\"); // 隐藏上上个元素\r\n                }\r\n\r\n                if (this.currentIndex != null) {        // 非第一次需要动画效果\r\n                    if (this.currentIndex < index) {   // 需要内容为往左走,显示右边的内容\r\n                        if (this.lastIndex != null && this.lastIndex < this.currentIndex) {  // 内容已经左走过了,则需要移除动画复原位置,再通过width()方法强制生效\r\n                            this.wrapper.addClass(\"ui-no-animation\").removeClass(\"ui-nav-content-right\").width(); // 可以强制刷新,默认jquery应该会将这些dom上的修改延时处理?\r\n                        }\r\n                    } else {\r\n                        if (this.lastIndex == null || this.lastIndex > this.currentIndex) { // 类似同上\r\n                            this.wrapper.addClass(\"ui-no-animation\").addClass(\"ui-nav-content-right\").width(); // 可以强制刷新不?\r\n                        }\r\n                    }\r\n                    this.wrapper.removeClass(\"ui-no-animation\").toggleClass(\"ui-nav-content-right\");\r\n                }\r\n            } else {\r\n                $(this.contents[this.currentIndex]).removeClass(\"ui-show\");\r\n            }\r\n\r\n            // 更新class,ui-active状态\r\n            $(this.contents[index]).addClass(\"ui-active\").siblings(\".ui-active\").removeClass(\"ui-active\");\r\n            $(this.navs[index]).addClass(\"ui-active\").siblings(\".ui-active\").removeClass(\"ui-active\");\r\n\r\n            this.lastIndex = this.currentIndex;\r\n            this.currentIndex = index;\r\n\r\n            if (this.options.callBack) {\r\n                this.options.callBack(this.currentIndex, this.lastIndex);\r\n            }\r\n        }\r\n    };\r\n\r\n    ipu.navBar = function (slt, options) {\r\n        return new NavBar(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n","(function (ipu, $) {\n    function __dealCssEvent(eventNameArr, callback) {\n        var events = eventNameArr,\n            i, dom = this;// jshint ignore:line\n\n        function fireCallBack(e) {\n            if (e.target !== this) return;\n            callback.call(this, e);\n            for (i = 0; i < events.length; i++) {\n                dom.off(events[i], fireCallBack);\n            }\n        }\n\n        if (callback) {\n            for (i = 0; i < events.length; i++) {\n                dom.on(events[i], fireCallBack);\n            }\n        }\n    }\n\n    $.fn.animationEnd = function (callback) {\n        __dealCssEvent.call(this, ['webkitAnimationEnd', 'animationend'], callback);\n        return this;\n    };\n\n    function submitForm(doc, url ,params){\n        var form = doc.createElement(\"form\");\n        form.action = url;\n        form.method = \"post\";\n        form.style.display = \"none\";\n\n        for (var x in params) {\n            var ele = doc.createElement(\"input\");\n            ele.type=\"hidden\";\n            ele.name = x;\n            ele.value =  params[x];\n            form.appendChild(ele);\n        }\n\n        doc.body.appendChild(form);\n        form.submit();\n    }\n\n    var page = {};\n\n    page.options = {     // 那个窗口执行open,默认父窗口\n        target: window.parent, // 默认执行父窗口\n        backIndex: 1,    // 默认回退一页\n        closeIndex: 1,   // 默认关闭最近一个页面\n        params:{},        // post的默认参数\n        animate: true,     // 是否动画\n        callBack:function () { // 事件回调\n\n        }\n    };\n\n    var maps = {};\n    var pageNo = 0;\n\n    // 当前页面加载,针对顶层父窗口\n    page.openPage = function (url, options) {\n        var overTime = false; // 超过100ms豪秒\n        var transEnd = false; // 动画结束\n\n        if(options.animate) {\n            var animateClass = \" ui-anim ui-slideRightIn \";\n            ipu.showPreloader('正在加载中');\n            setTimeout(function () {\n                overTime = true;\n                if (transEnd) {\n                    ipu.hidePreloader();\n                }\n            }, 50);  // 保证最少显示100ms,不出现闪现的情况\n        }\n\n        var nowPageNo ='pageNo-'+(pageNo++);\n        maps[nowPageNo] = url;\n        var newPage = $(\"<div class='ui-page' id='\"+nowPageNo+\"'><iframe class='ui-page-iframe' src='\"+url+\"'></iframe></div>\")\n\n        function end() {\n            if(!overTime){\n                transEnd = true;\n            }else{\n                ipu.hidePreloader();\n            }\n            newPage.removeClass(animateClass);\n            newPage.siblings(\".ui-show\").removeClass('ui-show');\n            if(options.callBack){\n                options.callBack();\n            }\\n        }\n\n        $(\".ui-page-iframe\", newPage).one('load', function () {\n            if(options.animate){\n                newPage.addClass(\"ui-show\"+animateClass).animationEnd(end);\n            }else{\n                newPage.addClass(\"ui-show\");\n                end();\n            }\n        });\n        newPage.appendTo(\".ui-pages\");\n    };\n\n    page.postPage = function (url, options) {\n        ipu.showPreloader('正在加载中');\n        var nowPageNo ='pageNo-'+(pageNo++);\n        maps[nowPageNo] = url;\n        var newPage = $(\"<div class='ui-page' id='\"+nowPageNo+\"'><iframe class='ui-page-iframe' src=''></iframe></div>\");\n\n        var overTime = false; // 超过100ms豪秒\n        var transEnd = false; // 动画结束\n\n        if(options.animate){\n            setTimeout(function () {\n                overTime = true;\n                if(transEnd){\n                    ipu.hidePreloader();\n                }\n            }, 80);  // 保证最少显示100ms,不出现闪现的情况\n        }\n\n        $(\".ui-page-iframe\", newPage).one('load', function () { // 第一次为初始化\n            newPage.addClass(\"ui-show ui-anim ui-slideRightIn\").animationEnd(function (e) {\n                if(!overTime){\n                    transEnd = true;\n                }else{\n                    ipu.hidePreloader();\n                }\n                newPage.removeClass(\"ui-anim ui-slideRightIn\");\n                newPage.siblings(\".ui-show\").removeClass('ui-show');\n                if(options.callBack){\n                    options.callBack();\n                }\n            });\n        });\n        newPage.appendTo(\".ui-pages\");\n        var pageDoc =  $(\".ui-page-iframe\", newPage)[0].contentDocument;\n        submitForm(pageDoc, url, options.params);\n    };\n\n    // 当前页面后退,针对顶层父窗口\n    page.backPage = function (options) {\n        var backIndex = options.backIndex;\n        var page = null;\n        var nowPage = $(\".ui-page.ui-show\");\n\n        if(backIndex == 0){\n            page = nowPage.prevAll(\".ui-page-main\");\n        }else {\n            var prevPage = nowPage.prevAll(\".ui-page\");\n            page= $(prevPage[options.backIndex - 1]);\n        }\n        page.addClass(\"ui-show\"); //显示前一个\n\n        nowPage.removeClass(\"ui-active\").addClass(\"ui-anim ui-slideRightOut\").animationEnd(function () {\n            $(this).removeClass(\"ui-show ui-anim ui-slideRightOut\");\n            page.nextAll(\".ui-page\").remove();\n            var iframe = $(\".ui-page-iframe\", page);\n            var nowDoc;\n\n            if(iframe.size() == 0){ // 找不到子窗口就当是返回了主页面,在当前窗口触发\n                nowDoc = window.document;\n            }else{\n                nowDoc = iframe[0].contentDocument;\n            }\n\n            var evt = nowDoc.createEvent('Event');\n            evt.initEvent('ipuUIPageBack', true, true);\n            if(options.data){\n                evt.data = options.data;\n            }\n            nowDoc.body.dispatchEvent(evt);\n            if(options.callBack){\n                options.callBack();\n            }\n        });\n    };\n\n    // 往前关闭窗口\n    page.closePage = function (options) {\n        var closePage = options.closeIndex - 1;\n        var prevPage = $(\".ui-page.ui-show\").prevAll(\".ui-page\");\n        $(prevPage[closePage]).remove();\n        if(options.callBack){\n            options.callBack();\n        }\n    };\n\n    // 调用父窗口打开页面\n    page.open = function (url, options) {\n        options = $.extend({}, this.options, options);\n        options.target.ipu.page.openPage(url, options);\n    };\n\n    // post方法\n    page.post = function (url, options) {\n        options = $.extend({}, this.options, options);\n        options.target.ipu.page.postPage(url, options);\n    };\n\n    // 调用父窗口,回退\n    page.back = function (options) {\n        options = $.extend({}, this.options, options);\n        options.target.ipu.page.backPage(options);\n    };\n\n    // 返回首页\n    page.backHome = function (options) {\n        options = options || {};\n        options.backIndex = 0;\n        page.back(options);\n    };\n\n    // 子窗口,待确认\n    page.close = function (options) {\n        options = $.extend({}, this.options, options);\n        options.target.ipu.page.closePage(options);\n    };\n\n    // 添加回调事件\n    page.onBack = function (back) {\n        $(\"body\").on('ipuUIPageBack', function (e) {\n            var data = e.originalEvent.data;\n            back(data);\n        });\n    };\n\n    // 提供一个关闭一群窗口的方法\n    ipu.page = page;\n})(ipu || window, jQuery);\n","// picker\r\n(function (ipu, $, Hammer) {\r\n    var showItemSize = 9;   // 显示的子项数量,\r\n    var r = 90;             // 计算旋转的圆半径,结果应该缩小,是为了r不要距离容器太近\r\n    var itemAngle = 180 / showItemSize;   // 每项对应的角度是 180/9 = 20\r\n    var maxExceed = itemAngle;         // 滚动时允许超出边界的最大角度\r\n    // itemHeight = 40px;       // 需要给出r=89是怎么计算出来的,是根据 40/2/Math.tan(40/2/180*Math.PI)=113,直接太大不好看\r\n\r\n    function Picker(slt, options) {\r\n        this.el = $(slt)[0];\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this._init();\r\n    }\r\n\r\n    // 默认参数\r\n    Picker.prototype.defaultOptions = {\r\n        onChange: function () {       // 子项选中事件\r\n        },\r\n        listen: true,                  // 默认已开记监听变化\r\n        data: []\r\n    };\r\n\r\n    Picker.prototype._init = function () {\r\n        var self = this;\r\n        this.wrap = $(\">ul\", this.el);\r\n        this.index = null;\r\n        this.listen = !!this.options.listen;\r\n\r\n        this.beginAngle = 0;\r\n        this.beginExceed = this.beginAngle - maxExceed;       // 最小角度值\r\n        this.stopInertiaMove = false;\r\n        this.lastAngle = null; // 保存滑动前的角度\r\n        this.empty = this.options.data.length == 0;\r\n\r\n        // 如果是ios,则ul的旋转中心点,有变化\r\n        if(ipu.device.ios){\r\n            this.wrap.css(\"transform-origin\", \"center center \"+r+\"px\"); //如果是ios,要变更旋转的中心点\r\n        }\r\n\r\n        this.hammer = new Hammer.Manager(this.el);\r\n        this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL, threshold: 5}));\r\n        this.hammer.add(new Hammer.Press({threshold: 4}));  //\r\n        this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this._onPan, this));\r\n\r\n        this.hammer.on(\"press pressup\", function (e) {  // 如果用户点击了,是停止自动滚动\r\n           // console.log('press');\r\n            if(this.empty){\r\n                return ;\r\n            }\r\n\r\n            self.stopInertiaMove = true;\r\n            if (e.type == 'pressup') {\r\n                self.endScroll();\r\n            }\r\n        });\r\n\r\n        this.setItems(this.options.data);\r\n    };\r\n\r\n    Picker.prototype.setItems = function (data, textName) {\r\n        this.wrap.empty(); // 清空历史数据\r\n        this.data = data = data || [];\r\n        this.empty = data.length == 0; // 数据是否为空\r\n\r\n        this.newData = true; // 表示设置了新数据,触发change回调,但第一次设置时,不需要触发\r\n        var self = this;\r\n        var lis = \"\";\r\n        textName = textName || 'text';\r\n\r\n        for (var i = 0, j = data.length; i < j; i++) {\r\n            lis = lis + \"<li>\" + data[i][textName] + \"</li>\";\r\n        }\r\n\r\n        $(lis).appendTo(this.wrap);\r\n\r\n        this.items = $(\">li\", this.wrap);\r\n        this.itemsSize = this.items.size();\r\n\r\n        this.endAngle = (this.empty ? 0 : this.itemsSize - 1) * itemAngle;\r\n        this.endExceed = this.endAngle + maxExceed;  // 最大旋转角度值\r\n\r\n        // 初始化各子项角度\r\n        this.items.each(function (i) {\r\n            $(this).css({\r\n                \"transform\": \"translateZ(\" + r + \"px) rotateX(-\" + (i * itemAngle) + \"deg)\",\r\n                \"transform-origin\": \"center center -\" + r + \"px\"\r\n            });\r\n            $(this).click(function () {\r\n                console.log('click');\r\n                self.stopInertiaMove = true;\r\n                self.setAngle(i * itemAngle, true);\r\n            })\r\n        });\r\n\r\n        var newAngle ;\r\n        if(this.empty || this.index == null){\r\n            newAngle = 0;\r\n        }else {\r\n            if(this.index > this.itemsSize - 1){\r\n                newAngle = (this.itemsSize - 1) * itemAngle;\r\n            }else{\r\n                newAngle = this.index * itemAngle;\r\n            }\r\n        }\r\n        this.setAngle(newAngle, true);\r\n\r\n        /*if (this.index !== null) { // 当前已经旋转则,保留当前的索引\r\n         if (this.index > this.itemsSize - 1 && !this.empty) {\r\n         this.index = this.itemsSize - 1;\r\n         }\r\n         this.setAngle(this.index * itemAngle, true);\r\n         } else { // 第一次初始数据,不触发change事件\r\n         this.index = 0;     // 被调用后,不能再使用null值了\r\n         this.setAngle(0, false); // 第一次设置初始化时,不触发change事件\r\n         }*/\r\n    };\r\n\r\n    Picker.prototype._onPan = function (ev) {\r\n        if(this.empty){\r\n            return ;\r\n        }\r\n\r\n        //console.log(ev.deltaX + \"==\"+ ev.deltaY);\r\n        if (ev.type == 'panstart') { // 好像一定要移动才有startg事件\r\n            self.stopInertiaMove = true;\r\n            this.lastAngle = this.angle;\r\n            this.wrap.addClass(\"ui-noanimate\");    // 移除动画\r\n            this.stopInertiaMove = true; //  停止自动减速滚动\r\n           // console.log('panstart');\r\n\r\n        } else if (ev.type == 'panmove') {\r\n            var moveAngle = this.calcAngle(ev.deltaY);\r\n            var newAngle = this.lastAngle - moveAngle;   //最新的角度\r\n            //console.log('=='+newAngle);\r\n            // 一个可以转动的最小值和最大值过滤\r\n            if (newAngle < this.beginExceed) {\r\n                newAngle = this.beginExceed;\r\n            }\r\n            if (newAngle > this.endExceed) {\r\n                newAngle = this.endExceed;\r\n            }\r\n            this.setAngle(newAngle);\r\n\r\n        } else { // end or cancel事件\r\n            // console.log('end or cancel:' + ev.type);\r\n            var v = ev.overallVelocityY;    // 滑动的速度\r\n            var dir = v > 0 ? -1 : 1; //加速度方向\r\n            var deceleration = dir * 0.0006 * -1;\r\n            var duration = Math.abs(v / deceleration); // 速度消减至0所需时间\r\n            var dist = v * duration / 2; //最终移动多少\r\n\r\n            var startAngle = this.angle;\r\n            var distAngle = -this.calcAngle(dist);\r\n           //  console.log(\"dist=\" + dist + \", distAngle\" + distAngle);\r\n\r\n            //----\r\n            var srcDistAngle = distAngle;\r\n            if (startAngle + distAngle < this.beginExceed) {\r\n                distAngle = this.beginExceed - startAngle;\r\n                duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n            }\r\n            if (startAngle + distAngle > this.endExceed) {\r\n                distAngle = this.endExceed - startAngle;\r\n                duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n            }\r\n\r\n            if (distAngle == 0) {\r\n                this.endScroll();\r\n                return;\r\n            }\r\n            this.scrollDistAngle(startAngle, distAngle, duration);\r\n        }\r\n    };\r\n\r\n    // 计算移动的角度,转动的角度,就是移动的距离对应相关圆周\r\n    // 2*r*PI = 360,  angle = 360*c/(2*r*PI)\r\n    var ca = 360 / (2 * r * Math.PI);\r\n    Picker.prototype.calcAngle = function (c) {\r\n        return c * ca;\r\n    };\r\n\r\n    // endScroll 是否为结束的滚动结束,滚动结束需要调用结束事件\r\n    Picker.prototype.setAngle = function (newAngle, endScroll) {\r\n        this.angle = newAngle; // 存储最新值\r\n        this.wrap.css(\"transform\", \"perspective(1000px) rotateY(0deg) rotateX(\" + newAngle + \"deg)\");\r\n        this.calcItemVisable(newAngle);\r\n\r\n        if (endScroll) {\r\n            var index = newAngle / itemAngle;\r\n            var oldIndex = this.index;\r\n            this.index = this.empty ? null : index; // 这里可以做一个判断,如果是empty,则index值可以不改变\r\n\r\n            // 这个地方要判断下,数据更新或索引更新都要触发\r\n            if (oldIndex != index || this.newData) {\r\n                this.newData = false;\r\n               // console.log('change');\r\n                if (this.options.onChange && this.listen) {\r\n                    // console.log('changed call');\r\n                    this.options.onChange(this.getSelectedItem(), this.index, oldIndex, this.newData);\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    // 计算子项的显示情况\r\n    Picker.prototype.calcItemVisable = function (angle) {\r\n        this.items.each(function (index) {\r\n            var difference = Math.abs(index * itemAngle - angle);\r\n\r\n            if (difference < itemAngle / 2) {\r\n                $(this).addClass(\"ui-highlight ui-visible\");\r\n            } else if (difference >= (90 - itemAngle / 2)) { // 距离不能超过90度\r\n                $(this).removeClass(\"ui-highlight ui-visible\");\r\n            } else {\r\n                $(this).addClass(\"ui-visible\").removeClass(\"ui-highlight\");\r\n            }\r\n        });\r\n    };\r\n\r\n    // 设置最后回归位置\r\n    Picker.prototype.endScroll = function () {\r\n        this.wrap.removeClass(\"ui-noanimate\");\r\n        var endAngle;\r\n\r\n        if (this.angle < this.beginAngle) {\r\n            endAngle = this.beginAngle;\r\n        } else if (this.angle > this.endAngle) {\r\n            endAngle = this.endAngle;\r\n        } else {\r\n            var index = parseInt((this.angle / itemAngle).toFixed(0));\r\n            endAngle = (itemAngle * index);\r\n        }\r\n\r\n        this.setAngle(endAngle, true);\r\n    };\r\n\r\n    // 进行惯性滚动\r\n    Picker.prototype.scrollDistAngle = function (startAngle, distAngle, duration) {\r\n        var self = this;\r\n        var nowTime = new Date().getTime();\r\n        this.stopInertiaMove = false;\r\n        duration = 1 * duration; // 滚动时长控制修改\r\n\r\n        // hammer调用的惯性函数\r\n        (function (nowTime, startAngle, distAngle, duration) {\r\n            var frameInterval = 13;\r\n            var stepCount = duration / frameInterval;\r\n            var stepIndex = 0;\r\n\r\n            (function inertiaMove() {\r\n                if (self.stopInertiaMove) return;\r\n                var newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\r\n                self.setAngle(newAngle);\r\n                stepIndex++;\r\n\r\n                if (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\r\n                    self.endScroll();\r\n                    return;\r\n                }\r\n\r\n                setTimeout(inertiaMove, frameInterval);\r\n            })();\r\n\r\n        })(nowTime, startAngle, distAngle, duration);\r\n    };\r\n\r\n    Picker.prototype.setListen = function (bool) {\r\n        this.listen = !!bool;\r\n    };\r\n\r\n    Picker.prototype.quartEaseOut = function (t, b, c, d) {\r\n        return -c * ((t = t / d - 1) * t * t * t - 1) + b;\r\n    };\r\n\r\n    Picker.prototype.setSelectedValue = function (value) {\r\n        var self = this;\r\n        for (var index in self.data) {\r\n            var item = self.data[index];\r\n            if (item.value == value) {\r\n                self.setAngle(index* itemAngle, true);\r\n                return;\r\n            }\r\n        }\r\n    };\r\n\r\n    // 获取当前选中的值\r\n    Picker.prototype.getSelectedItem = function () {\r\n        return this.empty ? {}: this.data[this.index];\r\n    };\r\n\r\n    Picker.prototype.getSelectedValue = function () {\r\n        return this.getSelectedItem().value;\r\n    };\r\n\r\n    Picker.prototype.getSelectedText = function () {\r\n        return this.getSelectedItem().text;\r\n    };\r\n\r\n    Picker.prototype.getSelectedIndex = function () {\r\n        return this.index;\r\n    };\r\n\r\n    ipu.Picker = Picker;\r\n\r\n})(ipu || window, jQuery, Hammer);\r\n","// popPicker\r\n(function (ipu, $) {\r\n    var Picker = ipu.Picker;\r\n\r\n    function PopPicker(options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        if(!Picker){\r\n            Picker = ipu.Picker;\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    PopPicker.prototype.defaultOptions = {\r\n        template: '<div class=\"ui-poppicker\">\\\r\n                        <div class=\"ui-poppicker-header\">\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-cancel\">取消</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-ok\">确定</button>\\\r\n                        </div>\\\r\n                        <div class=\"ui-poppicker-body\">\\\r\n                        </div>\\\r\n                    </div>',\r\n        pickerTemplate: '<div class=\"ui-picker\">\\\r\n                            <div class=\"ui-picker-selectbox\"></div>\\\r\n                            <ul></ul>\\\r\n                          </div>',\r\n        data: [],    // 数据\r\n        layer: 1,   // 数据层级\r\n        btns: ['取消', '确认'],\r\n        callBack: function () { // 选择数据时的回调函数\r\n\r\n        }\r\n    };\r\n\r\n    PopPicker.prototype._init = function () {\r\n        this.holder = $(this.options.template).appendTo(\"body\");\r\n        var bodyHtml = $(\".ui-poppicker-body\", this.holder);\r\n\r\n        var layer = this.options.layer;\r\n        var width = (100 / layer) + \"%\";\r\n        this.pickers = new Array(layer);\r\n        var self = this;\r\n        var pickerHtml;\r\n        this.mask = this.createMask();\r\n\r\n        // 先初始化最底层picerk,再上面来\r\n        for (var i = layer -1; i >=0; i--) {\r\n            pickerHtml = $(this.options.pickerTemplate).prependTo(bodyHtml).css({width: width});\r\n\r\n            this.pickers[i] = new  Picker(pickerHtml, {\r\n                onChange: (function (i) {\r\n                    return function (item, index) { // 更新底部的值\r\n                        if (i != layer - 1) {\r\n                            self.pickers[i + 1].setItems(item.data);\r\n                        }\r\n                    };\r\n                })(i)\r\n            });\r\n        }\r\n\r\n        $(\".ui-poppicker-btn-ok\", this.holder).click(function () {\r\n            var rs = self.getSelectItems();\r\n            if (self.options.callBack(rs) !== false) {\r\n                self.hide();\r\n            }\r\n        }).text(this.options.btns[1]);\r\n\r\n        $(\".ui-poppicker-btn-cancel\", this.holder).click(function () {\r\n            self.hide();\r\n        }).text(this.options.btns[0]);\r\n    };\r\n\r\n    PopPicker.prototype.setData = function (data) {\r\n        this.pickers[0].setItems(data);\r\n    };\r\n\r\n    PopPicker.prototype.show = function (callBack) {\r\n        if (callBack) {\r\n            this.options.callBack = callBack;\r\n        }\r\n        this.mask.show();\r\n        this.holder.addClass(\"ui-active\");\r\n    };\r\n\r\n    PopPicker.prototype.hide = function () {\r\n        this.mask.close();\r\n        this.holder.removeClass(\"ui-active\");\r\n    };\r\n\r\n    // 获取相关值\r\n    PopPicker.prototype.getSelectItems = function () {\r\n        if (this.options.layer == 1) {\r\n            return this.pickers[0].getSelectedItem();\r\n        } else {\r\n            var rs = [];\r\n            for (var i = 0; i < this.options.layer; i++) {\r\n                rs.push(this.pickers[i].getSelectedItem());\r\n            }\r\n            return rs;\r\n        }\r\n    };\r\n\r\n    // 应该移除callback参数,提取出业成一个工具方法\r\n    PopPicker.prototype.createMask = function(callback) {\r\n        var self = this;\r\n        var element = document.createElement('div');\r\n        element.classList.add(\"ui-picker-backup\");\r\n        //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n        element.addEventListener('click', function() {\r\n            self.hide();\r\n        });\r\n        var mask = [element];\r\n        mask._show = false;\r\n        mask.show = function() {\r\n            mask._show = true;\r\n            element.setAttribute('style', 'opacity:1');\r\n            document.body.appendChild(element);\r\n            return mask;\r\n        };\r\n        mask._remove = function() {\r\n            if (mask._show) {\r\n                mask._show = false;\r\n                element.setAttribute('style', 'opacity:0');\r\n                setTimeout(function() {\r\n                    var body = document.body;\r\n                    element.parentNode === body && body.removeChild(element);\r\n                }, 350);\r\n            }\r\n            return mask;\r\n        };\r\n        mask.close = function() {\r\n            if(mask._show){\r\n                if (callback) {\r\n                    if (callback() !== false) {\r\n                        mask._remove();\r\n                    }\r\n                } else {\r\n                    mask._remove();\r\n                }\r\n            }\r\n        };\r\n        return mask;\r\n    };\r\n\r\n    ipu.popPicker = function (options) {\r\n        return new PopPicker(options);\r\n    };\r\n\r\n})(ipu || window, jQuery);\r\n","(function (ipu, $) {\r\n\r\n    /**\r\n     *进度条\r\n     */\r\n    function progressBar(id, options) {\r\n        this.id = id;\r\n        this.level = options.level;\r\n        this.progress = options.progress;\r\n        this.progressBar = $(id).eq(0);\r\n\r\n        if (options.progress != null) {\r\n            this.setProgress(this.progress);\r\n        }\r\n        if (options.level != null) {\r\n            this.setLevel(this.level);\r\n        }\r\n    }\r\n\r\n    progressBar.prototype.setProgress = function (pro) {\r\n        if (pro < 0 || pro > 100) return;\r\n\r\n        $(this.progressBar.find(\".ipu-progressbar\")).css(\"transform\", \"translate3d(\" + (-(100 - pro)) + \"%, 0px, 0px)\");\r\n        this.progress = pro;\r\n    };\r\n\r\n    progressBar.prototype.getProgress = function () {\r\n        return this.progress;\r\n    };\r\n\r\n    progressBar.prototype.setLevel = function (level) {\r\n        if (level == \"default\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-hightlight ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progress\");\r\n        } else if (level == \"success\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-highlight ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-success\");\r\n        } else if (level == \"highlight\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-highlight\");\r\n        } else if (level == \"warning\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-highlight\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-warning\");\r\n        }\r\n    };\r\n\r\n    ipu.progressBar = function (slt, options) {\r\n        return new progressBar(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n","(function (ipu, $, iScroll) {\r\n\r\n    // 扩展参数,iscroll组件的参数选项\r\n    // 扩展参数,用户直接在页面上自定好,顶端和底部加载html\r\n    // 设置上下条件长度,或计算函数\r\n    // 处理resize的问题,用户主动调用refresh??\r\n    // 底部启用或停用时,应该刷新组件iscroll高度\r\n    // 顶部正在加载时,自动停止底端加载状态,停用底部加载,停用底部加载时,可以不隐藏,变性成显示不见,或者隐藏,然后修改iscroll参数\r\n\r\n    Refresh.prototype.defaultOptions = {\r\n        bottomLoadFun: null,           // 底部加载处理函数\r\n        topLoadFun: null,               // 顶部加载处理函数\r\n        initEnableTop: true,            // 初始时启用刷新,有时用户并不想启用\r\n        initEnableBottom: true,         // 初始时启用加载更多,用时用户并不想启用\r\n        bottomLoadHtml: '<div class=\"ui-refresh-bottom\"><span class=\"ui-refresh-loading\"></span></div>',  // 默认底部加载显示内容\r\n        topLoadHtml: '<div class=\"ui-refresh-top\"><span class=\"ui-refresh-loading\"></span><div class=\"ui-refresh-arrow\"></div></div>',\r\n                // 默认顶部加载显示内容,最上层节点class有下面三个阶段变化\r\n                // 默认阶段,不是顶部加载状态时,且拖动时未达到加载距离,无特殊class,移除ui-refresh-top-loading\r\n                // 拖动达到加载距离,则增加class:ui-refresh-toload\r\n                // 加载中,则增加class:ui-refresh-top-loading,移除class:ui-refresh-toload\r\n        bottomAddLen: 0,  // 底部提前加载距离,单位px\r\n        iScrollOptions:{} // 主要是用来接收外面一些函数,不能传递回调的相关函数如refresh,也可在本地函数调用完后,再调用参数的函数,不推荐\r\n    };\r\n\r\n    function Refresh(slt, options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this.el = $(slt).get(0);\r\n        this._initBottomAndTop();\r\n        var me = this;\r\n\r\n        this.iScrollOptions = {\r\n            onScrollMove: function (e) {\r\n                if (me.topEnable && !me.topLoading) { // 顶部是松手才加载\r\n                    if (this.y >= me.topPullOffset && !me.topEl.hasClass('ui-refresh-toload')) { // 达到刷新距离,更新显示状态\r\n                        me.topEl.addClass('ui-refresh-toload');\r\n                    } else if (this.y < me.topPullOffset && me.topEl.hasClass('ui-refresh-toload')) { // 从达到刷新距离更新为未达到距离,更新显示状态\r\n                        me.topEl.removeClass('ui-refresh-toload');\r\n                    }\r\n                }\r\n\r\n                me._checkBottomLoading(); // 底部加载条件和顶部条件不一样,只要滚动离底部一定高度就开始加载\r\n                me.goTop = this.y > me.topPullOffset; // 记录是否位于顶部位置,以便刷新后可以回到此位置\r\n            },\r\n            onBeforeScrollEnd: function () {    // 一定是用户拖动触发,在滚动结束前应该触发\r\n                me._checkTopLoading();\r\n                me._checkBottomLoading();\r\n            },\r\n            onScrollEnd: function () { // 这个事件可能由非用户拖动时触发,可能是拖动惯性导致,所有顶部不应该处理,但顶部不管是否惯性,位置条件满足即触发\r\n                if (me.topLoading && this.y < this.minScrollY && me.goTop) {\r\n                    me.iScroll.scrollTo(0, this.minScrollY, 0);\r\n                }\r\n                me._checkBottomLoading(); // 在beforend执行还不够,还在要end执行\r\n            },\r\n            onRefresh: function () { // 刷新时,若顶部加载还在进行,且当前显示的顶部加载,则继续显示,否则刷新后会消失顶部加载,这里代码没有考虑重用了,应该可以做一步提取\r\n                if (me.topLoading) { // 如果顶部在加载,则刷新的时候,设置最小顶部距离,显示顶部加载状态\r\n                    this.minScrollY = this.minScrollY + me.topPullOffset;\r\n                }\r\n            }\r\n        };\r\n\r\n        this.iScrollOptions = $.extend({}, this.options.iScrollOptions, this.iScrollOptions);\r\n        this.iScroll = new iScroll(this.el, this.iScrollOptions);\r\n        this._checkContentLoading();\r\n    }\r\n\r\n    Refresh.prototype._initBottomAndTop = function () {\r\n        this.scrollEl = $(\">.ui-refresh-wrapper\" ,this.el);\r\n        this.bottomEl = $(this.options.bottomLoadHtml).appendTo(this.scrollEl);\r\n        this.topEl = $(this.options.topLoadHtml).prependTo(this.scrollEl);\r\n\r\n        this.topPullOffset = this.topEl.outerHeight();\r\n        this.bottomPullOffset = this.bottomEl.outerHeight() + this.options.bottomAddLen; // 增加100;最好配一个额外参数\r\n\r\n        this.topLoading = false;        // 顶部正在载加载\r\n        this.bottomLoading = false;     // 底部正在加载\r\n        this.bottomEnable = this.options.initEnableBottom && !!this.options.bottomLoadFun;\r\n        this.topEnable = this.options.initEnableTop && !!this.options.topLoadFun;\r\n        this.goTop = false;         // 用来处理,因为iScroll使用momentum(惯性), 导致有时顶部显示不正确问题,true表示顶部显示加载条\r\n\r\n        this.enableBottom(this.bottomEnable);\r\n        this.enableTop(this.topEnable);\r\n    };\r\n\r\n    // 检查是否需要底部加载\r\n    Refresh.prototype._checkBottomLoading = function () {\r\n        if (this.bottomEnable && !this.bottomLoading) {\r\n            if (this.iScroll.y < this.iScroll.maxScrollY + this.bottomPullOffset) {\r\n                this._startBottomLoading();\r\n            }\r\n        }\r\n    };\r\n\r\n    Refresh.prototype._checkTopLoading = function () {\r\n        if (this.topEnable && !this.topLoading) {\r\n            if (this.topEl.hasClass('ui-refresh-toload')) {\r\n                this._startTopLoading();\r\n            }\r\n        }\r\n    };\r\n\r\n    // 检查内容是否超出容器高度,未超出时,自动调用底部加载\r\n    Refresh.prototype._checkContentLoading = function () {\r\n        if(this.iScroll.maxScrollY >= -this.bottomPullOffset){ // 此处要计算底端的高度\r\n            this._startBottomLoading();\r\n        }\r\n    };\r\n\r\n    // 开始底部加载\r\n    Refresh.prototype._startBottomLoading = function () {\r\n        if (this.bottomEnable && !this.bottomLoading) {\r\n            this.bottomLoading = true;\r\n            this.options.bottomLoadFun(); // 刷新当前索引加载更多的数据\r\n        }\r\n    };\r\n\r\n    // 开始顶部加载\r\n    Refresh.prototype._startTopLoading = function () {\r\n        if (this.topEnable && !this.topLoading) {\r\n            this.topLoading = true;\r\n            this.topEl.removeClass('ui-refresh-toload').addClass('ui-refresh-top-loading');\r\n            this.iScroll.minScrollY = this.iScroll.minScrollY + this.topPullOffset;\r\n            this.options.topLoadFun(); // 刷新当前索引加载更多的数据\r\n        }\r\n    };\r\n\r\n    // 结束底部加载\r\n    Refresh.prototype.endBottomLoading = function () {\r\n        this.bottomLoading = false;\r\n        this.refresh();\r\n    };\r\n\r\n    // 结束顶部加载\r\n    Refresh.prototype.endTopLoading = function () {\r\n        this.topEl.removeClass('ui-refresh-top-loading');\r\n        this.topLoading = false;\r\n        // this.iScroll.scrollTo(0, 0); // 刷新加载则应该回到顶部,待测试确认\r\n        this.refresh();\r\n    };\r\n\r\n    // 设置顶部加载是否可用,true可用,否则不可用\r\n    Refresh.prototype.enableTop = function (enable) {\r\n        this.topEnable = enable;\r\n        if (enable) {\r\n            this.topEl.show();\r\n        } else {\r\n            this.topEl.hide();\r\n        }\r\n    };\r\n\r\n    // 设置底部加载是否可用,true可用,否则不可用\r\n    Refresh.prototype.enableBottom = function (enable) {\r\n        this.bottomEnable = enable;\r\n        if (enable) {\r\n            this.bottomEl.show();\r\n        } else {\r\n            this.bottomEl.hide();\r\n        }\r\n    };\r\n\r\n    // 只有在内容发生变更时,但是又没有触发调用end相关方法时,使用此方法更新高度信息\r\n    // 或者组件在一开始未显示??\r\n    // 刷新会移除拖动中状态\r\n    Refresh.prototype.refresh = function () {\r\n        this.iScroll.refresh();\r\n        this._checkContentLoading();\r\n    };\r\n\r\n    ipu.refresh = function (slt, optoins) {\r\n        return new Refresh(slt, optoins);\r\n    };\r\n\r\n})(ipu || window, jQuery, iScroll);\r\n","// Tab\r\n(function (ipu, $) {\r\n    function Tab(holder, options) {\r\n        this.el = $(holder).get(0);\r\n        this.titleItems = $(\".ui-tab-title:first>li\", this.el);\r\n        this.bodyWrapper = $(\".ui-tab-body-wrapper:first\", this.el);\r\n        this.contentItems = $(\">li\", this.bodyWrapper);\r\n\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this.itemSize = this.contentItems.size();\r\n        this.fixed = $(this.el).is(\".ui-tab-fixed\"); // 是否为固定高度的\r\n\r\n        var that = this;\r\n        this.titleItems.each(function (index) {\r\n            $(this).click(function () {\r\n                that.show(index);\r\n            });\r\n        });\r\n    }\r\n\r\n    Tab.prototype.defaultOptions = {\r\n        callBack: null  // 回调函数,tab切换时回调函数\r\n    };\r\n\r\n    Tab.prototype.show = function (index) {\r\n        if (this.fixed) {\r\n            var move = -index * 100 + \"%\";\r\n            this.bodyWrapper.css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n\r\n        }\r\n        this.contentItems.eq(index).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n        this.titleItems.eq(index).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n        this._end(index);\r\n    };\r\n\r\n    Tab.prototype._end = function (index) {\r\n        this.lastIndex = this.currentIndex;\r\n        this.currentIndex = this.index;\r\n\r\n        if (this.options.callBack) {\r\n            this.options.callBack(index, this.lastIndex);\r\n        }\r\n    };\r\n\r\n    ipu.tab = function (slt, options) {\r\n        return new Tab(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\r\n","/*===========================\r\nDevice/OS Detection\r\n===========================*/\r\n// from sui,但IPU框架的ua不是这样的\r\n;(function (ipu, $) {\r\n    \"use strict\";\r\n    var device = {};  // Classes\r\n    var classNames = [];\r\n    var ua = navigator.userAgent;\r\n    console.log('device');\r\n\r\n    // 这中针对ipu框架的情况,待测试\r\n    if(ua.match(/ipumobile/i)){\r\n        device.ios =  !!ua.match(/ios/i);\r\n        device.android = !!ua.match(/android/i);\r\n    }else{\r\n        var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\r\n        var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\r\n        var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\r\n        var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\r\n\r\n        device.ios = device.android = device.iphone = device.ipad = device.androidChrome = false;\r\n\r\n        // Android\r\n        if (android) {\r\n            device.os = 'android';\r\n            device.osVersion = android[2];\r\n            device.android = true;\r\n            device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\r\n        }\r\n        if (ipad || iphone || ipod) {\r\n            device.os = 'ios';\r\n            device.ios = true;\r\n        }\r\n        // iOS\r\n        if (iphone && !ipod) {\r\n            device.osVersion = iphone[2].replace(/_/g, '.');\r\n            device.iphone = true;\r\n        }\r\n        if (ipad) {\r\n            device.osVersion = ipad[2].replace(/_/g, '.');\r\n            device.ipad = true;\r\n        }\r\n        if (ipod) {\r\n            device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\r\n            device.iphone = true;\r\n        }\r\n        // iOS 8+ changed UA\r\n        if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\r\n            if (device.osVersion.split('.')[0] === '10') {\r\n                device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\r\n            }\r\n        }\r\n\r\n        // Webview\r\n        device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\r\n\r\n        // Minimal UI\r\n        if (device.os && device.os === 'ios') {\r\n            var osVersionArr = device.osVersion.split('.');\r\n            device.minimalUi = !device.webView &&\r\n                (ipod || iphone) &&\r\n                (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) &&\r\n                $('meta[name=\"viewport\"]').length > 0 && $('meta[name=\"viewport\"]').attr('content').indexOf('minimal-ui') >= 0;\r\n        }\r\n\r\n        // Check for status bar and fullscreen app mode\r\n        var windowWidth = $(window).width();\r\n        var windowHeight = $(window).height();\r\n        device.statusBar = false;\r\n        if (device.webView && (windowWidth * windowHeight === screen.width * screen.height)) {\r\n            device.statusBar = true;\r\n        }\r\n        else {\r\n            device.statusBar = false;\r\n        }\r\n\r\n\r\n        // Pixel Ratio\r\n        device.pixelRatio = window.devicePixelRatio || 1;\r\n        classNames.push('pixel-ratio-' + Math.floor(device.pixelRatio));\r\n        if (device.pixelRatio >= 2) {\r\n            classNames.push('retina');\r\n        }\r\n\r\n        // OS classes\r\n        if (device.os) {\r\n            classNames.push(device.os, device.os + '-' + device.osVersion.split('.')[0], device.os + '-' + device.osVersion.replace(/\\./g, '-'));\r\n            if (device.os === 'ios') {\r\n                var major = parseInt(device.osVersion.split('.')[0], 10);\r\n                for (var i = major - 1; i >= 6; i--) {\r\n                    classNames.push('ios-gt-' + i);\r\n                }\r\n            }\r\n\r\n        }\r\n        // Status bar classes\r\n        if (device.statusBar) {\r\n            classNames.push('with-statusbar-overlay');\r\n        }\r\n        else {\r\n            $('html').removeClass('with-statusbar-overlay');\r\n        }\r\n\r\n\r\n        // keng..\r\n        device.isWeixin = /MicroMessenger/i.test(ua);\r\n    }\r\n\r\n    // Add html classes\r\n    if (classNames.length > 0){\r\n        $('html').addClass(classNames.join(' '));\r\n    }\r\n\r\n    ipu.device = device;\r\n})(ipu || window, jQuery);\r\n","\r\n        // 初始化代码\r\n        jQuery(function () {\r\n            FastClick.attach(document.body);\r\n        });\r\n\r\n        return ipu;\r\n    }\r\n\r\n    // todo:可以添加一个和其它库的适配处理,\r\n    // 这里假设第三方库,jquery,iScroll,Hammer的史称已经固定\r\n    if ( typeof define === \"function\" && define.amd ) {\r\n        define(['jquery', 'iScroll', 'Hammer', 'FastClick'], function (jquery, iscroll, hammer, FastClick) {\r\n            return window.ipu = setup(jquery, iscroll, hammer, FastClick);\r\n        });\r\n    } else {\r\n        window.ipu = setup(window.jQuery, window.iScroll, window.Hammer, window.FastClick);\r\n    }\r\n})();\r\n"],"sourceRoot":"/source/"}
1
{"version":3,"sources":["ipu-prefix.js","carousel.js","dtPicker.js","hammerCarousel.js","modal.js","navBar.js","pages.js","picker.js","popPicker.js","progressBar.js","refresh.js","tab.js","_device.js","ipu-suffix.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"ipu.js","sourcesContent":["(function () {\r\n    function setup(jQuery, iScroll, Hammer, FastClick) {\r\n        var ipu = {};\r\n","// Carousel\n(function (ipu, $, iscroll) {\n// carouselSlt应该是唯一的,否则怎么支撑多个回调,如果用户不需要多个回调,也不主动调用,则可以,先不管吧???\n    function Carousel(slt, options) {\n        this.options = options = $.extend({}, this.defaultOpt, options);\n        this.el = $(slt).eq(0);  // 一次只能实例化一个\n        this.autoPlay = options.autoPlay;\n         this.hasIndicator = options.indicator;\n        this.callBack = options.callBack;\n        this.currentIndex = null;\n\n        this._init();\n        this.play();\n    }\n\n    Carousel.prototype = {\n        defaultOpt: {\n            index: null,            // 默认显示索引,未设置时先查找对就active,未找到时是0\n            autoPlay: false,       //  是否自动播放\n            duration: 3000,         //  自动播放延时\n            indicator: false,       // 是否生成指示器\n            indicatorPosition: 'center',  // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok\n            callBack: null           // 变更时回调函数\n        },\n        _init: function () {\n            var wrapper = $(\">.ui-carousel-wrapper\", this.el);\n            var carouselItems = $(\">li\", wrapper);\n            this.carouselItems = carouselItems;\n            this.size = carouselItems.size();\n            that = this;\n\n            if (this.options.index == null) {\n                var activeIndex = carouselItems.filter(\".ui-active\").index();\n                this.options.index = activeIndex != -1 ? activeIndex : 0;\n            }\n\n            if (this.hasIndicator) {\n                this._addIndicator();\n            }\n            $(window).resize(function () {\n                that.refresh();\n            });\n            var scrollOpt = {\n                snap: \"li\",          // carousel效果\n                momentum: false,     // 移除惯性处理\n                scrollX: true,       // X轴移动\n                scrollY:false,\n                hScrollbar: false,   // 没有纵向滚动条\n                onScrollStart: function () {\n                    that._pause();\n                },\n                onTouchEnd: function () {\n                    // 后面优化\n                    /*\n                     if (that.iscroll.currPageX == that.size - 1) {\n                     that.show(that.size - 2);\n                     }\n                     */\n                },\n                onScrollEnd: function () {\n                    that._end();\n                }\n            };\n            this.iscroll = new iscroll(this.el.get(0), scrollOpt);\n            this.show(this.options.index, 0);\n        },\n        stop: function () {\n            this._pause();\n            this.autoPlay=false;\n        },\n        _pause: function () {\n            if (this.autoPlay && this.timeoutId) {\n                clearTimeout(this.timeoutId);\n                this.timeoutId = null;\n            }\n        },\n        prev: function () {\n            var index = this.currentIndex == 0 ? this.size - 1 : this.currentIndex - 1;\n            this.show(index);\n        },\n        next: function () {\n            var index = this.currentIndex == this.size - 1 ? 0 : this.currentIndex + 1;\n            this.show(index);\n        },\n        show: function (index, time) {\n            this._pause();\n            this.iscroll.scrollToPage(index, 0, time);\n        },\n        play: function () {\n            this.autoPlay=true;\n            this._play();\n        },\n        refresh: function () {\n            var that = this;\n            that.show(this.currentIndex);\n        },\n        _play: function () {\n            if (this.autoPlay && !this.timeoutId) {\n                var that = this;\n                this.timeoutId = setTimeout(function () {\n                    this.timeoutId = null;\n                    that.next();\n                }, that.options.duration);\n            }\n        },\n        _end: function () {\n            var currentIndex = this.iscroll.currPageX;\n            if (currentIndex != this.currentIndex) {\n                if (this.callBack) {\n                    this.callBack(currentIndex, this.currentIndex);\n                }\n                this.currentIndex = currentIndex;\n\n                if (this.hasIndicator) {\n                    this.indicatorIndexs.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\n                }\n                this.carouselItems.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\n            }\n            this._play();\n        },\n        _addIndicator: function () {\n            var html = \"\";\n            for (var i = 0; i < this.size; i++) {\n                html += \"<li></li>\";\n            }\n            html = \"<ul class='ui-carousel-indicator'>\" + html + \"</ul>\";\n            this.indicator = $(html).appendTo(this.el);\n            this.indicatorIndexs = $(\"li\", this.indicator);\n        },\n        destroy: function () {\n            // 自己怎么销毁,相关事件移除??\n            this.iscroll.destroy();\n        }\n    };\n\n    ipu.carousel =  function (slt, options) {\n        return new Carousel(slt, options);\n    };\n\n})(ipu || window, jQuery, iScroll);\n","// dtPicker  此版本最大值与最小值,存在问题,当时间跨过一天时\r\n(function (ipu, $) {\r\n    var Picker = ipu.Picker;\r\n    var defaultPickerDate = new Date();   // 有些时间不齐全。如time,需要一个默认日期来运算\r\n\r\n\r\n    // show方法调用时,若没有值,则为当前值,还是有值就不变动了,点了确认按钮后,就不再变动了\r\n    // 日期范围的选择处理\r\n    function DtPicker(options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n\r\n        if(!Picker){\r\n            Picker = ipu.Picker;\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    DtPicker.prototype.defaultOptions = {\r\n        template: '<div class=\"ui-poppicker ui-dtpicker\">\\\r\n                        <div class=\"ui-poppicker-header\">\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-cancel\">取消</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-ok\">确定</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-clear\">清除</button>\\\r\n                        </div>\\\r\n                        <div class=\"ui-poppicker-title\">\\\r\n                            <label class=\"ui-dtpicker-y\"></label>\\\r\n                            <label class=\"ui-dtpicker-m\"></label>\\\r\n                            <label class=\"ui-dtpicker-d\"></label>\\\r\n                            <label class=\"ui-dtpicker-h\"></label>\\\r\n                            <label class=\"ui-dtpicker-mi\"></label>\\\r\n                        </div>\\\r\n                        <div>\\\r\n                        <div class=\"ui-poppicker-body\">\\\r\n                            <div class=\"ui-picker\" data-id=\"picker-y\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-m\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-d\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-h\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-mi\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                        </div>\\\r\n                    </div>',\r\n        buttons: ['取消', '确认', '清除'],\r\n        labels: ['年', '月', '日', '时', '分'],\r\n        type: 'datetime',       // date, time, datetime, hour, month\r\n        customData: {},  // 自定义数据\r\n        hasClear: false,    // 是否显示清除按钮\r\n        callBack: function () { // 选择数据时的回调函数\r\n        }\r\n        // beginDate: Date类型,或毫秒值\r\n        // endDate: 同上\r\n    };\r\n\r\n    DtPicker.prototype._init = function () {\r\n        var self = this;\r\n        this.mask = this.createMask();\r\n\r\n        var _picker = this.holder = $(this.options.template).appendTo(\"body\");\r\n        var ui = self.ui = {\r\n            picker: this.holder,\r\n            ok: $('.ui-poppicker-btn-ok', _picker),\r\n            cancel: $('.ui-poppicker-btn-cancel', _picker),\r\n            clear: $('.ui-poppicker-btn-clear', _picker),\r\n            buttons: $('.ui-poppicker-header .ui-btn', _picker),\r\n            labels: $('.ui-poppicker-title label', _picker)\r\n        };\r\n\r\n\r\n        ui.i = new Picker($('[data-id=\"picker-mi\"]', _picker), {listen: false}); // 分钟变更无需要处理\r\n\r\n        ui.h = new Picker($('[data-id=\"picker-h\"]', _picker), {         // 小时变更,有最小值或最大值,需要变更分钟\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null && (self.options.beginMonth || self.options.endMonth)) {\r\n                    self._createMinutes();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.d = new Picker($('[data-id=\"picker-d\"]', _picker), { //仅提供了beginDate时,触发day,hours,minutes的change\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null && (self.options.beginMonth || self.options.endMonth)) {\r\n                    self._createHours();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.m = new Picker($('[data-id=\"picker-m\"]', _picker), { // 月变更时,总要变更day\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null) {\r\n                    self._createDay();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.y = new Picker($('[data-id=\"picker-y\"]', _picker), { // 年发生变更,如果没有结束月,此时有所有的月,是不需要变更月的,只需要变更day\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index != null) {\r\n                    if (self.options.beginMonth || self.options.endMonth) {\r\n                        self._createMonth();\r\n                    } else {\r\n                        self._createDay();\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n\r\n\r\n\r\n        self._create();\r\n\r\n        var ui = self.ui;\r\n        //设定label\r\n        self._setLabels();\r\n        self._setButtons();\r\n        //设定类型\r\n        ui.picker.attr('data-type', this.options.type);\r\n\r\n        //设定默认值\r\n\r\n        self._setSelectedValue(this.options.value);\r\n\r\n        //防止滚动穿透 TODO:待确认情况\r\n        /* self.ui.picker.addEventListener($.EVENT_START, function (event) {\r\n         event.preventDefault();\r\n         }, false);\r\n         self.ui.picker.addEventListener($.EVENT_MOVE, function (event) {\r\n         event.preventDefault();\r\n         }, false);*/\r\n    };\r\n\r\n    DtPicker.prototype.getSelected = function () {\r\n        var self = this;\r\n        var ui = self.ui;\r\n        var type = self.options.type;\r\n        var selected = {\r\n            type: type,\r\n            y: ui.y.getSelectedItem(),\r\n            m: ui.m.getSelectedItem(),\r\n            d: ui.d.getSelectedItem(),\r\n            h: ui.h.getSelectedItem(),\r\n            i: ui.i.getSelectedItem(),\r\n            toString: function () {\r\n                return this.value;\r\n            }\r\n        };\r\n        switch (type) {\r\n            case 'datetime':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text;\r\n                break;\r\n            case 'date':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text;\r\n                break;\r\n            case 'time':\r\n                selected.value = selected.h.value + ':' + selected.i.value;\r\n                selected.text = selected.h.text + ':' + selected.i.text;\r\n                break;\r\n            case 'month':\r\n                selected.value = selected.y.value + '-' + selected.m.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text;\r\n                break;\r\n            case 'hour':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text;\r\n                break;\r\n        }\r\n        return selected;\r\n    };\r\n\r\n    DtPicker.prototype._setSelectedValue = function (value) {\r\n        var self = this;\r\n        var ui = self.ui;\r\n\r\n        if(!value){\r\n            if(this.options.type == 'time'){\r\n                value = '00:00';\r\n            }else{\r\n                value = defaultPickerDate.getFullYear()+'-'+(defaultPickerDate.getMonth()+1)+'-'+defaultPickerDate.getDate()+' '\r\n                    + defaultPickerDate.getHours() + ':' + defaultPickerDate.getMinutes();\r\n            }\r\n        }\r\n        var parsedValue = self._parseSetValue(value);\r\n\r\n        ui.y.setListen(true);\r\n        ui.m.setListen(false);\r\n        ui.d.setListen(false);\r\n        ui.h.setListen(false);\r\n        ui.i.setListen(false);\r\n        ui.y.setSelectedValue(parsedValue.y);\r\n\r\n        ui.m.setListen(true);\r\n        ui.m.setSelectedValue(parsedValue.m);\r\n\r\n        ui.d.setListen(true);\r\n        ui.d.setSelectedValue(parsedValue.d);\r\n\r\n        ui.h.setListen(true);\r\n        ui.h.setSelectedValue(parsedValue.h);\r\n\r\n        ui.i.setListen(true);\r\n        ui.i.setSelectedValue(parsedValue.i);\r\n\r\n        this.value = this.getSelected().value;\r\n    };\r\n\r\n    DtPicker.prototype.setSelectedValue = function (value) {\r\n        this._setSelectedValue(value);\r\n    };\r\n\r\n    DtPicker.prototype.isLeapYear = function (year) {\r\n        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);\r\n    };\r\n\r\n    DtPicker.prototype._inArray = function (array, item) {\r\n        for (var index in array) {\r\n            var _item = array[index];\r\n            if (_item === item) return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    DtPicker.prototype.getDayNum = function (year, month) {\r\n        var self = this;\r\n        if (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) {\r\n            return 31;\r\n        } else if (self._inArray([4, 6, 9, 11], month)) {\r\n            return 30;\r\n        } else if (self.isLeapYear(year)) {\r\n            return 29;\r\n        } else {\r\n            return 28;\r\n        }\r\n    };\r\n\r\n    DtPicker.prototype._fill = function (num) {\r\n        num = num.toString();\r\n        if (num.length < 2) {\r\n            num = 0 + num;\r\n        }\r\n        return num;\r\n    };\r\n\r\n    DtPicker.prototype._isBeginYear = function () {\r\n        return this.options.beginYear === parseInt(this.ui.y.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginMonth = function () {\r\n        return this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginDay = function () {\r\n        return this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginHours = function () {\r\n        return this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndYear = function () {\r\n        return this.options.endYear === parseInt(this.ui.y.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndMonth = function () {\r\n        return this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndDay = function () {\r\n        return this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndHours = function () {\r\n        return this._isEndDay() && this.options.endHours === parseInt(this.ui.h.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._createYear = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        //生成年列表\r\n        var yArray = [];\r\n        if (options.customData.y) {\r\n            yArray = options.customData.y;\r\n        } else {\r\n            var yBegin = options.beginYear;\r\n            var yEnd = options.endYear;\r\n            for (var y = yBegin; y <= yEnd; y++) {\r\n                yArray.push({\r\n                    text: y + '',\r\n                    value: y\r\n                });\r\n            }\r\n        }\r\n        ui.y.setItems(yArray);\r\n        //ui.y.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createMonth = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成月列表\r\n        var mArray = [];\r\n        if (options.customData.m) {\r\n            mArray = options.customData.m;\r\n        } else {\r\n            var m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1;\r\n            var maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12;\r\n            for (; m <= maxMonth; m++) {\r\n                var val = self._fill(m);\r\n                mArray.push({\r\n                    text: val,\r\n                    value: m\r\n                });\r\n            }\r\n        }\r\n        ui.m.setItems(mArray);\r\n        //ui.m.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createDay = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成日列表\r\n        var dArray = [];\r\n        if (options.customData.d) {\r\n            dArray = options.customData.d;\r\n        } else {\r\n            var d = self._isBeginMonth() ? options.beginDay : 1;\r\n            var maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.getSelectedValue()), parseInt(this.ui.m.getSelectedValue()));\r\n            for (; d <= maxDay; d++) {\r\n                var val = self._fill(d);\r\n                dArray.push({\r\n                    text: val,\r\n                    value: d\r\n                });\r\n            }\r\n        }\r\n        ui.d.setItems(dArray);\r\n        //current = current || ui.d.getSelectedValue();\r\n        //ui.d.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createHours = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        //生成时列表\r\n        var hArray = [];\r\n        if (options.customData.h) {\r\n            hArray = options.customData.h;\r\n        } else {\r\n            var h = self._isBeginDay() ? options.beginHours : 0;\r\n            var maxHours = self._isEndDay() ? options.endHours : 23;\r\n            for (; h <= maxHours; h++) {\r\n                var val = self._fill(h);\r\n                hArray.push({\r\n                    text: val,\r\n                    value: h\r\n                });\r\n            }\r\n        }\r\n        ui.h.setItems(hArray);\r\n        //ui.h.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createMinutes = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成分列表\r\n        var iArray = [];\r\n        if (options.customData.i) {\r\n            iArray = options.customData.i;\r\n        } else {\r\n            var i = self._isBeginHours() ? options.beginMinutes : 0;\r\n            var maxMinutes = self._isEndHours() ? options.endMinutes : 59;\r\n            for (; i <= maxMinutes; i++) {\r\n                var val = self._fill(i);\r\n                iArray.push({\r\n                    text: val,\r\n                    value: i\r\n                });\r\n            }\r\n        }\r\n        ui.i.setItems(iArray);\r\n        //ui.i.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._setLabels = function () {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        ui.labels.each(function (i, label) {\r\n            label.innerText = options.labels[i];\r\n        });\r\n    };\r\n\r\n    DtPicker.prototype._setButtons = function () {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        ui.cancel.text(options.buttons[0]);\r\n        ui.ok.text(options.buttons[1]);\r\n\r\n        if(options.hasClear){\r\n            ui.clear.text(options.buttons[2])\r\n        }else{\r\n            ui.clear.hide();\r\n        }\r\n\r\n        ui.buttons.each(function (index) {\r\n            $(this).click(function () {\r\n                self.clickCall(index);\r\n            })\r\n        })\r\n    };\r\n\r\n    // 解析设置的值,目前是字符串,完整日期格式 2012-12-12 12:21\r\n    DtPicker.prototype._parseSetValue = function (value) {\r\n        var now = defaultPickerDate;\r\n        var type = this.options.type;\r\n\r\n        var rs = {\r\n            y: now.getFullYear(),\r\n            m: now.getMonth()+1,\r\n            d: now.getDate(),\r\n            h: now.getHours(),\r\n            i: now.getMinutes()\r\n        };\r\n\r\n        if(value instanceof Date){\r\n            if( type == 'time'){\r\n                valu= +value.getHours()+\":\"+value.getMinutes();\r\n            }else{\r\n                value = value.getFullYear()+'-'+(value.getMonth()+1)+'-'+value.getDate()+ ' '\r\n                    +value.getHours()+\":\"+value.getMinutes();\r\n            }\r\n        }\r\n\r\n        var parts = value.replace(\":\", \"-\").replace(\" \", \"-\").split(\"-\");\r\n        for(var i=0, j=parts.length; i<j; i++){\r\n            parts[i] = parseInt(parts[i]);\r\n        }\r\n\r\n        if(type == 'datetime'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = parts[3];    //\r\n            rs.i = parts[4];\r\n        }else if(type == 'date'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = 0;    //\r\n            rs.i = 0;\r\n        }else if(type == 'time'){\r\n            rs.h = parts[0];    //\r\n            rs.i = parts[1];\r\n        }else if(type == 'hour'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = parts[3];    //\r\n            rs.i = 0;\r\n        }else if(type == 'month'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = 1;    //\r\n            rs.h = 0;    //\r\n            rs.i = 0;\r\n        }\r\n\r\n        return rs;\r\n    };\r\n\r\n    DtPicker.prototype._create = function () {\r\n        var self = this;\r\n        var options = this.options;\r\n        var now = defaultPickerDate;\r\n\r\n        var beginDate = options.beginDate;\r\n        if(beginDate){\r\n            beginDate = this._parseSetValue(beginDate);\r\n            options.beginYear = beginDate.y;\r\n            options.beginMonth = beginDate.m;\r\n            options.beginDay = beginDate.d;\r\n            options.beginHours = beginDate.h;\r\n            options.beginMinutes = beginDate.i;\r\n        }else if(options.type == 'time'){\r\n            options.beginYear =  now.getFullYear();\r\n            options.beginMonth = now.getMonth() + 1;\r\n            options.beginDay = now.getDate();\r\n            options.beginHours = 0;\r\n            options.beginMinutes = 0;\r\n        }else {\r\n            options.beginYear =  now.getFullYear() - 5;\r\n        }\r\n\r\n        var endDate = options.endDate;\r\n        if (endDate) { //设定了结束日期\r\n            endDate = this._parseSetValue(endDate);\r\n            options.endYear = endDate.y;\r\n            options.endMonth = endDate.m;\r\n            options.endDay = endDate.d;\r\n            options.endHours = endDate.h;\r\n            options.endMinutes = endDate.i;\r\n        }else if(options.type == 'time'){\r\n            options.endYear =  now.getFullYear();\r\n            options.endMonth = now.getMonth() + 1;\r\n            options.endDay = now.getDate();\r\n            options.endHours = 24;\r\n            options.endMinutes = 59;\r\n        }else {\r\n            options.endYear =  options.beginYear + 10 ;\r\n        }\r\n\r\n        //生成\r\n        self._createYear();\r\n        self._createMonth();\r\n        self._createDay();\r\n        self._createHours();\r\n        self._createMinutes();\r\n    };\r\n\r\n    // 更新选择框,更新当前值\r\n    DtPicker.prototype.setBeginDate = function (date) {\r\n        this.options.beginDate = date;\r\n        this._create();\r\n    };\r\n\r\n    // 判断最大最小值合理性\r\n    DtPicker.prototype.setEndDate = function (date) {\r\n        this.options.endDate = date;\r\n        this._create();\r\n    };\r\n\r\n    DtPicker.prototype.dispose = function () {\r\n        var self = this;\r\n        self.hide();\r\n        setTimeout(function () {\r\n            self.ui.picker.parentNode.removeChild(self.ui.picker);\r\n            for (var name in self) {\r\n                self[name] = null;\r\n                delete self[name];\r\n            }\r\n            self.disposed = true;\r\n        }, 300);\r\n    };\r\n\r\n    DtPicker.prototype.show = function (callBack) {\r\n        if (callBack) {\r\n            this.options.callBack = callBack;\r\n        }\r\n        this.mask.show();\r\n        this.setSelectedValue(this.value);\r\n        this.holder.addClass(\"ui-active\");\r\n    };\r\n\r\n    DtPicker.prototype.clickCall = function(index){\r\n        var self = this;\r\n        var sltDate = self.getSelected();\r\n        var rs = self.options.callBack.call(this , sltDate, index);\r\n        if (rs !== false) {\r\n            if(index == 1){ // 假定确认按钮在第二个位置,传回true则存储当前值\r\n                self.value = sltDate.value;\r\n            }else if(index == 2){\r\n                self.value = null;\r\n            }\r\n            self.hide();\r\n        }\r\n    };\r\n\r\n    DtPicker.prototype.hide = function () {\r\n        this.mask.close();\r\n        this.holder.removeClass(\"ui-active\");\r\n    };\r\n\r\n    // 应该移除callback参数,提取出业成一个工具方法\r\n    DtPicker.prototype.createMask = function(callback) {\r\n        var self = this;\r\n        var element = document.createElement('div');\r\n        element.classList.add(\"ui-picker-backup\");\r\n        //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n        element.addEventListener('click', function() {\r\n            self.clickCall(0);\r\n        });\r\n        var mask = [element];\r\n        mask._show = false;\r\n        mask.show = function() {\r\n            mask._show = true;\r\n            element.setAttribute('style', 'opacity:1');\r\n            document.body.appendChild(element);\r\n            return mask;\r\n        };\r\n        mask._remove = function() {\r\n            if (mask._show) {\r\n                mask._show = false;\r\n                element.setAttribute('style', 'opacity:0');\r\n                setTimeout(function() {\r\n                    var body = document.body;\r\n                    element.parentNode === body && body.removeChild(element);\r\n                }, 350);\r\n            }\r\n            return mask;\r\n        };\r\n        mask.close = function() {\r\n            if(mask._show){\r\n                if (callback) {\r\n                    if (callback() !== false) {\r\n                        mask._remove();\r\n                    }\r\n                } else {\r\n                    mask._remove();\r\n                }\r\n            }\r\n        };\r\n        return mask;\r\n    };\r\n\r\n    ipu.dtPicker = function(options){\r\n        return new DtPicker(options);\r\n    };\r\n})(ipu || window, jQuery);\r\n","// 支持非循环\r\n// size命名用的有点混淆。。\r\n// 不能支持元素隐藏时,使用百比分处理移动距离。。。?\r\n// 支持两个以内容显示\r\n// 支持类似snap实现\r\n// 理想是移除carousel.js的实现,用hammerCarousel.js实现所有相关功能\r\n\r\n(function (ipu, $, Hammer) {\r\n    function HammerCarousel(navSlt, options) {\r\n        this.options = options = $.extend({}, this.defaultOptions, options);\r\n        this.el = $(navSlt).get(0);\r\n        this._init();\r\n    }\r\n\r\n    // 直接替换掉了prototype对象,可能不是个好选择\r\n    HammerCarousel.prototype = {\r\n        defaultOptions: {\r\n            index: null,        // 默认显示第几个项,其实挺没用的,默认显示第一个,用户再调用一下显示第几个,作用一样现在。\r\n            autoPlay: false,    // 是否自动轮播\r\n            duration: 3000,     // 轮播间隔\r\n            indicator: false,  //是否生成指示器,即小点点\r\n            callBack: null,  // 轮播后回调函数\r\n            clickBack: null   // 各子项用户点击事件\r\n            //indicatorPosition: 'center',  // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok,参考humUI和mui\r\n        },\r\n        _init: function () {\r\n            this.wrapper = $(\">.ui-carousel-wrapper\", this.el);\r\n            this.carouselItems = $(\">li\", this.wrapper);\r\n\r\n\r\n            this.showSize = 1; // 假设一屏默认显示1个,所以做循环显示只需要复制一个子项\r\n            this.carouselItemSizes = [];\r\n            this.currentIndex = 0;\r\n            this.moveLen = 0;\r\n            this.lastItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来判断是复制项\r\n\r\n            // 这里假设每个元素都是相等的\r\n            this.carouselItems.slice(0, this.showSize).clone().appendTo(this.wrapper); // 如果做无限循环则要这样处理\r\n            this.size = this.carouselItems.size();\r\n\r\n            var self = this;\r\n            if(this.options.clickBack){\r\n                $(\">li\", this.wrapper).each(function (i) {\r\n                    $(this).click(function () {\r\n                        self.options.clickBack.call(this, i%self.size);\r\n                    });\r\n                })\r\n            }\r\n\r\n            this.sizeCount();\r\n            var that = this;\r\n\r\n            this.hammer = new Hammer.Manager(this.el); // 避免因为li里面的内容高度不够,而不能触发相关事件\r\n            this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_HORIZONTAL, threshold: 10}));\r\n            this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this.onPan, this));\r\n\r\n            $(window).resize(function () { // 在尺寸变化时,处理,是否可以考虑只在宽度变化时处理,横屏事件?\r\n                that.refresh();\r\n            });\r\n\r\n            if (this.options.index == null) {\r\n                var activeIndex = this.carouselItems.filter(\".ui-active\").index();\r\n                this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n            }\r\n\r\n            if (this.options.indicator) {\r\n                this._addIndicator();\r\n            }\r\n\r\n            this.show(this.options.index);\r\n        },\r\n        stop: function () {\r\n            this._pause();\r\n            this.options.autoPlay = false;\r\n        },\r\n        _pause: function () {\r\n            if (this.timeoutId) {\r\n                clearTimeout(this.timeoutId);\r\n                this.timeoutId = null;\r\n            }\r\n        },\r\n        prev: function () {\r\n            var index = this.currentIndex == 0 ? this.size - 1 : this.currentIndex - 1;\r\n            if (index == this.size - 1) {\r\n                this._show(this.size, false);\r\n                this.wrapper.width();\r\n            }\r\n            this._show(index, true);\r\n        },\r\n        next: function () {//下一张\r\n            var index = this.currentIndex == this.size ? 1 : this.currentIndex + 1;\r\n            if (index == 1) {\r\n                this._show(0, false);\r\n                this.wrapper.width();\r\n            }\r\n            this._show(index, true);\r\n        },\r\n        show: function (index) {//跳到指定索引处\r\n            // 用户指定跳时,在当前index==0时,涉及一个最近跳转处理,目前未处理,...不管了\r\n            if (index > this.size || index < 0) {\r\n                console.error(\"index超出范围!\");\r\n            } else {\r\n                this._show(index); // 默认追加动画\r\n            }\r\n        },\r\n        play: function () {\r\n            this.options.autoPlay = true;\r\n            this._play();\r\n        },\r\n        _play: function () {\r\n            if (this.options.autoPlay && !this.timeoutId) {\r\n                var that = this;\r\n                this.timeoutId = setTimeout(function () {\r\n                    that.timeoutId = null;//清空这个timeoutId,代表该次处理已经执行了\r\n                    that.next();\r\n                }, that.options.duration);\r\n            }\r\n        },\r\n        _end: function () {//移动结束时调用\r\n            var currentIndex = this.currentIndex;\r\n\r\n            if (this.options.callBack) {\r\n                this.options.callBack(currentIndex, this.lastItem);//返回当前索引,以及是滞最后一项参数\r\n            }\r\n\r\n            if (this.indicator) {\r\n                this.indicatorIndexs.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n            }\r\n            this.carouselItems.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n\r\n            this._play();//处理自动播放\r\n        },\r\n        _addIndicator: function () {\r\n            var html = \"\";\r\n            for (var i = 0; i < this.size; i++) {\r\n                html += \"<li></li>\";\r\n            }\r\n            html = \"<ul class='ui-carousel-indicator'>\" + html + \"</ul>\";\r\n            this.indicator = $(html).appendTo(this.el);\r\n            this.indicatorIndexs = $(\"li\", this.indicator);\r\n        },\r\n        sizeCount: function () {\r\n            this.wrapperSize = this.wrapper.outerWidth(true);\r\n            this.itemSize = this.carouselItems.eq(0).outerWidth(true);\r\n            this.mostSize = this.size * this.itemSize; // 宽度*数量\r\n            $(this.wrapper).removeClass(\"ui-carousel-animate\").width();\r\n\r\n            var that = this;\r\n            $(\">li\", this.wrapper).each(function (index, dom) { // 此处要注意,最后一个子项是后加进入的,要重新使用jquery处理一下,不能直接使用this.xx来处理\r\n                that.carouselItemSizes[index] = $(this).position().left;\r\n            });\r\n        },\r\n        refresh: function () {\r\n            if (this.wrapperSize != this.wrapper.outerWidth(true)) {\r\n                this.sizeCount();\r\n                this._show(this.currentIndex, true); //新的位置\r\n            }\r\n        },\r\n        move: function (moveLen) { // 类似mouseMove时的处理函数\r\n            this._pause();\r\n            $(this.wrapper).removeClass(\"ui-carousel-animate\");\r\n            var move = (this.moveLen - moveLen) % this.mostSize;\r\n            move = (move + this.mostSize) % this.mostSize;\r\n            this.displayMoveLen = move;\r\n\r\n            move = -move + \"px\";\r\n            $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n        },\r\n        _show: function (index, animate) { // 知道最终移动到的项时,调用\r\n            if (animate !== false) { // 默认值为true\r\n                animate = true;\r\n            }\r\n\r\n            this._pause();\r\n            $(this.wrapper).toggleClass(\"ui-carousel-animate\", animate);\r\n            this.currentIndex = index % this.size;\r\n            //this.currentIndex = index;\r\n            this.lastItem = index == this.size;\r\n            var move = this.carouselItemSizes[index];\r\n            this.moveLen = move;\r\n            move = -move + \"px\";\r\n\r\n            $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n            if (animate) {\r\n                this._end();\r\n            }\r\n        },\r\n        onPan: function (ev) {\r\n            var delta = ev.deltaX;\r\n            // pancancel与panend,有效的pan事件结束与无效的pan事件结束?\r\n            if (ev.type == 'panend' || ev.type == 'pancancel') {\r\n                var value = delta / this.itemSize;\r\n                var intValue = parseInt(Math.abs(value));               // 取整数\r\n                var decimal = Math.abs(value) % 1;                   // 取小数\r\n\r\n                if (decimal > 0.2) { // 滑动超过页面宽20%;\r\n                    intValue = intValue + 1;\r\n                }\r\n                if (value > 0) {\r\n                    intValue = -intValue;\r\n                }\r\n\r\n                var index = (this.currentIndex + intValue) % this.size;\r\n                index = (index + this.size) % this.size; // 因为可能是个负值,转换成正值\r\n\r\n                // 当前位移大于一个项的长度,这由move方法导致的,所以此时只能是最后一项在显示,所以要显示最后一项\r\n                if (index == 0 && this.displayMoveLen > this.itemSize) {\r\n                    index = this.size;\r\n                }\r\n                this._show(index);\r\n            } else if (ev.type == 'panmove'){\r\n                this.move(delta);\r\n            }\r\n        }\r\n    };\r\n\r\n    ipu.hammerCarousel = function (slt, options) {\r\n        return new HammerCarousel(slt, options);\r\n    };\r\n})(ipu || window, jQuery,  Hammer);\r\n","(function (ipu, $) {\r\n    //$ extends\r\n    function __dealCssEvent(eventNameArr, callback) {\r\n        // console.log('__dealCssEvent');\r\n        var events = eventNameArr,\r\n            i, dom = this;// jshint ignore:line\r\n\r\n        function fireCallBack(e) {\r\n            /*jshint validthis:true */\r\n            if (e.target !== this) return;\r\n            callback.call(this, e);\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.off(events[i], fireCallBack);\r\n            }\r\n        }\r\n\r\n        if (callback) {\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.on(events[i], fireCallBack);\r\n            }\r\n        }\r\n    }\r\n\r\n    $.fn.transitionEnd = function (callback) {\r\n        // console.log('transitionEnd');\r\n        __dealCssEvent.call(this, ['webkitTransitionEnd', 'transitionend'], callback);\r\n        return this;\r\n    };\r\n\r\n\r\n\r\n    var _modalTemplateTempDiv = document.createElement('div');\r\n\r\n    var defaults = {\r\n        modalStack: true,\r\n        modalButtonOk: '确定',\r\n        modalButtonCancel: '取消',\r\n        modalPreloaderTitle: '加载中',\r\n        modalContainer: document.body ? document.body : 'body'\r\n    };\r\n\r\n    ipu.modalStack = [];\r\n\r\n    ipu.modalStackClearQueue = function () {\r\n        if (ipu.modalStack.length) {\r\n            (ipu.modalStack.shift())();\r\n        }\r\n    };\r\n    ipu.modal = function (params) {\r\n        params = params || {};\r\n        var modalHTML = '';\r\n        var buttonsHTML = '';\r\n        if (params.buttons && params.buttons.length > 0) {\r\n            for (var i = 0; i < params.buttons.length; i++) {\r\n                buttonsHTML += '<span class=\"ui-modal-button' + (params.buttons[i].bold ? ' ui-modal-button-bold' : '') + '\">' + params.buttons[i].text + '</span>';\r\n            }\r\n        }\r\n        var extraClass = params.extraClass || '';\r\n        var titleHTML = params.title ? '<div class=\"ui-modal-title\">' + params.title + '</div>' : '';\r\n        var textHTML = params.text ? '<div class=\"ui-modal-text\">' + params.text + '</div>' : '';\r\n        var afterTextHTML = params.afterText ? params.afterText : '';\r\n        var noButtons = !params.buttons || params.buttons.length === 0 ? 'ui-modal-no-buttons' : '';\r\n        var verticalButtons = params.verticalButtons ? 'ui-modal-buttons-vertical' : '';\r\n        modalHTML = '<div class=\"ui-modal ' + extraClass + ' ' + noButtons + '\"><div class=\"ui-modal-inner\">' + (titleHTML + textHTML + afterTextHTML) + '</div><div class=\"ui-modal-buttons ' + verticalButtons + '\">' + buttonsHTML + '</div></div>';\r\n\r\n        _modalTemplateTempDiv.innerHTML = modalHTML;\r\n\r\n        var modal = $(_modalTemplateTempDiv).children();\r\n\r\n        $(defaults.modalContainer).append(modal[0]);\r\n\r\n        // Add events on buttons\r\n        modal.find('.ui-modal-button').each(function (index, el) {\r\n            $(el).on('click', function (e) {\r\n                if (params.buttons[index].close !== false) ipu.closeModal(modal);\r\n                if (params.buttons[index].onClick) params.buttons[index].onClick(modal, e);\r\n                if (params.onClick) params.onClick(modal, index);\r\n            });\r\n        });\r\n        ipu.openModal(modal);\r\n        return modal[0];\r\n    };\r\n    ipu.alert = function (text, title, callbackOk) {\r\n        if (typeof title === 'function') {\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            buttons: [{text: defaults.modalButtonOk, bold: true, onClick: callbackOk}]\r\n        });\r\n    };\r\n    ipu.confirm = function (text, title, callbackOk, callbackCancel) {\r\n        if (typeof title === 'function') {\r\n            callbackCancel = arguments[2];\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            buttons: [\r\n                {text: defaults.modalButtonCancel, omodalButtonCancelnClick: callbackCancel},\r\n                {text: defaults.modalButtonOk, bold: true, onClick: callbackOk}\r\n            ]\r\n        });\r\n    };\r\n    ipu.prompt = function (text, title, callbackOk, callbackCancel) {\r\n        if (typeof title === 'function') {\r\n            callbackCancel = arguments[2];\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            afterText: '<input type=\"text\" class=\"ui-modal-text-input\">',\r\n            buttons: [\r\n                {\r\n                    text: defaults.modalButtonCancel\r\n                },\r\n                {\r\n                    text: defaults.modalButtonOk,\r\n                    bold: true\r\n                }\r\n            ],\r\n            onClick: function (modal, index) {\r\n                if (index === 0 && callbackCancel) callbackCancel($(modal).find('.ui-modal-text-input').val());\r\n                if (index === 1 && callbackOk) callbackOk($(modal).find('.ui-modal-text-input').val());\r\n            }\r\n        });\r\n    };\r\n\r\n    var minLoad = false;        // 是否最小时间调用方式\r\n    var loadOverTime = false;   // 是否超过最小调用时间\r\n    var loadEnd = false;        // 是否调用结束\r\n    var loadTimeOut = null;     // 延时调用ID\r\n\r\n    ipu.showPreloader = function (title, minTime) {\r\n        ipu.hidePreloader(true);\r\n\r\n        ipu.showPreloader.preloaderModal = ipu.modal({\r\n            title: title || defaults.modalPreloaderTitle,\r\n            text: '<div class=\"ui-preloader\"></div>'\r\n        });\r\n\r\n        if(minTime){\r\n            minLoad = true;\r\n            loadTimeOut = setTimeout(function () {\r\n                loadOverTime = true;\r\n                if(loadEnd){\r\n                    ipu.hidePreloader();\r\n                }\r\n            }, minTime);\r\n        }\r\n\r\n        return ipu.showPreloader.preloaderModal;\r\n    };\r\n    ipu.hidePreloader = function (force) {\r\n        if(force || !minLoad || (minLoad && loadOverTime)){\r\n            if(force && loadTimeOut){\r\n                window.clearTimeout(loadTimeOut);\r\n            }\r\n            ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);\r\n            minLoad = false; // 重置各标志位\r\n            loadOverTime = false;\r\n            loadEnd = false;\r\n            loadTimeOut = null;\r\n        }else{\r\n            loadEnd = true;\r\n        }\r\n    };\r\n    ipu.showIndicator = function () {\r\n        if ($('.ui-preloader-indicator-modal')[0]) return;\r\n        $(defaults.modalContainer).append('<div class=\"ui-preloader-indicator-overlay\"></div><div class=\"ui-preloader-indicator-modal\"><span class=\"ui-preloader ui-preloader-white\"></span></div>');\r\n    };\r\n    ipu.hideIndicator = function () {\r\n        $('.ui-preloader-indicator-overlay, .ui-preloader-indicator-modal').remove();\r\n    };\r\n    // Action Sheet\r\n    ipu.actions = function (params) {\r\n        var modal, groupSelector, buttonSelector;\r\n        params = params || [];\r\n\r\n        if (params.length > 0 && !$.isArray(params[0])) {\r\n            params = [params];\r\n        }\r\n        var modalHTML;\r\n        var buttonsHTML = '';\r\n        for (var i = 0; i < params.length; i++) {\r\n            for (var j = 0; j < params[i].length; j++) {\r\n                if (j === 0) buttonsHTML += '<div class=\"ui-actions-modal-group\">';\r\n                var button = params[i][j];\r\n                var buttonClass = button.label ? 'ui-actions-modal-label' : 'ui-actions-modal-button';\r\n                if (button.bold) buttonClass += ' ui-actions-modal-button-bold';\r\n                if (button.color) buttonClass += ' ui-color-' + button.color;\r\n                if (button.bg) buttonClass += ' ui-bg-' + button.bg;\r\n                if (button.disabled) buttonClass += ' disabled';\r\n                buttonsHTML += '<span class=\"' + buttonClass + '\">' + button.text + '</span>';\r\n                if (j === params[i].length - 1) buttonsHTML += '</div>';\r\n            }\r\n        }\r\n        modalHTML = '<div class=\"ui-actions-modal\">' + buttonsHTML + '</div>';\r\n        _modalTemplateTempDiv.innerHTML = modalHTML;\r\n        modal = $(_modalTemplateTempDiv).children();\r\n        $(defaults.modalContainer).append(modal[0]);\r\n        groupSelector = '.ui-actions-modal-group';\r\n        buttonSelector = '.ui-actions-modal-button';\r\n\r\n        var groups = modal.find(groupSelector);\r\n        groups.each(function (index, el) {\r\n            var groupIndex = index;\r\n            $(el).children().each(function (index, el) {\r\n                var buttonIndex = index;\r\n                var buttonParams = params[groupIndex][buttonIndex];\r\n                var clickTarget;\r\n                if ($(el).is(buttonSelector)) clickTarget = $(el);\r\n                // if (toPopover && $(el).find(buttonSelector).length > 0) clickTarget = $(el).find(buttonSelector);\r\n\r\n                if (clickTarget) {\r\n                    clickTarget.on('click', function (e) {\r\n                        if (buttonParams.close !== false) ipu.closeModal(modal);\r\n                        if (buttonParams.onClick) buttonParams.onClick(modal, e);\r\n                    });\r\n                }\r\n            });\r\n        });\r\n        ipu.openModal(modal);\r\n        return modal[0];\r\n    };\r\n\r\n    //显示一个消息,会在2秒钟后自动消失\r\n    ipu.toast = function (msg, duration, extraclass) {\r\n        var $toast = $('<div class=\"ui-modal ui-toast ' + (extraclass || '') + '\">' + msg + '</div>').appendTo(document.body);\r\n        ipu.openModal($toast, function () {\r\n            setTimeout(function () {\r\n                ipu.closeModal($toast);\r\n            }, duration || 2000);\r\n        });\r\n    };\r\n    ipu.openModal = function (modal, cb) {\r\n        modal = $(modal);\r\n        var isModal = modal.hasClass('ui-modal'),\r\n            isNotToast = !modal.hasClass('ui-toast');\r\n            isNotToast = false; // 强制打开新窗口\r\n        if ($('.ui-modal.ui-modal-in:not(.ui-modal-out)').length && defaults.modalStack && isModal && isNotToast) {\r\n            ipu.modalStack.push(function () {\r\n                ipu.openModal(modal, cb);\r\n            });\r\n            return;\r\n        }\r\n        var isPopup = modal.hasClass('ui-popup');\r\n        var isLoginScreen = modal.hasClass('ui-login-screen');\r\n        var isPickerModal = modal.hasClass('ui-picker-modal');\r\n        var isToast = modal.hasClass('ui-toast');\r\n        if (isModal) {\r\n            modal.show();\r\n            modal.css({\r\n                marginTop: -Math.round(modal.outerHeight() / 2) + 'px'\r\n            });\r\n        }\r\n        if (isToast) {\r\n            modal.css({\r\n                marginLeft: -Math.round(modal.outerWidth() / 2 / 1.185) + 'px' //1.185 是初始化时候的放大效果\r\n            });\r\n        }\r\n\r\n        var overlay;\r\n        if (!isLoginScreen && !isPickerModal && !isToast) {\r\n            if ($('.ui-modal-overlay').length === 0 && !isPopup) {\r\n                $(defaults.modalContainer).append('<div class=\"ui-modal-overlay\"></div>');\r\n            }\r\n            if ($('.ui-popup-overlay').length === 0 && isPopup) {\r\n                $(defaults.modalContainer).append('<div class=\"ui-popup-overlay\"></div>');\r\n            }\r\n            overlay = isPopup ? $('.ui-popup-overlay') : $('.ui-modal-overlay');\r\n        }\r\n\r\n        //Make sure that styles are applied, trigger relayout;\r\n        var clientLeft = modal[0].clientLeft;\r\n\r\n        // Trugger open event\r\n        modal.trigger('open');\r\n\r\n        // Picker modal body class\r\n        if (isPickerModal) {\r\n            $(defaults.modalContainer).addClass('ui-with-picker-modal');\r\n        }\r\n\r\n        // Classes for transition in\r\n        if (!isLoginScreen && !isPickerModal && !isToast) overlay.addClass('ui-modal-overlay-visible');\r\n        modal.removeClass('ui-modal-out').addClass('ui-modal-in').transitionEnd(function (e) {\r\n            if (modal.hasClass('ui-modal-out')) modal.trigger('closed');\r\n            else modal.trigger('opened');\r\n        });\r\n        // excute callback\r\n        if (typeof cb === 'function') {\r\n            cb.call(this);\r\n        }\r\n        return true;\r\n    };\r\n    ipu.closeModal = function (modal) {\r\n        modal = $(modal || '.ui-modal-in');\r\n        if (typeof modal !== 'undefined' && modal.length === 0) {\r\n            return;\r\n        }\r\n        var isModal = modal.hasClass('ui-modal'),\r\n            isPopup = modal.hasClass('ui-popup'),\r\n            isToast = modal.hasClass('ui-toast'),\r\n            isLoginScreen = modal.hasClass('ui-login-screen'),\r\n            isPickerModal = modal.hasClass('ui-picker-modal'),\r\n            removeOnClose = modal.hasClass('ui-remove-on-close'),\r\n            overlay = isPopup ? $('.ui-popup-overlay') : $('.ui-modal-overlay');\r\n        if (isPopup) {\r\n            if (modal.length === $('.ui-popup.ui-modal-in').length) {\r\n                overlay.removeClass('ui-modal-overlay-visible');\r\n            }\r\n        }\r\n        else if (!(isPickerModal || isToast)) {\r\n            overlay.removeClass('ui-modal-overlay-visible');\r\n        }\r\n        modal.trigger('close');\r\n\r\n        // Picker modal body class\r\n        if (isPickerModal) {\r\n            $(defaults.modalContainer).removeClass('ui-with-picker-modal');\r\n            $(defaults.modalContainer).addClass('ui-picker-modal-closing');\r\n        }\r\n\r\n        modal.removeClass('ui-modal-in').addClass('ui-modal-out').transitionEnd(function (e) {\r\n            if (modal.hasClass('ui-modal-out')) modal.trigger('closed');\r\n            else modal.trigger('opened');\r\n\r\n            if (isPickerModal) {\r\n                $(defaults.modalContainer).removeClass('ui-picker-modal-closing');\r\n            }\r\n            if (isPopup || isLoginScreen || isPickerModal) {\r\n                modal.removeClass('ui-modal-out').hide();\r\n                if (removeOnClose && modal.length > 0) {\r\n                    modal.remove();\r\n                }\r\n            }\r\n            else {\r\n                modal.remove();\r\n            }\r\n        });\r\n        if (isModal && defaults.modalStack) {\r\n            ipu.modalStackClearQueue();\r\n        }\r\n\r\n        return true;\r\n    };\r\n    function handleClicks(e) {\r\n        /*jshint validthis:true */\r\n        var clicked = $(this);\r\n        var url = clicked.attr('href');\r\n\r\n\r\n        //Collect Clicked data- attributes\r\n       /* var clickedData = clicked.dataset();\r\n\r\n        // Popup\r\n        var popup;\r\n        if (clicked.hasClass('ui-open-popup')) {\r\n            if (clickedData.popup) {\r\n                popup = clickedData.popup;\r\n            }\r\n            else popup = '.ui-popup';\r\n            ipu.popup(popup);\r\n        }\r\n        if (clicked.hasClass('ui-close-popup')) {\r\n            if (clickedData.popup) {\r\n                popup = clickedData.popup;\r\n            }\r\n            else popup = '.ui-popup.modal-in';\r\n            ipu.closeModal(popup);\r\n        }*/\r\n\r\n        // Close Modal\r\n        if (clicked.hasClass('ui-modal-overlay')) {\r\n            if ($('.ui-modal.ui-modal-in').length > 0 && defaults.modalCloseByOutside)\r\n                ipu.closeModal('.ui-modal.ui-modal-in');\r\n            if ($('.ui-actions-modal.ui-modal-in').length > 0 && defaults.actionsCloseByOutside)\r\n                ipu.closeModal('.ui-actions-modal.ui-modal-in');\r\n\r\n        }\r\n        if (clicked.hasClass('ui-popup-overlay')) {\r\n            if ($('.ui-popup.ui-modal-in').length > 0 && defaults.popupCloseByOutside)\r\n                ipu.closeModal('.ui-popup.modal-in');\r\n        }\r\n    }\r\n\r\n    $(document).on('click', ' .ui-modal-overlay, .ui-popup-overlay, .ui-close-popup, .ui-open-popup, .ui-close-picker', handleClicks);\r\n})(ipu || window, jQuery);\r\n","(function (ipu, $) {\r\n    NavBar.prototype.defaultOpt = {\r\n        animate: false,           // 默认有动画\r\n        contentSlt: \".ui-nav-content\",\r\n        callBack: function (currentIndex, lastIndex) { // currentIndex: 当前索引,lastIndex上一次索引(第一次时为null)\r\n        }\r\n    };\r\n\r\n    function NavBar(slt, options) {\r\n        this.options = $.extend({}, this.defaultOpt, options);\r\n        this.content = $(this.options.contentSlt);\r\n        this.nav = $(slt);\r\n        this.wrapper = $(\">ul\", this.content);\r\n        this.contents = $(\">li\", this.wrapper);\r\n        this.navs = $(\">a\", this.nav);\r\n        var me = this;\r\n\r\n        var activeIndex = this.navs.filter(\".ui-active\").index(); // 查找默认有active的索引\r\n        if (activeIndex == -1) {\r\n            activeIndex = this.contents.filter(\".ui-active\").index(); // 查找默认有active的索引\r\n        }\r\n        this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n\r\n        if (!this.options.animate) {\r\n            this.wrapper.addClass(\"ui-no-animation\")\r\n        }\r\n\r\n        this.navs.each(function (index, i) {\r\n            $(this).click(function () {\r\n                me.show(index);\r\n            });\r\n        });\r\n\r\n        this.lastIndex = null;\r\n        this.currentIndex = null;\r\n        me.show(this.options.index);\r\n    }\r\n\r\n    NavBar.prototype.show = function (index) {\r\n        if (this.currentIndex != index) {\r\n            var currentContent = $(this.contents[index]).addClass(\"ui-show\");\r\n\r\n            if (this.options.animate) {\r\n                if (this.lastIndex != null && this.lastIndex != index) {\r\n                    $(this.contents[this.lastIndex]).removeClass(\"ui-show\"); // 隐藏上上个元素\r\n                }\r\n\r\n                if (this.currentIndex != null) {        // 非第一次需要动画效果\r\n                    if (this.currentIndex < index) {   // 需要内容为往左走,显示右边的内容\r\n                        if (this.lastIndex != null && this.lastIndex < this.currentIndex) {  // 内容已经左走过了,则需要移除动画复原位置,再通过width()方法强制生效\r\n                            this.wrapper.addClass(\"ui-no-animation\").removeClass(\"ui-nav-content-right\").width(); // 可以强制刷新,默认jquery应该会将这些dom上的修改延时处理?\r\n                        }\r\n                    } else {\r\n                        if (this.lastIndex == null || this.lastIndex > this.currentIndex) { // 类似同上\r\n                            this.wrapper.addClass(\"ui-no-animation\").addClass(\"ui-nav-content-right\").width(); // 可以强制刷新不?\r\n                        }\r\n                    }\r\n                    this.wrapper.removeClass(\"ui-no-animation\").toggleClass(\"ui-nav-content-right\");\r\n                }\r\n            } else {\r\n                $(this.contents[this.currentIndex]).removeClass(\"ui-show\");\r\n            }\r\n\r\n            // 更新class,ui-active状态\r\n            $(this.contents[index]).addClass(\"ui-active\").siblings(\".ui-active\").removeClass(\"ui-active\");\r\n            $(this.navs[index]).addClass(\"ui-active\").siblings(\".ui-active\").removeClass(\"ui-active\");\r\n\r\n            this.lastIndex = this.currentIndex;\r\n            this.currentIndex = index;\r\n\r\n            if (this.options.callBack) {\r\n                this.options.callBack(this.currentIndex, this.lastIndex);\r\n            }\r\n        }\r\n    };\r\n\r\n    ipu.navBar = function (slt, options) {\r\n        return new NavBar(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n","(function (ipu, $) {\r\n    function __dealCssEvent(eventNameArr, callback) {\r\n        var events = eventNameArr,\r\n            i, dom = this;// jshint ignore:line\r\n\r\n        function fireCallBack(e) {\r\n            if (e.target !== this) return;\r\n            callback.call(this, e);\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.off(events[i], fireCallBack);\r\n            }\r\n        }\r\n\r\n        if (callback) {\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.on(events[i], fireCallBack);\r\n            }\r\n        }\r\n    }\r\n\r\n    $.fn.animationEnd = function (callback) {\r\n        __dealCssEvent.call(this, ['webkitAnimationEnd', 'animationend'], callback);\r\n        return this;\r\n    };\r\n\r\n    function submitForm(doc, url ,params){\r\n        var form = doc.createElement(\"form\");\r\n        form.action = url;\r\n        form.method = \"post\";\r\n        form.style.display = \"none\";\r\n\r\n        for (var x in params) {\r\n            var ele = doc.createElement(\"input\");\r\n            ele.type=\"hidden\";\r\n            ele.name = x;\r\n            ele.value =  params[x];\r\n            form.appendChild(ele);\r\n        }\r\n\r\n        doc.body.appendChild(form);\r\n        form.submit();\r\n    }\r\n\r\n    // 检查是否有ui-pages的结构\r\n    function checkPages() {\r\n        if(!hasPages){\r\n            pagesObj = $(\".ui-pages\"); // pagesObj为空则进行jquery取值\r\n            if(pagesObj.size() == 0){\r\n                pagesObj =  $(\"<div class='ui-pages'><div class='ui-page ui-show \"+zeroPageClass+\"' id='\"+pageIdPrefix+\"0'></div>\").appendTo(\"body\");\r\n            }\r\n            hasPages = true;\r\n        }\r\n    }\r\n\r\n    // 站位页面\r\n    function isZeroPage(page) {\r\n        return $(page).hasClass(zeroPageClass);\r\n    }\r\n\r\n    var page = {};\r\n    var hasPages = false;\r\n    var maps = {};\r\n    var pageNo = 1; // 编号0留给主页面或当前页面,或没有\r\n    var pageIdPrefix = \"ipuPage-\";\r\n    var pagesObj = null;\r\n    var animateInClass = \"ui-anim ui-slideRightIn\";\r\n    var animateOutClass  = \"ui-anim ui-slideRightOut\";\r\n    var eventName = \"ipuUIPageBack\";\r\n    var zeroPageClass = 'ui-page-zero';\r\n    var zeroPagesClass = 'ui-pages-zero';\r\n\r\n    page.options = {     // 那个窗口执行open,默认父窗口\r\n        target: window.parent, // 默认执行父窗口\r\n        backIndex: -1,    // 默认回退一页\r\n        closeIndex: -1,   // 默认关闭最近一个页面\r\n        params:{},        // post的默认参数\r\n        animate: true,     // 是否动画效果\r\n        showLoading: true,   // 是否显示加载消息\r\n        loadingMessage: '正在加载中',\r\n        method : null,     // 请求方式,用户不需要设置\r\n        minMessageTime: 500, // 最小显示加载时间,避免出现闪现的情况\r\n        callBack:function () { // 事件回调\r\n        }\r\\n    };\r\n\r\n    // 当前页面加载,针对顶层父窗口\r\n    page.openPage = function (url, options) {\r\n        var newPage = null;\r\n        var nowPageNo = pageIdPrefix + (pageNo++);\r\n        maps[nowPageNo] = url;\r\n\r\n        checkPages();\r\n\r\n        if(options.showLoading){\r\n            ipu.showPreloader(options.loadingMessage, options.minMessageTime);\r\n        }\r\n\r\n        if(options.method == 'post'){\r\n            newPage = $(\"<div class='ui-page' id='\"+nowPageNo+\"'><iframe class='ui-page-iframe'></iframe></div>\");\r\n        }else{\r\n            newPage = $(\"<div class='ui-page' id='\"+nowPageNo+\"'><iframe class='ui-page-iframe' src='\"+url+\"'></iframe></div>\");\r\n        }\r\n\r\n        var zeroPage = isZeroPage($(\".ui-page:last\", pagesObj));\r\n        var animatePage = newPage;\r\n        if(zeroPage){\r\n            animatePage = pagesObj.addClass(zeroPagesClass);\r\n        }\r\n\r\n        function end() {\r\n            if(options.showLoading) {\r\n                ipu.hidePreloader();\r\n            }\r\n\r\n            if(options.animate) {\r\n                animatePage.removeClass(animateInClass);\r\n            }\r\n\r\n            newPage.siblings(\".ui-show\").removeClass('ui-show');\r\n            if(options.callBack){\r\n                options.callBack();\r\n            }\r\n        }\r\n\r\n        $(\".ui-page-iframe\", newPage).one('load', function () {\r\n            newPage.addClass(\"ui-show\").width(); // 强制生效,否则可能出现页面闪现,无动画情况\r\n\r\n            if(zeroPage){\r\n                animatePage.removeClass(zeroPagesClass);\r\n            }\r\n            if(options.animate){\r\n                animatePage.addClass(animateInClass).animationEnd(end);\r\n            }else{\r\n                end();\r\n            }\r\n        });\r\n\r\n        newPage.appendTo(pagesObj);\r\n        if(options.method == 'post') {\r\n            var pageDoc = $(\".ui-page-iframe\", newPage)[0].contentDocument;\r\n            submitForm(pageDoc, url, options.params);\r\n        }\r\n    };\r\n\r\n    // post方式加载页面\r\n    page.postPage = function (url, options) {\r\n        options.method = 'post';\r\n        page.openPage(url, options);\r\n    };\r\n\r\n    // 当前页面后退,针对顶层父窗口\r\n    page.backPage = function (options) {\r\n        var backIndex = options.backIndex;\r\n        var page = null;\r\n        var nowPage = $(\".ui-page.ui-show\", pagesObj);\r\n\r\n        if(backIndex == 0){\r\n            page = $(\".ui-page:first\", pagesObj);\r\n        }else { // 越界的情况\r\n            var prevPage = nowPage.prevAll(\".ui-page\");\r\n            if(backIndex < 0){\r\n                page= $(prevPage[-backIndex - 1]);\r\n            }else{\r\n                page= $(prevPage[prevPage.size() - backIndex]);\r\n            }\r\n        }\r\n\r\n        var animatePage = nowPage;\r\n        var zeroPage = isZeroPage(page);\r\n\r\n        // 主页面模式时\r\n        if(zeroPage){\r\n            animatePage = pagesObj;\r\n        }else{\r\n            page.addClass(\"ui-show\"); //显示前一个\r\n        }\r\n\r\n        function end (){\r\n            $(this).removeClass(animateOutClass);\r\n            page.nextAll(\".ui-page\").remove();\r\n\r\n            var iframe = $(\".ui-page-iframe\", page);\r\n            var nowDoc;\r\n\r\n            if(iframe.size() == 0){ // 找不到子窗口就当是返回了主页面,在当前窗口触发\r\n                nowDoc = window.document;\r\n            }else{\r\n                nowDoc = iframe[0].contentDocument;\r\n            }\r\n\r\n            if(zeroPage){\r\n                pagesObj.addClass(zeroPagesClass);\r\n            }\r\n\r\n            var evt = nowDoc.createEvent('Event');\r\n            evt.initEvent(eventName, true, true);\r\n            if(options.data){\r\n                evt.data = options.data;\r\n            }\r\n            nowDoc.body.dispatchEvent(evt);\r\n            if(options.callBack){\r\n                options.callBack();\r\n            }\r\n        }\r\n\r\n        if(options.animate){\r\n            animatePage.addClass(animateOutClass).animationEnd(end);\r\n        }else{\r\n            end();\r\n        }\r\n    };\r\n\r\n    // 往前关闭窗口\r\n    page.closePage = function (options) {\r\n        var closeIndex = options.closeIndex;\r\n        var prevPage = $(\".ui-page.ui-show\", pagesObj).prevAll(\".ui-page\");\r\n\r\n        if(closeIndex < 0){\r\n            closeIndex = -closeIndex -1;\r\n        }else{\r\n            closeIndex = prevPage.size() - closeIndex;\r\n        }\r\n\r\n        $(prevPage[closeIndex]).remove();\r\n        if(options.callBack){\r\n            options.callBack();\r\n        }\r\n    };\r\n\r\n    // 调用父窗口打开页面\r\n    page.open = function (url, options) {\r\n        options = $.extend({}, this.options, options);\r\n        options.target.ipu.page.openPage(url, options);\r\n    };\r\n\r\n    // post方法\r\n    page.post = function (url, options) {\r\n        options = $.extend({}, this.options, options);\r\n        options.method = 'post';\r\n        options.target.ipu.page.openPage(url, options);\r\n    };\r\n\r\n    // 调用父窗口,回退\r\n    page.back = function (options) {\r\n        options = $.extend({}, this.options, options);\r\n        options.target.ipu.page.backPage(options);\r\n    };\r\n\r\n    // 返回首页\r\n    page.backHome = function (options) {\r\n        options = options || {};\r\n        options.backIndex = 0;\r\n        page.back(options);\r\n    };\r\n\r\n    // 子窗口,待确认\r\n    page.close = function (options) {\r\n        options = $.extend({}, this.options, options);\r\n        options.target.ipu.page.closePage(options);\r\n    };\r\n\r\n    // 添加回调事件\r\n    page.onBack = function (back) {\r\n        $(\"body\").on(eventName, function (e) {\r\n            var data = e.originalEvent.data;\r\n            back(data);\r\n        });\r\n    };\r\n\r\n    // 提供一个关闭一群窗口的方法\r\n    ipu.page = page;\r\n})(ipu || window, jQuery);\r\n","// picker\r\n(function (ipu, $, Hammer) {\r\n    var showItemSize = 9;   // 显示的子项数量,\r\n    var r = 90;             // 计算旋转的圆半径,结果应该缩小,是为了r不要距离容器太近\r\n    var itemAngle = 180 / showItemSize;   // 每项对应的角度是 180/9 = 20\r\n    var maxExceed = itemAngle;         // 滚动时允许超出边界的最大角度\r\n    // itemHeight = 40px;       // 需要给出r=89是怎么计算出来的,是根据 40/2/Math.tan(40/2/180*Math.PI)=113,直接太大不好看\r\n\r\n    function Picker(slt, options) {\r\n        this.el = $(slt)[0];\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this._init();\r\n    }\r\n\r\n    // 默认参数\r\n    Picker.prototype.defaultOptions = {\r\n        onChange: function () {       // 子项选中事件\r\n        },\r\n        listen: true,                  // 默认已开记监听变化\r\n        data: []\r\n    };\r\n\r\n    Picker.prototype._init = function () {\r\n        var self = this;\r\n        this.wrap = $(\">ul\", this.el);\r\n        this.index = null;\r\n        this.listen = !!this.options.listen;\r\n\r\n        this.beginAngle = 0;\r\n        this.beginExceed = this.beginAngle - maxExceed;       // 最小角度值\r\n        this.stopInertiaMove = false;\r\n        this.lastAngle = null; // 保存滑动前的角度\r\n        this.empty = this.options.data.length == 0;\r\n\r\n        // 如果是ios,则ul的旋转中心点,有变化\r\n        if(ipu.device.ios){\r\n            this.wrap.css(\"transform-origin\", \"center center \"+r+\"px\"); //如果是ios,要变更旋转的中心点\r\n        }\r\n\r\n        this.hammer = new Hammer.Manager(this.el);\r\n        this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL, threshold: 5}));\r\n        this.hammer.add(new Hammer.Press({threshold: 4}));  //\r\n        this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this._onPan, this));\r\n\r\n        this.hammer.on(\"press pressup\", function (e) {  // 如果用户点击了,是停止自动滚动\r\n           // console.log('press');\r\n            if(this.empty){\r\n                return ;\r\n            }\r\n\r\n            self.stopInertiaMove = true;\r\n            if (e.type == 'pressup') {\r\n                self.endScroll();\r\n            }\r\n        });\r\n\r\n        this.setItems(this.options.data);\r\n    };\r\n\r\n    Picker.prototype.setItems = function (data, textName) {\r\n        this.wrap.empty(); // 清空历史数据\r\n        this.data = data = data || [];\r\n        this.empty = data.length == 0; // 数据是否为空\r\n\r\n        this.newData = true; // 表示设置了新数据,触发change回调,但第一次设置时,不需要触发\r\n        var self = this;\r\n        var lis = \"\";\r\n        textName = textName || 'text';\r\n\r\n        for (var i = 0, j = data.length; i < j; i++) {\r\n            lis = lis + \"<li>\" + data[i][textName] + \"</li>\";\r\n        }\r\n\r\n        $(lis).appendTo(this.wrap);\r\n\r\n        this.items = $(\">li\", this.wrap);\r\n        this.itemsSize = this.items.size();\r\n\r\n        this.endAngle = (this.empty ? 0 : this.itemsSize - 1) * itemAngle;\r\n        this.endExceed = this.endAngle + maxExceed;  // 最大旋转角度值\r\n\r\n        // 初始化各子项角度\r\n        this.items.each(function (i) {\r\n            $(this).css({\r\n                \"transform\": \"translateZ(\" + r + \"px) rotateX(-\" + (i * itemAngle) + \"deg)\",\r\n                \"transform-origin\": \"center center -\" + r + \"px\"\r\n            });\r\n            $(this).click(function () {\r\n                console.log('click');\r\n                self.stopInertiaMove = true;\r\n                self.setAngle(i * itemAngle, true);\r\n            })\r\n        });\r\n\r\n        var newAngle ;\r\n        if(this.empty || this.index == null){\r\n            newAngle = 0;\r\n        }else {\r\n            if(this.index > this.itemsSize - 1){\r\n                newAngle = (this.itemsSize - 1) * itemAngle;\r\n            }else{\r\n                newAngle = this.index * itemAngle;\r\n            }\r\n        }\r\n        this.setAngle(newAngle, true);\r\n\r\n        /*if (this.index !== null) { // 当前已经旋转则,保留当前的索引\r\n         if (this.index > this.itemsSize - 1 && !this.empty) {\r\n         this.index = this.itemsSize - 1;\r\n         }\r\n         this.setAngle(this.index * itemAngle, true);\r\n         } else { // 第一次初始数据,不触发change事件\r\n         this.index = 0;     // 被调用后,不能再使用null值了\r\n         this.setAngle(0, false); // 第一次设置初始化时,不触发change事件\r\n         }*/\r\n    };\r\n\r\n    Picker.prototype._onPan = function (ev) {\r\n        if(this.empty){\r\n            return ;\r\n        }\r\n\r\n        //console.log(ev.deltaX + \"==\"+ ev.deltaY);\r\n        if (ev.type == 'panstart') { // 好像一定要移动才有startg事件\r\n            self.stopInertiaMove = true;\r\n            this.lastAngle = this.angle;\r\n            this.wrap.addClass(\"ui-noanimate\");    // 移除动画\r\n            this.stopInertiaMove = true; //  停止自动减速滚动\r\n           // console.log('panstart');\r\n\r\n        } else if (ev.type == 'panmove') {\r\n            var moveAngle = this.calcAngle(ev.deltaY);\r\n            var newAngle = this.lastAngle - moveAngle;   //最新的角度\r\n            //console.log('=='+newAngle);\r\n            // 一个可以转动的最小值和最大值过滤\r\n            if (newAngle < this.beginExceed) {\r\n                newAngle = this.beginExceed;\r\n            }\r\n            if (newAngle > this.endExceed) {\r\n                newAngle = this.endExceed;\r\n            }\r\n            this.setAngle(newAngle);\r\n\r\n        } else { // end or cancel事件\r\n            // console.log('end or cancel:' + ev.type);\r\n            var v = ev.overallVelocityY;    // 滑动的速度\r\n            var dir = v > 0 ? -1 : 1; //加速度方向\r\n            var deceleration = dir * 0.0006 * -1;\r\n            var duration = Math.abs(v / deceleration); // 速度消减至0所需时间\r\n            var dist = v * duration / 2; //最终移动多少\r\n\r\n            var startAngle = this.angle;\r\n            var distAngle = -this.calcAngle(dist);\r\n           //  console.log(\"dist=\" + dist + \", distAngle\" + distAngle);\r\n\r\n            //----\r\n            var srcDistAngle = distAngle;\r\n            if (startAngle + distAngle < this.beginExceed) {\r\n                distAngle = this.beginExceed - startAngle;\r\n                duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n            }\r\n            if (startAngle + distAngle > this.endExceed) {\r\n                distAngle = this.endExceed - startAngle;\r\n                duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n            }\r\n\r\n            if (distAngle == 0) {\r\n                this.endScroll();\r\n                return;\r\n            }\r\n            this.scrollDistAngle(startAngle, distAngle, duration);\r\n        }\r\n    };\r\n\r\n    // 计算移动的角度,转动的角度,就是移动的距离对应相关圆周\r\n    // 2*r*PI = 360,  angle = 360*c/(2*r*PI)\r\n    var ca = 360 / (2 * r * Math.PI);\r\n    Picker.prototype.calcAngle = function (c) {\r\n        return c * ca;\r\n    };\r\n\r\n    // endScroll 是否为结束的滚动结束,滚动结束需要调用结束事件\r\n    Picker.prototype.setAngle = function (newAngle, endScroll) {\r\n        this.angle = newAngle; // 存储最新值\r\n        this.wrap.css(\"transform\", \"perspective(1000px) rotateY(0deg) rotateX(\" + newAngle + \"deg)\");\r\n        this.calcItemVisable(newAngle);\r\n\r\n        if (endScroll) {\r\n            var index = newAngle / itemAngle;\r\n            var oldIndex = this.index;\r\n            this.index = this.empty ? null : index; // 这里可以做一个判断,如果是empty,则index值可以不改变\r\n\r\n            // 这个地方要判断下,数据更新或索引更新都要触发\r\n            if (oldIndex != index || this.newData) {\r\n                this.newData = false;\r\n               // console.log('change');\r\n                if (this.options.onChange && this.listen) {\r\n                    // console.log('changed call');\r\n                    this.options.onChange(this.getSelectedItem(), this.index, oldIndex, this.newData);\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    // 计算子项的显示情况\r\n    Picker.prototype.calcItemVisable = function (angle) {\r\n        this.items.each(function (index) {\r\n            var difference = Math.abs(index * itemAngle - angle);\r\n\r\n            if (difference < itemAngle / 2) {\r\n                $(this).addClass(\"ui-highlight ui-visible\");\r\n            } else if (difference >= (90 - itemAngle / 2)) { // 距离不能超过90度\r\n                $(this).removeClass(\"ui-highlight ui-visible\");\r\n            } else {\r\n                $(this).addClass(\"ui-visible\").removeClass(\"ui-highlight\");\r\n            }\r\n        });\r\n    };\r\n\r\n    // 设置最后回归位置\r\n    Picker.prototype.endScroll = function () {\r\n        this.wrap.removeClass(\"ui-noanimate\");\r\n        var endAngle;\r\n\r\n        if (this.angle < this.beginAngle) {\r\n            endAngle = this.beginAngle;\r\n        } else if (this.angle > this.endAngle) {\r\n            endAngle = this.endAngle;\r\n        } else {\r\n            var index = parseInt((this.angle / itemAngle).toFixed(0));\r\n            endAngle = (itemAngle * index);\r\n        }\r\n\r\n        this.setAngle(endAngle, true);\r\n    };\r\n\r\n    // 进行惯性滚动\r\n    Picker.prototype.scrollDistAngle = function (startAngle, distAngle, duration) {\r\n        var self = this;\r\n        var nowTime = new Date().getTime();\r\n        this.stopInertiaMove = false;\r\n        duration = 1 * duration; // 滚动时长控制修改\r\n\r\n        // hammer调用的惯性函数\r\n        (function (nowTime, startAngle, distAngle, duration) {\r\n            var frameInterval = 13;\r\n            var stepCount = duration / frameInterval;\r\n            var stepIndex = 0;\r\n\r\n            (function inertiaMove() {\r\n                if (self.stopInertiaMove) return;\r\n                var newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\r\n                self.setAngle(newAngle);\r\n                stepIndex++;\r\n\r\n                if (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\r\n                    self.endScroll();\r\n                    return;\r\n                }\r\n\r\n                setTimeout(inertiaMove, frameInterval);\r\n            })();\r\n\r\n        })(nowTime, startAngle, distAngle, duration);\r\n    };\r\n\r\n    Picker.prototype.setListen = function (bool) {\r\n        this.listen = !!bool;\r\n    };\r\n\r\n    Picker.prototype.quartEaseOut = function (t, b, c, d) {\r\n        return -c * ((t = t / d - 1) * t * t * t - 1) + b;\r\n    };\r\n\r\n    Picker.prototype.setSelectedValue = function (value) {\r\n        var self = this;\r\n        for (var index in self.data) {\r\n            var item = self.data[index];\r\n            if (item.value == value) {\r\n                self.setAngle(index* itemAngle, true);\r\n                return;\r\n            }\r\n        }\r\n    };\r\n\r\n    // 获取当前选中的值\r\n    Picker.prototype.getSelectedItem = function () {\r\n        return this.empty ? {}: this.data[this.index];\r\n    };\r\n\r\n    Picker.prototype.getSelectedValue = function () {\r\n        return this.getSelectedItem().value;\r\n    };\r\n\r\n    Picker.prototype.getSelectedText = function () {\r\n        return this.getSelectedItem().text;\r\n    };\r\n\r\n    Picker.prototype.getSelectedIndex = function () {\r\n        return this.index;\r\n    };\r\n\r\n    ipu.Picker = Picker;\r\n\r\n})(ipu || window, jQuery, Hammer);\r\n","// popPicker\r\n(function (ipu, $) {\r\n    var Picker = ipu.Picker;\r\n\r\n    function PopPicker(options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        if(!Picker){\r\n            Picker = ipu.Picker;\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    PopPicker.prototype.defaultOptions = {\r\n        template: '<div class=\"ui-poppicker\">\\\r\n                        <div class=\"ui-poppicker-header\">\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-cancel\">取消</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-ok\">确定</button>\\\r\n                        </div>\\\r\n                        <div class=\"ui-poppicker-body\">\\\r\n                        </div>\\\r\n                    </div>',\r\n        pickerTemplate: '<div class=\"ui-picker\">\\\r\n                            <div class=\"ui-picker-selectbox\"></div>\\\r\n                            <ul></ul>\\\r\n                          </div>',\r\n        data: [],    // 数据\r\n        layer: 1,   // 数据层级\r\n        btns: ['取消', '确认'],\r\n        callBack: function () { // 选择数据时的回调函数\r\n\r\n        }\r\n    };\r\n\r\n    PopPicker.prototype._init = function () {\r\n        this.holder = $(this.options.template).appendTo(\"body\");\r\n        var bodyHtml = $(\".ui-poppicker-body\", this.holder);\r\n\r\n        var layer = this.options.layer;\r\n        var width = (100 / layer) + \"%\";\r\n        this.pickers = new Array(layer);\r\n        var self = this;\r\n        var pickerHtml;\r\n        this.mask = this.createMask();\r\n\r\n        // 先初始化最底层picerk,再上面来\r\n        for (var i = layer -1; i >=0; i--) {\r\n            pickerHtml = $(this.options.pickerTemplate).prependTo(bodyHtml).css({width: width});\r\n\r\n            this.pickers[i] = new  Picker(pickerHtml, {\r\n                onChange: (function (i) {\r\n                    return function (item, index) { // 更新底部的值\r\n                        if (i != layer - 1) {\r\n                            self.pickers[i + 1].setItems(item.data);\r\n                        }\r\n                    };\r\n                })(i)\r\n            });\r\n        }\r\n\r\n        $(\".ui-poppicker-btn-ok\", this.holder).click(function () {\r\n            var rs = self.getSelectItems();\r\n            if (self.options.callBack(rs) !== false) {\r\n                self.hide();\r\n            }\r\n        }).text(this.options.btns[1]);\r\n\r\n        $(\".ui-poppicker-btn-cancel\", this.holder).click(function () {\r\n            self.hide();\r\n        }).text(this.options.btns[0]);\r\n    };\r\n\r\n    PopPicker.prototype.setData = function (data) {\r\n        this.pickers[0].setItems(data);\r\n    };\r\n\r\n    PopPicker.prototype.show = function (callBack) {\r\n        if (callBack) {\r\n            this.options.callBack = callBack;\r\n        }\r\n        this.mask.show();\r\n        this.holder.addClass(\"ui-active\");\r\n    };\r\n\r\n    PopPicker.prototype.hide = function () {\r\n        this.mask.close();\r\n        this.holder.removeClass(\"ui-active\");\r\n    };\r\n\r\n    // 获取相关值\r\n    PopPicker.prototype.getSelectItems = function () {\r\n        if (this.options.layer == 1) {\r\n            return this.pickers[0].getSelectedItem();\r\n        } else {\r\n            var rs = [];\r\n            for (var i = 0; i < this.options.layer; i++) {\r\n                rs.push(this.pickers[i].getSelectedItem());\r\n            }\r\n            return rs;\r\n        }\r\n    };\r\n\r\n    // 应该移除callback参数,提取出业成一个工具方法\r\n    PopPicker.prototype.createMask = function(callback) {\r\n        var self = this;\r\n        var element = document.createElement('div');\r\n        element.classList.add(\"ui-picker-backup\");\r\n        //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n        element.addEventListener('click', function() {\r\n            self.hide();\r\n        });\r\n        var mask = [element];\r\n        mask._show = false;\r\n        mask.show = function() {\r\n            mask._show = true;\r\n            element.setAttribute('style', 'opacity:1');\r\n            document.body.appendChild(element);\r\n            return mask;\r\n        };\r\n        mask._remove = function() {\r\n            if (mask._show) {\r\n                mask._show = false;\r\n                element.setAttribute('style', 'opacity:0');\r\n                setTimeout(function() {\r\n                    var body = document.body;\r\n                    element.parentNode === body && body.removeChild(element);\r\n                }, 350);\r\n            }\r\n            return mask;\r\n        };\r\n        mask.close = function() {\r\n            if(mask._show){\r\n                if (callback) {\r\n                    if (callback() !== false) {\r\n                        mask._remove();\r\n                    }\r\n                } else {\r\n                    mask._remove();\r\n                }\r\n            }\r\n        };\r\n        return mask;\r\n    };\r\n\r\n    ipu.popPicker = function (options) {\r\n        return new PopPicker(options);\r\n    };\r\n\r\n})(ipu || window, jQuery);\r\n","(function (ipu, $) {\r\n\r\n    /**\r\n     *进度条\r\n     */\r\n    function progressBar(id, options) {\r\n        this.id = id;\r\n        this.level = options.level;\r\n        this.progress = options.progress;\r\n        this.progressBar = $(id).eq(0);\r\n\r\n        if (options.progress != null) {\r\n            this.setProgress(this.progress);\r\n        }\r\n        if (options.level != null) {\r\n            this.setLevel(this.level);\r\n        }\r\n    }\r\n\r\n    progressBar.prototype.setProgress = function (pro) {\r\n        if (pro < 0 || pro > 100) return;\r\n\r\n        $(this.progressBar.find(\".ipu-progressbar\")).css(\"transform\", \"translate3d(\" + (-(100 - pro)) + \"%, 0px, 0px)\");\r\n        this.progress = pro;\r\n    };\r\n\r\n    progressBar.prototype.getProgress = function () {\r\n        return this.progress;\r\n    };\r\n\r\n    progressBar.prototype.setLevel = function (level) {\r\n        if (level == \"default\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-hightlight ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progress\");\r\n        } else if (level == \"success\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-highlight ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-success\");\r\n        } else if (level == \"highlight\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-highlight\");\r\n        } else if (level == \"warning\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-highlight\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-warning\");\r\n        }\r\n    };\r\n\r\n    ipu.progressBar = function (slt, options) {\r\n        return new progressBar(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n","(function (ipu, $, iScroll) {\r\n\r\n    // 扩展参数,iscroll组件的参数选项\r\n    // 扩展参数,用户直接在页面上自定好,顶端和底部加载html\r\n    // 设置上下条件长度,或计算函数\r\n    // 处理resize的问题,用户主动调用refresh??\r\n    // 底部启用或停用时,应该刷新组件iscroll高度\r\n    // 顶部正在加载时,自动停止底端加载状态,停用底部加载,停用底部加载时,可以不隐藏,变性成显示不见,或者隐藏,然后修改iscroll参数\r\n\r\n    Refresh.prototype.defaultOptions = {\r\n        bottomLoadFun: null,           // 底部加载处理函数\r\n        topLoadFun: null,               // 顶部加载处理函数\r\n        initEnableTop: true,            // 初始时启用刷新,有时用户并不想启用\r\n        initEnableBottom: true,         // 初始时启用加载更多,用时用户并不想启用\r\n        bottomLoadHtml: '<div class=\"ui-refresh-bottom\"><span class=\"ui-refresh-loading\"></span></div>',  // 默认底部加载显示内容\r\n        topLoadHtml: '<div class=\"ui-refresh-top\"><span class=\"ui-refresh-loading\"></span><div class=\"ui-refresh-arrow\"></div></div>',\r\n                // 默认顶部加载显示内容,最上层节点class有下面三个阶段变化\r\n                // 默认阶段,不是顶部加载状态时,且拖动时未达到加载距离,无特殊class,移除ui-refresh-top-loading\r\n                // 拖动达到加载距离,则增加class:ui-refresh-toload\r\n                // 加载中,则增加class:ui-refresh-top-loading,移除class:ui-refresh-toload\r\n        bottomAddLen: 0,  // 底部提前加载距离,单位px\r\n        iScrollOptions:{} // 主要是用来接收外面一些函数,不能传递回调的相关函数如refresh,也可在本地函数调用完后,再调用参数的函数,不推荐\r\n    };\r\n\r\n    function Refresh(slt, options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this.el = $(slt).get(0);\r\n        this._initBottomAndTop();\r\n        var me = this;\r\n\r\n        this.iScrollOptions = {\r\n            onScrollMove: function (e) {\r\n                if (me.topEnable && !me.topLoading) { // 顶部是松手才加载\r\n                    if (this.y >= me.topPullOffset && !me.topEl.hasClass('ui-refresh-toload')) { // 达到刷新距离,更新显示状态\r\n                        me.topEl.addClass('ui-refresh-toload');\r\n                    } else if (this.y < me.topPullOffset && me.topEl.hasClass('ui-refresh-toload')) { // 从达到刷新距离更新为未达到距离,更新显示状态\r\n                        me.topEl.removeClass('ui-refresh-toload');\r\n                    }\r\n                }\r\n\r\n                me._checkBottomLoading(); // 底部加载条件和顶部条件不一样,只要滚动离底部一定高度就开始加载\r\n                me.goTop = this.y > me.topPullOffset; // 记录是否位于顶部位置,以便刷新后可以回到此位置\r\n            },\r\n            onBeforeScrollEnd: function () {    // 一定是用户拖动触发,在滚动结束前应该触发\r\n                me._checkTopLoading();\r\n                me._checkBottomLoading();\r\n            },\r\n            onScrollEnd: function () { // 这个事件可能由非用户拖动时触发,可能是拖动惯性导致,所有顶部不应该处理,但顶部不管是否惯性,位置条件满足即触发\r\n                if (me.topLoading && this.y < this.minScrollY && me.goTop) {\r\n                    me.iScroll.scrollTo(0, this.minScrollY, 0);\r\n                }\r\n                me._checkBottomLoading(); // 在beforend执行还不够,还在要end执行\r\n            },\r\n            onRefresh: function () { // 刷新时,若顶部加载还在进行,且当前显示的顶部加载,则继续显示,否则刷新后会消失顶部加载,这里代码没有考虑重用了,应该可以做一步提取\r\n                if (me.topLoading) { // 如果顶部在加载,则刷新的时候,设置最小顶部距离,显示顶部加载状态\r\n                    this.minScrollY = this.minScrollY + me.topPullOffset;\r\n                }\r\n            }\r\n        };\r\n\r\n        this.iScrollOptions = $.extend({}, this.options.iScrollOptions, this.iScrollOptions);\r\n        this.iScroll = new iScroll(this.el, this.iScrollOptions);\r\n        this._checkContentLoading();\r\n    }\r\n\r\n    Refresh.prototype._initBottomAndTop = function () {\r\n        this.scrollEl = $(\">.ui-refresh-wrapper\" ,this.el);\r\n        this.bottomEl = $(this.options.bottomLoadHtml).appendTo(this.scrollEl);\r\n        this.topEl = $(this.options.topLoadHtml).prependTo(this.scrollEl);\r\n\r\n        this.topPullOffset = this.topEl.outerHeight();\r\n        this.bottomPullOffset = this.bottomEl.outerHeight() + this.options.bottomAddLen; // 增加100;最好配一个额外参数\r\n\r\n        this.topLoading = false;        // 顶部正在载加载\r\n        this.bottomLoading = false;     // 底部正在加载\r\n        this.bottomEnable = this.options.initEnableBottom && !!this.options.bottomLoadFun;\r\n        this.topEnable = this.options.initEnableTop && !!this.options.topLoadFun;\r\n        this.goTop = false;         // 用来处理,因为iScroll使用momentum(惯性), 导致有时顶部显示不正确问题,true表示顶部显示加载条\r\n\r\n        this.enableBottom(this.bottomEnable);\r\n        this.enableTop(this.topEnable);\r\n    };\r\n\r\n    // 检查是否需要底部加载\r\n    Refresh.prototype._checkBottomLoading = function () {\r\n        if (this.bottomEnable && !this.bottomLoading) {\r\n            if (this.iScroll.y < this.iScroll.maxScrollY + this.bottomPullOffset) {\r\n                this._startBottomLoading();\r\n            }\r\n        }\r\n    };\r\n\r\n    Refresh.prototype._checkTopLoading = function () {\r\n        if (this.topEnable && !this.topLoading) {\r\n            if (this.topEl.hasClass('ui-refresh-toload')) {\r\n                this._startTopLoading();\r\n            }\r\n        }\r\n    };\r\n\r\n    // 检查内容是否超出容器高度,未超出时,自动调用底部加载\r\n    Refresh.prototype._checkContentLoading = function () {\r\n        if(this.iScroll.maxScrollY >= -this.bottomPullOffset){ // 此处要计算底端的高度\r\n            this._startBottomLoading();\r\n        }\r\n    };\r\n\r\n    // 开始底部加载\r\n    Refresh.prototype._startBottomLoading = function () {\r\n        if (this.bottomEnable && !this.bottomLoading) {\r\n            this.bottomLoading = true;\r\n            this.options.bottomLoadFun(); // 刷新当前索引加载更多的数据\r\n        }\r\n    };\r\n\r\n    // 开始顶部加载\r\n    Refresh.prototype._startTopLoading = function () {\r\n        if (this.topEnable && !this.topLoading) {\r\n            this.topLoading = true;\r\n            this.topEl.removeClass('ui-refresh-toload').addClass('ui-refresh-top-loading');\r\n            this.iScroll.minScrollY = this.iScroll.minScrollY + this.topPullOffset;\r\n            this.options.topLoadFun(); // 刷新当前索引加载更多的数据\r\n        }\r\n    };\r\n\r\n    // 结束底部加载\r\n    Refresh.prototype.endBottomLoading = function () {\r\n        this.bottomLoading = false;\r\n        this.refresh();\r\n    };\r\n\r\n    // 结束顶部加载\r\n    Refresh.prototype.endTopLoading = function () {\r\n        this.topEl.removeClass('ui-refresh-top-loading');\r\n        this.topLoading = false;\r\n        // this.iScroll.scrollTo(0, 0); // 刷新加载则应该回到顶部,待测试确认\r\n        this.refresh();\r\n    };\r\n\r\n    // 设置顶部加载是否可用,true可用,否则不可用\r\n    Refresh.prototype.enableTop = function (enable) {\r\n        this.topEnable = enable;\r\n        if (enable) {\r\n            this.topEl.show();\r\n        } else {\r\n            this.topEl.hide();\r\n        }\r\n    };\r\n\r\n    // 设置底部加载是否可用,true可用,否则不可用\r\n    Refresh.prototype.enableBottom = function (enable) {\r\n        this.bottomEnable = enable;\r\n        if (enable) {\r\n            this.bottomEl.show();\r\n        } else {\r\n            this.bottomEl.hide();\r\n        }\r\n    };\r\n\r\n    // 只有在内容发生变更时,但是又没有触发调用end相关方法时,使用此方法更新高度信息\r\n    // 或者组件在一开始未显示??\r\n    // 刷新会移除拖动中状态\r\n    Refresh.prototype.refresh = function () {\r\n        this.iScroll.refresh();\r\n        this._checkContentLoading();\r\n    };\r\n\r\n    ipu.refresh = function (slt, optoins) {\r\n        return new Refresh(slt, optoins);\r\n    };\r\n\r\n})(ipu || window, jQuery, iScroll);\r\n","// Tab\r\n(function (ipu, $) {\r\n    function Tab(holder, options) {\r\n        this.el = $(holder).get(0);\r\n        this.titleItems = $(\".ui-tab-title:first>li\", this.el);\r\n        this.bodyWrapper = $(\".ui-tab-body-wrapper:first\", this.el);\r\n        this.contentItems = $(\">li\", this.bodyWrapper);\r\n\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this.itemSize = this.contentItems.size();\r\n        this.fixed = $(this.el).is(\".ui-tab-fixed\"); // 是否为固定高度的\r\n\r\n        var that = this;\r\n        this.titleItems.each(function (index) {\r\n            $(this).click(function () {\r\n                that.show(index);\r\n            });\r\n        });\r\n    }\r\n\r\n    Tab.prototype.defaultOptions = {\r\n        callBack: null  // 回调函数,tab切换时回调函数\r\n    };\r\n\r\n    Tab.prototype.show = function (index) {\r\n        if (this.fixed) {\r\n            var move = -index * 100 + \"%\";\r\n            this.bodyWrapper.css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n\r\n        }\r\n        this.contentItems.eq(index).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n        this.titleItems.eq(index).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n        this._end(index);\r\n    };\r\n\r\n    Tab.prototype._end = function (index) {\r\n        this.lastIndex = this.currentIndex;\r\n        this.currentIndex = this.index;\r\n\r\n        if (this.options.callBack) {\r\n            this.options.callBack(index, this.lastIndex);\r\n        }\r\n    };\r\n\r\n    ipu.tab = function (slt, options) {\r\n        return new Tab(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\r\n","/*===========================\r\nDevice/OS Detection\r\n===========================*/\r\n// from sui,但IPU框架的ua不是这样的\r\n;(function (ipu, $) {\r\n    \"use strict\";\r\n    var device = {};  // Classes\r\n    var classNames = [];\r\n    var ua = navigator.userAgent;\r\n    console.log('device');\r\n\r\n    // 这中针对ipu框架的情况,待测试\r\n    if(ua.match(/ipumobile/i)){\r\n        device.ios =  !!ua.match(/ios/i);\r\n        device.android = !!ua.match(/android/i);\r\n    }else{\r\n        var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\r\n        var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\r\n        var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\r\n        var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\r\n\r\n        device.ios = device.android = device.iphone = device.ipad = device.androidChrome = false;\r\n\r\n        // Android\r\n        if (android) {\r\n            device.os = 'android';\r\n            device.osVersion = android[2];\r\n            device.android = true;\r\n            device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\r\n        }\r\n        if (ipad || iphone || ipod) {\r\n            device.os = 'ios';\r\n            device.ios = true;\r\n        }\r\n        // iOS\r\n        if (iphone && !ipod) {\r\n            device.osVersion = iphone[2].replace(/_/g, '.');\r\n            device.iphone = true;\r\n        }\r\n        if (ipad) {\r\n            device.osVersion = ipad[2].replace(/_/g, '.');\r\n            device.ipad = true;\r\n        }\r\n        if (ipod) {\r\n            device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\r\n            device.iphone = true;\r\n        }\r\n        // iOS 8+ changed UA\r\n        if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\r\n            if (device.osVersion.split('.')[0] === '10') {\r\n                device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\r\n            }\r\n        }\r\n\r\n        // Webview\r\n        device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\r\n\r\n        // Minimal UI\r\n        if (device.os && device.os === 'ios') {\r\n            var osVersionArr = device.osVersion.split('.');\r\n            device.minimalUi = !device.webView &&\r\n                (ipod || iphone) &&\r\n                (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) &&\r\n                $('meta[name=\"viewport\"]').length > 0 && $('meta[name=\"viewport\"]').attr('content').indexOf('minimal-ui') >= 0;\r\n        }\r\n\r\n        // Check for status bar and fullscreen app mode\r\n        var windowWidth = $(window).width();\r\n        var windowHeight = $(window).height();\r\n        device.statusBar = false;\r\n        if (device.webView && (windowWidth * windowHeight === screen.width * screen.height)) {\r\n            device.statusBar = true;\r\n        }\r\n        else {\r\n            device.statusBar = false;\r\n        }\r\n\r\n\r\n        // Pixel Ratio\r\n        device.pixelRatio = window.devicePixelRatio || 1;\r\n        classNames.push('pixel-ratio-' + Math.floor(device.pixelRatio));\r\n        if (device.pixelRatio >= 2) {\r\n            classNames.push('retina');\r\n        }\r\n\r\n        // OS classes\r\n        if (device.os) {\r\n            classNames.push(device.os, device.os + '-' + device.osVersion.split('.')[0], device.os + '-' + device.osVersion.replace(/\\./g, '-'));\r\n            if (device.os === 'ios') {\r\n                var major = parseInt(device.osVersion.split('.')[0], 10);\r\n                for (var i = major - 1; i >= 6; i--) {\r\n                    classNames.push('ios-gt-' + i);\r\n                }\r\n            }\r\n\r\n        }\r\n        // Status bar classes\r\n        if (device.statusBar) {\r\n            classNames.push('with-statusbar-overlay');\r\n        }\r\n        else {\r\n            $('html').removeClass('with-statusbar-overlay');\r\n        }\r\n\r\n\r\n        // keng..\r\n        device.isWeixin = /MicroMessenger/i.test(ua);\r\n    }\r\n\r\n    // Add html classes\r\n    if (classNames.length > 0){\r\n        $('html').addClass(classNames.join(' '));\r\n    }\r\n\r\n    ipu.device = device;\r\n})(ipu || window, jQuery);\r\n","\n        // 初始化代码\n        jQuery(function () {\n            FastClick.attach(document.body);\n        });\n\n        return ipu;\n    }\n\n    // todo:可以添加一个和其它库的适配处理,\n    // 这里假设第三方库,jquery,iScroll,Hammer的史称已经固定\n    if ( typeof define === \"function\" && define.amd ) {\n        define(['jquery', 'iScroll', 'Hammer', 'FastClick'], function (jquery, iscroll, hammer, FastClick) {\n            return window.ipu = setup(jquery, iscroll, hammer, FastClick);\n        });\n    } else {\n        window.ipu = setup(window.jQuery, window.iScroll, window.Hammer, window.FastClick);\n    }\n})();\n"]}

+ 2 - 2
ipu/dist/js/ipu.min.js

@ -1,3 +1,3 @@
1
!function(){function t(t,e,i,s){var o={};return function(t,e,i){function s(t,i){this.options=i=e.extend({},this.defaultOpt,i),this.el=e(t).eq(0),this.autoPlay=i.autoPlay,this.hasIndicator=i.indicator,this.callBack=i.callBack,this.currentIndex=null,this._init(),this.play()}s.prototype={defaultOpt:{index:null,autoPlay:!1,duration:3e3,indicator:!1,indicatorPosition:"center",callBack:null},_init:function(){var t=e(">.ipu-carousel-wrapper",this.el),s=e(">li",t);if(this.carouselItems=s,this.size=s.size(),that=this,null==this.options.index){var o=s.filter(".ipu-active").index();this.options.index=o!=-1?o:0}this.hasIndicator&&this._addIndicator(),e(window).resize(function(){that.refresh()});var n={snap:"li",momentum:!1,scrollX:!0,scrollY:!1,hScrollbar:!1,onScrollStart:function(){that._pause()},onTouchEnd:function(){},onScrollEnd:function(){that._end()}};this.iscroll=new i(this.el.get(0),n),this.show(this.options.index,0)},stop:function(){this._pause(),this.autoPlay=!1},_pause:function(){this.autoPlay&&this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null)},prev:function(){var t=0==this.currentIndex?this.size-1:this.currentIndex-1;this.show(t)},next:function(){var t=this.currentIndex==this.size-1?0:this.currentIndex+1;this.show(t)},show:function(t,e){this._pause(),this.iscroll.scrollToPage(t,0,e)},play:function(){this.autoPlay=!0,this._play()},refresh:function(){var t=this;t.show(this.currentIndex)},_play:function(){if(this.autoPlay&&!this.timeoutId){var t=this;this.timeoutId=setTimeout(function(){this.timeoutId=null,t.next()},t.options.duration)}},_end:function(){var t=this.iscroll.currPageX;t!=this.currentIndex&&(this.callBack&&this.callBack(t,this.currentIndex),this.currentIndex=t,this.hasIndicator&&this.indicatorIndexs.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this.carouselItems.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active")),this._play()},_addIndicator:function(){for(var t="",i=0;i<this.size;i++)t+="<li></li>";t="<ul class='ipu-carousel-indicator'>"+t+"</ul>",this.indicator=e(t).appendTo(this.el),this.indicatorIndexs=e("li",this.indicator)},destroy:function(){this.iscroll.destroy()}},t.carousel=function(t,e){return new s(t,e)}}(o||window,t,e),function(t,e){function i(i){this.options=e.extend({},this.defaultOptions,i),s||(s=t.Picker),this._init()}var s=t.Picker,o=new Date;i.prototype.defaultOptions={template:'<div class="ipu-poppicker ipu-dtpicker">                        <div class="ipu-poppicker-header">                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-cancel">取消</button>                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-ok">确定</button>                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-clear">清除</button>                        </div>                        <div class="ipu-poppicker-title">                            <label class="ipu-dtpicker-y"></label>                            <label class="ipu-dtpicker-m"></label>                            <label class="ipu-dtpicker-d"></label>                            <label class="ipu-dtpicker-h"></label>                            <label class="ipu-dtpicker-mi"></label>                        </div>                        <div>                        <div class="ipu-poppicker-body">                            <div class="ipu-picker" data-id="picker-y">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                             <div class="ipu-picker" data-id="picker-m">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                             <div class="ipu-picker" data-id="picker-d">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                             <div class="ipu-picker" data-id="picker-h">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                             <div class="ipu-picker" data-id="picker-mi">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                        </div>                    </div>',buttons:["取消","确认","清除"],labels:["年","月","日","时","分"],type:"datetime",customData:{},hasClear:!1,callBack:function(){}},i.prototype._init=function(){var t=this;this.mask=this.createMask();var i=this.holder=e(this.options.template).appendTo("body"),o=t.ui={picker:this.holder,ok:e(".ipu-poppicker-btn-ok",i),cancel:e(".ipu-poppicker-btn-cancel",i),clear:e(".ipu-poppicker-btn-clear",i),buttons:e(".ipu-poppicker-header .ipu-btn",i),labels:e(".ipu-poppicker-title label",i)};o.i=new s(e('[data-id="picker-mi"]',i),{listen:!1}),o.h=new s(e('[data-id="picker-h"]',i),{listen:!1,onChange:function(e,i){null!==i&&(t.options.beginMonth||t.options.endMonth)&&t._createMinutes()}}),o.d=new s(e('[data-id="picker-d"]',i),{listen:!1,onChange:function(e,i){null!==i&&(t.options.beginMonth||t.options.endMonth)&&t._createHours()}}),o.m=new s(e('[data-id="picker-m"]',i),{listen:!1,onChange:function(e,i){null!==i&&t._createDay()}}),o.y=new s(e('[data-id="picker-y"]',i),{listen:!1,onChange:function(e,i){null!=i&&(t.options.beginMonth||t.options.endMonth?t._createMonth():t._createDay())}}),t._create();var o=t.ui;t._setLabels(),t._setButtons(),o.picker.attr("data-type",this.options.type),t._setSelectedValue(this.options.value)},i.prototype.getSelected=function(){var t=this,e=t.ui,i=t.options.type,s={type:i,y:e.y.getSelectedItem(),m:e.m.getSelectedItem(),d:e.d.getSelectedItem(),h:e.h.getSelectedItem(),i:e.i.getSelectedItem(),toString:function(){return this.value}};switch(i){case"datetime":s.value=s.y.value+"-"+s.m.value+"-"+s.d.value+" "+s.h.value+":"+s.i.value,s.text=s.y.text+"-"+s.m.text+"-"+s.d.text+" "+s.h.text+":"+s.i.text;break;case"date":s.value=s.y.value+"-"+s.m.value+"-"+s.d.value,s.text=s.y.text+"-"+s.m.text+"-"+s.d.text;break;case"time":s.value=s.h.value+":"+s.i.value,s.text=s.h.text+":"+s.i.text;break;case"month":s.value=s.y.value+"-"+s.m.value,s.text=s.y.text+"-"+s.m.text;break;case"hour":s.value=s.y.value+"-"+s.m.value+"-"+s.d.value+" "+s.h.value,s.text=s.y.text+"-"+s.m.text+"-"+s.d.text+" "+s.h.text}return s},i.prototype._setSelectedValue=function(t){var e=this,i=e.ui;t||(t="time"==this.options.type?"00:00":o.getFullYear()+"-"+(o.getMonth()+1)+"-"+o.getDate()+" "+o.getHours()+":"+o.getMinutes());var s=e._parseSetValue(t);i.y.setListen(!0),i.m.setListen(!1),i.d.setListen(!1),i.h.setListen(!1),i.i.setListen(!1),i.y.setSelectedValue(s.y),i.m.setListen(!0),i.m.setSelectedValue(s.m),i.d.setListen(!0),i.d.setSelectedValue(s.d),i.h.setListen(!0),i.h.setSelectedValue(s.h),i.i.setListen(!0),i.i.setSelectedValue(s.i),this.value=this.getSelected().value},i.prototype.setSelectedValue=function(t){this._setSelectedValue(t)},i.prototype.isLeapYear=function(t){return t%4==0&&t%100!=0||t%400==0},i.prototype._inArray=function(t,e){for(var i in t){var s=t[i];if(s===e)return!0}return!1},i.prototype.getDayNum=function(t,e){var i=this;return i._inArray([1,3,5,7,8,10,12],e)?31:i._inArray([4,6,9,11],e)?30:i.isLeapYear(t)?29:28},i.prototype._fill=function(t){return t=t.toString(),t.length<2&&(t=0+t),t},i.prototype._isBeginYear=function(){return this.options.beginYear===parseInt(this.ui.y.getSelectedValue())},i.prototype._isBeginMonth=function(){return this.options.beginMonth&&this._isBeginYear()&&this.options.beginMonth===parseInt(this.ui.m.getSelectedValue())},i.prototype._isBeginDay=function(){return this._isBeginMonth()&&this.options.beginDay===parseInt(this.ui.d.getSelectedValue())},i.prototype._isBeginHours=function(){return this._isBeginDay()&&this.options.beginHours===parseInt(this.ui.h.getSelectedValue())},i.prototype._isEndYear=function(){return this.options.endYear===parseInt(this.ui.y.getSelectedValue())},i.prototype._isEndMonth=function(){return this.options.endMonth&&this._isEndYear()&&this.options.endMonth===parseInt(this.ui.m.getSelectedValue())},i.prototype._isEndDay=function(){return this._isEndMonth()&&this.options.endDay===parseInt(this.ui.d.getSelectedValue())},i.prototype._isEndHours=function(){return this._isEndDay()&&this.options.endHours===parseInt(this.ui.h.getSelectedValue())},i.prototype._createYear=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.y)o=i.customData.y;else for(var n=i.beginYear,a=i.endYear,r=n;r<=a;r++)o.push({text:r+"",value:r});s.y.setItems(o)},i.prototype._createMonth=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.m)o=i.customData.m;else for(var n=i.beginMonth&&e._isBeginYear()?i.beginMonth:1,a=i.endMonth&&e._isEndYear()?i.endMonth:12;n<=a;n++){var r=e._fill(n);o.push({text:r,value:n})}s.m.setItems(o)},i.prototype._createDay=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.d)o=i.customData.d;else for(var n=e._isBeginMonth()?i.beginDay:1,a=e._isEndMonth()?i.endDay:e.getDayNum(parseInt(this.ui.y.getSelectedValue()),parseInt(this.ui.m.getSelectedValue()));n<=a;n++){var r=e._fill(n);o.push({text:r,value:n})}s.d.setItems(o)},i.prototype._createHours=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.h)o=i.customData.h;else for(var n=e._isBeginDay()?i.beginHours:0,a=e._isEndDay()?i.endHours:23;n<=a;n++){var r=e._fill(n);o.push({text:r,value:n})}s.h.setItems(o)},i.prototype._createMinutes=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.i)o=i.customData.i;else for(var n=e._isBeginHours()?i.beginMinutes:0,a=e._isEndHours()?i.endMinutes:59;n<=a;n++){var r=e._fill(n);o.push({text:r,value:n})}s.i.setItems(o)},i.prototype._setLabels=function(){var t=this,e=t.options,i=t.ui;i.labels.each(function(t,i){i.innerText=e.labels[t]})},i.prototype._setButtons=function(){var t=this,i=t.options,s=t.ui;s.cancel.text(i.buttons[0]),s.ok.text(i.buttons[1]),i.hasClear?s.clear.text(i.buttons[2]):s.clear.hide(),s.buttons.each(function(i){e(this).click(function(){t.clickCall(i)})})},i.prototype._parseSetValue=function(t){var e=o,i=this.options.type,s={y:e.getFullYear(),m:e.getMonth()+1,d:e.getDate(),h:e.getHours(),i:e.getMinutes()};t instanceof Date&&("time"==i?valu=+t.getHours()+":"+t.getMinutes():t=t.getFullYear()+"-"+(t.getMonth()+1)+"-"+t.getDate()+" "+t.getHours()+":"+t.getMinutes());for(var n=t.replace(":","-").replace(" ","-").split("-"),a=0,r=n.length;a<r;a++)n[a]=parseInt(n[a]);return"datetime"==i?(s.y=n[0],s.m=n[1],s.d=n[2],s.h=n[3],s.i=n[4]):"date"==i?(s.y=n[0],s.m=n[1],s.d=n[2],s.h=0,s.i=0):"time"==i?(s.h=n[0],s.i=n[1]):"hour"==i?(s.y=n[0],s.m=n[1],s.d=n[2],s.h=n[3],s.i=0):"month"==i&&(s.y=n[0],s.m=n[1],s.d=1,s.h=0,s.i=0),s},i.prototype._create=function(){var t=this,e=this.options,i=o,s=e.beginDate;s?(s=this._parseSetValue(s),e.beginYear=s.y,e.beginMonth=s.m,e.beginDay=s.d,e.beginHours=s.h,e.beginMinutes=s.i):"time"==e.type?(e.beginYear=i.getFullYear(),e.beginMonth=i.getMonth()+1,e.beginDay=i.getDate(),e.beginHours=0,e.beginMinutes=0):e.beginYear=i.getFullYear()-5;var n=e.endDate;n?(n=this._parseSetValue(n),e.endYear=n.y,e.endMonth=n.m,e.endDay=n.d,e.endHours=n.h,e.endMinutes=n.i):"time"==e.type?(e.endYear=i.getFullYear(),e.endMonth=i.getMonth()+1,e.endDay=i.getDate(),e.endHours=24,e.endMinutes=59):e.endYear=e.beginYear+10,t._createYear(),t._createMonth(),t._createDay(),t._createHours(),t._createMinutes()},i.prototype.setBeginDate=function(t){this.options.beginDate=t,this._create()},i.prototype.setEndDate=function(t){this.options.endDate=t,this._create()},i.prototype.dispose=function(){var t=this;t.hide(),setTimeout(function(){t.ui.picker.parentNode.removeChild(t.ui.picker);for(var e in t)t[e]=null,delete t[e];t.disposed=!0},300)},i.prototype.show=function(t){t&&(this.options.callBack=t),this.mask.show(),this.setSelectedValue(this.value),this.holder.addClass("ipu-active")},i.prototype.clickCall=function(t){var e=this,i=e.getSelected(),s=e.options.callBack.call(this,i,t);s!==!1&&(1==t?e.value=i.value:2==t&&(e.value=null),e.hide())},i.prototype.hide=function(){this.mask.close(),this.holder.removeClass("ipu-active")},i.prototype.createMask=function(t){var e=this,i=document.createElement("div");i.classList.add("ipu-picker-backup"),i.addEventListener("click",function(){e.clickCall(0)});var s=[i];return s._show=!1,s.show=function(){return s._show=!0,i.setAttribute("style","opacity:1"),document.body.appendChild(i),s},s._remove=function(){return s._show&&(s._show=!1,i.setAttribute("style","opacity:0"),setTimeout(function(){var t=document.body;i.parentNode===t&&t.removeChild(i)},350)),s},s.close=function(){s._show&&(t?t()!==!1&&s._remove():s._remove())},s},t.dtPicker=function(t){return new i(t)}}(o||window,t),function(t,e,i){function s(t,i){this.options=i=e.extend({},this.defaultOptions,i),this.el=e(t).get(0),this._init()}s.prototype={defaultOptions:{index:null,autoPlay:!1,duration:3e3,indicator:!1,callBack:null,clickBack:null},_init:function(){this.wrapper=e(">.ipu-carousel-wrapper",this.el),this.carouselItems=e(">li",this.wrapper),this.showSize=1,this.carouselItemSizes=[],this.currentIndex=0,this.moveLen=0,this.lastItem=!1,this.carouselItems.slice(0,this.showSize).clone().appendTo(this.wrapper),this.size=this.carouselItems.size();var t=this;this.options.clickBack&&e(">li",this.wrapper).each(function(i){e(this).click(function(){t.options.clickBack.call(this,i%t.size)})}),this.sizeCount();var s=this;if(this.hammer=new i.Manager(this.el),this.hammer.add(new i.Pan({direction:i.DIRECTION_HORIZONTAL,threshold:10})),this.hammer.on("panstart panmove panend pancancel",i.bindFn(this.onPan,this)),e(window).resize(function(){s.refresh()}),null==this.options.index){var o=this.carouselItems.filter(".ipu-active").index();this.options.index=o!=-1?o:0}this.options.indicator&&this._addIndicator(),this.show(this.options.index)},stop:function(){this._pause(),this.options.autoPlay=!1},_pause:function(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null)},prev:function(){var t=0==this.currentIndex?this.size-1:this.currentIndex-1;t==this.size-1&&(this._show(this.size,!1),this.wrapper.width()),this._show(t,!0)},next:function(){var t=this.currentIndex==this.size?1:this.currentIndex+1;1==t&&(this._show(0,!1),this.wrapper.width()),this._show(t,!0)},show:function(t){t>this.size||t<0?console.error("index超出范围!"):this._show(t)},play:function(){this.options.autoPlay=!0,this._play()},_play:function(){if(this.options.autoPlay&&!this.timeoutId){var t=this;this.timeoutId=setTimeout(function(){t.timeoutId=null,t.next()},t.options.duration)}},_end:function(){var t=this.currentIndex;this.options.callBack&&this.options.callBack(t,this.lastItem),this.indicator&&this.indicatorIndexs.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this.carouselItems.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this._play()},_addIndicator:function(){for(var t="",i=0;i<this.size;i++)t+="<li></li>";t="<ul class='ipu-carousel-indicator'>"+t+"</ul>",this.indicator=e(t).appendTo(this.el),this.indicatorIndexs=e("li",this.indicator)},sizeCount:function(){this.wrapperSize=this.wrapper.outerWidth(!0),this.itemSize=this.carouselItems.eq(0).outerWidth(!0),this.mostSize=this.size*this.itemSize,e(this.wrapper).removeClass("ipu-carousel-animate").width();var t=this;e(">li",this.wrapper).each(function(i,s){t.carouselItemSizes[i]=e(this).position().left})},refresh:function(){this.wrapperSize!=this.wrapper.outerWidth(!0)&&(this.sizeCount(),this._show(this.currentIndex,!0))},move:function(t){this._pause(),e(this.wrapper).removeClass("ipu-carousel-animate");var i=(this.moveLen-t)%this.mostSize;i=(i+this.mostSize)%this.mostSize,this.displayMoveLen=i,i=-i+"px",e(this.wrapper).css("transform","translate3d("+i+", 0, 0)")},_show:function(t,i){i!==!1&&(i=!0),this._pause(),e(this.wrapper).toggleClass("ipu-carousel-animate",i),this.currentIndex=t%this.size,this.lastItem=t==this.size;var s=this.carouselItemSizes[t];this.moveLen=s,s=-s+"px",e(this.wrapper).css("transform","translate3d("+s+", 0, 0)"),i&&this._end()},onPan:function(t){var e=t.deltaX;if("panend"==t.type||"pancancel"==t.type){var i=e/this.itemSize,s=parseInt(Math.abs(i)),o=Math.abs(i)%1;o>.2&&(s+=1),i>0&&(s=-s);var n=(this.currentIndex+s)%this.size;n=(n+this.size)%this.size,0==n&&this.displayMoveLen>this.itemSize&&(n=this.size),this._show(n)}else"panmove"==t.type&&this.move(e)}},t.hammerCarousel=function(t,e){return new s(t,e)}}(o||window,t,i),function(t,e){function i(t,e){function i(t){if(t.target===this)for(e.call(this,t),s=0;s<o.length;s++)n.off(o[s],i)}var s,o=t,n=this;if(e)for(s=0;s<o.length;s++)n.on(o[s],i)}function s(i){var s=e(this);s.attr("href");s.hasClass("ipu-modal-overlay")&&(e(".ipu-modal.ipu-modal-in").length>0&&n.modalCloseByOutside&&t.closeModal(".ipu-modal.ipu-modal-in"),e(".ipu-actions-modal.ipu-modal-in").length>0&&n.actionsCloseByOutside&&t.closeModal(".ipu-actions-modal.ipu-modal-in")),s.hasClass("ipu-popup-overlay")&&e(".ipu-popup.ipu-modal-in").length>0&&n.popupCloseByOutside&&t.closeModal(".ipu-popup.modal-in")}e.fn.transitionEnd=function(t){return i.call(this,["webkitTransitionEnd","transitionend"],t),this};var o=document.createElement("div"),n={modalStack:!0,modalButtonOk:"确定",modalButtonCancel:"取消",modalPreloaderTitle:"加载中",modalContainer:document.body?document.body:"body"};t.modalStack=[],t.modalStackClearQueue=function(){t.modalStack.length&&t.modalStack.shift()()},t.modal=function(i){i=i||{};var s="",a="";if(i.buttons&&i.buttons.length>0)for(var r=0;r<i.buttons.length;r++)a+='<span class="ipu-modal-button'+(i.buttons[r].bold?" ipu-modal-button-bold":"")+'">'+i.buttons[r].text+"</span>";var l=i.extraClass||"",u=i.title?'<div class="ipu-modal-title">'+i.title+"</div>":"",c=i.text?'<div class="ipu-modal-text">'+i.text+"</div>":"",h=i.afterText?i.afterText:"",d=i.buttons&&0!==i.buttons.length?"":"ipu-modal-no-buttons",p=i.verticalButtons?"ipu-modal-buttons-vertical":"";s='<div class="ipu-modal '+l+" "+d+'"><div class="ipu-modal-inner">'+(u+c+h)+'</div><div class="ipu-modal-buttons '+p+'">'+a+"</div></div>",o.innerHTML=s;var m=e(o).children();return e(n.modalContainer).append(m[0]),m.find(".ipu-modal-button").each(function(s,o){e(o).on("click",function(e){i.buttons[s].close!==!1&&t.closeModal(m),i.buttons[s].onClick&&i.buttons[s].onClick(m,e),i.onClick&&i.onClick(m,s)})}),t.openModal(m),m[0]},t.alert=function(e,i,s){return"function"==typeof i&&(s=arguments[1],i=void 0),t.modal({text:e||"",title:"undefined"==typeof i?n.modalTitle:i,buttons:[{text:n.modalButtonOk,bold:!0,onClick:s}]})},t.confirm=function(e,i,s,o){return"function"==typeof i&&(o=arguments[2],s=arguments[1],i=void 0),t.modal({text:e||"",title:"undefined"==typeof i?n.modalTitle:i,buttons:[{text:n.modalButtonCancel,omodalButtonCancelnClick:o},{text:n.modalButtonOk,bold:!0,onClick:s}]})},t.prompt=function(i,s,o,a){return"function"==typeof s&&(a=arguments[2],o=arguments[1],s=void 0),t.modal({text:i||"",title:"undefined"==typeof s?n.modalTitle:s,afterText:'<input type="text" class="ipu-modal-text-input">',buttons:[{text:n.modalButtonCancel},{text:n.modalButtonOk,bold:!0}],onClick:function(t,i){0===i&&a&&a(e(t).find(".ipu-modal-text-input").val()),1===i&&o&&o(e(t).find(".ipu-modal-text-input").val())}})},t.showPreloader=function(e){return t.hidePreloader(),t.showPreloader.preloaderModal=t.modal({title:e||n.modalPreloaderTitle,text:'<div class="ipu-preloader"></div>'}),t.showPreloader.preloaderModal},t.hidePreloader=function(){t.showPreloader.preloaderModal&&t.closeModal(t.showPreloader.preloaderModal)},t.showIndicator=function(){e(".ipu-preloader-indicator-modal")[0]||e(n.modalContainer).append('<div class="ipu-preloader-indicator-overlay"></div><div class="ipu-preloader-indicator-modal"><span class="ipu-preloader ipu-preloader-white"></span></div>')},t.hideIndicator=function(){e(".ipu-preloader-indicator-overlay, .ipu-preloader-indicator-modal").remove()},t.actions=function(i){var s,a,r;i=i||[],i.length>0&&!e.isArray(i[0])&&(i=[i]);for(var l,u="",c=0;c<i.length;c++)for(var h=0;h<i[c].length;h++){0===h&&(u+='<div class="ipu-actions-modal-group">');var d=i[c][h],p=d.label?"ipu-actions-modal-label":"ipu-actions-modal-button";d.bold&&(p+=" ipu-actions-modal-button-bold"),d.color&&(p+=" ipu-color-"+d.color),d.bg&&(p+=" ipu-bg-"+d.bg),d.disabled&&(p+=" disabled"),u+='<span class="'+p+'">'+d.text+"</span>",h===i[c].length-1&&(u+="</div>")}l='<div class="ipu-actions-modal">'+u+"</div>",o.innerHTML=l,s=e(o).children(),e(n.modalContainer).append(s[0]),a=".ipu-actions-modal-group",r=".ipu-actions-modal-button";var m=s.find(a);return m.each(function(o,n){var a=o;e(n).children().each(function(o,n){var l,u=o,c=i[a][u];e(n).is(r)&&(l=e(n)),l&&l.on("click",function(e){c.close!==!1&&t.closeModal(s),c.onClick&&c.onClick(s,e)})})}),t.openModal(s),s[0]},t.toast=function(i,s,o){var n=e('<div class="ipu-modal ipu-toast '+(o||"")+'">'+i+"</div>").appendTo(document.body);t.openModal(n,function(){setTimeout(function(){t.closeModal(n)},s||2e3)})},t.openModal=function(i,s){i=e(i);var o=i.hasClass("ipu-modal"),a=!i.hasClass("ipu-toast");if(e(".ipu-modal.ipu-modal-in:not(.ipu-modal-out)").length&&n.modalStack&&o&&a)return void t.modalStack.push(function(){t.openModal(i,s)});var r=i.hasClass("ipu-popup"),l=i.hasClass("ipu-login-screen"),u=i.hasClass("ipu-picker-modal"),c=i.hasClass("ipu-toast");o&&(i.show(),i.css({marginTop:-Math.round(i.outerHeight()/2)+"px"})),c&&i.css({marginLeft:-Math.round(i.outerWidth()/2/1.185)+"px"});var h;l||u||c||(0!==e(".ipu-modal-overlay").length||r||e(n.modalContainer).append('<div class="ipu-modal-overlay"></div>'),0===e(".ipu-popup-overlay").length&&r&&e(n.modalContainer).append('<div class="ipu-popup-overlay"></div>'),h=e(r?".ipu-popup-overlay":".ipu-modal-overlay"));i[0].clientLeft;return i.trigger("open"),u&&e(n.modalContainer).addClass("ipu-with-picker-modal"),l||u||c||h.addClass("ipu-modal-overlay-visible"),i.removeClass("ipu-modal-out").addClass("ipu-modal-in").transitionEnd(function(t){i.hasClass("ipu-modal-out")?i.trigger("closed"):i.trigger("opened")}),"function"==typeof s&&s.call(this),!0},t.closeModal=function(i){if(i=e(i||".ipu-modal-in"),"undefined"==typeof i||0!==i.length){var s=i.hasClass("ipu-modal"),o=i.hasClass("ipu-popup"),a=i.hasClass("ipu-toast"),r=i.hasClass("ipu-login-screen"),l=i.hasClass("ipu-picker-modal"),u=i.hasClass("ipu-remove-on-close"),c=e(o?".ipu-popup-overlay":".ipu-modal-overlay");return o?i.length===e(".ipu-popup.ipu-modal-in").length&&c.removeClass("ipu-modal-overlay-visible"):l||a||c.removeClass("ipu-modal-overlay-visible"),i.trigger("close"),l&&(e(n.modalContainer).removeClass("ipu-with-picker-modal"),e(n.modalContainer).addClass("ipu-picker-modal-closing")),i.removeClass("ipu-modal-in").addClass("ipu-modal-out").transitionEnd(function(t){i.hasClass("ipu-modal-out")?i.trigger("closed"):i.trigger("opened"),l&&e(n.modalContainer).removeClass("ipu-picker-modal-closing"),o||r||l?(i.removeClass("ipu-modal-out").hide(),u&&i.length>0&&i.remove()):i.remove()}),s&&n.modalStack&&t.modalStackClearQueue(),!0}},e(document).on("click"," .ipu-modal-overlay, .ipu-popup-overlay, .ipu-close-popup, .ipu-open-popup, .ipu-close-picker",s)}(o||window,t),function(t,e){function i(t,i){this.options=e.extend({},this.defaultOpt,i),this.content=e(this.options.contentSlt),this.nav=e(t),this.wrapper=e(">ul",this.content),this.contents=e(">li",this.wrapper),this.navs=e(">a",this.nav);var s=this,o=this.navs.filter(".ipu-active").index();o==-1&&(o=this.contents.filter(".ipu-active").index()),this.options.index=o!=-1?o:0,this.options.animate||this.wrapper.addClass("ipu-no-animation"),this.navs.each(function(t,i){e(this).click(function(){s.show(t)})}),this.lastIndex=null,this.currentIndex=null,s.show(this.options.index)}i.prototype.defaultOpt={animate:!1,contentSlt:".ipu-nav-content",callBack:function(t,e){}},i.prototype.show=function(t){if(this.currentIndex!=t){e(this.contents[t]).addClass("ipu-show");this.options.animate?(null!=this.lastIndex&&this.lastIndex!=t&&e(this.contents[this.lastIndex]).removeClass("ipu-show"),null!=this.currentIndex&&(this.currentIndex<t?null!=this.lastIndex&&this.lastIndex<this.currentIndex&&this.wrapper.addClass("ipu-no-animation").removeClass("ipu-nav-content-right").width():(null==this.lastIndex||this.lastIndex>this.currentIndex)&&this.wrapper.addClass("ipu-no-animation").addClass("ipu-nav-content-right").width(),this.wrapper.removeClass("ipu-no-animation").toggleClass("ipu-nav-content-right"))):e(this.contents[this.currentIndex]).removeClass("ipu-show"),e(this.contents[t]).addClass("ipu-active").siblings(".ipu-active").removeClass("ipu-active"),e(this.navs[t]).addClass("ipu-active").siblings(".ipu-active").removeClass("ipu-active"),this.lastIndex=this.currentIndex,this.currentIndex=t,this.options.callBack&&this.options.callBack(this.currentIndex,this.lastIndex)}},t.navBar=function(t,e){return new i(t,e)}}(o||window,t),function(t,e){function i(t,e){function i(t){if(t.target===this)for(e.call(this,t),s=0;s<o.length;s++)n.off(o[s],i)}var s,o=t,n=this;if(e)for(s=0;s<o.length;s++)n.on(o[s],i)}function s(t,e,i){var s=t.createElement("form");s.action=e,s.method="post",s.style.display="none";for(var o in i){var n=t.createElement("input");n.type="hidden",n.name=o,n.value=i[o],s.appendChild(n)}t.body.appendChild(s),s.submit()}e.fn.animationEnd=function(t){return i.call(this,["webkitAnimationEnd","animationend"],t),this};var o={};o.options={target:window.parent,backIndex:1,closeIndex:1,params:{},animate:!0,callBack:function(){}};var n={},a=0;o.openPage=function(i,s){function o(){r?t.hidePreloader():l=!0,h.removeClass(u),h.siblings(".ipu-show").removeClass("ipu-show"),s.callBack&&s.callBack()}var r=!1,l=!1;if(s.animate){var u=" ipu-anim ipu-slideRightIn ";t.showPreloader("正在加载中"),setTimeout(function(){r=!0,l&&t.hidePreloader()},50)}var c="pageNo-"+a++;n[c]=i;var h=e("<div class='ipu-page' id='"+c+"'><iframe class='ipu-page-iframe' src='"+i+"'></iframe></div>");e(".ipu-page-iframe",h).one("load",function(){s.animate?h.addClass("ipu-show"+u).animationEnd(o):(h.addClass("ipu-show"),o())}),h.appendTo(".ipu-pages")},o.postPage=function(i,o){t.showPreloader("正在加载中");var r="pageNo-"+a++;n[r]=i;var l=e("<div class='ipu-page' id='"+r+"'><iframe class='ipu-page-iframe' src=''></iframe></div>"),u=!1,c=!1;o.animate&&setTimeout(function(){u=!0,c&&t.hidePreloader()},80),e(".ipu-page-iframe",l).one("load",function(){l.addClass("ipu-show ipu-anim ipu-slideRightIn").animationEnd(function(e){u?t.hidePreloader():c=!0,l.removeClass("ipu-anim ipu-slideRightIn"),l.siblings(".ipu-show").removeClass("ipu-show"),o.callBack&&o.callBack()})}),l.appendTo(".ipu-pages");var h=e(".ipu-page-iframe",l)[0].contentDocument;s(h,i,o.params)},o.backPage=function(t){var i=t.backIndex,s=null,o=e(".ipu-page.ipu-show");if(0==i)s=o.prevAll(".ipu-page-main");else{var n=o.prevAll(".ipu-page");s=e(n[t.backIndex-1])}s.addClass("ipu-show"),o.removeClass("ipu-active").addClass("ipu-anim ipu-slideRightOut").animationEnd(function(){e(this).removeClass("ipu-show ipu-anim ipu-slideRightOut"),s.nextAll(".ipu-page").remove();var i,o=e(".ipu-page-iframe",s);i=0==o.size()?window.document:o[0].contentDocument;var n=i.createEvent("Event");n.initEvent("ipuUIPageBack",!0,!0),t.data&&(n.data=t.data),i.body.dispatchEvent(n),t.callBack&&t.callBack()})},o.closePage=function(t){var i=t.closeIndex-1,s=e(".ipu-page.ipu-show").prevAll(".ipu-page");e(s[i]).remove(),t.callBack&&t.callBack()},o.open=function(t,i){i=e.extend({},this.options,i),i.target.ipu.page.openPage(t,i)},o.post=function(t,i){i=e.extend({},this.options,i),i.target.ipu.page.postPage(t,i)},o.back=function(t){t=e.extend({},this.options,t),t.target.ipu.page.backPage(t)},o.backHome=function(t){t=t||{},t.backIndex=0,o.back(t)},o.close=function(t){t=e.extend({},this.options,t),t.target.ipu.page.closePage(t)},o.onBack=function(t){e("body").on("ipuUIPageBack",function(e){var i=e.originalEvent.data;t(i)})},t.page=o}(o||window,t),function(t,e,i){function s(t,i){this.el=e(t)[0],this.options=e.extend({},this.defaultOptions,i),this._init()}var o=9,n=90,a=180/o,r=a;s.prototype.defaultOptions={onChange:function(){},listen:!0,data:[]},s.prototype._init=function(){var s=this;this.wrap=e(">ul",this.el),this.index=null,this.listen=!!this.options.listen,this.beginAngle=0,this.beginExceed=this.beginAngle-r,this.stopInertiaMove=!1,this.lastAngle=null,this.empty=0==this.options.data.length,t.device.ios&&this.wrap.css("transform-origin","center center "+n+"px"),this.hammer=new i.Manager(this.el),this.hammer.add(new i.Pan({direction:i.DIRECTION_VERTICAL,threshold:5})),this.hammer.add(new i.Press({threshold:4})),this.hammer.on("panstart panmove panend pancancel",i.bindFn(this._onPan,this)),this.hammer.on("press pressup",function(t){this.empty||(s.stopInertiaMove=!0,"pressup"==t.type&&s.endScroll())}),this.setItems(this.options.data)},s.prototype.setItems=function(t,i){this.wrap.empty(),this.data=t=t||[],this.empty=0==t.length,this.newData=!0;var s=this,o="";i=i||"text";for(var l=0,u=t.length;l<u;l++)o=o+"<li>"+t[l][i]+"</li>";e(o).appendTo(this.wrap),this.items=e(">li",this.wrap),this.itemsSize=this.items.size(),this.endAngle=(this.empty?0:this.itemsSize-1)*a,this.endExceed=this.endAngle+r,this.items.each(function(t){e(this).css({transform:"translateZ("+n+"px) rotateX(-"+t*a+"deg)","transform-origin":"center center -"+n+"px"}),e(this).click(function(){console.log("click"),s.stopInertiaMove=!0,s.setAngle(t*a,!0)})});var c;c=this.empty||null==this.index?0:this.index>this.itemsSize-1?(this.itemsSize-1)*a:this.index*a,this.setAngle(c,!0)},s.prototype._onPan=function(t){if(!this.empty)if("panstart"==t.type)self.stopInertiaMove=!0,this.lastAngle=this.angle,this.wrap.addClass("ipu-noanimate"),this.stopInertiaMove=!0;else if("panmove"==t.type){var e=this.calcAngle(t.deltaY),i=this.lastAngle-e;i<this.beginExceed&&(i=this.beginExceed),i>this.endExceed&&(i=this.endExceed),this.setAngle(i)}else{var s=t.overallVelocityY,o=s>0?-1:1,n=6e-4*o*-1,a=Math.abs(s/n),r=s*a/2,l=this.angle,u=-this.calcAngle(r),c=u;if(l+u<this.beginExceed&&(u=this.beginExceed-l,a=a*(u/c)*.6),l+u>this.endExceed&&(u=this.endExceed-l,a=a*(u/c)*.6),0==u)return void this.endScroll();this.scrollDistAngle(l,u,a)}};var l=360/(2*n*Math.PI);s.prototype.calcAngle=function(t){return t*l},s.prototype.setAngle=function(t,e){if(this.angle=t,this.wrap.css("transform","perspective(1000px) rotateY(0deg) rotateX("+t+"deg)"),this.calcItemVisable(t),e){var i=t/a,s=this.index;this.index=this.empty?null:i,(s!=i||this.newData)&&(this.newData=!1,this.options.onChange&&this.listen&&this.options.onChange(this.getSelectedItem(),this.index,s,this.newData))}},s.prototype.calcItemVisable=function(t){this.items.each(function(i){var s=Math.abs(i*a-t);s<a/2?e(this).addClass("ipu-highlight ipu-visible"):s>=90-a/2?e(this).removeClass("ipu-highlight ipu-visible"):e(this).addClass("ipu-visible").removeClass("ipu-highlight")})},s.prototype.endScroll=function(){this.wrap.removeClass("ipu-noanimate");var t;if(this.angle<this.beginAngle)t=this.beginAngle;else if(this.angle>this.endAngle)t=this.endAngle;else{var e=parseInt((this.angle/a).toFixed(0));t=a*e}this.setAngle(t,!0)},s.prototype.scrollDistAngle=function(t,e,i){var s=this,o=(new Date).getTime();this.stopInertiaMove=!1,i=1*i,function(t,e,i,o){var n=13,a=o/n,r=0;!function l(){if(!s.stopInertiaMove){var t=s.quartEaseOut(r,e,i,a);return s.setAngle(t),r++,r>a-1||t<s.beginExceed||t>s.endExceed?void s.endScroll():void setTimeout(l,n)}}()}(o,t,e,i)},s.prototype.setListen=function(t){this.listen=!!t},s.prototype.quartEaseOut=function(t,e,i,s){return-i*((t=t/s-1)*t*t*t-1)+e},s.prototype.setSelectedValue=function(t){var e=this;for(var i in e.data){var s=e.data[i];if(s.value==t)return void e.setAngle(i*a,!0)}},s.prototype.getSelectedItem=function(){return this.empty?{}:this.data[this.index]},s.prototype.getSelectedValue=function(){return this.getSelectedItem().value},s.prototype.getSelectedText=function(){return this.getSelectedItem().text},s.prototype.getSelectedIndex=function(){
2
return this.index},t.Picker=s}(o||window,t,i),function(t,e){function i(i){this.options=e.extend({},this.defaultOptions,i),s||(s=t.Picker),this._init()}var s=t.Picker;i.prototype.defaultOptions={template:'<div class="ipu-poppicker">                        <div class="ipu-poppicker-header">                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-cancel">取消</button>                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-ok">确定</button>                        </div>                        <div class="ipu-poppicker-body">                        </div>                    </div>',pickerTemplate:'<div class="ipu-picker">                            <div class="ipu-picker-selectbox"></div>                            <ul></ul>                          </div>',data:[],layer:1,btns:["取消","确认"],callBack:function(){}},i.prototype._init=function(){this.holder=e(this.options.template).appendTo("body");var t=e(".ipu-poppicker-body",this.holder),i=this.options.layer,o=100/i+"%";this.pickers=new Array(i);var n,a=this;this.mask=this.createMask();for(var r=i-1;r>=0;r--)n=e(this.options.pickerTemplate).prependTo(t).css({width:o}),this.pickers[r]=new s(n,{onChange:function(t){return function(e,s){t!=i-1&&a.pickers[t+1].setItems(e.data)}}(r)});e(".ipu-poppicker-btn-ok",this.holder).click(function(){var t=a.getSelectItems();a.options.callBack(t)!==!1&&a.hide()}).text(this.options.btns[1]),e(".ipu-poppicker-btn-cancel",this.holder).click(function(){a.hide()}).text(this.options.btns[0])},i.prototype.setData=function(t){this.pickers[0].setItems(t)},i.prototype.show=function(t){t&&(this.options.callBack=t),this.mask.show(),this.holder.addClass("ipu-active")},i.prototype.hide=function(){this.mask.close(),this.holder.removeClass("ipu-active")},i.prototype.getSelectItems=function(){if(1==this.options.layer)return this.pickers[0].getSelectedItem();for(var t=[],e=0;e<this.options.layer;e++)t.push(this.pickers[e].getSelectedItem());return t},i.prototype.createMask=function(t){var e=this,i=document.createElement("div");i.classList.add("ipu-picker-backup"),i.addEventListener("click",function(){e.hide()});var s=[i];return s._show=!1,s.show=function(){return s._show=!0,i.setAttribute("style","opacity:1"),document.body.appendChild(i),s},s._remove=function(){return s._show&&(s._show=!1,i.setAttribute("style","opacity:0"),setTimeout(function(){var t=document.body;i.parentNode===t&&t.removeChild(i)},350)),s},s.close=function(){s._show&&(t?t()!==!1&&s._remove():s._remove())},s},t.popPicker=function(t){return new i(t)}}(o||window,t),function(t,e){function i(t,i){this.id=t,this.level=i.level,this.progress=i.progress,this.progressBar=e(t).eq(0),null!=i.progress&&this.setProgress(this.progress),null!=i.level&&this.setLevel(this.level)}i.prototype.setProgress=function(t){t<0||t>100||(e(this.progressBar.find(".ipu-progressbar")).css("transform","translate3d("+-(100-t)+"%, 0px, 0px)"),this.progress=t)},i.prototype.getProgress=function(){return this.progress},i.prototype.setLevel=function(t){"default"==t?(e(this.progressBar).removeClass("ipu-progressbar-success ipu-progressbar-hightlight ipu-progressbar-warning"),e(this.progressBar).addClass("ipu-progress")):"success"==t?(e(this.progressBar).removeClass("ipu-progressbar-highlight ipu-progressbar-warning"),e(this.progressBar).addClass("ipu-progressbar-success")):"highlight"==t?(e(this.progressBar).removeClass("ipu-progressbar-success ipu-progressbar-warning"),e(this.progressBar).addClass("ipu-progressbar-highlight")):"warning"==t&&(e(this.progressBar).removeClass("ipu-progressbar-success ipu-progressbar-highlight"),e(this.progressBar).addClass("ipu-progressbar-warning"))},t.progressBar=function(t,e){return new i(t,e)}}(o||window,t),function(t,e,i){function s(t,s){this.options=e.extend({},this.defaultOptions,s),this.el=e(t).get(0),this._initBottomAndTop();var o=this;this.iScrollOptions={onScrollMove:function(t){o.topEnable&&!o.topLoading&&(this.y>=o.topPullOffset&&!o.topEl.hasClass("ipu-refresh-toload")?o.topEl.addClass("ipu-refresh-toload"):this.y<o.topPullOffset&&o.topEl.hasClass("ipu-refresh-toload")&&o.topEl.removeClass("ipu-refresh-toload")),o._checkBottomLoading(),o.goTop=this.y>o.topPullOffset},onBeforeScrollEnd:function(){o._checkTopLoading(),o._checkBottomLoading()},onScrollEnd:function(){o.topLoading&&this.y<this.minScrollY&&o.goTop&&o.iScroll.scrollTo(0,this.minScrollY,0),o._checkBottomLoading()},onRefresh:function(){o.topLoading&&(this.minScrollY=this.minScrollY+o.topPullOffset)}},this.iScrollOptions=e.extend({},this.options.iScrollOptions,this.iScrollOptions),this.iScroll=new i(this.el,this.iScrollOptions),this._checkContentLoading()}s.prototype.defaultOptions={bottomLoadFun:null,topLoadFun:null,initEnableTop:!0,initEnableBottom:!0,bottomLoadHtml:'<div class="ipu-refresh-bottom"><span class="ipu-refresh-loading"></span></div>',topLoadHtml:'<div class="ipu-refresh-top"><span class="ipu-refresh-loading"></span><div class="ipu-refresh-arrow"></div></div>',bottomAddLen:0,iScrollOptions:{}},s.prototype._initBottomAndTop=function(){this.scrollEl=e(">.ipu-refresh-wrapper",this.el),this.bottomEl=e(this.options.bottomLoadHtml).appendTo(this.scrollEl),this.topEl=e(this.options.topLoadHtml).prependTo(this.scrollEl),this.topPullOffset=this.topEl.outerHeight(),this.bottomPullOffset=this.bottomEl.outerHeight()+this.options.bottomAddLen,this.topLoading=!1,this.bottomLoading=!1,this.bottomEnable=this.options.initEnableBottom&&!!this.options.bottomLoadFun,this.topEnable=this.options.initEnableTop&&!!this.options.topLoadFun,this.goTop=!1,this.enableBottom(this.bottomEnable),this.enableTop(this.topEnable)},s.prototype._checkBottomLoading=function(){this.bottomEnable&&!this.bottomLoading&&this.iScroll.y<this.iScroll.maxScrollY+this.bottomPullOffset&&this._startBottomLoading()},s.prototype._checkTopLoading=function(){this.topEnable&&!this.topLoading&&this.topEl.hasClass("ipu-refresh-toload")&&this._startTopLoading()},s.prototype._checkContentLoading=function(){this.iScroll.maxScrollY>=-this.bottomPullOffset&&this._startBottomLoading()},s.prototype._startBottomLoading=function(){this.bottomEnable&&!this.bottomLoading&&(this.bottomLoading=!0,this.options.bottomLoadFun())},s.prototype._startTopLoading=function(){this.topEnable&&!this.topLoading&&(this.topLoading=!0,this.topEl.removeClass("ipu-refresh-toload").addClass("ipu-refresh-top-loading"),this.iScroll.minScrollY=this.iScroll.minScrollY+this.topPullOffset,this.options.topLoadFun())},s.prototype.endBottomLoading=function(){this.bottomLoading=!1,this.refresh()},s.prototype.endTopLoading=function(){this.topEl.removeClass("ipu-refresh-top-loading"),this.topLoading=!1,this.refresh()},s.prototype.enableTop=function(t){this.topEnable=t,t?this.topEl.show():this.topEl.hide()},s.prototype.enableBottom=function(t){this.bottomEnable=t,t?this.bottomEl.show():this.bottomEl.hide()},s.prototype.refresh=function(){this.iScroll.refresh(),this._checkContentLoading()},t.refresh=function(t,e){return new s(t,e)}}(o||window,t,e),function(t,e){function i(t,i){this.el=e(t).get(0),this.titleItems=e(".ipu-tab-title:first>li",this.el),this.bodyWrapper=e(".ipu-tab-body-wrapper:first",this.el),this.contentItems=e(">li",this.bodyWrapper),this.options=e.extend({},this.defaultOptions,i),this.itemSize=this.contentItems.size(),this.fixed=e(this.el).is(".ipu-tab-fixed");var s=this;this.titleItems.each(function(t){e(this).click(function(){s.show(t)})})}i.prototype.defaultOptions={callBack:null},i.prototype.show=function(t){if(this.fixed){var e=100*-t+"%";this.bodyWrapper.css("transform","translate3d("+e+", 0, 0)")}this.contentItems.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this.titleItems.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this._end(t)},i.prototype._end=function(t){this.lastIndex=this.currentIndex,this.currentIndex=this.index,this.options.callBack&&this.options.callBack(t,this.lastIndex)},t.tab=function(t,e){return new i(t,e)}}(o||window,t),function(t,e){"use strict";var i={},s=[],o=navigator.userAgent;if(console.log("device"),o.match(/ipumobile/i))i.ios=!!o.match(/ios/i),i.android=!!o.match(/android/i);else{var n=o.match(/(Android);?[\s\/]+([\d.]+)?/),a=o.match(/(iPad).*OS\s([\d_]+)/),r=o.match(/(iPod)(.*OS\s([\d_]+))?/),l=!a&&o.match(/(iPhone\sOS)\s([\d_]+)/);if(i.ios=i.android=i.iphone=i.ipad=i.androidChrome=!1,n&&(i.os="android",i.osVersion=n[2],i.android=!0,i.androidChrome=o.toLowerCase().indexOf("chrome")>=0),(a||l||r)&&(i.os="ios",i.ios=!0),l&&!r&&(i.osVersion=l[2].replace(/_/g,"."),i.iphone=!0),a&&(i.osVersion=a[2].replace(/_/g,"."),i.ipad=!0),r&&(i.osVersion=r[3]?r[3].replace(/_/g,"."):null,i.iphone=!0),i.ios&&i.osVersion&&o.indexOf("Version/")>=0&&"10"===i.osVersion.split(".")[0]&&(i.osVersion=o.toLowerCase().split("version/")[1].split(" ")[0]),i.webView=(l||a||r)&&o.match(/.*AppleWebKit(?!.*Safari)/i),i.os&&"ios"===i.os){var u=i.osVersion.split(".");i.minimalUi=!i.webView&&(r||l)&&(1*u[0]===7?1*u[1]>=1:1*u[0]>7)&&e('meta[name="viewport"]').length>0&&e('meta[name="viewport"]').attr("content").indexOf("minimal-ui")>=0}var c=e(window).width(),h=e(window).height();if(i.statusBar=!1,i.webView&&c*h===screen.width*screen.height?i.statusBar=!0:i.statusBar=!1,i.pixelRatio=window.devicePixelRatio||1,s.push("pixel-ratio-"+Math.floor(i.pixelRatio)),i.pixelRatio>=2&&s.push("retina"),i.os&&(s.push(i.os,i.os+"-"+i.osVersion.split(".")[0],i.os+"-"+i.osVersion.replace(/\./g,"-")),"ios"===i.os))for(var d=parseInt(i.osVersion.split(".")[0],10),p=d-1;p>=6;p--)s.push("ios-gt-"+p);i.statusBar?s.push("with-statusbar-overlay"):e("html").removeClass("with-statusbar-overlay"),i.isWeixin=/MicroMessenger/i.test(o)}s.length>0&&e("html").addClass(s.join(" ")),t.device=i}(o||window,t),t(function(){s.attach(document.body)}),o}"function"==typeof define&&define.amd?define(["jquery","iScroll","Hammer","FastClick"],function(e,i,s,o){return window.ipu=t(e,i,s,o)}):window.ipu=t(window.jQuery,window.iScroll,window.Hammer,window.FastClick)}();
1
!function(){function t(t,e,i,s){var o={};return function(t,e,i){function s(t,i){this.options=i=e.extend({},this.defaultOpt,i),this.el=e(t).eq(0),this.autoPlay=i.autoPlay,this.hasIndicator=i.indicator,this.callBack=i.callBack,this.currentIndex=null,this._init(),this.play()}s.prototype={defaultOpt:{index:null,autoPlay:!1,duration:3e3,indicator:!1,indicatorPosition:"center",callBack:null},_init:function(){var t=e(">.ipu-carousel-wrapper",this.el),s=e(">li",t);if(this.carouselItems=s,this.size=s.size(),that=this,null==this.options.index){var o=s.filter(".ipu-active").index();this.options.index=o!=-1?o:0}this.hasIndicator&&this._addIndicator(),e(window).resize(function(){that.refresh()});var n={snap:"li",momentum:!1,scrollX:!0,scrollY:!1,hScrollbar:!1,onScrollStart:function(){that._pause()},onTouchEnd:function(){},onScrollEnd:function(){that._end()}};this.iscroll=new i(this.el.get(0),n),this.show(this.options.index,0)},stop:function(){this._pause(),this.autoPlay=!1},_pause:function(){this.autoPlay&&this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null)},prev:function(){var t=0==this.currentIndex?this.size-1:this.currentIndex-1;this.show(t)},next:function(){var t=this.currentIndex==this.size-1?0:this.currentIndex+1;this.show(t)},show:function(t,e){this._pause(),this.iscroll.scrollToPage(t,0,e)},play:function(){this.autoPlay=!0,this._play()},refresh:function(){var t=this;t.show(this.currentIndex)},_play:function(){if(this.autoPlay&&!this.timeoutId){var t=this;this.timeoutId=setTimeout(function(){this.timeoutId=null,t.next()},t.options.duration)}},_end:function(){var t=this.iscroll.currPageX;t!=this.currentIndex&&(this.callBack&&this.callBack(t,this.currentIndex),this.currentIndex=t,this.hasIndicator&&this.indicatorIndexs.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this.carouselItems.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active")),this._play()},_addIndicator:function(){for(var t="",i=0;i<this.size;i++)t+="<li></li>";t="<ul class='ipu-carousel-indicator'>"+t+"</ul>",this.indicator=e(t).appendTo(this.el),this.indicatorIndexs=e("li",this.indicator)},destroy:function(){this.iscroll.destroy()}},t.carousel=function(t,e){return new s(t,e)}}(o||window,t,e),function(t,e){function i(i){this.options=e.extend({},this.defaultOptions,i),s||(s=t.Picker),this._init()}var s=t.Picker,o=new Date;i.prototype.defaultOptions={template:'<div class="ipu-poppicker ipu-dtpicker">                        <div class="ipu-poppicker-header">                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-cancel">取消</button>                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-ok">确定</button>                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-clear">清除</button>                        </div>                        <div class="ipu-poppicker-title">                            <label class="ipu-dtpicker-y"></label>                            <label class="ipu-dtpicker-m"></label>                            <label class="ipu-dtpicker-d"></label>                            <label class="ipu-dtpicker-h"></label>                            <label class="ipu-dtpicker-mi"></label>                        </div>                        <div>                        <div class="ipu-poppicker-body">                            <div class="ipu-picker" data-id="picker-y">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                             <div class="ipu-picker" data-id="picker-m">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                             <div class="ipu-picker" data-id="picker-d">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                             <div class="ipu-picker" data-id="picker-h">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                             <div class="ipu-picker" data-id="picker-mi">                                <div class="ipu-picker-selectbox"></div>                                <ul></ul>                            </div>                        </div>                    </div>',buttons:["取消","确认","清除"],labels:["年","月","日","时","分"],type:"datetime",customData:{},hasClear:!1,callBack:function(){}},i.prototype._init=function(){var t=this;this.mask=this.createMask();var i=this.holder=e(this.options.template).appendTo("body"),o=t.ui={picker:this.holder,ok:e(".ipu-poppicker-btn-ok",i),cancel:e(".ipu-poppicker-btn-cancel",i),clear:e(".ipu-poppicker-btn-clear",i),buttons:e(".ipu-poppicker-header .ipu-btn",i),labels:e(".ipu-poppicker-title label",i)};o.i=new s(e('[data-id="picker-mi"]',i),{listen:!1}),o.h=new s(e('[data-id="picker-h"]',i),{listen:!1,onChange:function(e,i){null!==i&&(t.options.beginMonth||t.options.endMonth)&&t._createMinutes()}}),o.d=new s(e('[data-id="picker-d"]',i),{listen:!1,onChange:function(e,i){null!==i&&(t.options.beginMonth||t.options.endMonth)&&t._createHours()}}),o.m=new s(e('[data-id="picker-m"]',i),{listen:!1,onChange:function(e,i){null!==i&&t._createDay()}}),o.y=new s(e('[data-id="picker-y"]',i),{listen:!1,onChange:function(e,i){null!=i&&(t.options.beginMonth||t.options.endMonth?t._createMonth():t._createDay())}}),t._create();var o=t.ui;t._setLabels(),t._setButtons(),o.picker.attr("data-type",this.options.type),t._setSelectedValue(this.options.value)},i.prototype.getSelected=function(){var t=this,e=t.ui,i=t.options.type,s={type:i,y:e.y.getSelectedItem(),m:e.m.getSelectedItem(),d:e.d.getSelectedItem(),h:e.h.getSelectedItem(),i:e.i.getSelectedItem(),toString:function(){return this.value}};switch(i){case"datetime":s.value=s.y.value+"-"+s.m.value+"-"+s.d.value+" "+s.h.value+":"+s.i.value,s.text=s.y.text+"-"+s.m.text+"-"+s.d.text+" "+s.h.text+":"+s.i.text;break;case"date":s.value=s.y.value+"-"+s.m.value+"-"+s.d.value,s.text=s.y.text+"-"+s.m.text+"-"+s.d.text;break;case"time":s.value=s.h.value+":"+s.i.value,s.text=s.h.text+":"+s.i.text;break;case"month":s.value=s.y.value+"-"+s.m.value,s.text=s.y.text+"-"+s.m.text;break;case"hour":s.value=s.y.value+"-"+s.m.value+"-"+s.d.value+" "+s.h.value,s.text=s.y.text+"-"+s.m.text+"-"+s.d.text+" "+s.h.text}return s},i.prototype._setSelectedValue=function(t){var e=this,i=e.ui;t||(t="time"==this.options.type?"00:00":o.getFullYear()+"-"+(o.getMonth()+1)+"-"+o.getDate()+" "+o.getHours()+":"+o.getMinutes());var s=e._parseSetValue(t);i.y.setListen(!0),i.m.setListen(!1),i.d.setListen(!1),i.h.setListen(!1),i.i.setListen(!1),i.y.setSelectedValue(s.y),i.m.setListen(!0),i.m.setSelectedValue(s.m),i.d.setListen(!0),i.d.setSelectedValue(s.d),i.h.setListen(!0),i.h.setSelectedValue(s.h),i.i.setListen(!0),i.i.setSelectedValue(s.i),this.value=this.getSelected().value},i.prototype.setSelectedValue=function(t){this._setSelectedValue(t)},i.prototype.isLeapYear=function(t){return t%4==0&&t%100!=0||t%400==0},i.prototype._inArray=function(t,e){for(var i in t){var s=t[i];if(s===e)return!0}return!1},i.prototype.getDayNum=function(t,e){var i=this;return i._inArray([1,3,5,7,8,10,12],e)?31:i._inArray([4,6,9,11],e)?30:i.isLeapYear(t)?29:28},i.prototype._fill=function(t){return t=t.toString(),t.length<2&&(t=0+t),t},i.prototype._isBeginYear=function(){return this.options.beginYear===parseInt(this.ui.y.getSelectedValue())},i.prototype._isBeginMonth=function(){return this.options.beginMonth&&this._isBeginYear()&&this.options.beginMonth===parseInt(this.ui.m.getSelectedValue())},i.prototype._isBeginDay=function(){return this._isBeginMonth()&&this.options.beginDay===parseInt(this.ui.d.getSelectedValue())},i.prototype._isBeginHours=function(){return this._isBeginDay()&&this.options.beginHours===parseInt(this.ui.h.getSelectedValue())},i.prototype._isEndYear=function(){return this.options.endYear===parseInt(this.ui.y.getSelectedValue())},i.prototype._isEndMonth=function(){return this.options.endMonth&&this._isEndYear()&&this.options.endMonth===parseInt(this.ui.m.getSelectedValue())},i.prototype._isEndDay=function(){return this._isEndMonth()&&this.options.endDay===parseInt(this.ui.d.getSelectedValue())},i.prototype._isEndHours=function(){return this._isEndDay()&&this.options.endHours===parseInt(this.ui.h.getSelectedValue())},i.prototype._createYear=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.y)o=i.customData.y;else for(var n=i.beginYear,a=i.endYear,r=n;r<=a;r++)o.push({text:r+"",value:r});s.y.setItems(o)},i.prototype._createMonth=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.m)o=i.customData.m;else for(var n=i.beginMonth&&e._isBeginYear()?i.beginMonth:1,a=i.endMonth&&e._isEndYear()?i.endMonth:12;n<=a;n++){var r=e._fill(n);o.push({text:r,value:n})}s.m.setItems(o)},i.prototype._createDay=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.d)o=i.customData.d;else for(var n=e._isBeginMonth()?i.beginDay:1,a=e._isEndMonth()?i.endDay:e.getDayNum(parseInt(this.ui.y.getSelectedValue()),parseInt(this.ui.m.getSelectedValue()));n<=a;n++){var r=e._fill(n);o.push({text:r,value:n})}s.d.setItems(o)},i.prototype._createHours=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.h)o=i.customData.h;else for(var n=e._isBeginDay()?i.beginHours:0,a=e._isEndDay()?i.endHours:23;n<=a;n++){var r=e._fill(n);o.push({text:r,value:n})}s.h.setItems(o)},i.prototype._createMinutes=function(t){var e=this,i=e.options,s=e.ui,o=[];if(i.customData.i)o=i.customData.i;else for(var n=e._isBeginHours()?i.beginMinutes:0,a=e._isEndHours()?i.endMinutes:59;n<=a;n++){var r=e._fill(n);o.push({text:r,value:n})}s.i.setItems(o)},i.prototype._setLabels=function(){var t=this,e=t.options,i=t.ui;i.labels.each(function(t,i){i.innerText=e.labels[t]})},i.prototype._setButtons=function(){var t=this,i=t.options,s=t.ui;s.cancel.text(i.buttons[0]),s.ok.text(i.buttons[1]),i.hasClear?s.clear.text(i.buttons[2]):s.clear.hide(),s.buttons.each(function(i){e(this).click(function(){t.clickCall(i)})})},i.prototype._parseSetValue=function(t){var e=o,i=this.options.type,s={y:e.getFullYear(),m:e.getMonth()+1,d:e.getDate(),h:e.getHours(),i:e.getMinutes()};t instanceof Date&&("time"==i?valu=+t.getHours()+":"+t.getMinutes():t=t.getFullYear()+"-"+(t.getMonth()+1)+"-"+t.getDate()+" "+t.getHours()+":"+t.getMinutes());for(var n=t.replace(":","-").replace(" ","-").split("-"),a=0,r=n.length;a<r;a++)n[a]=parseInt(n[a]);return"datetime"==i?(s.y=n[0],s.m=n[1],s.d=n[2],s.h=n[3],s.i=n[4]):"date"==i?(s.y=n[0],s.m=n[1],s.d=n[2],s.h=0,s.i=0):"time"==i?(s.h=n[0],s.i=n[1]):"hour"==i?(s.y=n[0],s.m=n[1],s.d=n[2],s.h=n[3],s.i=0):"month"==i&&(s.y=n[0],s.m=n[1],s.d=1,s.h=0,s.i=0),s},i.prototype._create=function(){var t=this,e=this.options,i=o,s=e.beginDate;s?(s=this._parseSetValue(s),e.beginYear=s.y,e.beginMonth=s.m,e.beginDay=s.d,e.beginHours=s.h,e.beginMinutes=s.i):"time"==e.type?(e.beginYear=i.getFullYear(),e.beginMonth=i.getMonth()+1,e.beginDay=i.getDate(),e.beginHours=0,e.beginMinutes=0):e.beginYear=i.getFullYear()-5;var n=e.endDate;n?(n=this._parseSetValue(n),e.endYear=n.y,e.endMonth=n.m,e.endDay=n.d,e.endHours=n.h,e.endMinutes=n.i):"time"==e.type?(e.endYear=i.getFullYear(),e.endMonth=i.getMonth()+1,e.endDay=i.getDate(),e.endHours=24,e.endMinutes=59):e.endYear=e.beginYear+10,t._createYear(),t._createMonth(),t._createDay(),t._createHours(),t._createMinutes()},i.prototype.setBeginDate=function(t){this.options.beginDate=t,this._create()},i.prototype.setEndDate=function(t){this.options.endDate=t,this._create()},i.prototype.dispose=function(){var t=this;t.hide(),setTimeout(function(){t.ui.picker.parentNode.removeChild(t.ui.picker);for(var e in t)t[e]=null,delete t[e];t.disposed=!0},300)},i.prototype.show=function(t){t&&(this.options.callBack=t),this.mask.show(),this.setSelectedValue(this.value),this.holder.addClass("ipu-active")},i.prototype.clickCall=function(t){var e=this,i=e.getSelected(),s=e.options.callBack.call(this,i,t);s!==!1&&(1==t?e.value=i.value:2==t&&(e.value=null),e.hide())},i.prototype.hide=function(){this.mask.close(),this.holder.removeClass("ipu-active")},i.prototype.createMask=function(t){var e=this,i=document.createElement("div");i.classList.add("ipu-picker-backup"),i.addEventListener("click",function(){e.clickCall(0)});var s=[i];return s._show=!1,s.show=function(){return s._show=!0,i.setAttribute("style","opacity:1"),document.body.appendChild(i),s},s._remove=function(){return s._show&&(s._show=!1,i.setAttribute("style","opacity:0"),setTimeout(function(){var t=document.body;i.parentNode===t&&t.removeChild(i)},350)),s},s.close=function(){s._show&&(t?t()!==!1&&s._remove():s._remove())},s},t.dtPicker=function(t){return new i(t)}}(o||window,t),function(t,e,i){function s(t,i){this.options=i=e.extend({},this.defaultOptions,i),this.el=e(t).get(0),this._init()}s.prototype={defaultOptions:{index:null,autoPlay:!1,duration:3e3,indicator:!1,callBack:null,clickBack:null},_init:function(){this.wrapper=e(">.ipu-carousel-wrapper",this.el),this.carouselItems=e(">li",this.wrapper),this.showSize=1,this.carouselItemSizes=[],this.currentIndex=0,this.moveLen=0,this.lastItem=!1,this.carouselItems.slice(0,this.showSize).clone().appendTo(this.wrapper),this.size=this.carouselItems.size();var t=this;this.options.clickBack&&e(">li",this.wrapper).each(function(i){e(this).click(function(){t.options.clickBack.call(this,i%t.size)})}),this.sizeCount();var s=this;if(this.hammer=new i.Manager(this.el),this.hammer.add(new i.Pan({direction:i.DIRECTION_HORIZONTAL,threshold:10})),this.hammer.on("panstart panmove panend pancancel",i.bindFn(this.onPan,this)),e(window).resize(function(){s.refresh()}),null==this.options.index){var o=this.carouselItems.filter(".ipu-active").index();this.options.index=o!=-1?o:0}this.options.indicator&&this._addIndicator(),this.show(this.options.index)},stop:function(){this._pause(),this.options.autoPlay=!1},_pause:function(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null)},prev:function(){var t=0==this.currentIndex?this.size-1:this.currentIndex-1;t==this.size-1&&(this._show(this.size,!1),this.wrapper.width()),this._show(t,!0)},next:function(){var t=this.currentIndex==this.size?1:this.currentIndex+1;1==t&&(this._show(0,!1),this.wrapper.width()),this._show(t,!0)},show:function(t){t>this.size||t<0?console.error("index超出范围!"):this._show(t)},play:function(){this.options.autoPlay=!0,this._play()},_play:function(){if(this.options.autoPlay&&!this.timeoutId){var t=this;this.timeoutId=setTimeout(function(){t.timeoutId=null,t.next()},t.options.duration)}},_end:function(){var t=this.currentIndex;this.options.callBack&&this.options.callBack(t,this.lastItem),this.indicator&&this.indicatorIndexs.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this.carouselItems.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this._play()},_addIndicator:function(){for(var t="",i=0;i<this.size;i++)t+="<li></li>";t="<ul class='ipu-carousel-indicator'>"+t+"</ul>",this.indicator=e(t).appendTo(this.el),this.indicatorIndexs=e("li",this.indicator)},sizeCount:function(){this.wrapperSize=this.wrapper.outerWidth(!0),this.itemSize=this.carouselItems.eq(0).outerWidth(!0),this.mostSize=this.size*this.itemSize,e(this.wrapper).removeClass("ipu-carousel-animate").width();var t=this;e(">li",this.wrapper).each(function(i,s){t.carouselItemSizes[i]=e(this).position().left})},refresh:function(){this.wrapperSize!=this.wrapper.outerWidth(!0)&&(this.sizeCount(),this._show(this.currentIndex,!0))},move:function(t){this._pause(),e(this.wrapper).removeClass("ipu-carousel-animate");var i=(this.moveLen-t)%this.mostSize;i=(i+this.mostSize)%this.mostSize,this.displayMoveLen=i,i=-i+"px",e(this.wrapper).css("transform","translate3d("+i+", 0, 0)")},_show:function(t,i){i!==!1&&(i=!0),this._pause(),e(this.wrapper).toggleClass("ipu-carousel-animate",i),this.currentIndex=t%this.size,this.lastItem=t==this.size;var s=this.carouselItemSizes[t];this.moveLen=s,s=-s+"px",e(this.wrapper).css("transform","translate3d("+s+", 0, 0)"),i&&this._end()},onPan:function(t){var e=t.deltaX;if("panend"==t.type||"pancancel"==t.type){var i=e/this.itemSize,s=parseInt(Math.abs(i)),o=Math.abs(i)%1;o>.2&&(s+=1),i>0&&(s=-s);var n=(this.currentIndex+s)%this.size;n=(n+this.size)%this.size,0==n&&this.displayMoveLen>this.itemSize&&(n=this.size),this._show(n)}else"panmove"==t.type&&this.move(e)}},t.hammerCarousel=function(t,e){return new s(t,e)}}(o||window,t,i),function(t,e){function i(t,e){function i(t){if(t.target===this)for(e.call(this,t),s=0;s<o.length;s++)n.off(o[s],i)}var s,o=t,n=this;if(e)for(s=0;s<o.length;s++)n.on(o[s],i)}function s(i){var s=e(this);s.attr("href");s.hasClass("ipu-modal-overlay")&&(e(".ipu-modal.ipu-modal-in").length>0&&n.modalCloseByOutside&&t.closeModal(".ipu-modal.ipu-modal-in"),e(".ipu-actions-modal.ipu-modal-in").length>0&&n.actionsCloseByOutside&&t.closeModal(".ipu-actions-modal.ipu-modal-in")),s.hasClass("ipu-popup-overlay")&&e(".ipu-popup.ipu-modal-in").length>0&&n.popupCloseByOutside&&t.closeModal(".ipu-popup.modal-in")}e.fn.transitionEnd=function(t){return i.call(this,["webkitTransitionEnd","transitionend"],t),this};var o=document.createElement("div"),n={modalStack:!0,modalButtonOk:"确定",modalButtonCancel:"取消",modalPreloaderTitle:"加载中",modalContainer:document.body?document.body:"body"};t.modalStack=[],t.modalStackClearQueue=function(){t.modalStack.length&&t.modalStack.shift()()},t.modal=function(i){i=i||{};var s="",a="";if(i.buttons&&i.buttons.length>0)for(var r=0;r<i.buttons.length;r++)a+='<span class="ipu-modal-button'+(i.buttons[r].bold?" ipu-modal-button-bold":"")+'">'+i.buttons[r].text+"</span>";var l=i.extraClass||"",u=i.title?'<div class="ipu-modal-title">'+i.title+"</div>":"",h=i.text?'<div class="ipu-modal-text">'+i.text+"</div>":"",d=i.afterText?i.afterText:"",c=i.buttons&&0!==i.buttons.length?"":"ipu-modal-no-buttons",p=i.verticalButtons?"ipu-modal-buttons-vertical":"";s='<div class="ipu-modal '+l+" "+c+'"><div class="ipu-modal-inner">'+(u+h+d)+'</div><div class="ipu-modal-buttons '+p+'">'+a+"</div></div>",o.innerHTML=s;var m=e(o).children();return e(n.modalContainer).append(m[0]),m.find(".ipu-modal-button").each(function(s,o){e(o).on("click",function(e){i.buttons[s].close!==!1&&t.closeModal(m),i.buttons[s].onClick&&i.buttons[s].onClick(m,e),i.onClick&&i.onClick(m,s)})}),t.openModal(m),m[0]},t.alert=function(e,i,s){return"function"==typeof i&&(s=arguments[1],i=void 0),t.modal({text:e||"",title:"undefined"==typeof i?n.modalTitle:i,buttons:[{text:n.modalButtonOk,bold:!0,onClick:s}]})},t.confirm=function(e,i,s,o){return"function"==typeof i&&(o=arguments[2],s=arguments[1],i=void 0),t.modal({text:e||"",title:"undefined"==typeof i?n.modalTitle:i,buttons:[{text:n.modalButtonCancel,omodalButtonCancelnClick:o},{text:n.modalButtonOk,bold:!0,onClick:s}]})},t.prompt=function(i,s,o,a){return"function"==typeof s&&(a=arguments[2],o=arguments[1],s=void 0),t.modal({text:i||"",title:"undefined"==typeof s?n.modalTitle:s,afterText:'<input type="text" class="ipu-modal-text-input">',buttons:[{text:n.modalButtonCancel},{text:n.modalButtonOk,bold:!0}],onClick:function(t,i){0===i&&a&&a(e(t).find(".ipu-modal-text-input").val()),1===i&&o&&o(e(t).find(".ipu-modal-text-input").val())}})};var a=!1,r=!1,l=!1,u=null;t.showPreloader=function(e,i){return t.hidePreloader(!0),t.showPreloader.preloaderModal=t.modal({title:e||n.modalPreloaderTitle,text:'<div class="ipu-preloader"></div>'}),i&&(a=!0,u=setTimeout(function(){r=!0,l&&t.hidePreloader()},i)),t.showPreloader.preloaderModal},t.hidePreloader=function(e){e||!a||a&&r?(e&&u&&window.clearTimeout(u),t.showPreloader.preloaderModal&&t.closeModal(t.showPreloader.preloaderModal),a=!1,r=!1,l=!1,u=null):l=!0},t.showIndicator=function(){e(".ipu-preloader-indicator-modal")[0]||e(n.modalContainer).append('<div class="ipu-preloader-indicator-overlay"></div><div class="ipu-preloader-indicator-modal"><span class="ipu-preloader ipu-preloader-white"></span></div>')},t.hideIndicator=function(){e(".ipu-preloader-indicator-overlay, .ipu-preloader-indicator-modal").remove()},t.actions=function(i){var s,a,r;i=i||[],i.length>0&&!e.isArray(i[0])&&(i=[i]);for(var l,u="",h=0;h<i.length;h++)for(var d=0;d<i[h].length;d++){0===d&&(u+='<div class="ipu-actions-modal-group">');var c=i[h][d],p=c.label?"ipu-actions-modal-label":"ipu-actions-modal-button";c.bold&&(p+=" ipu-actions-modal-button-bold"),c.color&&(p+=" ipu-color-"+c.color),c.bg&&(p+=" ipu-bg-"+c.bg),c.disabled&&(p+=" disabled"),u+='<span class="'+p+'">'+c.text+"</span>",d===i[h].length-1&&(u+="</div>")}l='<div class="ipu-actions-modal">'+u+"</div>",o.innerHTML=l,s=e(o).children(),e(n.modalContainer).append(s[0]),a=".ipu-actions-modal-group",r=".ipu-actions-modal-button";var m=s.find(a);return m.each(function(o,n){var a=o;e(n).children().each(function(o,n){var l,u=o,h=i[a][u];e(n).is(r)&&(l=e(n)),l&&l.on("click",function(e){h.close!==!1&&t.closeModal(s),h.onClick&&h.onClick(s,e)})})}),t.openModal(s),s[0]},t.toast=function(i,s,o){var n=e('<div class="ipu-modal ipu-toast '+(o||"")+'">'+i+"</div>").appendTo(document.body);t.openModal(n,function(){setTimeout(function(){t.closeModal(n)},s||2e3)})},t.openModal=function(i,s){i=e(i);var o=i.hasClass("ipu-modal"),a=!i.hasClass("ipu-toast");if(a=!1,e(".ipu-modal.ipu-modal-in:not(.ipu-modal-out)").length&&n.modalStack&&o&&a)return void t.modalStack.push(function(){t.openModal(i,s)});var r=i.hasClass("ipu-popup"),l=i.hasClass("ipu-login-screen"),u=i.hasClass("ipu-picker-modal"),h=i.hasClass("ipu-toast");o&&(i.show(),i.css({marginTop:-Math.round(i.outerHeight()/2)+"px"})),h&&i.css({marginLeft:-Math.round(i.outerWidth()/2/1.185)+"px"});var d;l||u||h||(0!==e(".ipu-modal-overlay").length||r||e(n.modalContainer).append('<div class="ipu-modal-overlay"></div>'),0===e(".ipu-popup-overlay").length&&r&&e(n.modalContainer).append('<div class="ipu-popup-overlay"></div>'),d=e(r?".ipu-popup-overlay":".ipu-modal-overlay"));i[0].clientLeft;return i.trigger("open"),u&&e(n.modalContainer).addClass("ipu-with-picker-modal"),l||u||h||d.addClass("ipu-modal-overlay-visible"),i.removeClass("ipu-modal-out").addClass("ipu-modal-in").transitionEnd(function(t){i.hasClass("ipu-modal-out")?i.trigger("closed"):i.trigger("opened")}),"function"==typeof s&&s.call(this),!0},t.closeModal=function(i){if(i=e(i||".ipu-modal-in"),"undefined"==typeof i||0!==i.length){var s=i.hasClass("ipu-modal"),o=i.hasClass("ipu-popup"),a=i.hasClass("ipu-toast"),r=i.hasClass("ipu-login-screen"),l=i.hasClass("ipu-picker-modal"),u=i.hasClass("ipu-remove-on-close"),h=e(o?".ipu-popup-overlay":".ipu-modal-overlay");return o?i.length===e(".ipu-popup.ipu-modal-in").length&&h.removeClass("ipu-modal-overlay-visible"):l||a||h.removeClass("ipu-modal-overlay-visible"),i.trigger("close"),l&&(e(n.modalContainer).removeClass("ipu-with-picker-modal"),e(n.modalContainer).addClass("ipu-picker-modal-closing")),i.removeClass("ipu-modal-in").addClass("ipu-modal-out").transitionEnd(function(t){i.hasClass("ipu-modal-out")?i.trigger("closed"):i.trigger("opened"),l&&e(n.modalContainer).removeClass("ipu-picker-modal-closing"),o||r||l?(i.removeClass("ipu-modal-out").hide(),u&&i.length>0&&i.remove()):i.remove()}),s&&n.modalStack&&t.modalStackClearQueue(),!0}},e(document).on("click"," .ipu-modal-overlay, .ipu-popup-overlay, .ipu-close-popup, .ipu-open-popup, .ipu-close-picker",s)}(o||window,t),function(t,e){function i(t,i){this.options=e.extend({},this.defaultOpt,i),this.content=e(this.options.contentSlt),this.nav=e(t),this.wrapper=e(">ul",this.content),this.contents=e(">li",this.wrapper),this.navs=e(">a",this.nav);var s=this,o=this.navs.filter(".ipu-active").index();o==-1&&(o=this.contents.filter(".ipu-active").index()),this.options.index=o!=-1?o:0,this.options.animate||this.wrapper.addClass("ipu-no-animation"),this.navs.each(function(t,i){e(this).click(function(){s.show(t)})}),this.lastIndex=null,this.currentIndex=null,s.show(this.options.index)}i.prototype.defaultOpt={animate:!1,contentSlt:".ipu-nav-content",callBack:function(t,e){}},i.prototype.show=function(t){if(this.currentIndex!=t){e(this.contents[t]).addClass("ipu-show");this.options.animate?(null!=this.lastIndex&&this.lastIndex!=t&&e(this.contents[this.lastIndex]).removeClass("ipu-show"),null!=this.currentIndex&&(this.currentIndex<t?null!=this.lastIndex&&this.lastIndex<this.currentIndex&&this.wrapper.addClass("ipu-no-animation").removeClass("ipu-nav-content-right").width():(null==this.lastIndex||this.lastIndex>this.currentIndex)&&this.wrapper.addClass("ipu-no-animation").addClass("ipu-nav-content-right").width(),this.wrapper.removeClass("ipu-no-animation").toggleClass("ipu-nav-content-right"))):e(this.contents[this.currentIndex]).removeClass("ipu-show"),e(this.contents[t]).addClass("ipu-active").siblings(".ipu-active").removeClass("ipu-active"),e(this.navs[t]).addClass("ipu-active").siblings(".ipu-active").removeClass("ipu-active"),this.lastIndex=this.currentIndex,this.currentIndex=t,this.options.callBack&&this.options.callBack(this.currentIndex,this.lastIndex)}},t.navBar=function(t,e){return new i(t,e)}}(o||window,t),function(t,e){function i(t,e){function i(t){if(t.target===this)for(e.call(this,t),s=0;s<o.length;s++)n.off(o[s],i)}var s,o=t,n=this;if(e)for(s=0;s<o.length;s++)n.on(o[s],i)}function s(t,e,i){var s=t.createElement("form");s.action=e,s.method="post",s.style.display="none";for(var o in i){var n=t.createElement("input");n.type="hidden",n.name=o,n.value=i[o],s.appendChild(n)}t.body.appendChild(s),s.submit()}function o(){r||(d=e(".ipu-pages"),0==d.size()&&(d=e("<div class='ipu-pages'><div class='ipu-page ipu-show "+f+"' id='"+h+"0'></div>").appendTo("body")),r=!0)}function n(t){return e(t).hasClass(f)}e.fn.animationEnd=function(t){return i.call(this,["webkitAnimationEnd","animationend"],t),this};var a={},r=!1,l={},u=1,h="ipuPage-",d=null,c="ipu-anim ipu-slideRightIn",p="ipu-anim ipu-slideRightOut",m="ipuUIPageBack",f="ipu-page-zero",v="ipu-pages-zero";a.options={target:window.parent,backIndex:-1,closeIndex:-1,params:{},animate:!0,showLoading:!0,loadingMessage:"正在加载中",method:null,minMessageTime:500,callBack:function(){}},a.openPage=function(i,a){function r(){a.showLoading&&t.hidePreloader(),a.animate&&g.removeClass(c),p.siblings(".ipu-show").removeClass("ipu-show"),a.callBack&&a.callBack()}var p=null,m=h+u++;l[m]=i,o(),a.showLoading&&t.showPreloader(a.loadingMessage,a.minMessageTime),p=e("post"==a.method?"<div class='ipu-page' id='"+m+"'><iframe class='ipu-page-iframe'></iframe></div>":"<div class='ipu-page' id='"+m+"'><iframe class='ipu-page-iframe' src='"+i+"'></iframe></div>");var f=n(e(".ipu-page:last",d)),g=p;if(f&&(g=d.addClass(v)),e(".ipu-page-iframe",p).one("load",function(){p.addClass("ipu-show").width(),f&&g.removeClass(v),a.animate?g.addClass(c).animationEnd(r):r()}),p.appendTo(d),"post"==a.method){var b=e(".ipu-page-iframe",p)[0].contentDocument;s(b,i,a.params)}},a.postPage=function(t,e){e.method="post",a.openPage(t,e)},a.backPage=function(t){function i(){e(this).removeClass(p),o.nextAll(".ipu-page").remove();var i,s=e(".ipu-page-iframe",o);i=0==s.size()?window.document:s[0].contentDocument,u&&d.addClass(v);var n=i.createEvent("Event");n.initEvent(m,!0,!0),t.data&&(n.data=t.data),i.body.dispatchEvent(n),t.callBack&&t.callBack()}var s=t.backIndex,o=null,a=e(".ipu-page.ipu-show",d);if(0==s)o=e(".ipu-page:first",d);else{var r=a.prevAll(".ipu-page");o=e(s<0?r[-s-1]:r[r.size()-s])}var l=a,u=n(o);u?l=d:o.addClass("ipu-show"),t.animate?l.addClass(p).animationEnd(i):i()},a.closePage=function(t){var i=t.closeIndex,s=e(".ipu-page.ipu-show",d).prevAll(".ipu-page");i=i<0?-i-1:s.size()-i,e(s[i]).remove(),t.callBack&&t.callBack()},a.open=function(t,i){i=e.extend({},this.options,i),i.target.ipu.page.openPage(t,i)},a.post=function(t,i){i=e.extend({},this.options,i),i.method="post",i.target.ipu.page.openPage(t,i)},a.back=function(t){t=e.extend({},this.options,t),t.target.ipu.page.backPage(t)},a.backHome=function(t){t=t||{},t.backIndex=0,a.back(t)},a.close=function(t){t=e.extend({},this.options,t),t.target.ipu.page.closePage(t)},a.onBack=function(t){e("body").on(m,function(e){var i=e.originalEvent.data;t(i)})},t.page=a}(o||window,t),function(t,e,i){function s(t,i){this.el=e(t)[0],this.options=e.extend({},this.defaultOptions,i),this._init()}var o=9,n=90,a=180/o,r=a;s.prototype.defaultOptions={onChange:function(){},listen:!0,data:[]},s.prototype._init=function(){var s=this;this.wrap=e(">ul",this.el),this.index=null,this.listen=!!this.options.listen,this.beginAngle=0,this.beginExceed=this.beginAngle-r,this.stopInertiaMove=!1,this.lastAngle=null,this.empty=0==this.options.data.length,t.device.ios&&this.wrap.css("transform-origin","center center "+n+"px"),this.hammer=new i.Manager(this.el),this.hammer.add(new i.Pan({direction:i.DIRECTION_VERTICAL,threshold:5})),this.hammer.add(new i.Press({threshold:4})),this.hammer.on("panstart panmove panend pancancel",i.bindFn(this._onPan,this)),this.hammer.on("press pressup",function(t){this.empty||(s.stopInertiaMove=!0,"pressup"==t.type&&s.endScroll())}),this.setItems(this.options.data)},s.prototype.setItems=function(t,i){this.wrap.empty(),this.data=t=t||[],this.empty=0==t.length,this.newData=!0;var s=this,o="";i=i||"text";for(var l=0,u=t.length;l<u;l++)o=o+"<li>"+t[l][i]+"</li>";e(o).appendTo(this.wrap),this.items=e(">li",this.wrap),this.itemsSize=this.items.size(),this.endAngle=(this.empty?0:this.itemsSize-1)*a,this.endExceed=this.endAngle+r,this.items.each(function(t){e(this).css({transform:"translateZ("+n+"px) rotateX(-"+t*a+"deg)","transform-origin":"center center -"+n+"px"}),e(this).click(function(){console.log("click"),s.stopInertiaMove=!0,s.setAngle(t*a,!0)})});var h;h=this.empty||null==this.index?0:this.index>this.itemsSize-1?(this.itemsSize-1)*a:this.index*a,this.setAngle(h,!0)},s.prototype._onPan=function(t){if(!this.empty)if("panstart"==t.type)self.stopInertiaMove=!0,this.lastAngle=this.angle,this.wrap.addClass("ipu-noanimate"),this.stopInertiaMove=!0;else if("panmove"==t.type){var e=this.calcAngle(t.deltaY),i=this.lastAngle-e;i<this.beginExceed&&(i=this.beginExceed),i>this.endExceed&&(i=this.endExceed),this.setAngle(i)}else{var s=t.overallVelocityY,o=s>0?-1:1,n=6e-4*o*-1,a=Math.abs(s/n),r=s*a/2,l=this.angle,u=-this.calcAngle(r),h=u;if(l+u<this.beginExceed&&(u=this.beginExceed-l,a=a*(u/h)*.6),l+u>this.endExceed&&(u=this.endExceed-l,a=a*(u/h)*.6),0==u)return void this.endScroll();this.scrollDistAngle(l,u,a)}};var l=360/(2*n*Math.PI);s.prototype.calcAngle=function(t){return t*l},s.prototype.setAngle=function(t,e){if(this.angle=t,this.wrap.css("transform","perspective(1000px) rotateY(0deg) rotateX("+t+"deg)"),this.calcItemVisable(t),e){var i=t/a,s=this.index;this.index=this.empty?null:i,(s!=i||this.newData)&&(this.newData=!1,this.options.onChange&&this.listen&&this.options.onChange(this.getSelectedItem(),this.index,s,this.newData))}},s.prototype.calcItemVisable=function(t){this.items.each(function(i){var s=Math.abs(i*a-t);s<a/2?e(this).addClass("ipu-highlight ipu-visible"):s>=90-a/2?e(this).removeClass("ipu-highlight ipu-visible"):e(this).addClass("ipu-visible").removeClass("ipu-highlight")})},s.prototype.endScroll=function(){this.wrap.removeClass("ipu-noanimate");var t;if(this.angle<this.beginAngle)t=this.beginAngle;else if(this.angle>this.endAngle)t=this.endAngle;else{var e=parseInt((this.angle/a).toFixed(0));t=a*e}this.setAngle(t,!0)},s.prototype.scrollDistAngle=function(t,e,i){var s=this,o=(new Date).getTime();this.stopInertiaMove=!1,i=1*i,function(t,e,i,o){var n=13,a=o/n,r=0;!function l(){if(!s.stopInertiaMove){var t=s.quartEaseOut(r,e,i,a);return s.setAngle(t),r++,r>a-1||t<s.beginExceed||t>s.endExceed?void s.endScroll():void setTimeout(l,n)}}()}(o,t,e,i)},s.prototype.setListen=function(t){this.listen=!!t},s.prototype.quartEaseOut=function(t,e,i,s){return-i*((t=t/s-1)*t*t*t-1)+e},s.prototype.setSelectedValue=function(t){var e=this;for(var i in e.data){var s=e.data[i];if(s.value==t)return void e.setAngle(i*a,!0)}},s.prototype.getSelectedItem=function(){return this.empty?{}:this.data[this.index];
2
},s.prototype.getSelectedValue=function(){return this.getSelectedItem().value},s.prototype.getSelectedText=function(){return this.getSelectedItem().text},s.prototype.getSelectedIndex=function(){return this.index},t.Picker=s}(o||window,t,i),function(t,e){function i(i){this.options=e.extend({},this.defaultOptions,i),s||(s=t.Picker),this._init()}var s=t.Picker;i.prototype.defaultOptions={template:'<div class="ipu-poppicker">                        <div class="ipu-poppicker-header">                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-cancel">取消</button>                            <button class="ipu-btn ipu-btn-s ipu-poppicker-btn-ok">确定</button>                        </div>                        <div class="ipu-poppicker-body">                        </div>                    </div>',pickerTemplate:'<div class="ipu-picker">                            <div class="ipu-picker-selectbox"></div>                            <ul></ul>                          </div>',data:[],layer:1,btns:["取消","确认"],callBack:function(){}},i.prototype._init=function(){this.holder=e(this.options.template).appendTo("body");var t=e(".ipu-poppicker-body",this.holder),i=this.options.layer,o=100/i+"%";this.pickers=new Array(i);var n,a=this;this.mask=this.createMask();for(var r=i-1;r>=0;r--)n=e(this.options.pickerTemplate).prependTo(t).css({width:o}),this.pickers[r]=new s(n,{onChange:function(t){return function(e,s){t!=i-1&&a.pickers[t+1].setItems(e.data)}}(r)});e(".ipu-poppicker-btn-ok",this.holder).click(function(){var t=a.getSelectItems();a.options.callBack(t)!==!1&&a.hide()}).text(this.options.btns[1]),e(".ipu-poppicker-btn-cancel",this.holder).click(function(){a.hide()}).text(this.options.btns[0])},i.prototype.setData=function(t){this.pickers[0].setItems(t)},i.prototype.show=function(t){t&&(this.options.callBack=t),this.mask.show(),this.holder.addClass("ipu-active")},i.prototype.hide=function(){this.mask.close(),this.holder.removeClass("ipu-active")},i.prototype.getSelectItems=function(){if(1==this.options.layer)return this.pickers[0].getSelectedItem();for(var t=[],e=0;e<this.options.layer;e++)t.push(this.pickers[e].getSelectedItem());return t},i.prototype.createMask=function(t){var e=this,i=document.createElement("div");i.classList.add("ipu-picker-backup"),i.addEventListener("click",function(){e.hide()});var s=[i];return s._show=!1,s.show=function(){return s._show=!0,i.setAttribute("style","opacity:1"),document.body.appendChild(i),s},s._remove=function(){return s._show&&(s._show=!1,i.setAttribute("style","opacity:0"),setTimeout(function(){var t=document.body;i.parentNode===t&&t.removeChild(i)},350)),s},s.close=function(){s._show&&(t?t()!==!1&&s._remove():s._remove())},s},t.popPicker=function(t){return new i(t)}}(o||window,t),function(t,e){function i(t,i){this.id=t,this.level=i.level,this.progress=i.progress,this.progressBar=e(t).eq(0),null!=i.progress&&this.setProgress(this.progress),null!=i.level&&this.setLevel(this.level)}i.prototype.setProgress=function(t){t<0||t>100||(e(this.progressBar.find(".ipu-progressbar")).css("transform","translate3d("+-(100-t)+"%, 0px, 0px)"),this.progress=t)},i.prototype.getProgress=function(){return this.progress},i.prototype.setLevel=function(t){"default"==t?(e(this.progressBar).removeClass("ipu-progressbar-success ipu-progressbar-hightlight ipu-progressbar-warning"),e(this.progressBar).addClass("ipu-progress")):"success"==t?(e(this.progressBar).removeClass("ipu-progressbar-highlight ipu-progressbar-warning"),e(this.progressBar).addClass("ipu-progressbar-success")):"highlight"==t?(e(this.progressBar).removeClass("ipu-progressbar-success ipu-progressbar-warning"),e(this.progressBar).addClass("ipu-progressbar-highlight")):"warning"==t&&(e(this.progressBar).removeClass("ipu-progressbar-success ipu-progressbar-highlight"),e(this.progressBar).addClass("ipu-progressbar-warning"))},t.progressBar=function(t,e){return new i(t,e)}}(o||window,t),function(t,e,i){function s(t,s){this.options=e.extend({},this.defaultOptions,s),this.el=e(t).get(0),this._initBottomAndTop();var o=this;this.iScrollOptions={onScrollMove:function(t){o.topEnable&&!o.topLoading&&(this.y>=o.topPullOffset&&!o.topEl.hasClass("ipu-refresh-toload")?o.topEl.addClass("ipu-refresh-toload"):this.y<o.topPullOffset&&o.topEl.hasClass("ipu-refresh-toload")&&o.topEl.removeClass("ipu-refresh-toload")),o._checkBottomLoading(),o.goTop=this.y>o.topPullOffset},onBeforeScrollEnd:function(){o._checkTopLoading(),o._checkBottomLoading()},onScrollEnd:function(){o.topLoading&&this.y<this.minScrollY&&o.goTop&&o.iScroll.scrollTo(0,this.minScrollY,0),o._checkBottomLoading()},onRefresh:function(){o.topLoading&&(this.minScrollY=this.minScrollY+o.topPullOffset)}},this.iScrollOptions=e.extend({},this.options.iScrollOptions,this.iScrollOptions),this.iScroll=new i(this.el,this.iScrollOptions),this._checkContentLoading()}s.prototype.defaultOptions={bottomLoadFun:null,topLoadFun:null,initEnableTop:!0,initEnableBottom:!0,bottomLoadHtml:'<div class="ipu-refresh-bottom"><span class="ipu-refresh-loading"></span></div>',topLoadHtml:'<div class="ipu-refresh-top"><span class="ipu-refresh-loading"></span><div class="ipu-refresh-arrow"></div></div>',bottomAddLen:0,iScrollOptions:{}},s.prototype._initBottomAndTop=function(){this.scrollEl=e(">.ipu-refresh-wrapper",this.el),this.bottomEl=e(this.options.bottomLoadHtml).appendTo(this.scrollEl),this.topEl=e(this.options.topLoadHtml).prependTo(this.scrollEl),this.topPullOffset=this.topEl.outerHeight(),this.bottomPullOffset=this.bottomEl.outerHeight()+this.options.bottomAddLen,this.topLoading=!1,this.bottomLoading=!1,this.bottomEnable=this.options.initEnableBottom&&!!this.options.bottomLoadFun,this.topEnable=this.options.initEnableTop&&!!this.options.topLoadFun,this.goTop=!1,this.enableBottom(this.bottomEnable),this.enableTop(this.topEnable)},s.prototype._checkBottomLoading=function(){this.bottomEnable&&!this.bottomLoading&&this.iScroll.y<this.iScroll.maxScrollY+this.bottomPullOffset&&this._startBottomLoading()},s.prototype._checkTopLoading=function(){this.topEnable&&!this.topLoading&&this.topEl.hasClass("ipu-refresh-toload")&&this._startTopLoading()},s.prototype._checkContentLoading=function(){this.iScroll.maxScrollY>=-this.bottomPullOffset&&this._startBottomLoading()},s.prototype._startBottomLoading=function(){this.bottomEnable&&!this.bottomLoading&&(this.bottomLoading=!0,this.options.bottomLoadFun())},s.prototype._startTopLoading=function(){this.topEnable&&!this.topLoading&&(this.topLoading=!0,this.topEl.removeClass("ipu-refresh-toload").addClass("ipu-refresh-top-loading"),this.iScroll.minScrollY=this.iScroll.minScrollY+this.topPullOffset,this.options.topLoadFun())},s.prototype.endBottomLoading=function(){this.bottomLoading=!1,this.refresh()},s.prototype.endTopLoading=function(){this.topEl.removeClass("ipu-refresh-top-loading"),this.topLoading=!1,this.refresh()},s.prototype.enableTop=function(t){this.topEnable=t,t?this.topEl.show():this.topEl.hide()},s.prototype.enableBottom=function(t){this.bottomEnable=t,t?this.bottomEl.show():this.bottomEl.hide()},s.prototype.refresh=function(){this.iScroll.refresh(),this._checkContentLoading()},t.refresh=function(t,e){return new s(t,e)}}(o||window,t,e),function(t,e){function i(t,i){this.el=e(t).get(0),this.titleItems=e(".ipu-tab-title:first>li",this.el),this.bodyWrapper=e(".ipu-tab-body-wrapper:first",this.el),this.contentItems=e(">li",this.bodyWrapper),this.options=e.extend({},this.defaultOptions,i),this.itemSize=this.contentItems.size(),this.fixed=e(this.el).is(".ipu-tab-fixed");var s=this;this.titleItems.each(function(t){e(this).click(function(){s.show(t)})})}i.prototype.defaultOptions={callBack:null},i.prototype.show=function(t){if(this.fixed){var e=100*-t+"%";this.bodyWrapper.css("transform","translate3d("+e+", 0, 0)")}this.contentItems.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this.titleItems.eq(t).addClass("ipu-active").siblings().removeClass("ipu-active"),this._end(t)},i.prototype._end=function(t){this.lastIndex=this.currentIndex,this.currentIndex=this.index,this.options.callBack&&this.options.callBack(t,this.lastIndex)},t.tab=function(t,e){return new i(t,e)}}(o||window,t),function(t,e){"use strict";var i={},s=[],o=navigator.userAgent;if(console.log("device"),o.match(/ipumobile/i))i.ios=!!o.match(/ios/i),i.android=!!o.match(/android/i);else{var n=o.match(/(Android);?[\s\/]+([\d.]+)?/),a=o.match(/(iPad).*OS\s([\d_]+)/),r=o.match(/(iPod)(.*OS\s([\d_]+))?/),l=!a&&o.match(/(iPhone\sOS)\s([\d_]+)/);if(i.ios=i.android=i.iphone=i.ipad=i.androidChrome=!1,n&&(i.os="android",i.osVersion=n[2],i.android=!0,i.androidChrome=o.toLowerCase().indexOf("chrome")>=0),(a||l||r)&&(i.os="ios",i.ios=!0),l&&!r&&(i.osVersion=l[2].replace(/_/g,"."),i.iphone=!0),a&&(i.osVersion=a[2].replace(/_/g,"."),i.ipad=!0),r&&(i.osVersion=r[3]?r[3].replace(/_/g,"."):null,i.iphone=!0),i.ios&&i.osVersion&&o.indexOf("Version/")>=0&&"10"===i.osVersion.split(".")[0]&&(i.osVersion=o.toLowerCase().split("version/")[1].split(" ")[0]),i.webView=(l||a||r)&&o.match(/.*AppleWebKit(?!.*Safari)/i),i.os&&"ios"===i.os){var u=i.osVersion.split(".");i.minimalUi=!i.webView&&(r||l)&&(1*u[0]===7?1*u[1]>=1:1*u[0]>7)&&e('meta[name="viewport"]').length>0&&e('meta[name="viewport"]').attr("content").indexOf("minimal-ui")>=0}var h=e(window).width(),d=e(window).height();if(i.statusBar=!1,i.webView&&h*d===screen.width*screen.height?i.statusBar=!0:i.statusBar=!1,i.pixelRatio=window.devicePixelRatio||1,s.push("pixel-ratio-"+Math.floor(i.pixelRatio)),i.pixelRatio>=2&&s.push("retina"),i.os&&(s.push(i.os,i.os+"-"+i.osVersion.split(".")[0],i.os+"-"+i.osVersion.replace(/\./g,"-")),"ios"===i.os))for(var c=parseInt(i.osVersion.split(".")[0],10),p=c-1;p>=6;p--)s.push("ios-gt-"+p);i.statusBar?s.push("with-statusbar-overlay"):e("html").removeClass("with-statusbar-overlay"),i.isWeixin=/MicroMessenger/i.test(o)}s.length>0&&e("html").addClass(s.join(" ")),t.device=i}(o||window,t),t(function(){s.attach(document.body)}),o}"function"==typeof define&&define.amd?define(["jquery","iScroll","Hammer","FastClick"],function(e,i,s,o){return window.ipu=t(e,i,s,o)}):window.ipu=t(window.jQuery,window.iScroll,window.Hammer,window.FastClick)}();
3 3
//# sourceMappingURL=ipu.min.js.map

+ 1 - 1
ipu/dist/js/ipu.min.js.map

@ -1 +1 @@
1
{"version":3,"sources":["ipu.js"],"names":["setup","jQuery","iScroll","Hammer","FastClick","ipu","$","iscroll","Carousel","slt","options","this","extend","defaultOpt","el","eq","autoPlay","hasIndicator","indicator","callBack","currentIndex","_init","play","prototype","index","duration","indicatorPosition","wrapper","carouselItems","size","that","activeIndex","filter","_addIndicator","window","resize","refresh","scrollOpt","snap","momentum","scrollX","scrollY","hScrollbar","onScrollStart","_pause","onTouchEnd","onScrollEnd","_end","get","show","stop","timeoutId","clearTimeout","prev","next","time","scrollToPage","_play","setTimeout","currPageX","indicatorIndexs","addClass","siblings","removeClass","html","i","appendTo","destroy","carousel","DtPicker","defaultOptions","Picker","defaultPickerDate","Date","template","buttons","labels","type","customData","hasClear","self","mask","createMask","_picker","holder","ui","picker","ok","cancel","clear","listen","h","onChange","item","beginMonth","endMonth","_createMinutes","d","_createHours","m","_createDay","y","_createMonth","_create","_setLabels","_setButtons","attr","_setSelectedValue","value","getSelected","selected","getSelectedItem","toString","text","getFullYear","getMonth","getDate","getHours","getMinutes","parsedValue","_parseSetValue","setListen","setSelectedValue","isLeapYear","year","_inArray","array","_item","getDayNum","month","_fill","num","length","_isBeginYear","beginYear","parseInt","getSelectedValue","_isBeginMonth","_isBeginDay","beginDay","_isBeginHours","beginHours","_isEndYear","endYear","_isEndMonth","_isEndDay","endDay","_isEndHours","endHours","_createYear","current","yArray","yBegin","yEnd","push","setItems","mArray","maxMonth","val","dArray","maxDay","hArray","maxHours","iArray","beginMinutes","maxMinutes","endMinutes","each","label","innerText","hide","click","clickCall","now","rs","valu","parts","replace","split","j","beginDate","endDate","setBeginDate","date","setEndDate","dispose","parentNode","removeChild","name","disposed","sltDate","call","close","callback","element","document","createElement","classList","add","addEventListener","_show","setAttribute","body","appendChild","_remove","dtPicker","HammerCarousel","navSlt","clickBack","showSize","carouselItemSizes","moveLen","lastItem","slice","clone","sizeCount","hammer","Manager","Pan","direction","DIRECTION_HORIZONTAL","threshold","on","bindFn","onPan","width","console","error","wrapperSize","outerWidth","itemSize","mostSize","dom","position","left","move","displayMoveLen","css","animate","toggleClass","ev","delta","deltaX","intValue","Math","abs","decimal","hammerCarousel","__dealCssEvent","eventNameArr","fireCallBack","e","target","events","off","handleClicks","clicked","hasClass","defaults","modalCloseByOutside","closeModal","actionsCloseByOutside","popupCloseByOutside","fn","transitionEnd","_modalTemplateTempDiv","modalStack","modalButtonOk","modalButtonCancel","modalPreloaderTitle","modalContainer","modalStackClearQueue","shift","modal","params","modalHTML","buttonsHTML","bold","extraClass","titleHTML","title","textHTML","afterTextHTML","afterText","noButtons","verticalButtons","innerHTML","children","append","find","onClick","openModal","alert","callbackOk","arguments","undefined","modalTitle","confirm","callbackCancel","omodalButtonCancelnClick","prompt","showPreloader","hidePreloader","preloaderModal","showIndicator","hideIndicator","remove","actions","groupSelector","buttonSelector","isArray","button","buttonClass","color","bg","disabled","groups","groupIndex","clickTarget","buttonIndex","buttonParams","is","toast","msg","extraclass","$toast","cb","isModal","isNotToast","isPopup","isLoginScreen","isPickerModal","isToast","marginTop","round","outerHeight","marginLeft","overlay","clientLeft","trigger","removeOnClose","NavBar","content","contentSlt","nav","contents","navs","me","lastIndex","navBar","submitForm","doc","url","form","action","method","style","display","x","ele","submit","animationEnd","page","parent","backIndex","closeIndex","maps","pageNo","openPage","end","overTime","transEnd","newPage","animateClass","nowPageNo","one","postPage","pageDoc","contentDocument","backPage","nowPage","prevAll","prevPage","nextAll","nowDoc","iframe","evt","createEvent","initEvent","data","dispatchEvent","closePage","open","post","back","backHome","onBack","originalEvent","showItemSize","r","itemAngle","maxExceed","wrap","beginAngle","beginExceed","stopInertiaMove","lastAngle","empty","device","ios","DIRECTION_VERTICAL","Press","_onPan","endScroll","textName","newData","lis","items","itemsSize","endAngle","endExceed","transform","transform-origin","log","setAngle","newAngle","angle","moveAngle","calcAngle","deltaY","v","overallVelocityY","dir","deceleration","dist","startAngle","distAngle","srcDistAngle","scrollDistAngle","ca","PI","c","calcItemVisable","oldIndex","difference","toFixed","nowTime","getTime","frameInterval","stepCount","stepIndex","inertiaMove","quartEaseOut","bool","t","b","getSelectedText","getSelectedIndex","PopPicker","pickerTemplate","layer","btns","bodyHtml","pickers","Array","pickerHtml","prependTo","getSelectItems","setData","popPicker","progressBar","id","level","progress","setProgress","setLevel","pro","getProgress","Refresh","_initBottomAndTop","iScrollOptions","onScrollMove","topEnable","topLoading","topPullOffset","topEl","_checkBottomLoading","goTop","onBeforeScrollEnd","_checkTopLoading","minScrollY","scrollTo","onRefresh","_checkContentLoading","bottomLoadFun","topLoadFun","initEnableTop","initEnableBottom","bottomLoadHtml","topLoadHtml","bottomAddLen","scrollEl","bottomEl","bottomPullOffset","bottomLoading","bottomEnable","enableBottom","enableTop","maxScrollY","_startBottomLoading","_startTopLoading","endBottomLoading","endTopLoading","enable","optoins","Tab","titleItems","bodyWrapper","contentItems","fixed","tab","classNames","ua","navigator","userAgent","match","android","ipad","ipod","iphone","androidChrome","os","osVersion","toLowerCase","indexOf","webView","osVersionArr","minimalUi","windowWidth","windowHeight","height","statusBar","screen","pixelRatio","devicePixelRatio","floor","major","isWeixin","test","join","attach","define","amd","jquery"],"mappings":"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","file":"ipu.min.js","sourcesContent":["(function () {\r\n    function setup(jQuery, iScroll, Hammer, FastClick) {\r\n        var ipu = {};\r\n\n// Carousel\r\n(function (ipu, $, iscroll) {\r\n// carouselSlt应该是唯一的,否则怎么支撑多个回调,如果用户不需要多个回调,也不主动调用,则可以,先不管吧???\r\n    function Carousel(slt, options) {\r\n        this.options = options = $.extend({}, this.defaultOpt, options);\r\n        this.el = $(slt).eq(0);  // 一次只能实例化一个\r\n        this.autoPlay = options.autoPlay;\r\n         this.hasIndicator = options.indicator;\r\n        this.callBack = options.callBack;\r\n        this.currentIndex = null;\r\n\r\n        this._init();\r\n        this.play();\r\n    }\r\n\r\n    Carousel.prototype = {\r\n        defaultOpt: {\r\n            index: null,            // 默认显示索引,未设置时先查找对就active,未找到时是0\r\n            autoPlay: false,       //  是否自动播放\r\n            duration: 3000,         //  自动播放延时\r\n            indicator: false,       // 是否生成指示器\r\n            indicatorPosition: 'center',  // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok\r\n            callBack: null           // 变更时回调函数\r\n        },\r\n        _init: function () {\r\n            var wrapper = $(\">.ui-carousel-wrapper\", this.el);\r\n            var carouselItems = $(\">li\", wrapper);\r\n            this.carouselItems = carouselItems;\r\n            this.size = carouselItems.size();\r\n            that = this;\r\n\r\n            if (this.options.index == null) {\r\n                var activeIndex = carouselItems.filter(\".ui-active\").index();\r\n                this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n            }\r\n\r\n            if (this.hasIndicator) {\r\n                this._addIndicator();\r\n            }\r\n            $(window).resize(function () {\r\n                that.refresh();\r\n            });\r\n            var scrollOpt = {\r\n                snap: \"li\",          // carousel效果\r\n                momentum: false,     // 移除惯性处理\r\n                scrollX: true,       // X轴移动\r\n                scrollY:false,\r\n                hScrollbar: false,   // 没有纵向滚动条\r\n                onScrollStart: function () {\r\n                    that._pause();\r\n                },\r\n                onTouchEnd: function () {\r\n                    // 后面优化\r\n                    /*\r\n                     if (that.iscroll.currPageX == that.size - 1) {\r\n                     that.show(that.size - 2);\r\n                     }\r\n                     */\r\n                },\r\n                onScrollEnd: function () {\r\n                    that._end();\r\n                }\r\n            };\r\n            this.iscroll = new iscroll(this.el.get(0), scrollOpt);\r\n            this.show(this.options.index, 0);\r\n        },\r\n        stop: function () {\r\n            this._pause();\r\n            this.autoPlay=false;\r\n        },\r\n        _pause: function () {\r\n            if (this.autoPlay && this.timeoutId) {\r\n                clearTimeout(this.timeoutId);\r\n                this.timeoutId = null;\r\n            }\r\n        },\r\n        prev: function () {\r\n            var index = this.currentIndex == 0 ? this.size - 1 : this.currentIndex - 1;\r\n            this.show(index);\r\n        },\r\n        next: function () {\r\n            var index = this.currentIndex == this.size - 1 ? 0 : this.currentIndex + 1;\r\n            this.show(index);\r\n        },\r\n        show: function (index, time) {\r\n            this._pause();\r\n            this.iscroll.scrollToPage(index, 0, time);\r\n        },\r\n        play: function () {\r\n            this.autoPlay=true;\r\n            this._play();\r\n        },\r\n        refresh: function () {\r\n            var that = this;\r\n            that.show(this.currentIndex);\r\n        },\r\n        _play: function () {\r\n            if (this.autoPlay && !this.timeoutId) {\r\n                var that = this;\r\n                this.timeoutId = setTimeout(function () {\r\n                    this.timeoutId = null;\r\n                    that.next();\r\n                }, that.options.duration);\r\n            }\r\n        },\r\n        _end: function () {\r\n            var currentIndex = this.iscroll.currPageX;\r\n            if (currentIndex != this.currentIndex) {\r\n                if (this.callBack) {\r\n                    this.callBack(currentIndex, this.currentIndex);\r\n                }\r\n                this.currentIndex = currentIndex;\r\n\r\n                if (this.hasIndicator) {\r\n                    this.indicatorIndexs.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n                }\r\n                this.carouselItems.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n            }\r\n            this._play();\r\n        },\r\n        _addIndicator: function () {\r\n            var html = \"\";\r\n            for (var i = 0; i < this.size; i++) {\r\n                html += \"<li></li>\";\r\n            }\r\n            html = \"<ul class='ui-carousel-indicator'>\" + html + \"</ul>\";\r\n            this.indicator = $(html).appendTo(this.el);\r\n            this.indicatorIndexs = $(\"li\", this.indicator);\r\n        },\r\n        destroy: function () {\r\n            // 自己怎么销毁,相关事件移除??\r\n            this.iscroll.destroy();\r\n        }\r\n    };\r\n\r\n    ipu.carousel =  function (slt, options) {\r\n        return new Carousel(slt, options);\r\n    };\r\n\r\n})(ipu || window, jQuery, iScroll);\r\n\n// dtPicker  此版本最大值与最小值,存在问题,当时间跨过一天时\r\n(function (ipu, $) {\r\n    var Picker = ipu.Picker;\r\n    var defaultPickerDate = new Date();   // 有些时间不齐全。如time,需要一个默认日期来运算\r\n\r\n\r\n    // show方法调用时,若没有值,则为当前值,还是有值就不变动了,点了确认按钮后,就不再变动了\r\n    // 日期范围的选择处理\r\n    function DtPicker(options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n\r\n        if(!Picker){\r\n            Picker = ipu.Picker;\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    DtPicker.prototype.defaultOptions = {\r\n        template: '<div class=\"ui-poppicker ui-dtpicker\">\\\r\n                        <div class=\"ui-poppicker-header\">\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-cancel\">取消</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-ok\">确定</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-clear\">清除</button>\\\r\n                        </div>\\\r\n                        <div class=\"ui-poppicker-title\">\\\r\n                            <label class=\"ui-dtpicker-y\"></label>\\\r\n                            <label class=\"ui-dtpicker-m\"></label>\\\r\n                            <label class=\"ui-dtpicker-d\"></label>\\\r\n                            <label class=\"ui-dtpicker-h\"></label>\\\r\n                            <label class=\"ui-dtpicker-mi\"></label>\\\r\n                        </div>\\\r\n                        <div>\\\r\n                        <div class=\"ui-poppicker-body\">\\\r\n                            <div class=\"ui-picker\" data-id=\"picker-y\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-m\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-d\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-h\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-mi\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                        </div>\\\r\n                    </div>',\r\n        buttons: ['取消', '确认', '清除'],\r\n        labels: ['年', '月', '日', '时', '分'],\r\n        type: 'datetime',       // date, time, datetime, hour, month\r\n        customData: {},  // 自定义数据\r\n        hasClear: false,    // 是否显示清除按钮\r\n        callBack: function () { // 选择数据时的回调函数\r\n        }\r\n        // beginDate: Date类型,或毫秒值\r\n        // endDate: 同上\r\n    };\r\n\r\n    DtPicker.prototype._init = function () {\r\n        var self = this;\r\n        this.mask = this.createMask();\r\n\r\n        var _picker = this.holder = $(this.options.template).appendTo(\"body\");\r\n        var ui = self.ui = {\r\n            picker: this.holder,\r\n            ok: $('.ui-poppicker-btn-ok', _picker),\r\n            cancel: $('.ui-poppicker-btn-cancel', _picker),\r\n            clear: $('.ui-poppicker-btn-clear', _picker),\r\n            buttons: $('.ui-poppicker-header .ui-btn', _picker),\r\n            labels: $('.ui-poppicker-title label', _picker)\r\n        };\r\n\r\n\r\n        ui.i = new Picker($('[data-id=\"picker-mi\"]', _picker), {listen: false}); // 分钟变更无需要处理\r\n\r\n        ui.h = new Picker($('[data-id=\"picker-h\"]', _picker), {         // 小时变更,有最小值或最大值,需要变更分钟\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null && (self.options.beginMonth || self.options.endMonth)) {\r\n                    self._createMinutes();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.d = new Picker($('[data-id=\"picker-d\"]', _picker), { //仅提供了beginDate时,触发day,hours,minutes的change\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null && (self.options.beginMonth || self.options.endMonth)) {\r\n                    self._createHours();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.m = new Picker($('[data-id=\"picker-m\"]', _picker), { // 月变更时,总要变更day\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null) {\r\n                    self._createDay();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.y = new Picker($('[data-id=\"picker-y\"]', _picker), { // 年发生变更,如果没有结束月,此时有所有的月,是不需要变更月的,只需要变更day\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index != null) {\r\n                    if (self.options.beginMonth || self.options.endMonth) {\r\n                        self._createMonth();\r\n                    } else {\r\n                        self._createDay();\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n\r\n\r\n\r\n        self._create();\r\n\r\n        var ui = self.ui;\r\n        //设定label\r\n        self._setLabels();\r\n        self._setButtons();\r\n        //设定类型\r\n        ui.picker.attr('data-type', this.options.type);\r\n\r\n        //设定默认值\r\n\r\n        self._setSelectedValue(this.options.value);\r\n\r\n        //防止滚动穿透 TODO:待确认情况\r\n        /* self.ui.picker.addEventListener($.EVENT_START, function (event) {\r\n         event.preventDefault();\r\n         }, false);\r\n         self.ui.picker.addEventListener($.EVENT_MOVE, function (event) {\r\n         event.preventDefault();\r\n         }, false);*/\r\n    };\r\n\r\n    DtPicker.prototype.getSelected = function () {\r\n        var self = this;\r\n        var ui = self.ui;\r\n        var type = self.options.type;\r\n        var selected = {\r\n            type: type,\r\n            y: ui.y.getSelectedItem(),\r\n            m: ui.m.getSelectedItem(),\r\n            d: ui.d.getSelectedItem(),\r\n            h: ui.h.getSelectedItem(),\r\n            i: ui.i.getSelectedItem(),\r\n            toString: function () {\r\n                return this.value;\r\n            }\r\n        };\r\n        switch (type) {\r\n            case 'datetime':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text;\r\n                break;\r\n            case 'date':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text;\r\n                break;\r\n            case 'time':\r\n                selected.value = selected.h.value + ':' + selected.i.value;\r\n                selected.text = selected.h.text + ':' + selected.i.text;\r\n                break;\r\n            case 'month':\r\n                selected.value = selected.y.value + '-' + selected.m.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text;\r\n                break;\r\n            case 'hour':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text;\r\n                break;\r\n        }\r\n        return selected;\r\n    };\r\n\r\n    DtPicker.prototype._setSelectedValue = function (value) {\r\n        var self = this;\r\n        var ui = self.ui;\r\n\r\n        if(!value){\r\n            if(this.options.type == 'time'){\r\n                value = '00:00';\r\n            }else{\r\n                value = defaultPickerDate.getFullYear()+'-'+(defaultPickerDate.getMonth()+1)+'-'+defaultPickerDate.getDate()+' '\r\n                    + defaultPickerDate.getHours() + ':' + defaultPickerDate.getMinutes();\r\n            }\r\n        }\r\n        var parsedValue = self._parseSetValue(value);\r\n\r\n        ui.y.setListen(true);\r\n        ui.m.setListen(false);\r\n        ui.d.setListen(false);\r\n        ui.h.setListen(false);\r\n        ui.i.setListen(false);\r\n        ui.y.setSelectedValue(parsedValue.y);\r\n\r\n        ui.m.setListen(true);\r\n        ui.m.setSelectedValue(parsedValue.m);\r\n\r\n        ui.d.setListen(true);\r\n        ui.d.setSelectedValue(parsedValue.d);\r\n\r\n        ui.h.setListen(true);\r\n        ui.h.setSelectedValue(parsedValue.h);\r\n\r\n        ui.i.setListen(true);\r\n        ui.i.setSelectedValue(parsedValue.i);\r\n\r\n        this.value = this.getSelected().value;\r\n    };\r\n\r\n    DtPicker.prototype.setSelectedValue = function (value) {\r\n        this._setSelectedValue(value);\r\n    };\r\n\r\n    DtPicker.prototype.isLeapYear = function (year) {\r\n        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);\r\n    };\r\n\r\n    DtPicker.prototype._inArray = function (array, item) {\r\n        for (var index in array) {\r\n            var _item = array[index];\r\n            if (_item === item) return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    DtPicker.prototype.getDayNum = function (year, month) {\r\n        var self = this;\r\n        if (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) {\r\n            return 31;\r\n        } else if (self._inArray([4, 6, 9, 11], month)) {\r\n            return 30;\r\n        } else if (self.isLeapYear(year)) {\r\n            return 29;\r\n        } else {\r\n            return 28;\r\n        }\r\n    };\r\n\r\n    DtPicker.prototype._fill = function (num) {\r\n        num = num.toString();\r\n        if (num.length < 2) {\r\n            num = 0 + num;\r\n        }\r\n        return num;\r\n    };\r\n\r\n    DtPicker.prototype._isBeginYear = function () {\r\n        return this.options.beginYear === parseInt(this.ui.y.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginMonth = function () {\r\n        return this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginDay = function () {\r\n        return this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginHours = function () {\r\n        return this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndYear = function () {\r\n        return this.options.endYear === parseInt(this.ui.y.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndMonth = function () {\r\n        return this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndDay = function () {\r\n        return this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndHours = function () {\r\n        return this._isEndDay() && this.options.endHours === parseInt(this.ui.h.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._createYear = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        //生成年列表\r\n        var yArray = [];\r\n        if (options.customData.y) {\r\n            yArray = options.customData.y;\r\n        } else {\r\n            var yBegin = options.beginYear;\r\n            var yEnd = options.endYear;\r\n            for (var y = yBegin; y <= yEnd; y++) {\r\n                yArray.push({\r\n                    text: y + '',\r\n                    value: y\r\n                });\r\n            }\r\n        }\r\n        ui.y.setItems(yArray);\r\n        //ui.y.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createMonth = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成月列表\r\n        var mArray = [];\r\n        if (options.customData.m) {\r\n            mArray = options.customData.m;\r\n        } else {\r\n            var m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1;\r\n            var maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12;\r\n            for (; m <= maxMonth; m++) {\r\n                var val = self._fill(m);\r\n                mArray.push({\r\n                    text: val,\r\n                    value: m\r\n                });\r\n            }\r\n        }\r\n        ui.m.setItems(mArray);\r\n        //ui.m.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createDay = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成日列表\r\n        var dArray = [];\r\n        if (options.customData.d) {\r\n            dArray = options.customData.d;\r\n        } else {\r\n            var d = self._isBeginMonth() ? options.beginDay : 1;\r\n            var maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.getSelectedValue()), parseInt(this.ui.m.getSelectedValue()));\r\n            for (; d <= maxDay; d++) {\r\n                var val = self._fill(d);\r\n                dArray.push({\r\n                    text: val,\r\n                    value: d\r\n                });\r\n            }\r\n        }\r\n        ui.d.setItems(dArray);\r\n        //current = current || ui.d.getSelectedValue();\r\n        //ui.d.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createHours = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        //生成时列表\r\n        var hArray = [];\r\n        if (options.customData.h) {\r\n            hArray = options.customData.h;\r\n        } else {\r\n            var h = self._isBeginDay() ? options.beginHours : 0;\r\n            var maxHours = self._isEndDay() ? options.endHours : 23;\r\n            for (; h <= maxHours; h++) {\r\n                var val = self._fill(h);\r\n                hArray.push({\r\n                    text: val,\r\n                    value: h\r\n                });\r\n            }\r\n        }\r\n        ui.h.setItems(hArray);\r\n        //ui.h.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createMinutes = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成分列表\r\n        var iArray = [];\r\n        if (options.customData.i) {\r\n            iArray = options.customData.i;\r\n        } else {\r\n            var i = self._isBeginHours() ? options.beginMinutes : 0;\r\n            var maxMinutes = self._isEndHours() ? options.endMinutes : 59;\r\n            for (; i <= maxMinutes; i++) {\r\n                var val = self._fill(i);\r\n                iArray.push({\r\n                    text: val,\r\n                    value: i\r\n                });\r\n            }\r\n        }\r\n        ui.i.setItems(iArray);\r\n        //ui.i.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._setLabels = function () {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        ui.labels.each(function (i, label) {\r\n            label.innerText = options.labels[i];\r\n        });\r\n    };\r\n\r\n    DtPicker.prototype._setButtons = function () {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        ui.cancel.text(options.buttons[0]);\r\n        ui.ok.text(options.buttons[1]);\r\n\r\n        if(options.hasClear){\r\n            ui.clear.text(options.buttons[2])\r\n        }else{\r\n            ui.clear.hide();\r\n        }\r\n\r\n        ui.buttons.each(function (index) {\r\n            $(this).click(function () {\r\n                self.clickCall(index);\r\n            })\r\n        })\r\n    };\r\n\r\n    // 解析设置的值,目前是字符串,完整日期格式 2012-12-12 12:21\r\n    DtPicker.prototype._parseSetValue = function (value) {\r\n        var now = defaultPickerDate;\r\n        var type = this.options.type;\r\n\r\n        var rs = {\r\n            y: now.getFullYear(),\r\n            m: now.getMonth()+1,\r\n            d: now.getDate(),\r\n            h: now.getHours(),\r\n            i: now.getMinutes()\r\n        };\r\n\r\n        if(value instanceof Date){\r\n            if( type == 'time'){\r\n                valu= +value.getHours()+\":\"+value.getMinutes();\r\n            }else{\r\n                value = value.getFullYear()+'-'+(value.getMonth()+1)+'-'+value.getDate()+ ' '\r\n                    +value.getHours()+\":\"+value.getMinutes();\r\n            }\r\n        }\r\n\r\n        var parts = value.replace(\":\", \"-\").replace(\" \", \"-\").split(\"-\");\r\n        for(var i=0, j=parts.length; i<j; i++){\r\n            parts[i] = parseInt(parts[i]);\r\n        }\r\n\r\n        if(type == 'datetime'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = parts[3];    //\r\n            rs.i = parts[4];\r\n        }else if(type == 'date'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = 0;    //\r\n            rs.i = 0;\r\n        }else if(type == 'time'){\r\n            rs.h = parts[0];    //\r\n            rs.i = parts[1];\r\n        }else if(type == 'hour'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = parts[3];    //\r\n            rs.i = 0;\r\n        }else if(type == 'month'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = 1;    //\r\n            rs.h = 0;    //\r\n            rs.i = 0;\r\n        }\r\n\r\n        return rs;\r\n    };\r\n\r\n    DtPicker.prototype._create = function () {\r\n        var self = this;\r\n        var options = this.options;\r\n        var now = defaultPickerDate;\r\n\r\n        var beginDate = options.beginDate;\r\n        if(beginDate){\r\n            beginDate = this._parseSetValue(beginDate);\r\n            options.beginYear = beginDate.y;\r\n            options.beginMonth = beginDate.m;\r\n            options.beginDay = beginDate.d;\r\n            options.beginHours = beginDate.h;\r\n            options.beginMinutes = beginDate.i;\r\n        }else if(options.type == 'time'){\r\n            options.beginYear =  now.getFullYear();\r\n            options.beginMonth = now.getMonth() + 1;\r\n            options.beginDay = now.getDate();\r\n            options.beginHours = 0;\r\n            options.beginMinutes = 0;\r\n        }else {\r\n            options.beginYear =  now.getFullYear() - 5;\r\n        }\r\n\r\n        var endDate = options.endDate;\r\n        if (endDate) { //设定了结束日期\r\n            endDate = this._parseSetValue(endDate);\r\n            options.endYear = endDate.y;\r\n            options.endMonth = endDate.m;\r\n            options.endDay = endDate.d;\r\n            options.endHours = endDate.h;\r\n            options.endMinutes = endDate.i;\r\n        }else if(options.type == 'time'){\r\n            options.endYear =  now.getFullYear();\r\n            options.endMonth = now.getMonth() + 1;\r\n            options.endDay = now.getDate();\r\n            options.endHours = 24;\r\n            options.endMinutes = 59;\r\n        }else {\r\n            options.endYear =  options.beginYear + 10 ;\r\n        }\r\n\r\n        //生成\r\n        self._createYear();\r\n        self._createMonth();\r\n        self._createDay();\r\n        self._createHours();\r\n        self._createMinutes();\r\n    };\r\n\r\n    // 更新选择框,更新当前值\r\n    DtPicker.prototype.setBeginDate = function (date) {\r\n        this.options.beginDate = date;\r\n        this._create();\r\n    };\r\n\r\n    // 判断最大最小值合理性\r\n    DtPicker.prototype.setEndDate = function (date) {\r\n        this.options.endDate = date;\r\n        this._create();\r\n    };\r\n\r\n    DtPicker.prototype.dispose = function () {\r\n        var self = this;\r\n        self.hide();\r\n        setTimeout(function () {\r\n            self.ui.picker.parentNode.removeChild(self.ui.picker);\r\n            for (var name in self) {\r\n                self[name] = null;\r\n                delete self[name];\r\n            }\r\n            self.disposed = true;\r\n        }, 300);\r\n    };\r\n\r\n    DtPicker.prototype.show = function (callBack) {\r\n        if (callBack) {\r\n            this.options.callBack = callBack;\r\n        }\r\n        this.mask.show();\r\n        this.setSelectedValue(this.value);\r\n        this.holder.addClass(\"ui-active\");\r\n    };\r\n\r\n    DtPicker.prototype.clickCall = function(index){\r\n        var self = this;\r\n        var sltDate = self.getSelected();\r\n        var rs = self.options.callBack.call(this , sltDate, index);\r\n        if (rs !== false) {\r\n            if(index == 1){ // 假定确认按钮在第二个位置,传回true则存储当前值\r\n                self.value = sltDate.value;\r\n            }else if(index == 2){\r\n                self.value = null;\r\n            }\r\n            self.hide();\r\n        }\r\n    };\r\n\r\n    DtPicker.prototype.hide = function () {\r\n        this.mask.close();\r\n        this.holder.removeClass(\"ui-active\");\r\n    };\r\n\r\n    // 应该移除callback参数,提取出业成一个工具方法\r\n    DtPicker.prototype.createMask = function(callback) {\r\n        var self = this;\r\n        var element = document.createElement('div');\r\n        element.classList.add(\"ui-picker-backup\");\r\n        //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n        element.addEventListener('click', function() {\r\n            self.clickCall(0);\r\n        });\r\n        var mask = [element];\r\n        mask._show = false;\r\n        mask.show = function() {\r\n            mask._show = true;\r\n            element.setAttribute('style', 'opacity:1');\r\n            document.body.appendChild(element);\r\n            return mask;\r\n        };\r\n        mask._remove = function() {\r\n            if (mask._show) {\r\n                mask._show = false;\r\n                element.setAttribute('style', 'opacity:0');\r\n                setTimeout(function() {\r\n                    var body = document.body;\r\n                    element.parentNode === body && body.removeChild(element);\r\n                }, 350);\r\n            }\r\n            return mask;\r\n        };\r\n        mask.close = function() {\r\n            if(mask._show){\r\n                if (callback) {\r\n                    if (callback() !== false) {\r\n                        mask._remove();\r\n                    }\r\n                } else {\r\n                    mask._remove();\r\n                }\r\n            }\r\n        };\r\n        return mask;\r\n    };\r\n\r\n    ipu.dtPicker = function(options){\r\n        return new DtPicker(options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\n// 支持非循环\r\n// size命名用的有点混淆。。\r\n// 不能支持元素隐藏时,使用百比分处理移动距离。。。?\r\n// 支持两个以内容显示\r\n// 支持类似snap实现\r\n// 理想是移除carousel.js的实现,用hammerCarousel.js实现所有相关功能\r\n\r\n(function (ipu, $, Hammer) {\r\n    function HammerCarousel(navSlt, options) {\r\n        this.options = options = $.extend({}, this.defaultOptions, options);\r\n        this.el = $(navSlt).get(0);\r\n        this._init();\r\n    }\r\n\r\n    // 直接替换掉了prototype对象,可能不是个好选择\r\n    HammerCarousel.prototype = {\r\n        defaultOptions: {\r\n            index: null,        // 默认显示第几个项,其实挺没用的,默认显示第一个,用户再调用一下显示第几个,作用一样现在。\r\n            autoPlay: false,    // 是否自动轮播\r\n            duration: 3000,     // 轮播间隔\r\n            indicator: false,  //是否生成指示器,即小点点\r\n            callBack: null,  // 轮播后回调函数\r\n            clickBack: null   // 各子项用户点击事件\r\n            //indicatorPosition: 'center',  // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok,参考humUI和mui\r\n        },\r\n        _init: function () {\r\n            this.wrapper = $(\">.ui-carousel-wrapper\", this.el);\r\n            this.carouselItems = $(\">li\", this.wrapper);\r\n\r\n\r\n            this.showSize = 1; // 假设一屏默认显示1个,所以做循环显示只需要复制一个子项\r\n            this.carouselItemSizes = [];\r\n            this.currentIndex = 0;\r\n            this.moveLen = 0;\r\n            this.lastItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来判断是复制项\r\n\r\n            // 这里假设每个元素都是相等的\r\n            this.carouselItems.slice(0, this.showSize).clone().appendTo(this.wrapper); // 如果做无限循环则要这样处理\r\n            this.size = this.carouselItems.size();\r\n\r\n            var self = this;\r\n            if(this.options.clickBack){\r\n                $(\">li\", this.wrapper).each(function (i) {\r\n                    $(this).click(function () {\r\n                        self.options.clickBack.call(this, i%self.size);\r\n                    });\r\n                })\r\n            }\r\n\r\n            this.sizeCount();\r\n            var that = this;\r\n\r\n            this.hammer = new Hammer.Manager(this.el); // 避免因为li里面的内容高度不够,而不能触发相关事件\r\n            this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_HORIZONTAL, threshold: 10}));\r\n            this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this.onPan, this));\r\n\r\n            $(window).resize(function () { // 在尺寸变化时,处理,是否可以考虑只在宽度变化时处理,横屏事件?\r\n                that.refresh();\r\n            });\r\n\r\n            if (this.options.index == null) {\r\n                var activeIndex = this.carouselItems.filter(\".ui-active\").index();\r\n                this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n            }\r\n\r\n            if (this.options.indicator) {\r\n                this._addIndicator();\r\n            }\r\n\r\n            this.show(this.options.index);\r\n        },\r\n        stop: function () {\r\n            this._pause();\r\n            this.options.autoPlay = false;\r\n        },\r\n        _pause: function () {\r\n            if (this.timeoutId) {\r\n                clearTimeout(this.timeoutId);\r\n                this.timeoutId = null;\r\n            }\r\n        },\r\n        prev: function () {\r\n            var index = this.currentIndex == 0 ? this.size - 1 : this.currentIndex - 1;\r\n            if (index == this.size - 1) {\r\n                this._show(this.size, false);\r\n                this.wrapper.width();\r\n            }\r\n            this._show(index, true);\r\n        },\r\n        next: function () {//下一张\r\n            var index = this.currentIndex == this.size ? 1 : this.currentIndex + 1;\r\n            if (index == 1) {\r\n                this._show(0, false);\r\n                this.wrapper.width();\r\n            }\r\n            this._show(index, true);\r\n        },\r\n        show: function (index) {//跳到指定索引处\r\n            // 用户指定跳时,在当前index==0时,涉及一个最近跳转处理,目前未处理,...不管了\r\n            if (index > this.size || index < 0) {\r\n                console.error(\"index超出范围!\");\r\n            } else {\r\n                this._show(index); // 默认追加动画\r\n            }\r\n        },\r\n        play: function () {\r\n            this.options.autoPlay = true;\r\n            this._play();\r\n        },\r\n        _play: function () {\r\n            if (this.options.autoPlay && !this.timeoutId) {\r\n                var that = this;\r\n                this.timeoutId = setTimeout(function () {\r\n                    that.timeoutId = null;//清空这个timeoutId,代表该次处理已经执行了\r\n                    that.next();\r\n                }, that.options.duration);\r\n            }\r\n        },\r\n        _end: function () {//移动结束时调用\r\n            var currentIndex = this.currentIndex;\r\n\r\n            if (this.options.callBack) {\r\n                this.options.callBack(currentIndex, this.lastItem);//返回当前索引,以及是滞最后一项参数\r\n            }\r\n\r\n            if (this.indicator) {\r\n                this.indicatorIndexs.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n            }\r\n            this.carouselItems.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n\r\n            this._play();//处理自动播放\r\n        },\r\n        _addIndicator: function () {\r\n            var html = \"\";\r\n            for (var i = 0; i < this.size; i++) {\r\n                html += \"<li></li>\";\r\n            }\r\n            html = \"<ul class='ui-carousel-indicator'>\" + html + \"</ul>\";\r\n            this.indicator = $(html).appendTo(this.el);\r\n            this.indicatorIndexs = $(\"li\", this.indicator);\r\n        },\r\n        sizeCount: function () {\r\n            this.wrapperSize = this.wrapper.outerWidth(true);\r\n            this.itemSize = this.carouselItems.eq(0).outerWidth(true);\r\n            this.mostSize = this.size * this.itemSize; // 宽度*数量\r\n            $(this.wrapper).removeClass(\"ui-carousel-animate\").width();\r\n\r\n            var that = this;\r\n            $(\">li\", this.wrapper).each(function (index, dom) { // 此处要注意,最后一个子项是后加进入的,要重新使用jquery处理一下,不能直接使用this.xx来处理\r\n                that.carouselItemSizes[index] = $(this).position().left;\r\n            });\r\n        },\r\n        refresh: function () {\r\n            if (this.wrapperSize != this.wrapper.outerWidth(true)) {\r\n                this.sizeCount();\r\n                this._show(this.currentIndex, true); //新的位置\r\n            }\r\n        },\r\n        move: function (moveLen) { // 类似mouseMove时的处理函数\r\n            this._pause();\r\n            $(this.wrapper).removeClass(\"ui-carousel-animate\");\r\n            var move = (this.moveLen - moveLen) % this.mostSize;\r\n            move = (move + this.mostSize) % this.mostSize;\r\n            this.displayMoveLen = move;\r\n\r\n            move = -move + \"px\";\r\n            $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n        },\r\n        _show: function (index, animate) { // 知道最终移动到的项时,调用\r\n            if (animate !== false) { // 默认值为true\r\n                animate = true;\r\n            }\r\n\r\n            this._pause();\r\n            $(this.wrapper).toggleClass(\"ui-carousel-animate\", animate);\r\n            this.currentIndex = index % this.size;\r\n            //this.currentIndex = index;\r\n            this.lastItem = index == this.size;\r\n            var move = this.carouselItemSizes[index];\r\n            this.moveLen = move;\r\n            move = -move + \"px\";\r\n\r\n            $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n            if (animate) {\r\n                this._end();\r\n            }\r\n        },\r\n        onPan: function (ev) {\r\n            var delta = ev.deltaX;\r\n            // pancancel与panend,有效的pan事件结束与无效的pan事件结束?\r\n            if (ev.type == 'panend' || ev.type == 'pancancel') {\r\n                var value = delta / this.itemSize;\r\n                var intValue = parseInt(Math.abs(value));               // 取整数\r\n                var decimal = Math.abs(value) % 1;                   // 取小数\r\n\r\n                if (decimal > 0.2) { // 滑动超过页面宽20%;\r\n                    intValue = intValue + 1;\r\n                }\r\n                if (value > 0) {\r\n                    intValue = -intValue;\r\n                }\r\n\r\n                var index = (this.currentIndex + intValue) % this.size;\r\n                index = (index + this.size) % this.size; // 因为可能是个负值,转换成正值\r\n\r\n                // 当前位移大于一个项的长度,这由move方法导致的,所以此时只能是最后一项在显示,所以要显示最后一项\r\n                if (index == 0 && this.displayMoveLen > this.itemSize) {\r\n                    index = this.size;\r\n                }\r\n                this._show(index);\r\n            } else if (ev.type == 'panmove'){\r\n                this.move(delta);\r\n            }\r\n        }\r\n    };\r\n\r\n    ipu.hammerCarousel = function (slt, options) {\r\n        return new HammerCarousel(slt, options);\r\n    };\r\n})(ipu || window, jQuery,  Hammer);\r\n\n(function (ipu, $) {\r\n    //$ extends\r\n    function __dealCssEvent(eventNameArr, callback) {\r\n        // console.log('__dealCssEvent');\r\n        var events = eventNameArr,\r\n            i, dom = this;// jshint ignore:line\r\n\r\n        function fireCallBack(e) {\r\n            /*jshint validthis:true */\r\n            if (e.target !== this) return;\r\n            callback.call(this, e);\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.off(events[i], fireCallBack);\r\n            }\r\n        }\r\n\r\n        if (callback) {\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.on(events[i], fireCallBack);\r\n            }\r\n        }\r\n    }\r\n\r\n    $.fn.transitionEnd = function (callback) {\r\n        // console.log('transitionEnd');\r\n        __dealCssEvent.call(this, ['webkitTransitionEnd', 'transitionend'], callback);\r\n        return this;\r\n    };\r\n\r\n\r\n\r\n    var _modalTemplateTempDiv = document.createElement('div');\r\n\r\n    var defaults = {\r\n        modalStack: true,\r\n        modalButtonOk: '确定',\r\n        modalButtonCancel: '取消',\r\n        modalPreloaderTitle: '加载中',\r\n        modalContainer: document.body ? document.body : 'body'\r\n    };\r\n\r\n    ipu.modalStack = [];\r\n\r\n    ipu.modalStackClearQueue = function () {\r\n        if (ipu.modalStack.length) {\r\n            (ipu.modalStack.shift())();\r\n        }\r\n    };\r\n    ipu.modal = function (params) {\r\n        params = params || {};\r\n        var modalHTML = '';\r\n        var buttonsHTML = '';\r\n        if (params.buttons && params.buttons.length > 0) {\r\n            for (var i = 0; i < params.buttons.length; i++) {\r\n                buttonsHTML += '<span class=\"ui-modal-button' + (params.buttons[i].bold ? ' ui-modal-button-bold' : '') + '\">' + params.buttons[i].text + '</span>';\r\n            }\r\n        }\r\n        var extraClass = params.extraClass || '';\r\n        var titleHTML = params.title ? '<div class=\"ui-modal-title\">' + params.title + '</div>' : '';\r\n        var textHTML = params.text ? '<div class=\"ui-modal-text\">' + params.text + '</div>' : '';\r\n        var afterTextHTML = params.afterText ? params.afterText : '';\r\n        var noButtons = !params.buttons || params.buttons.length === 0 ? 'ui-modal-no-buttons' : '';\r\n        var verticalButtons = params.verticalButtons ? 'ui-modal-buttons-vertical' : '';\r\n        modalHTML = '<div class=\"ui-modal ' + extraClass + ' ' + noButtons + '\"><div class=\"ui-modal-inner\">' + (titleHTML + textHTML + afterTextHTML) + '</div><div class=\"ui-modal-buttons ' + verticalButtons + '\">' + buttonsHTML + '</div></div>';\r\n\r\n        _modalTemplateTempDiv.innerHTML = modalHTML;\r\n\r\n        var modal = $(_modalTemplateTempDiv).children();\r\n\r\n        $(defaults.modalContainer).append(modal[0]);\r\n\r\n        // Add events on buttons\r\n        modal.find('.ui-modal-button').each(function (index, el) {\r\n            $(el).on('click', function (e) {\r\n                if (params.buttons[index].close !== false) ipu.closeModal(modal);\r\n                if (params.buttons[index].onClick) params.buttons[index].onClick(modal, e);\r\n                if (params.onClick) params.onClick(modal, index);\r\n            });\r\n        });\r\n        ipu.openModal(modal);\r\n        return modal[0];\r\n    };\r\n    ipu.alert = function (text, title, callbackOk) {\r\n        if (typeof title === 'function') {\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            buttons: [{text: defaults.modalButtonOk, bold: true, onClick: callbackOk}]\r\n        });\r\n    };\r\n    ipu.confirm = function (text, title, callbackOk, callbackCancel) {\r\n        if (typeof title === 'function') {\r\n            callbackCancel = arguments[2];\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            buttons: [\r\n                {text: defaults.modalButtonCancel, omodalButtonCancelnClick: callbackCancel},\r\n                {text: defaults.modalButtonOk, bold: true, onClick: callbackOk}\r\n            ]\r\n        });\r\n    };\r\n    ipu.prompt = function (text, title, callbackOk, callbackCancel) {\r\n        if (typeof title === 'function') {\r\n            callbackCancel = arguments[2];\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            afterText: '<input type=\"text\" class=\"ui-modal-text-input\">',\r\n            buttons: [\r\n                {\r\n                    text: defaults.modalButtonCancel\r\n                },\r\n                {\r\n                    text: defaults.modalButtonOk,\r\n                    bold: true\r\n                }\r\n            ],\r\n            onClick: function (modal, index) {\r\n                if (index === 0 && callbackCancel) callbackCancel($(modal).find('.ui-modal-text-input').val());\r\n                if (index === 1 && callbackOk) callbackOk($(modal).find('.ui-modal-text-input').val());\r\n            }\r\n        });\r\n    };\r\n\r\n    ipu.showPreloader = function (title) {\r\n        ipu.hidePreloader();\r\n        ipu.showPreloader.preloaderModal = ipu.modal({\r\n            title: title || defaults.modalPreloaderTitle,\r\n            text: '<div class=\"ui-preloader\"></div>'\r\n        });\r\n\r\n        return ipu.showPreloader.preloaderModal;\r\n    };\r\n    ipu.hidePreloader = function () {\r\n        ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);\r\n    };\r\n    ipu.showIndicator = function () {\r\n        if ($('.ui-preloader-indicator-modal')[0]) return;\r\n        $(defaults.modalContainer).append('<div class=\"ui-preloader-indicator-overlay\"></div><div class=\"ui-preloader-indicator-modal\"><span class=\"ui-preloader ui-preloader-white\"></span></div>');\r\n    };\r\n    ipu.hideIndicator = function () {\r\n        $('.ui-preloader-indicator-overlay, .ui-preloader-indicator-modal').remove();\r\n    };\r\n    // Action Sheet\r\n    ipu.actions = function (params) {\r\n        var modal, groupSelector, buttonSelector;\r\n        params = params || [];\r\n\r\n        if (params.length > 0 && !$.isArray(params[0])) {\r\n            params = [params];\r\n        }\r\n        var modalHTML;\r\n        var buttonsHTML = '';\r\n        for (var i = 0; i < params.length; i++) {\r\n            for (var j = 0; j < params[i].length; j++) {\r\n                if (j === 0) buttonsHTML += '<div class=\"ui-actions-modal-group\">';\r\n                var button = params[i][j];\r\n                var buttonClass = button.label ? 'ui-actions-modal-label' : 'ui-actions-modal-button';\r\n                if (button.bold) buttonClass += ' ui-actions-modal-button-bold';\r\n                if (button.color) buttonClass += ' ui-color-' + button.color;\r\n                if (button.bg) buttonClass += ' ui-bg-' + button.bg;\r\n                if (button.disabled) buttonClass += ' disabled';\r\n                buttonsHTML += '<span class=\"' + buttonClass + '\">' + button.text + '</span>';\r\n                if (j === params[i].length - 1) buttonsHTML += '</div>';\r\n            }\r\n        }\r\n        modalHTML = '<div class=\"ui-actions-modal\">' + buttonsHTML + '</div>';\r\n        _modalTemplateTempDiv.innerHTML = modalHTML;\r\n        modal = $(_modalTemplateTempDiv).children();\r\n        $(defaults.modalContainer).append(modal[0]);\r\n        groupSelector = '.ui-actions-modal-group';\r\n        buttonSelector = '.ui-actions-modal-button';\r\n\r\n        var groups = modal.find(groupSelector);\r\n        groups.each(function (index, el) {\r\n            var groupIndex = index;\r\n            $(el).children().each(function (index, el) {\r\n                var buttonIndex = index;\r\n                var buttonParams = params[groupIndex][buttonIndex];\r\n                var clickTarget;\r\n                if ($(el).is(buttonSelector)) clickTarget = $(el);\r\n                // if (toPopover && $(el).find(buttonSelector).length > 0) clickTarget = $(el).find(buttonSelector);\r\n\r\n                if (clickTarget) {\r\n                    clickTarget.on('click', function (e) {\r\n                        if (buttonParams.close !== false) ipu.closeModal(modal);\r\n                        if (buttonParams.onClick) buttonParams.onClick(modal, e);\r\n                    });\r\n                }\r\n            });\r\n        });\r\n        ipu.openModal(modal);\r\n        return modal[0];\r\n    };\r\n\r\n    //显示一个消息,会在2秒钟后自动消失\r\n    ipu.toast = function (msg, duration, extraclass) {\r\n        var $toast = $('<div class=\"ui-modal ui-toast ' + (extraclass || '') + '\">' + msg + '</div>').appendTo(document.body);\r\n        ipu.openModal($toast, function () {\r\n            setTimeout(function () {\r\n                ipu.closeModal($toast);\r\n            }, duration || 2000);\r\n        });\r\n    };\r\n    ipu.openModal = function (modal, cb) {\r\n        modal = $(modal);\r\n        var isModal = modal.hasClass('ui-modal'),\r\n            isNotToast = !modal.hasClass('ui-toast');\r\n        if ($('.ui-modal.ui-modal-in:not(.ui-modal-out)').length && defaults.modalStack && isModal && isNotToast) {\r\n            ipu.modalStack.push(function () {\r\n                ipu.openModal(modal, cb);\r\n            });\r\n            return;\r\n        }\r\n        var isPopup = modal.hasClass('ui-popup');\r\n        var isLoginScreen = modal.hasClass('ui-login-screen');\r\n        var isPickerModal = modal.hasClass('ui-picker-modal');\r\n        var isToast = modal.hasClass('ui-toast');\r\n        if (isModal) {\r\n            modal.show();\r\n            modal.css({\r\n                marginTop: -Math.round(modal.outerHeight() / 2) + 'px'\r\n            });\r\n        }\r\n        if (isToast) {\r\n            modal.css({\r\n                marginLeft: -Math.round(modal.outerWidth() / 2 / 1.185) + 'px' //1.185 是初始化时候的放大效果\r\n            });\r\n        }\r\n\r\n        var overlay;\r\n        if (!isLoginScreen && !isPickerModal && !isToast) {\r\n            if ($('.ui-modal-overlay').length === 0 && !isPopup) {\r\n                $(defaults.modalContainer).append('<div class=\"ui-modal-overlay\"></div>');\r\n            }\r\n            if ($('.ui-popup-overlay').length === 0 && isPopup) {\r\n                $(defaults.modalContainer).append('<div class=\"ui-popup-overlay\"></div>');\r\n            }\r\n            overlay = isPopup ? $('.ui-popup-overlay') : $('.ui-modal-overlay');\r\n        }\r\n\r\n        //Make sure that styles are applied, trigger relayout;\r\n        var clientLeft = modal[0].clientLeft;\r\n\r\n        // Trugger open event\r\n        modal.trigger('open');\r\n\r\n        // Picker modal body class\r\n        if (isPickerModal) {\r\n            $(defaults.modalContainer).addClass('ui-with-picker-modal');\r\n        }\r\n\r\n        // Classes for transition in\r\n        if (!isLoginScreen && !isPickerModal && !isToast) overlay.addClass('ui-modal-overlay-visible');\r\n        modal.removeClass('ui-modal-out').addClass('ui-modal-in').transitionEnd(function (e) {\r\n            if (modal.hasClass('ui-modal-out')) modal.trigger('closed');\r\n            else modal.trigger('opened');\r\n        });\r\n        // excute callback\r\n        if (typeof cb === 'function') {\r\n            cb.call(this);\r\n        }\r\n        return true;\r\n    };\r\n    ipu.closeModal = function (modal) {\r\n        modal = $(modal || '.ui-modal-in');\r\n        if (typeof modal !== 'undefined' && modal.length === 0) {\r\n            return;\r\n        }\r\n        var isModal = modal.hasClass('ui-modal'),\r\n            isPopup = modal.hasClass('ui-popup'),\r\n            isToast = modal.hasClass('ui-toast'),\r\n            isLoginScreen = modal.hasClass('ui-login-screen'),\r\n            isPickerModal = modal.hasClass('ui-picker-modal'),\r\n            removeOnClose = modal.hasClass('ui-remove-on-close'),\r\n            overlay = isPopup ? $('.ui-popup-overlay') : $('.ui-modal-overlay');\r\n        if (isPopup) {\r\n            if (modal.length === $('.ui-popup.ui-modal-in').length) {\r\n                overlay.removeClass('ui-modal-overlay-visible');\r\n            }\r\n        }\r\n        else if (!(isPickerModal || isToast)) {\r\n            overlay.removeClass('ui-modal-overlay-visible');\r\n        }\r\n        modal.trigger('close');\r\n\r\n        // Picker modal body class\r\n        if (isPickerModal) {\r\n            $(defaults.modalContainer).removeClass('ui-with-picker-modal');\r\n            $(defaults.modalContainer).addClass('ui-picker-modal-closing');\r\n        }\r\n\r\n        modal.removeClass('ui-modal-in').addClass('ui-modal-out').transitionEnd(function (e) {\r\n            if (modal.hasClass('ui-modal-out')) modal.trigger('closed');\r\n            else modal.trigger('opened');\r\n\r\n            if (isPickerModal) {\r\n                $(defaults.modalContainer).removeClass('ui-picker-modal-closing');\r\n            }\r\n            if (isPopup || isLoginScreen || isPickerModal) {\r\n                modal.removeClass('ui-modal-out').hide();\r\n                if (removeOnClose && modal.length > 0) {\r\n                    modal.remove();\r\n                }\r\n            }\r\n            else {\r\n                modal.remove();\r\n            }\r\n        });\r\n        if (isModal && defaults.modalStack) {\r\n            ipu.modalStackClearQueue();\r\n        }\r\n\r\n        return true;\r\n    };\r\n    function handleClicks(e) {\r\n        /*jshint validthis:true */\r\n        var clicked = $(this);\r\n        var url = clicked.attr('href');\r\n\r\n\r\n        //Collect Clicked data- attributes\r\n       /* var clickedData = clicked.dataset();\r\n\r\n        // Popup\r\n        var popup;\r\n        if (clicked.hasClass('ui-open-popup')) {\r\n            if (clickedData.popup) {\r\n                popup = clickedData.popup;\r\n            }\r\n            else popup = '.ui-popup';\r\n            ipu.popup(popup);\r\n        }\r\n        if (clicked.hasClass('ui-close-popup')) {\r\n            if (clickedData.popup) {\r\n                popup = clickedData.popup;\r\n            }\r\n            else popup = '.ui-popup.modal-in';\r\n            ipu.closeModal(popup);\r\n        }*/\r\n\r\n        // Close Modal\r\n        if (clicked.hasClass('ui-modal-overlay')) {\r\n            if ($('.ui-modal.ui-modal-in').length > 0 && defaults.modalCloseByOutside)\r\n                ipu.closeModal('.ui-modal.ui-modal-in');\r\n            if ($('.ui-actions-modal.ui-modal-in').length > 0 && defaults.actionsCloseByOutside)\r\n                ipu.closeModal('.ui-actions-modal.ui-modal-in');\r\n\r\n        }\r\n        if (clicked.hasClass('ui-popup-overlay')) {\r\n            if ($('.ui-popup.ui-modal-in').length > 0 && defaults.popupCloseByOutside)\r\n                ipu.closeModal('.ui-popup.modal-in');\r\n        }\r\n    }\r\n\r\n    $(document).on('click', ' .ui-modal-overlay, .ui-popup-overlay, .ui-close-popup, .ui-open-popup, .ui-close-picker', handleClicks);\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\r\n    NavBar.prototype.defaultOpt = {\r\n        animate: false,           // 默认有动画\r\n        contentSlt: \".ui-nav-content\",\r\n        callBack: function (currentIndex, lastIndex) { // currentIndex: 当前索引,lastIndex上一次索引(第一次时为null)\r\n        }\r\n    };\r\n\r\n    function NavBar(slt, options) {\r\n        this.options = $.extend({}, this.defaultOpt, options);\r\n        this.content = $(this.options.contentSlt);\r\n        this.nav = $(slt);\r\n        this.wrapper = $(\">ul\", this.content);\r\n        this.contents = $(\">li\", this.wrapper);\r\n        this.navs = $(\">a\", this.nav);\r\n        var me = this;\r\n\r\n        var activeIndex = this.navs.filter(\".ui-active\").index(); // 查找默认有active的索引\r\n        if (activeIndex == -1) {\r\n            activeIndex = this.contents.filter(\".ui-active\").index(); // 查找默认有active的索引\r\n        }\r\n        this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n\r\n        if (!this.options.animate) {\r\n            this.wrapper.addClass(\"ui-no-animation\")\r\n        }\r\n\r\n        this.navs.each(function (index, i) {\r\n            $(this).click(function () {\r\n                me.show(index);\r\n            });\r\n        });\r\n\r\n        this.lastIndex = null;\r\n        this.currentIndex = null;\r\n        me.show(this.options.index);\r\n    }\r\n\r\n    NavBar.prototype.show = function (index) {\r\n        if (this.currentIndex != index) {\r\n            var currentContent = $(this.contents[index]).addClass(\"ui-show\");\r\n\r\n            if (this.options.animate) {\r\n                if (this.lastIndex != null && this.lastIndex != index) {\r\n                    $(this.contents[this.lastIndex]).removeClass(\"ui-show\"); // 隐藏上上个元素\r\n                }\r\n\r\n                if (this.currentIndex != null) {        // 非第一次需要动画效果\r\n                    if (this.currentIndex < index) {   // 需要内容为往左走,显示右边的内容\r\n                        if (this.lastIndex != null && this.lastIndex < this.currentIndex) {  // 内容已经左走过了,则需要移除动画复原位置,再通过width()方法强制生效\r\n                            this.wrapper.addClass(\"ui-no-animation\").removeClass(\"ui-nav-content-right\").width(); // 可以强制刷新,默认jquery应该会将这些dom上的修改延时处理?\r\n                        }\r\n                    } else {\r\n                        if (this.lastIndex == null || this.lastIndex > this.currentIndex) { // 类似同上\r\n                            this.wrapper.addClass(\"ui-no-animation\").addClass(\"ui-nav-content-right\").width(); // 可以强制刷新不?\r\n                        }\r\n                    }\r\n                    this.wrapper.removeClass(\"ui-no-animation\").toggleClass(\"ui-nav-content-right\");\r\n                }\r\n            } else {\r\n                $(this.contents[this.currentIndex]).removeClass(\"ui-show\");\r\n            }\r\n\r\n            // 更新class,ui-active状态\r\n            $(this.contents[index]).addClass(\"ui-active\").siblings(\".ui-active\").removeClass(\"ui-active\");\r\n            $(this.navs[index]).addClass(\"ui-active\").siblings(\".ui-active\").removeClass(\"ui-active\");\r\n\r\n            this.lastIndex = this.currentIndex;\r\n            this.currentIndex = index;\r\n\r\n            if (this.options.callBack) {\r\n                this.options.callBack(this.currentIndex, this.lastIndex);\r\n            }\r\n        }\r\n    };\r\n\r\n    ipu.navBar = function (slt, options) {\r\n        return new NavBar(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\n    function __dealCssEvent(eventNameArr, callback) {\n        var events = eventNameArr,\n            i, dom = this;// jshint ignore:line\n\n        function fireCallBack(e) {\n            if (e.target !== this) return;\n            callback.call(this, e);\n            for (i = 0; i < events.length; i++) {\n                dom.off(events[i], fireCallBack);\n            }\n        }\n\n        if (callback) {\n            for (i = 0; i < events.length; i++) {\n                dom.on(events[i], fireCallBack);\n            }\n        }\n    }\n\n    $.fn.animationEnd = function (callback) {\n        __dealCssEvent.call(this, ['webkitAnimationEnd', 'animationend'], callback);\n        return this;\n    };\n\n    function submitForm(doc, url ,params){\n        var form = doc.createElement(\"form\");\n        form.action = url;\n        form.method = \"post\";\n        form.style.display = \"none\";\n\n        for (var x in params) {\n            var ele = doc.createElement(\"input\");\n            ele.type=\"hidden\";\n            ele.name = x;\n            ele.value =  params[x];\n            form.appendChild(ele);\n        }\n\n        doc.body.appendChild(form);\n        form.submit();\n    }\n\n    var page = {};\n\n    page.options = {     // 那个窗口执行open,默认父窗口\n        target: window.parent, // 默认执行父窗口\n        backIndex: 1,    // 默认回退一页\n        closeIndex: 1,   // 默认关闭最近一个页面\n        params:{},        // post的默认参数\n        animate: true,     // 是否动画\n        callBack:function () { // 事件回调\n\n        }\n    };\n\n    var maps = {};\n    var pageNo = 0;\n\n    // 当前页面加载,针对顶层父窗口\n    page.openPage = function (url, options) {\n        var overTime = false; // 超过100ms豪秒\n        var transEnd = false; // 动画结束\n\n        if(options.animate) {\n            var animateClass = \" ui-anim ui-slideRightIn \";\n            ipu.showPreloader('正在加载中');\n            setTimeout(function () {\n                overTime = true;\n                if (transEnd) {\n                    ipu.hidePreloader();\n                }\n            }, 50);  // 保证最少显示100ms,不出现闪现的情况\n        }\n\n        var nowPageNo ='pageNo-'+(pageNo++);\n        maps[nowPageNo] = url;\n        var newPage = $(\"<div class='ui-page' id='\"+nowPageNo+\"'><iframe class='ui-page-iframe' src='\"+url+\"'></iframe></div>\")\n\n        function end() {\n            if(!overTime){\n                transEnd = true;\n            }else{\n                ipu.hidePreloader();\n            }\n            newPage.removeClass(animateClass);\n            newPage.siblings(\".ui-show\").removeClass('ui-show');\n            if(options.callBack){\n                options.callBack();\n            }\n        }\n\n        $(\".ui-page-iframe\", newPage).one('load', function () {\n            if(options.animate){\n                newPage.addClass(\"ui-show\"+animateClass).animationEnd(end);\n            }else{\n                newPage.addClass(\"ui-show\");\n                end();\n            }\n        });\n        newPage.appendTo(\".ui-pages\");\n    };\n\n    page.postPage = function (url, options) {\n        ipu.showPreloader('正在加载中');\n        var nowPageNo ='pageNo-'+(pageNo++);\n        maps[nowPageNo] = url;\n        var newPage = $(\"<div class='ui-page' id='\"+nowPageNo+\"'><iframe class='ui-page-iframe' src=''></iframe></div>\");\n\n        var overTime = false; // 超过100ms豪秒\n        var transEnd = false; // 动画结束\n\n        if(options.animate){\n            setTimeout(function () {\n                overTime = true;\n                if(transEnd){\n                    ipu.hidePreloader();\n                }\n            }, 80);  // 保证最少显示100ms,不出现闪现的情况\n        }\n\n        $(\".ui-page-iframe\", newPage).one('load', function () { // 第一次为初始化\n            newPage.addClass(\"ui-show ui-anim ui-slideRightIn\").animationEnd(function (e) {\n                if(!overTime){\n                    transEnd = true;\n                }else{\n                    ipu.hidePreloader();\n                }\n                newPage.removeClass(\"ui-anim ui-slideRightIn\");\n                newPage.siblings(\".ui-show\").removeClass('ui-show');\n                if(options.callBack){\n                    options.callBack();\n                }\n            });\n        });\n        newPage.appendTo(\".ui-pages\");\n        var pageDoc =  $(\".ui-page-iframe\", newPage)[0].contentDocument;\n        submitForm(pageDoc, url, options.params);\n    };\n\n    // 当前页面后退,针对顶层父窗口\n    page.backPage = function (options) {\n        var backIndex = options.backIndex;\n        var page = null;\n        var nowPage = $(\".ui-page.ui-show\");\n\n        if(backIndex == 0){\n            page = nowPage.prevAll(\".ui-page-main\");\n        }else {\n            var prevPage = nowPage.prevAll(\".ui-page\");\n            page= $(prevPage[options.backIndex - 1]);\n        }\n        page.addClass(\"ui-show\"); //显示前一个\n\n        nowPage.removeClass(\"ui-active\").addClass(\"ui-anim ui-slideRightOut\").animationEnd(function () {\n            $(this).removeClass(\"ui-show ui-anim ui-slideRightOut\");\n            page.nextAll(\".ui-page\").remove();\n            var iframe = $(\".ui-page-iframe\", page);\n            var nowDoc;\n\n            if(iframe.size() == 0){ // 找不到子窗口就当是返回了主页面,在当前窗口触发\n                nowDoc = window.document;\n            }else{\n                nowDoc = iframe[0].contentDocument;\n            }\n\n            var evt = nowDoc.createEvent('Event');\n            evt.initEvent('ipuUIPageBack', true, true);\n            if(options.data){\n                evt.data = options.data;\n            }\n            nowDoc.body.dispatchEvent(evt);\n            if(options.callBack){\n                options.callBack();\n            }\n        });\n    };\n\n    // 往前关闭窗口\n    page.closePage = function (options) {\n        var closePage = options.closeIndex - 1;\n        var prevPage = $(\".ui-page.ui-show\").prevAll(\".ui-page\");\n        $(prevPage[closePage]).remove();\n        if(options.callBack){\n            options.callBack();\n        }\n    };\n\n    // 调用父窗口打开页面\n    page.open = function (url, options) {\n        options = $.extend({}, this.options, options);\n        options.target.ipu.page.openPage(url, options);\n    };\n\n    // post方法\n    page.post = function (url, options) {\n        options = $.extend({}, this.options, options);\n        options.target.ipu.page.postPage(url, options);\n    };\n\n    // 调用父窗口,回退\n    page.back = function (options) {\n        options = $.extend({}, this.options, options);\n        options.target.ipu.page.backPage(options);\n    };\n\n    // 返回首页\n    page.backHome = function (options) {\n        options = options || {};\n        options.backIndex = 0;\n        page.back(options);\n    };\n\n    // 子窗口,待确认\n    page.close = function (options) {\n        options = $.extend({}, this.options, options);\n        options.target.ipu.page.closePage(options);\n    };\n\n    // 添加回调事件\n    page.onBack = function (back) {\n        $(\"body\").on('ipuUIPageBack', function (e) {\n            var data = e.originalEvent.data;\n            back(data);\n        });\n    };\n\n    // 提供一个关闭一群窗口的方法\n    ipu.page = page;\n})(ipu || window, jQuery);\n\n// picker\r\n(function (ipu, $, Hammer) {\r\n    var showItemSize = 9;   // 显示的子项数量,\r\n    var r = 90;             // 计算旋转的圆半径,结果应该缩小,是为了r不要距离容器太近\r\n    var itemAngle = 180 / showItemSize;   // 每项对应的角度是 180/9 = 20\r\n    var maxExceed = itemAngle;         // 滚动时允许超出边界的最大角度\r\n    // itemHeight = 40px;       // 需要给出r=89是怎么计算出来的,是根据 40/2/Math.tan(40/2/180*Math.PI)=113,直接太大不好看\r\n\r\n    function Picker(slt, options) {\r\n        this.el = $(slt)[0];\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this._init();\r\n    }\r\n\r\n    // 默认参数\r\n    Picker.prototype.defaultOptions = {\r\n        onChange: function () {       // 子项选中事件\r\n        },\r\n        listen: true,                  // 默认已开记监听变化\r\n        data: []\r\n    };\r\n\r\n    Picker.prototype._init = function () {\r\n        var self = this;\r\n        this.wrap = $(\">ul\", this.el);\r\n        this.index = null;\r\n        this.listen = !!this.options.listen;\r\n\r\n        this.beginAngle = 0;\r\n        this.beginExceed = this.beginAngle - maxExceed;       // 最小角度值\r\n        this.stopInertiaMove = false;\r\n        this.lastAngle = null; // 保存滑动前的角度\r\n        this.empty = this.options.data.length == 0;\r\n\r\n        // 如果是ios,则ul的旋转中心点,有变化\r\n        if(ipu.device.ios){\r\n            this.wrap.css(\"transform-origin\", \"center center \"+r+\"px\"); //如果是ios,要变更旋转的中心点\r\n        }\r\n\r\n        this.hammer = new Hammer.Manager(this.el);\r\n        this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL, threshold: 5}));\r\n        this.hammer.add(new Hammer.Press({threshold: 4}));  //\r\n        this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this._onPan, this));\r\n\r\n        this.hammer.on(\"press pressup\", function (e) {  // 如果用户点击了,是停止自动滚动\r\n           // console.log('press');\r\n            if(this.empty){\r\n                return ;\r\n            }\r\n\r\n            self.stopInertiaMove = true;\r\n            if (e.type == 'pressup') {\r\n                self.endScroll();\r\n            }\r\n        });\r\n\r\n        this.setItems(this.options.data);\r\n    };\r\n\r\n    Picker.prototype.setItems = function (data, textName) {\r\n        this.wrap.empty(); // 清空历史数据\r\n        this.data = data = data || [];\r\n        this.empty = data.length == 0; // 数据是否为空\r\n\r\n        this.newData = true; // 表示设置了新数据,触发change回调,但第一次设置时,不需要触发\r\n        var self = this;\r\n        var lis = \"\";\r\n        textName = textName || 'text';\r\n\r\n        for (var i = 0, j = data.length; i < j; i++) {\r\n            lis = lis + \"<li>\" + data[i][textName] + \"</li>\";\r\n        }\r\n\r\n        $(lis).appendTo(this.wrap);\r\n\r\n        this.items = $(\">li\", this.wrap);\r\n        this.itemsSize = this.items.size();\r\n\r\n        this.endAngle = (this.empty ? 0 : this.itemsSize - 1) * itemAngle;\r\n        this.endExceed = this.endAngle + maxExceed;  // 最大旋转角度值\r\n\r\n        // 初始化各子项角度\r\n        this.items.each(function (i) {\r\n            $(this).css({\r\n                \"transform\": \"translateZ(\" + r + \"px) rotateX(-\" + (i * itemAngle) + \"deg)\",\r\n                \"transform-origin\": \"center center -\" + r + \"px\"\r\n            });\r\n            $(this).click(function () {\r\n                console.log('click');\r\n                self.stopInertiaMove = true;\r\n                self.setAngle(i * itemAngle, true);\r\n            })\r\n        });\r\n\r\n        var newAngle ;\r\n        if(this.empty || this.index == null){\r\n            newAngle = 0;\r\n        }else {\r\n            if(this.index > this.itemsSize - 1){\r\n                newAngle = (this.itemsSize - 1) * itemAngle;\r\n            }else{\r\n                newAngle = this.index * itemAngle;\r\n            }\r\n        }\r\n        this.setAngle(newAngle, true);\r\n\r\n        /*if (this.index !== null) { // 当前已经旋转则,保留当前的索引\r\n         if (this.index > this.itemsSize - 1 && !this.empty) {\r\n         this.index = this.itemsSize - 1;\r\n         }\r\n         this.setAngle(this.index * itemAngle, true);\r\n         } else { // 第一次初始数据,不触发change事件\r\n         this.index = 0;     // 被调用后,不能再使用null值了\r\n         this.setAngle(0, false); // 第一次设置初始化时,不触发change事件\r\n         }*/\r\n    };\r\n\r\n    Picker.prototype._onPan = function (ev) {\r\n        if(this.empty){\r\n            return ;\r\n        }\r\n\r\n        //console.log(ev.deltaX + \"==\"+ ev.deltaY);\r\n        if (ev.type == 'panstart') { // 好像一定要移动才有startg事件\r\n            self.stopInertiaMove = true;\r\n            this.lastAngle = this.angle;\r\n            this.wrap.addClass(\"ui-noanimate\");    // 移除动画\r\n            this.stopInertiaMove = true; //  停止自动减速滚动\r\n           // console.log('panstart');\r\n\r\n        } else if (ev.type == 'panmove') {\r\n            var moveAngle = this.calcAngle(ev.deltaY);\r\n            var newAngle = this.lastAngle - moveAngle;   //最新的角度\r\n            //console.log('=='+newAngle);\r\n            // 一个可以转动的最小值和最大值过滤\r\n            if (newAngle < this.beginExceed) {\r\n                newAngle = this.beginExceed;\r\n            }\r\n            if (newAngle > this.endExceed) {\r\n                newAngle = this.endExceed;\r\n            }\r\n            this.setAngle(newAngle);\r\n\r\n        } else { // end or cancel事件\r\n            // console.log('end or cancel:' + ev.type);\r\n            var v = ev.overallVelocityY;    // 滑动的速度\r\n            var dir = v > 0 ? -1 : 1; //加速度方向\r\n            var deceleration = dir * 0.0006 * -1;\r\n            var duration = Math.abs(v / deceleration); // 速度消减至0所需时间\r\n            var dist = v * duration / 2; //最终移动多少\r\n\r\n            var startAngle = this.angle;\r\n            var distAngle = -this.calcAngle(dist);\r\n           //  console.log(\"dist=\" + dist + \", distAngle\" + distAngle);\r\n\r\n            //----\r\n            var srcDistAngle = distAngle;\r\n            if (startAngle + distAngle < this.beginExceed) {\r\n                distAngle = this.beginExceed - startAngle;\r\n                duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n            }\r\n            if (startAngle + distAngle > this.endExceed) {\r\n                distAngle = this.endExceed - startAngle;\r\n                duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n            }\r\n\r\n            if (distAngle == 0) {\r\n                this.endScroll();\r\n                return;\r\n            }\r\n            this.scrollDistAngle(startAngle, distAngle, duration);\r\n        }\r\n    };\r\n\r\n    // 计算移动的角度,转动的角度,就是移动的距离对应相关圆周\r\n    // 2*r*PI = 360,  angle = 360*c/(2*r*PI)\r\n    var ca = 360 / (2 * r * Math.PI);\r\n    Picker.prototype.calcAngle = function (c) {\r\n        return c * ca;\r\n    };\r\n\r\n    // endScroll 是否为结束的滚动结束,滚动结束需要调用结束事件\r\n    Picker.prototype.setAngle = function (newAngle, endScroll) {\r\n        this.angle = newAngle; // 存储最新值\r\n        this.wrap.css(\"transform\", \"perspective(1000px) rotateY(0deg) rotateX(\" + newAngle + \"deg)\");\r\n        this.calcItemVisable(newAngle);\r\n\r\n        if (endScroll) {\r\n            var index = newAngle / itemAngle;\r\n            var oldIndex = this.index;\r\n            this.index = this.empty ? null : index; // 这里可以做一个判断,如果是empty,则index值可以不改变\r\n\r\n            // 这个地方要判断下,数据更新或索引更新都要触发\r\n            if (oldIndex != index || this.newData) {\r\n                this.newData = false;\r\n               // console.log('change');\r\n                if (this.options.onChange && this.listen) {\r\n                    // console.log('changed call');\r\n                    this.options.onChange(this.getSelectedItem(), this.index, oldIndex, this.newData);\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    // 计算子项的显示情况\r\n    Picker.prototype.calcItemVisable = function (angle) {\r\n        this.items.each(function (index) {\r\n            var difference = Math.abs(index * itemAngle - angle);\r\n\r\n            if (difference < itemAngle / 2) {\r\n                $(this).addClass(\"ui-highlight ui-visible\");\r\n            } else if (difference >= (90 - itemAngle / 2)) { // 距离不能超过90度\r\n                $(this).removeClass(\"ui-highlight ui-visible\");\r\n            } else {\r\n                $(this).addClass(\"ui-visible\").removeClass(\"ui-highlight\");\r\n            }\r\n        });\r\n    };\r\n\r\n    // 设置最后回归位置\r\n    Picker.prototype.endScroll = function () {\r\n        this.wrap.removeClass(\"ui-noanimate\");\r\n        var endAngle;\r\n\r\n        if (this.angle < this.beginAngle) {\r\n            endAngle = this.beginAngle;\r\n        } else if (this.angle > this.endAngle) {\r\n            endAngle = this.endAngle;\r\n        } else {\r\n            var index = parseInt((this.angle / itemAngle).toFixed(0));\r\n            endAngle = (itemAngle * index);\r\n        }\r\n\r\n        this.setAngle(endAngle, true);\r\n    };\r\n\r\n    // 进行惯性滚动\r\n    Picker.prototype.scrollDistAngle = function (startAngle, distAngle, duration) {\r\n        var self = this;\r\n        var nowTime = new Date().getTime();\r\n        this.stopInertiaMove = false;\r\n        duration = 1 * duration; // 滚动时长控制修改\r\n\r\n        // hammer调用的惯性函数\r\n        (function (nowTime, startAngle, distAngle, duration) {\r\n            var frameInterval = 13;\r\n            var stepCount = duration / frameInterval;\r\n            var stepIndex = 0;\r\n\r\n            (function inertiaMove() {\r\n                if (self.stopInertiaMove) return;\r\n                var newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\r\n                self.setAngle(newAngle);\r\n                stepIndex++;\r\n\r\n                if (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\r\n                    self.endScroll();\r\n                    return;\r\n                }\r\n\r\n                setTimeout(inertiaMove, frameInterval);\r\n            })();\r\n\r\n        })(nowTime, startAngle, distAngle, duration);\r\n    };\r\n\r\n    Picker.prototype.setListen = function (bool) {\r\n        this.listen = !!bool;\r\n    };\r\n\r\n    Picker.prototype.quartEaseOut = function (t, b, c, d) {\r\n        return -c * ((t = t / d - 1) * t * t * t - 1) + b;\r\n    };\r\n\r\n    Picker.prototype.setSelectedValue = function (value) {\r\n        var self = this;\r\n        for (var index in self.data) {\r\n            var item = self.data[index];\r\n            if (item.value == value) {\r\n                self.setAngle(index* itemAngle, true);\r\n                return;\r\n            }\r\n        }\r\n    };\r\n\r\n    // 获取当前选中的值\r\n    Picker.prototype.getSelectedItem = function () {\r\n        return this.empty ? {}: this.data[this.index];\r\n    };\r\n\r\n    Picker.prototype.getSelectedValue = function () {\r\n        return this.getSelectedItem().value;\r\n    };\r\n\r\n    Picker.prototype.getSelectedText = function () {\r\n        return this.getSelectedItem().text;\r\n    };\r\n\r\n    Picker.prototype.getSelectedIndex = function () {\r\n        return this.index;\r\n    };\r\n\r\n    ipu.Picker = Picker;\r\n\r\n})(ipu || window, jQuery, Hammer);\r\n\n// popPicker\r\n(function (ipu, $) {\r\n    var Picker = ipu.Picker;\r\n\r\n    function PopPicker(options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        if(!Picker){\r\n            Picker = ipu.Picker;\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    PopPicker.prototype.defaultOptions = {\r\n        template: '<div class=\"ui-poppicker\">\\\r\n                        <div class=\"ui-poppicker-header\">\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-cancel\">取消</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-ok\">确定</button>\\\r\n                        </div>\\\r\n                        <div class=\"ui-poppicker-body\">\\\r\n                        </div>\\\r\n                    </div>',\r\n        pickerTemplate: '<div class=\"ui-picker\">\\\r\n                            <div class=\"ui-picker-selectbox\"></div>\\\r\n                            <ul></ul>\\\r\n                          </div>',\r\n        data: [],    // 数据\r\n        layer: 1,   // 数据层级\r\n        btns: ['取消', '确认'],\r\n        callBack: function () { // 选择数据时的回调函数\r\n\r\n        }\r\n    };\r\n\r\n    PopPicker.prototype._init = function () {\r\n        this.holder = $(this.options.template).appendTo(\"body\");\r\n        var bodyHtml = $(\".ui-poppicker-body\", this.holder);\r\n\r\n        var layer = this.options.layer;\r\n        var width = (100 / layer) + \"%\";\r\n        this.pickers = new Array(layer);\r\n        var self = this;\r\n        var pickerHtml;\r\n        this.mask = this.createMask();\r\n\r\n        // 先初始化最底层picerk,再上面来\r\n        for (var i = layer -1; i >=0; i--) {\r\n            pickerHtml = $(this.options.pickerTemplate).prependTo(bodyHtml).css({width: width});\r\n\r\n            this.pickers[i] = new  Picker(pickerHtml, {\r\n                onChange: (function (i) {\r\n                    return function (item, index) { // 更新底部的值\r\n                        if (i != layer - 1) {\r\n                            self.pickers[i + 1].setItems(item.data);\r\n                        }\r\n                    };\r\n                })(i)\r\n            });\r\n        }\r\n\r\n        $(\".ui-poppicker-btn-ok\", this.holder).click(function () {\r\n            var rs = self.getSelectItems();\r\n            if (self.options.callBack(rs) !== false) {\r\n                self.hide();\r\n            }\r\n        }).text(this.options.btns[1]);\r\n\r\n        $(\".ui-poppicker-btn-cancel\", this.holder).click(function () {\r\n            self.hide();\r\n        }).text(this.options.btns[0]);\r\n    };\r\n\r\n    PopPicker.prototype.setData = function (data) {\r\n        this.pickers[0].setItems(data);\r\n    };\r\n\r\n    PopPicker.prototype.show = function (callBack) {\r\n        if (callBack) {\r\n            this.options.callBack = callBack;\r\n        }\r\n        this.mask.show();\r\n        this.holder.addClass(\"ui-active\");\r\n    };\r\n\r\n    PopPicker.prototype.hide = function () {\r\n        this.mask.close();\r\n        this.holder.removeClass(\"ui-active\");\r\n    };\r\n\r\n    // 获取相关值\r\n    PopPicker.prototype.getSelectItems = function () {\r\n        if (this.options.layer == 1) {\r\n            return this.pickers[0].getSelectedItem();\r\n        } else {\r\n            var rs = [];\r\n            for (var i = 0; i < this.options.layer; i++) {\r\n                rs.push(this.pickers[i].getSelectedItem());\r\n            }\r\n            return rs;\r\n        }\r\n    };\r\n\r\n    // 应该移除callback参数,提取出业成一个工具方法\r\n    PopPicker.prototype.createMask = function(callback) {\r\n        var self = this;\r\n        var element = document.createElement('div');\r\n        element.classList.add(\"ui-picker-backup\");\r\n        //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n        element.addEventListener('click', function() {\r\n            self.hide();\r\n        });\r\n        var mask = [element];\r\n        mask._show = false;\r\n        mask.show = function() {\r\n            mask._show = true;\r\n            element.setAttribute('style', 'opacity:1');\r\n            document.body.appendChild(element);\r\n            return mask;\r\n        };\r\n        mask._remove = function() {\r\n            if (mask._show) {\r\n                mask._show = false;\r\n                element.setAttribute('style', 'opacity:0');\r\n                setTimeout(function() {\r\n                    var body = document.body;\r\n                    element.parentNode === body && body.removeChild(element);\r\n                }, 350);\r\n            }\r\n            return mask;\r\n        };\r\n        mask.close = function() {\r\n            if(mask._show){\r\n                if (callback) {\r\n                    if (callback() !== false) {\r\n                        mask._remove();\r\n                    }\r\n                } else {\r\n                    mask._remove();\r\n                }\r\n            }\r\n        };\r\n        return mask;\r\n    };\r\n\r\n    ipu.popPicker = function (options) {\r\n        return new PopPicker(options);\r\n    };\r\n\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\r\n\r\n    /**\r\n     *进度条\r\n     */\r\n    function progressBar(id, options) {\r\n        this.id = id;\r\n        this.level = options.level;\r\n        this.progress = options.progress;\r\n        this.progressBar = $(id).eq(0);\r\n\r\n        if (options.progress != null) {\r\n            this.setProgress(this.progress);\r\n        }\r\n        if (options.level != null) {\r\n            this.setLevel(this.level);\r\n        }\r\n    }\r\n\r\n    progressBar.prototype.setProgress = function (pro) {\r\n        if (pro < 0 || pro > 100) return;\r\n\r\n        $(this.progressBar.find(\".ipu-progressbar\")).css(\"transform\", \"translate3d(\" + (-(100 - pro)) + \"%, 0px, 0px)\");\r\n        this.progress = pro;\r\n    };\r\n\r\n    progressBar.prototype.getProgress = function () {\r\n        return this.progress;\r\n    };\r\n\r\n    progressBar.prototype.setLevel = function (level) {\r\n        if (level == \"default\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-hightlight ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progress\");\r\n        } else if (level == \"success\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-highlight ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-success\");\r\n        } else if (level == \"highlight\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-highlight\");\r\n        } else if (level == \"warning\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-highlight\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-warning\");\r\n        }\r\n    };\r\n\r\n    ipu.progressBar = function (slt, options) {\r\n        return new progressBar(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $, iScroll) {\r\n\r\n    // 扩展参数,iscroll组件的参数选项\r\n    // 扩展参数,用户直接在页面上自定好,顶端和底部加载html\r\n    // 设置上下条件长度,或计算函数\r\n    // 处理resize的问题,用户主动调用refresh??\r\n    // 底部启用或停用时,应该刷新组件iscroll高度\r\n    // 顶部正在加载时,自动停止底端加载状态,停用底部加载,停用底部加载时,可以不隐藏,变性成显示不见,或者隐藏,然后修改iscroll参数\r\n\r\n    Refresh.prototype.defaultOptions = {\r\n        bottomLoadFun: null,           // 底部加载处理函数\r\n        topLoadFun: null,               // 顶部加载处理函数\r\n        initEnableTop: true,            // 初始时启用刷新,有时用户并不想启用\r\n        initEnableBottom: true,         // 初始时启用加载更多,用时用户并不想启用\r\n        bottomLoadHtml: '<div class=\"ui-refresh-bottom\"><span class=\"ui-refresh-loading\"></span></div>',  // 默认底部加载显示内容\r\n        topLoadHtml: '<div class=\"ui-refresh-top\"><span class=\"ui-refresh-loading\"></span><div class=\"ui-refresh-arrow\"></div></div>',\r\n                // 默认顶部加载显示内容,最上层节点class有下面三个阶段变化\r\n                // 默认阶段,不是顶部加载状态时,且拖动时未达到加载距离,无特殊class,移除ui-refresh-top-loading\r\n                // 拖动达到加载距离,则增加class:ui-refresh-toload\r\n                // 加载中,则增加class:ui-refresh-top-loading,移除class:ui-refresh-toload\r\n        bottomAddLen: 0,  // 底部提前加载距离,单位px\r\n        iScrollOptions:{} // 主要是用来接收外面一些函数,不能传递回调的相关函数如refresh,也可在本地函数调用完后,再调用参数的函数,不推荐\r\n    };\r\n\r\n    function Refresh(slt, options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this.el = $(slt).get(0);\r\n        this._initBottomAndTop();\r\n        var me = this;\r\n\r\n        this.iScrollOptions = {\r\n            onScrollMove: function (e) {\r\n                if (me.topEnable && !me.topLoading) { // 顶部是松手才加载\r\n                    if (this.y >= me.topPullOffset && !me.topEl.hasClass('ui-refresh-toload')) { // 达到刷新距离,更新显示状态\r\n                        me.topEl.addClass('ui-refresh-toload');\r\n                    } else if (this.y < me.topPullOffset && me.topEl.hasClass('ui-refresh-toload')) { // 从达到刷新距离更新为未达到距离,更新显示状态\r\n                        me.topEl.removeClass('ui-refresh-toload');\r\n                    }\r\n                }\r\n\r\n                me._checkBottomLoading(); // 底部加载条件和顶部条件不一样,只要滚动离底部一定高度就开始加载\r\n                me.goTop = this.y > me.topPullOffset; // 记录是否位于顶部位置,以便刷新后可以回到此位置\r\n            },\r\n            onBeforeScrollEnd: function () {    // 一定是用户拖动触发,在滚动结束前应该触发\r\n                me._checkTopLoading();\r\n                me._checkBottomLoading();\r\n            },\r\n            onScrollEnd: function () { // 这个事件可能由非用户拖动时触发,可能是拖动惯性导致,所有顶部不应该处理,但顶部不管是否惯性,位置条件满足即触发\r\n                if (me.topLoading && this.y < this.minScrollY && me.goTop) {\r\n                    me.iScroll.scrollTo(0, this.minScrollY, 0);\r\n                }\r\n                me._checkBottomLoading(); // 在beforend执行还不够,还在要end执行\r\n            },\r\n            onRefresh: function () { // 刷新时,若顶部加载还在进行,且当前显示的顶部加载,则继续显示,否则刷新后会消失顶部加载,这里代码没有考虑重用了,应该可以做一步提取\r\n                if (me.topLoading) { // 如果顶部在加载,则刷新的时候,设置最小顶部距离,显示顶部加载状态\r\n                    this.minScrollY = this.minScrollY + me.topPullOffset;\r\n                }\r\n            }\r\n        };\r\n\r\n        this.iScrollOptions = $.extend({}, this.options.iScrollOptions, this.iScrollOptions);\r\n        this.iScroll = new iScroll(this.el, this.iScrollOptions);\r\n        this._checkContentLoading();\r\n    }\r\n\r\n    Refresh.prototype._initBottomAndTop = function () {\r\n        this.scrollEl = $(\">.ui-refresh-wrapper\" ,this.el);\r\n        this.bottomEl = $(this.options.bottomLoadHtml).appendTo(this.scrollEl);\r\n        this.topEl = $(this.options.topLoadHtml).prependTo(this.scrollEl);\r\n\r\n        this.topPullOffset = this.topEl.outerHeight();\r\n        this.bottomPullOffset = this.bottomEl.outerHeight() + this.options.bottomAddLen; // 增加100;最好配一个额外参数\r\n\r\n        this.topLoading = false;        // 顶部正在载加载\r\n        this.bottomLoading = false;     // 底部正在加载\r\n        this.bottomEnable = this.options.initEnableBottom && !!this.options.bottomLoadFun;\r\n        this.topEnable = this.options.initEnableTop && !!this.options.topLoadFun;\r\n        this.goTop = false;         // 用来处理,因为iScroll使用momentum(惯性), 导致有时顶部显示不正确问题,true表示顶部显示加载条\r\n\r\n        this.enableBottom(this.bottomEnable);\r\n        this.enableTop(this.topEnable);\r\n    };\r\n\r\n    // 检查是否需要底部加载\r\n    Refresh.prototype._checkBottomLoading = function () {\r\n        if (this.bottomEnable && !this.bottomLoading) {\r\n            if (this.iScroll.y < this.iScroll.maxScrollY + this.bottomPullOffset) {\r\n                this._startBottomLoading();\r\n            }\r\n        }\r\n    };\r\n\r\n    Refresh.prototype._checkTopLoading = function () {\r\n        if (this.topEnable && !this.topLoading) {\r\n            if (this.topEl.hasClass('ui-refresh-toload')) {\r\n                this._startTopLoading();\r\n            }\r\n        }\r\n    };\r\n\r\n    // 检查内容是否超出容器高度,未超出时,自动调用底部加载\r\n    Refresh.prototype._checkContentLoading = function () {\r\n        if(this.iScroll.maxScrollY >= -this.bottomPullOffset){ // 此处要计算底端的高度\r\n            this._startBottomLoading();\r\n        }\r\n    };\r\n\r\n    // 开始底部加载\r\n    Refresh.prototype._startBottomLoading = function () {\r\n        if (this.bottomEnable && !this.bottomLoading) {\r\n            this.bottomLoading = true;\r\n            this.options.bottomLoadFun(); // 刷新当前索引加载更多的数据\r\n        }\r\n    };\r\n\r\n    // 开始顶部加载\r\n    Refresh.prototype._startTopLoading = function () {\r\n        if (this.topEnable && !this.topLoading) {\r\n            this.topLoading = true;\r\n            this.topEl.removeClass('ui-refresh-toload').addClass('ui-refresh-top-loading');\r\n            this.iScroll.minScrollY = this.iScroll.minScrollY + this.topPullOffset;\r\n            this.options.topLoadFun(); // 刷新当前索引加载更多的数据\r\n        }\r\n    };\r\n\r\n    // 结束底部加载\r\n    Refresh.prototype.endBottomLoading = function () {\r\n        this.bottomLoading = false;\r\n        this.refresh();\r\n    };\r\n\r\n    // 结束顶部加载\r\n    Refresh.prototype.endTopLoading = function () {\r\n        this.topEl.removeClass('ui-refresh-top-loading');\r\n        this.topLoading = false;\r\n        // this.iScroll.scrollTo(0, 0); // 刷新加载则应该回到顶部,待测试确认\r\n        this.refresh();\r\n    };\r\n\r\n    // 设置顶部加载是否可用,true可用,否则不可用\r\n    Refresh.prototype.enableTop = function (enable) {\r\n        this.topEnable = enable;\r\n        if (enable) {\r\n            this.topEl.show();\r\n        } else {\r\n            this.topEl.hide();\r\n        }\r\n    };\r\n\r\n    // 设置底部加载是否可用,true可用,否则不可用\r\n    Refresh.prototype.enableBottom = function (enable) {\r\n        this.bottomEnable = enable;\r\n        if (enable) {\r\n            this.bottomEl.show();\r\n        } else {\r\n            this.bottomEl.hide();\r\n        }\r\n    };\r\n\r\n    // 只有在内容发生变更时,但是又没有触发调用end相关方法时,使用此方法更新高度信息\r\n    // 或者组件在一开始未显示??\r\n    // 刷新会移除拖动中状态\r\n    Refresh.prototype.refresh = function () {\r\n        this.iScroll.refresh();\r\n        this._checkContentLoading();\r\n    };\r\n\r\n    ipu.refresh = function (slt, optoins) {\r\n        return new Refresh(slt, optoins);\r\n    };\r\n\r\n})(ipu || window, jQuery, iScroll);\r\n\n// Tab\r\n(function (ipu, $) {\r\n    function Tab(holder, options) {\r\n        this.el = $(holder).get(0);\r\n        this.titleItems = $(\".ui-tab-title:first>li\", this.el);\r\n        this.bodyWrapper = $(\".ui-tab-body-wrapper:first\", this.el);\r\n        this.contentItems = $(\">li\", this.bodyWrapper);\r\n\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this.itemSize = this.contentItems.size();\r\n        this.fixed = $(this.el).is(\".ui-tab-fixed\"); // 是否为固定高度的\r\n\r\n        var that = this;\r\n        this.titleItems.each(function (index) {\r\n            $(this).click(function () {\r\n                that.show(index);\r\n            });\r\n        });\r\n    }\r\n\r\n    Tab.prototype.defaultOptions = {\r\n        callBack: null  // 回调函数,tab切换时回调函数\r\n    };\r\n\r\n    Tab.prototype.show = function (index) {\r\n        if (this.fixed) {\r\n            var move = -index * 100 + \"%\";\r\n            this.bodyWrapper.css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n\r\n        }\r\n        this.contentItems.eq(index).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n        this.titleItems.eq(index).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n        this._end(index);\r\n    };\r\n\r\n    Tab.prototype._end = function (index) {\r\n        this.lastIndex = this.currentIndex;\r\n        this.currentIndex = this.index;\r\n\r\n        if (this.options.callBack) {\r\n            this.options.callBack(index, this.lastIndex);\r\n        }\r\n    };\r\n\r\n    ipu.tab = function (slt, options) {\r\n        return new Tab(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\r\n\n/*===========================\r\nDevice/OS Detection\r\n===========================*/\r\n// from sui,但IPU框架的ua不是这样的\r\n;(function (ipu, $) {\r\n    \"use strict\";\r\n    var device = {};  // Classes\r\n    var classNames = [];\r\n    var ua = navigator.userAgent;\r\n    console.log('device');\r\n\r\n    // 这中针对ipu框架的情况,待测试\r\n    if(ua.match(/ipumobile/i)){\r\n        device.ios =  !!ua.match(/ios/i);\r\n        device.android = !!ua.match(/android/i);\r\n    }else{\r\n        var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\r\n        var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\r\n        var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\r\n        var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\r\n\r\n        device.ios = device.android = device.iphone = device.ipad = device.androidChrome = false;\r\n\r\n        // Android\r\n        if (android) {\r\n            device.os = 'android';\r\n            device.osVersion = android[2];\r\n            device.android = true;\r\n            device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\r\n        }\r\n        if (ipad || iphone || ipod) {\r\n            device.os = 'ios';\r\n            device.ios = true;\r\n        }\r\n        // iOS\r\n        if (iphone && !ipod) {\r\n            device.osVersion = iphone[2].replace(/_/g, '.');\r\n            device.iphone = true;\r\n        }\r\n        if (ipad) {\r\n            device.osVersion = ipad[2].replace(/_/g, '.');\r\n            device.ipad = true;\r\n        }\r\n        if (ipod) {\r\n            device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\r\n            device.iphone = true;\r\n        }\r\n        // iOS 8+ changed UA\r\n        if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\r\n            if (device.osVersion.split('.')[0] === '10') {\r\n                device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\r\n            }\r\n        }\r\n\r\n        // Webview\r\n        device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\r\n\r\n        // Minimal UI\r\n        if (device.os && device.os === 'ios') {\r\n            var osVersionArr = device.osVersion.split('.');\r\n            device.minimalUi = !device.webView &&\r\n                (ipod || iphone) &&\r\n                (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) &&\r\n                $('meta[name=\"viewport\"]').length > 0 && $('meta[name=\"viewport\"]').attr('content').indexOf('minimal-ui') >= 0;\r\n        }\r\n\r\n        // Check for status bar and fullscreen app mode\r\n        var windowWidth = $(window).width();\r\n        var windowHeight = $(window).height();\r\n        device.statusBar = false;\r\n        if (device.webView && (windowWidth * windowHeight === screen.width * screen.height)) {\r\n            device.statusBar = true;\r\n        }\r\n        else {\r\n            device.statusBar = false;\r\n        }\r\n\r\n\r\n        // Pixel Ratio\r\n        device.pixelRatio = window.devicePixelRatio || 1;\r\n        classNames.push('pixel-ratio-' + Math.floor(device.pixelRatio));\r\n        if (device.pixelRatio >= 2) {\r\n            classNames.push('retina');\r\n        }\r\n\r\n        // OS classes\r\n        if (device.os) {\r\n            classNames.push(device.os, device.os + '-' + device.osVersion.split('.')[0], device.os + '-' + device.osVersion.replace(/\\./g, '-'));\r\n            if (device.os === 'ios') {\r\n                var major = parseInt(device.osVersion.split('.')[0], 10);\r\n                for (var i = major - 1; i >= 6; i--) {\r\n                    classNames.push('ios-gt-' + i);\r\n                }\r\n            }\r\n\r\n        }\r\n        // Status bar classes\r\n        if (device.statusBar) {\r\n            classNames.push('with-statusbar-overlay');\r\n        }\r\n        else {\r\n            $('html').removeClass('with-statusbar-overlay');\r\n        }\r\n\r\n\r\n        // keng..\r\n        device.isWeixin = /MicroMessenger/i.test(ua);\r\n    }\r\n\r\n    // Add html classes\r\n    if (classNames.length > 0){\r\n        $('html').addClass(classNames.join(' '));\r\n    }\r\n\r\n    ipu.device = device;\r\n})(ipu || window, jQuery);\r\n\n\r\n        // 初始化代码\r\n        jQuery(function () {\r\n            FastClick.attach(document.body);\r\n        });\r\n\r\n        return ipu;\r\n    }\r\n\r\n    // todo:可以添加一个和其它库的适配处理,\r\n    // 这里假设第三方库,jquery,iScroll,Hammer的史称已经固定\r\n    if ( typeof define === \"function\" && define.amd ) {\r\n        define(['jquery', 'iScroll', 'Hammer', 'FastClick'], function (jquery, iscroll, hammer, FastClick) {\r\n            return window.ipu = setup(jquery, iscroll, hammer, FastClick);\r\n        });\r\n    } else {\r\n        window.ipu = setup(window.jQuery, window.iScroll, window.Hammer, window.FastClick);\r\n    }\r\n})();\r\n\n//# sourceMappingURL=ipu.js.map\n"],"sourceRoot":"/source/"}
1
{"version":3,"sources":["ipu.js"],"names":["setup","jQuery","iScroll","Hammer","FastClick","ipu","$","iscroll","Carousel","slt","options","this","extend","defaultOpt","el","eq","autoPlay","hasIndicator","indicator","callBack","currentIndex","_init","play","prototype","index","duration","indicatorPosition","wrapper","carouselItems","size","that","activeIndex","filter","_addIndicator","window","resize","refresh","scrollOpt","snap","momentum","scrollX","scrollY","hScrollbar","onScrollStart","_pause","onTouchEnd","onScrollEnd","_end","get","show","stop","timeoutId","clearTimeout","prev","next","time","scrollToPage","_play","setTimeout","currPageX","indicatorIndexs","addClass","siblings","removeClass","html","i","appendTo","destroy","carousel","DtPicker","defaultOptions","Picker","defaultPickerDate","Date","template","buttons","labels","type","customData","hasClear","self","mask","createMask","_picker","holder","ui","picker","ok","cancel","clear","listen","h","onChange","item","beginMonth","endMonth","_createMinutes","d","_createHours","m","_createDay","y","_createMonth","_create","_setLabels","_setButtons","attr","_setSelectedValue","value","getSelected","selected","getSelectedItem","toString","text","getFullYear","getMonth","getDate","getHours","getMinutes","parsedValue","_parseSetValue","setListen","setSelectedValue","isLeapYear","year","_inArray","array","_item","getDayNum","month","_fill","num","length","_isBeginYear","beginYear","parseInt","getSelectedValue","_isBeginMonth","_isBeginDay","beginDay","_isBeginHours","beginHours","_isEndYear","endYear","_isEndMonth","_isEndDay","endDay","_isEndHours","endHours","_createYear","current","yArray","yBegin","yEnd","push","setItems","mArray","maxMonth","val","dArray","maxDay","hArray","maxHours","iArray","beginMinutes","maxMinutes","endMinutes","each","label","innerText","hide","click","clickCall","now","rs","valu","parts","replace","split","j","beginDate","endDate","setBeginDate","date","setEndDate","dispose","parentNode","removeChild","name","disposed","sltDate","call","close","callback","element","document","createElement","classList","add","addEventListener","_show","setAttribute","body","appendChild","_remove","dtPicker","HammerCarousel","navSlt","clickBack","showSize","carouselItemSizes","moveLen","lastItem","slice","clone","sizeCount","hammer","Manager","Pan","direction","DIRECTION_HORIZONTAL","threshold","on","bindFn","onPan","width","console","error","wrapperSize","outerWidth","itemSize","mostSize","dom","position","left","move","displayMoveLen","css","animate","toggleClass","ev","delta","deltaX","intValue","Math","abs","decimal","hammerCarousel","__dealCssEvent","eventNameArr","fireCallBack","e","target","events","off","handleClicks","clicked","hasClass","defaults","modalCloseByOutside","closeModal","actionsCloseByOutside","popupCloseByOutside","fn","transitionEnd","_modalTemplateTempDiv","modalStack","modalButtonOk","modalButtonCancel","modalPreloaderTitle","modalContainer","modalStackClearQueue","shift","modal","params","modalHTML","buttonsHTML","bold","extraClass","titleHTML","title","textHTML","afterTextHTML","afterText","noButtons","verticalButtons","innerHTML","children","append","find","onClick","openModal","alert","callbackOk","arguments","undefined","modalTitle","confirm","callbackCancel","omodalButtonCancelnClick","prompt","minLoad","loadOverTime","loadEnd","loadTimeOut","showPreloader","minTime","hidePreloader","preloaderModal","force","showIndicator","hideIndicator","remove","actions","groupSelector","buttonSelector","isArray","button","buttonClass","color","bg","disabled","groups","groupIndex","clickTarget","buttonIndex","buttonParams","is","toast","msg","extraclass","$toast","cb","isModal","isNotToast","isPopup","isLoginScreen","isPickerModal","isToast","marginTop","round","outerHeight","marginLeft","overlay","clientLeft","trigger","removeOnClose","NavBar","content","contentSlt","nav","contents","navs","me","lastIndex","navBar","submitForm","doc","url","form","action","method","style","display","x","ele","submit","checkPages","hasPages","pagesObj","zeroPageClass","pageIdPrefix","isZeroPage","page","animationEnd","maps","pageNo","animateInClass","animateOutClass","eventName","zeroPagesClass","parent","backIndex","closeIndex","showLoading","loadingMessage","minMessageTime","openPage","end","animatePage","newPage","nowPageNo","zeroPage","one","pageDoc","contentDocument","postPage","backPage","nextAll","nowDoc","iframe","evt","createEvent","initEvent","data","dispatchEvent","nowPage","prevPage","prevAll","closePage","open","post","back","backHome","onBack","originalEvent","showItemSize","r","itemAngle","maxExceed","wrap","beginAngle","beginExceed","stopInertiaMove","lastAngle","empty","device","ios","DIRECTION_VERTICAL","Press","_onPan","endScroll","textName","newData","lis","items","itemsSize","endAngle","endExceed","transform","transform-origin","log","setAngle","newAngle","angle","moveAngle","calcAngle","deltaY","v","overallVelocityY","dir","deceleration","dist","startAngle","distAngle","srcDistAngle","scrollDistAngle","ca","PI","c","calcItemVisable","oldIndex","difference","toFixed","nowTime","getTime","frameInterval","stepCount","stepIndex","inertiaMove","quartEaseOut","bool","t","b","getSelectedText","getSelectedIndex","PopPicker","pickerTemplate","layer","btns","bodyHtml","pickers","Array","pickerHtml","prependTo","getSelectItems","setData","popPicker","progressBar","id","level","progress","setProgress","setLevel","pro","getProgress","Refresh","_initBottomAndTop","iScrollOptions","onScrollMove","topEnable","topLoading","topPullOffset","topEl","_checkBottomLoading","goTop","onBeforeScrollEnd","_checkTopLoading","minScrollY","scrollTo","onRefresh","_checkContentLoading","bottomLoadFun","topLoadFun","initEnableTop","initEnableBottom","bottomLoadHtml","topLoadHtml","bottomAddLen","scrollEl","bottomEl","bottomPullOffset","bottomLoading","bottomEnable","enableBottom","enableTop","maxScrollY","_startBottomLoading","_startTopLoading","endBottomLoading","endTopLoading","enable","optoins","Tab","titleItems","bodyWrapper","contentItems","fixed","tab","classNames","ua","navigator","userAgent","match","android","ipad","ipod","iphone","androidChrome","os","osVersion","toLowerCase","indexOf","webView","osVersionArr","minimalUi","windowWidth","windowHeight","height","statusBar","screen","pixelRatio","devicePixelRatio","floor","major","isWeixin","test","join","attach","define","amd","jquery"],"mappings":"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","file":"ipu.min.js","sourcesContent":["(function () {\r\n    function setup(jQuery, iScroll, Hammer, FastClick) {\r\n        var ipu = {};\r\n\n// Carousel\n(function (ipu, $, iscroll) {\n// carouselSlt应该是唯一的,否则怎么支撑多个回调,如果用户不需要多个回调,也不主动调用,则可以,先不管吧???\n    function Carousel(slt, options) {\n        this.options = options = $.extend({}, this.defaultOpt, options);\n        this.el = $(slt).eq(0);  // 一次只能实例化一个\n        this.autoPlay = options.autoPlay;\n         this.hasIndicator = options.indicator;\n        this.callBack = options.callBack;\n        this.currentIndex = null;\n\n        this._init();\n        this.play();\n    }\n\n    Carousel.prototype = {\n        defaultOpt: {\n            index: null,            // 默认显示索引,未设置时先查找对就active,未找到时是0\n            autoPlay: false,       //  是否自动播放\n            duration: 3000,         //  自动播放延时\n            indicator: false,       // 是否生成指示器\n            indicatorPosition: 'center',  // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok\n            callBack: null           // 变更时回调函数\n        },\n        _init: function () {\n            var wrapper = $(\">.ui-carousel-wrapper\", this.el);\n            var carouselItems = $(\">li\", wrapper);\n            this.carouselItems = carouselItems;\n            this.size = carouselItems.size();\n            that = this;\n\n            if (this.options.index == null) {\n                var activeIndex = carouselItems.filter(\".ui-active\").index();\n                this.options.index = activeIndex != -1 ? activeIndex : 0;\n            }\n\n            if (this.hasIndicator) {\n                this._addIndicator();\n            }\n            $(window).resize(function () {\n                that.refresh();\n            });\n            var scrollOpt = {\n                snap: \"li\",          // carousel效果\n                momentum: false,     // 移除惯性处理\n                scrollX: true,       // X轴移动\n                scrollY:false,\n                hScrollbar: false,   // 没有纵向滚动条\n                onScrollStart: function () {\n                    that._pause();\n                },\n                onTouchEnd: function () {\n                    // 后面优化\n                    /*\n                     if (that.iscroll.currPageX == that.size - 1) {\n                     that.show(that.size - 2);\n                     }\n                     */\n                },\n                onScrollEnd: function () {\n                    that._end();\n                }\n            };\n            this.iscroll = new iscroll(this.el.get(0), scrollOpt);\n            this.show(this.options.index, 0);\n        },\n        stop: function () {\n            this._pause();\n            this.autoPlay=false;\n        },\n        _pause: function () {\n            if (this.autoPlay && this.timeoutId) {\n                clearTimeout(this.timeoutId);\n                this.timeoutId = null;\n            }\n        },\n        prev: function () {\n            var index = this.currentIndex == 0 ? this.size - 1 : this.currentIndex - 1;\n            this.show(index);\n        },\n        next: function () {\n            var index = this.currentIndex == this.size - 1 ? 0 : this.currentIndex + 1;\n            this.show(index);\n        },\n        show: function (index, time) {\n            this._pause();\n            this.iscroll.scrollToPage(index, 0, time);\n        },\n        play: function () {\n            this.autoPlay=true;\n            this._play();\n        },\n        refresh: function () {\n            var that = this;\n            that.show(this.currentIndex);\n        },\n        _play: function () {\n            if (this.autoPlay && !this.timeoutId) {\n                var that = this;\n                this.timeoutId = setTimeout(function () {\n                    this.timeoutId = null;\n                    that.next();\n                }, that.options.duration);\n            }\n        },\n        _end: function () {\n            var currentIndex = this.iscroll.currPageX;\n            if (currentIndex != this.currentIndex) {\n                if (this.callBack) {\n                    this.callBack(currentIndex, this.currentIndex);\n                }\n                this.currentIndex = currentIndex;\n\n                if (this.hasIndicator) {\n                    this.indicatorIndexs.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\n                }\n                this.carouselItems.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\n            }\n            this._play();\n        },\n        _addIndicator: function () {\n            var html = \"\";\n            for (var i = 0; i < this.size; i++) {\n                html += \"<li></li>\";\n            }\n            html = \"<ul class='ui-carousel-indicator'>\" + html + \"</ul>\";\n            this.indicator = $(html).appendTo(this.el);\n            this.indicatorIndexs = $(\"li\", this.indicator);\n        },\n        destroy: function () {\n            // 自己怎么销毁,相关事件移除??\n            this.iscroll.destroy();\n        }\n    };\n\n    ipu.carousel =  function (slt, options) {\n        return new Carousel(slt, options);\n    };\n\n})(ipu || window, jQuery, iScroll);\n\n// dtPicker  此版本最大值与最小值,存在问题,当时间跨过一天时\r\n(function (ipu, $) {\r\n    var Picker = ipu.Picker;\r\n    var defaultPickerDate = new Date();   // 有些时间不齐全。如time,需要一个默认日期来运算\r\n\r\n\r\n    // show方法调用时,若没有值,则为当前值,还是有值就不变动了,点了确认按钮后,就不再变动了\r\n    // 日期范围的选择处理\r\n    function DtPicker(options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n\r\n        if(!Picker){\r\n            Picker = ipu.Picker;\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    DtPicker.prototype.defaultOptions = {\r\n        template: '<div class=\"ui-poppicker ui-dtpicker\">\\\r\n                        <div class=\"ui-poppicker-header\">\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-cancel\">取消</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-ok\">确定</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-clear\">清除</button>\\\r\n                        </div>\\\r\n                        <div class=\"ui-poppicker-title\">\\\r\n                            <label class=\"ui-dtpicker-y\"></label>\\\r\n                            <label class=\"ui-dtpicker-m\"></label>\\\r\n                            <label class=\"ui-dtpicker-d\"></label>\\\r\n                            <label class=\"ui-dtpicker-h\"></label>\\\r\n                            <label class=\"ui-dtpicker-mi\"></label>\\\r\n                        </div>\\\r\n                        <div>\\\r\n                        <div class=\"ui-poppicker-body\">\\\r\n                            <div class=\"ui-picker\" data-id=\"picker-y\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-m\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-d\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-h\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                             <div class=\"ui-picker\" data-id=\"picker-mi\">\\\r\n                                <div class=\"ui-picker-selectbox\"></div>\\\r\n                                <ul></ul>\\\r\n                            </div>\\\r\n                        </div>\\\r\n                    </div>',\r\n        buttons: ['取消', '确认', '清除'],\r\n        labels: ['年', '月', '日', '时', '分'],\r\n        type: 'datetime',       // date, time, datetime, hour, month\r\n        customData: {},  // 自定义数据\r\n        hasClear: false,    // 是否显示清除按钮\r\n        callBack: function () { // 选择数据时的回调函数\r\n        }\r\n        // beginDate: Date类型,或毫秒值\r\n        // endDate: 同上\r\n    };\r\n\r\n    DtPicker.prototype._init = function () {\r\n        var self = this;\r\n        this.mask = this.createMask();\r\n\r\n        var _picker = this.holder = $(this.options.template).appendTo(\"body\");\r\n        var ui = self.ui = {\r\n            picker: this.holder,\r\n            ok: $('.ui-poppicker-btn-ok', _picker),\r\n            cancel: $('.ui-poppicker-btn-cancel', _picker),\r\n            clear: $('.ui-poppicker-btn-clear', _picker),\r\n            buttons: $('.ui-poppicker-header .ui-btn', _picker),\r\n            labels: $('.ui-poppicker-title label', _picker)\r\n        };\r\n\r\n\r\n        ui.i = new Picker($('[data-id=\"picker-mi\"]', _picker), {listen: false}); // 分钟变更无需要处理\r\n\r\n        ui.h = new Picker($('[data-id=\"picker-h\"]', _picker), {         // 小时变更,有最小值或最大值,需要变更分钟\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null && (self.options.beginMonth || self.options.endMonth)) {\r\n                    self._createMinutes();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.d = new Picker($('[data-id=\"picker-d\"]', _picker), { //仅提供了beginDate时,触发day,hours,minutes的change\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null && (self.options.beginMonth || self.options.endMonth)) {\r\n                    self._createHours();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.m = new Picker($('[data-id=\"picker-m\"]', _picker), { // 月变更时,总要变更day\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index !== null) {\r\n                    self._createDay();\r\n                }\r\n            }\r\n        });\r\n\r\n        ui.y = new Picker($('[data-id=\"picker-y\"]', _picker), { // 年发生变更,如果没有结束月,此时有所有的月,是不需要变更月的,只需要变更day\r\n            listen: false,\r\n            onChange: function (item, index) {\r\n                if (index != null) {\r\n                    if (self.options.beginMonth || self.options.endMonth) {\r\n                        self._createMonth();\r\n                    } else {\r\n                        self._createDay();\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n\r\n\r\n\r\n        self._create();\r\n\r\n        var ui = self.ui;\r\n        //设定label\r\n        self._setLabels();\r\n        self._setButtons();\r\n        //设定类型\r\n        ui.picker.attr('data-type', this.options.type);\r\n\r\n        //设定默认值\r\n\r\n        self._setSelectedValue(this.options.value);\r\n\r\n        //防止滚动穿透 TODO:待确认情况\r\n        /* self.ui.picker.addEventListener($.EVENT_START, function (event) {\r\n         event.preventDefault();\r\n         }, false);\r\n         self.ui.picker.addEventListener($.EVENT_MOVE, function (event) {\r\n         event.preventDefault();\r\n         }, false);*/\r\n    };\r\n\r\n    DtPicker.prototype.getSelected = function () {\r\n        var self = this;\r\n        var ui = self.ui;\r\n        var type = self.options.type;\r\n        var selected = {\r\n            type: type,\r\n            y: ui.y.getSelectedItem(),\r\n            m: ui.m.getSelectedItem(),\r\n            d: ui.d.getSelectedItem(),\r\n            h: ui.h.getSelectedItem(),\r\n            i: ui.i.getSelectedItem(),\r\n            toString: function () {\r\n                return this.value;\r\n            }\r\n        };\r\n        switch (type) {\r\n            case 'datetime':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value + ':' + selected.i.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text + ':' + selected.i.text;\r\n                break;\r\n            case 'date':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text;\r\n                break;\r\n            case 'time':\r\n                selected.value = selected.h.value + ':' + selected.i.value;\r\n                selected.text = selected.h.text + ':' + selected.i.text;\r\n                break;\r\n            case 'month':\r\n                selected.value = selected.y.value + '-' + selected.m.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text;\r\n                break;\r\n            case 'hour':\r\n                selected.value = selected.y.value + '-' + selected.m.value + '-' + selected.d.value + ' ' + selected.h.value;\r\n                selected.text = selected.y.text + '-' + selected.m.text + '-' + selected.d.text + ' ' + selected.h.text;\r\n                break;\r\n        }\r\n        return selected;\r\n    };\r\n\r\n    DtPicker.prototype._setSelectedValue = function (value) {\r\n        var self = this;\r\n        var ui = self.ui;\r\n\r\n        if(!value){\r\n            if(this.options.type == 'time'){\r\n                value = '00:00';\r\n            }else{\r\n                value = defaultPickerDate.getFullYear()+'-'+(defaultPickerDate.getMonth()+1)+'-'+defaultPickerDate.getDate()+' '\r\n                    + defaultPickerDate.getHours() + ':' + defaultPickerDate.getMinutes();\r\n            }\r\n        }\r\n        var parsedValue = self._parseSetValue(value);\r\n\r\n        ui.y.setListen(true);\r\n        ui.m.setListen(false);\r\n        ui.d.setListen(false);\r\n        ui.h.setListen(false);\r\n        ui.i.setListen(false);\r\n        ui.y.setSelectedValue(parsedValue.y);\r\n\r\n        ui.m.setListen(true);\r\n        ui.m.setSelectedValue(parsedValue.m);\r\n\r\n        ui.d.setListen(true);\r\n        ui.d.setSelectedValue(parsedValue.d);\r\n\r\n        ui.h.setListen(true);\r\n        ui.h.setSelectedValue(parsedValue.h);\r\n\r\n        ui.i.setListen(true);\r\n        ui.i.setSelectedValue(parsedValue.i);\r\n\r\n        this.value = this.getSelected().value;\r\n    };\r\n\r\n    DtPicker.prototype.setSelectedValue = function (value) {\r\n        this._setSelectedValue(value);\r\n    };\r\n\r\n    DtPicker.prototype.isLeapYear = function (year) {\r\n        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);\r\n    };\r\n\r\n    DtPicker.prototype._inArray = function (array, item) {\r\n        for (var index in array) {\r\n            var _item = array[index];\r\n            if (_item === item) return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    DtPicker.prototype.getDayNum = function (year, month) {\r\n        var self = this;\r\n        if (self._inArray([1, 3, 5, 7, 8, 10, 12], month)) {\r\n            return 31;\r\n        } else if (self._inArray([4, 6, 9, 11], month)) {\r\n            return 30;\r\n        } else if (self.isLeapYear(year)) {\r\n            return 29;\r\n        } else {\r\n            return 28;\r\n        }\r\n    };\r\n\r\n    DtPicker.prototype._fill = function (num) {\r\n        num = num.toString();\r\n        if (num.length < 2) {\r\n            num = 0 + num;\r\n        }\r\n        return num;\r\n    };\r\n\r\n    DtPicker.prototype._isBeginYear = function () {\r\n        return this.options.beginYear === parseInt(this.ui.y.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginMonth = function () {\r\n        return this.options.beginMonth && this._isBeginYear() && this.options.beginMonth === parseInt(this.ui.m.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginDay = function () {\r\n        return this._isBeginMonth() && this.options.beginDay === parseInt(this.ui.d.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isBeginHours = function () {\r\n        return this._isBeginDay() && this.options.beginHours === parseInt(this.ui.h.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndYear = function () {\r\n        return this.options.endYear === parseInt(this.ui.y.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndMonth = function () {\r\n        return this.options.endMonth && this._isEndYear() && this.options.endMonth === parseInt(this.ui.m.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndDay = function () {\r\n        return this._isEndMonth() && this.options.endDay === parseInt(this.ui.d.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._isEndHours = function () {\r\n        return this._isEndDay() && this.options.endHours === parseInt(this.ui.h.getSelectedValue());\r\n    };\r\n\r\n    DtPicker.prototype._createYear = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        //生成年列表\r\n        var yArray = [];\r\n        if (options.customData.y) {\r\n            yArray = options.customData.y;\r\n        } else {\r\n            var yBegin = options.beginYear;\r\n            var yEnd = options.endYear;\r\n            for (var y = yBegin; y <= yEnd; y++) {\r\n                yArray.push({\r\n                    text: y + '',\r\n                    value: y\r\n                });\r\n            }\r\n        }\r\n        ui.y.setItems(yArray);\r\n        //ui.y.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createMonth = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成月列表\r\n        var mArray = [];\r\n        if (options.customData.m) {\r\n            mArray = options.customData.m;\r\n        } else {\r\n            var m = options.beginMonth && self._isBeginYear() ? options.beginMonth : 1;\r\n            var maxMonth = options.endMonth && self._isEndYear() ? options.endMonth : 12;\r\n            for (; m <= maxMonth; m++) {\r\n                var val = self._fill(m);\r\n                mArray.push({\r\n                    text: val,\r\n                    value: m\r\n                });\r\n            }\r\n        }\r\n        ui.m.setItems(mArray);\r\n        //ui.m.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createDay = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成日列表\r\n        var dArray = [];\r\n        if (options.customData.d) {\r\n            dArray = options.customData.d;\r\n        } else {\r\n            var d = self._isBeginMonth() ? options.beginDay : 1;\r\n            var maxDay = self._isEndMonth() ? options.endDay : self.getDayNum(parseInt(this.ui.y.getSelectedValue()), parseInt(this.ui.m.getSelectedValue()));\r\n            for (; d <= maxDay; d++) {\r\n                var val = self._fill(d);\r\n                dArray.push({\r\n                    text: val,\r\n                    value: d\r\n                });\r\n            }\r\n        }\r\n        ui.d.setItems(dArray);\r\n        //current = current || ui.d.getSelectedValue();\r\n        //ui.d.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createHours = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        //生成时列表\r\n        var hArray = [];\r\n        if (options.customData.h) {\r\n            hArray = options.customData.h;\r\n        } else {\r\n            var h = self._isBeginDay() ? options.beginHours : 0;\r\n            var maxHours = self._isEndDay() ? options.endHours : 23;\r\n            for (; h <= maxHours; h++) {\r\n                var val = self._fill(h);\r\n                hArray.push({\r\n                    text: val,\r\n                    value: h\r\n                });\r\n            }\r\n        }\r\n        ui.h.setItems(hArray);\r\n        //ui.h.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._createMinutes = function (current) {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n\r\n        //生成分列表\r\n        var iArray = [];\r\n        if (options.customData.i) {\r\n            iArray = options.customData.i;\r\n        } else {\r\n            var i = self._isBeginHours() ? options.beginMinutes : 0;\r\n            var maxMinutes = self._isEndHours() ? options.endMinutes : 59;\r\n            for (; i <= maxMinutes; i++) {\r\n                var val = self._fill(i);\r\n                iArray.push({\r\n                    text: val,\r\n                    value: i\r\n                });\r\n            }\r\n        }\r\n        ui.i.setItems(iArray);\r\n        //ui.i.setSelectedValue(current);\r\n    };\r\n\r\n    DtPicker.prototype._setLabels = function () {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        ui.labels.each(function (i, label) {\r\n            label.innerText = options.labels[i];\r\n        });\r\n    };\r\n\r\n    DtPicker.prototype._setButtons = function () {\r\n        var self = this;\r\n        var options = self.options;\r\n        var ui = self.ui;\r\n        ui.cancel.text(options.buttons[0]);\r\n        ui.ok.text(options.buttons[1]);\r\n\r\n        if(options.hasClear){\r\n            ui.clear.text(options.buttons[2])\r\n        }else{\r\n            ui.clear.hide();\r\n        }\r\n\r\n        ui.buttons.each(function (index) {\r\n            $(this).click(function () {\r\n                self.clickCall(index);\r\n            })\r\n        })\r\n    };\r\n\r\n    // 解析设置的值,目前是字符串,完整日期格式 2012-12-12 12:21\r\n    DtPicker.prototype._parseSetValue = function (value) {\r\n        var now = defaultPickerDate;\r\n        var type = this.options.type;\r\n\r\n        var rs = {\r\n            y: now.getFullYear(),\r\n            m: now.getMonth()+1,\r\n            d: now.getDate(),\r\n            h: now.getHours(),\r\n            i: now.getMinutes()\r\n        };\r\n\r\n        if(value instanceof Date){\r\n            if( type == 'time'){\r\n                valu= +value.getHours()+\":\"+value.getMinutes();\r\n            }else{\r\n                value = value.getFullYear()+'-'+(value.getMonth()+1)+'-'+value.getDate()+ ' '\r\n                    +value.getHours()+\":\"+value.getMinutes();\r\n            }\r\n        }\r\n\r\n        var parts = value.replace(\":\", \"-\").replace(\" \", \"-\").split(\"-\");\r\n        for(var i=0, j=parts.length; i<j; i++){\r\n            parts[i] = parseInt(parts[i]);\r\n        }\r\n\r\n        if(type == 'datetime'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = parts[3];    //\r\n            rs.i = parts[4];\r\n        }else if(type == 'date'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = 0;    //\r\n            rs.i = 0;\r\n        }else if(type == 'time'){\r\n            rs.h = parts[0];    //\r\n            rs.i = parts[1];\r\n        }else if(type == 'hour'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = parts[2];    //\r\n            rs.h = parts[3];    //\r\n            rs.i = 0;\r\n        }else if(type == 'month'){\r\n            rs.y = parts[0];\r\n            rs.m = parts[1];\r\n            rs.d = 1;    //\r\n            rs.h = 0;    //\r\n            rs.i = 0;\r\n        }\r\n\r\n        return rs;\r\n    };\r\n\r\n    DtPicker.prototype._create = function () {\r\n        var self = this;\r\n        var options = this.options;\r\n        var now = defaultPickerDate;\r\n\r\n        var beginDate = options.beginDate;\r\n        if(beginDate){\r\n            beginDate = this._parseSetValue(beginDate);\r\n            options.beginYear = beginDate.y;\r\n            options.beginMonth = beginDate.m;\r\n            options.beginDay = beginDate.d;\r\n            options.beginHours = beginDate.h;\r\n            options.beginMinutes = beginDate.i;\r\n        }else if(options.type == 'time'){\r\n            options.beginYear =  now.getFullYear();\r\n            options.beginMonth = now.getMonth() + 1;\r\n            options.beginDay = now.getDate();\r\n            options.beginHours = 0;\r\n            options.beginMinutes = 0;\r\n        }else {\r\n            options.beginYear =  now.getFullYear() - 5;\r\n        }\r\n\r\n        var endDate = options.endDate;\r\n        if (endDate) { //设定了结束日期\r\n            endDate = this._parseSetValue(endDate);\r\n            options.endYear = endDate.y;\r\n            options.endMonth = endDate.m;\r\n            options.endDay = endDate.d;\r\n            options.endHours = endDate.h;\r\n            options.endMinutes = endDate.i;\r\n        }else if(options.type == 'time'){\r\n            options.endYear =  now.getFullYear();\r\n            options.endMonth = now.getMonth() + 1;\r\n            options.endDay = now.getDate();\r\n            options.endHours = 24;\r\n            options.endMinutes = 59;\r\n        }else {\r\n            options.endYear =  options.beginYear + 10 ;\r\n        }\r\n\r\n        //生成\r\n        self._createYear();\r\n        self._createMonth();\r\n        self._createDay();\r\n        self._createHours();\r\n        self._createMinutes();\r\n    };\r\n\r\n    // 更新选择框,更新当前值\r\n    DtPicker.prototype.setBeginDate = function (date) {\r\n        this.options.beginDate = date;\r\n        this._create();\r\n    };\r\n\r\n    // 判断最大最小值合理性\r\n    DtPicker.prototype.setEndDate = function (date) {\r\n        this.options.endDate = date;\r\n        this._create();\r\n    };\r\n\r\n    DtPicker.prototype.dispose = function () {\r\n        var self = this;\r\n        self.hide();\r\n        setTimeout(function () {\r\n            self.ui.picker.parentNode.removeChild(self.ui.picker);\r\n            for (var name in self) {\r\n                self[name] = null;\r\n                delete self[name];\r\n            }\r\n            self.disposed = true;\r\n        }, 300);\r\n    };\r\n\r\n    DtPicker.prototype.show = function (callBack) {\r\n        if (callBack) {\r\n            this.options.callBack = callBack;\r\n        }\r\n        this.mask.show();\r\n        this.setSelectedValue(this.value);\r\n        this.holder.addClass(\"ui-active\");\r\n    };\r\n\r\n    DtPicker.prototype.clickCall = function(index){\r\n        var self = this;\r\n        var sltDate = self.getSelected();\r\n        var rs = self.options.callBack.call(this , sltDate, index);\r\n        if (rs !== false) {\r\n            if(index == 1){ // 假定确认按钮在第二个位置,传回true则存储当前值\r\n                self.value = sltDate.value;\r\n            }else if(index == 2){\r\n                self.value = null;\r\n            }\r\n            self.hide();\r\n        }\r\n    };\r\n\r\n    DtPicker.prototype.hide = function () {\r\n        this.mask.close();\r\n        this.holder.removeClass(\"ui-active\");\r\n    };\r\n\r\n    // 应该移除callback参数,提取出业成一个工具方法\r\n    DtPicker.prototype.createMask = function(callback) {\r\n        var self = this;\r\n        var element = document.createElement('div');\r\n        element.classList.add(\"ui-picker-backup\");\r\n        //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n        element.addEventListener('click', function() {\r\n            self.clickCall(0);\r\n        });\r\n        var mask = [element];\r\n        mask._show = false;\r\n        mask.show = function() {\r\n            mask._show = true;\r\n            element.setAttribute('style', 'opacity:1');\r\n            document.body.appendChild(element);\r\n            return mask;\r\n        };\r\n        mask._remove = function() {\r\n            if (mask._show) {\r\n                mask._show = false;\r\n                element.setAttribute('style', 'opacity:0');\r\n                setTimeout(function() {\r\n                    var body = document.body;\r\n                    element.parentNode === body && body.removeChild(element);\r\n                }, 350);\r\n            }\r\n            return mask;\r\n        };\r\n        mask.close = function() {\r\n            if(mask._show){\r\n                if (callback) {\r\n                    if (callback() !== false) {\r\n                        mask._remove();\r\n                    }\r\n                } else {\r\n                    mask._remove();\r\n                }\r\n            }\r\n        };\r\n        return mask;\r\n    };\r\n\r\n    ipu.dtPicker = function(options){\r\n        return new DtPicker(options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\n// 支持非循环\r\n// size命名用的有点混淆。。\r\n// 不能支持元素隐藏时,使用百比分处理移动距离。。。?\r\n// 支持两个以内容显示\r\n// 支持类似snap实现\r\n// 理想是移除carousel.js的实现,用hammerCarousel.js实现所有相关功能\r\n\r\n(function (ipu, $, Hammer) {\r\n    function HammerCarousel(navSlt, options) {\r\n        this.options = options = $.extend({}, this.defaultOptions, options);\r\n        this.el = $(navSlt).get(0);\r\n        this._init();\r\n    }\r\n\r\n    // 直接替换掉了prototype对象,可能不是个好选择\r\n    HammerCarousel.prototype = {\r\n        defaultOptions: {\r\n            index: null,        // 默认显示第几个项,其实挺没用的,默认显示第一个,用户再调用一下显示第几个,作用一样现在。\r\n            autoPlay: false,    // 是否自动轮播\r\n            duration: 3000,     // 轮播间隔\r\n            indicator: false,  //是否生成指示器,即小点点\r\n            callBack: null,  // 轮播后回调函数\r\n            clickBack: null   // 各子项用户点击事件\r\n            //indicatorPosition: 'center',  // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok,参考humUI和mui\r\n        },\r\n        _init: function () {\r\n            this.wrapper = $(\">.ui-carousel-wrapper\", this.el);\r\n            this.carouselItems = $(\">li\", this.wrapper);\r\n\r\n\r\n            this.showSize = 1; // 假设一屏默认显示1个,所以做循环显示只需要复制一个子项\r\n            this.carouselItemSizes = [];\r\n            this.currentIndex = 0;\r\n            this.moveLen = 0;\r\n            this.lastItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来判断是复制项\r\n\r\n            // 这里假设每个元素都是相等的\r\n            this.carouselItems.slice(0, this.showSize).clone().appendTo(this.wrapper); // 如果做无限循环则要这样处理\r\n            this.size = this.carouselItems.size();\r\n\r\n            var self = this;\r\n            if(this.options.clickBack){\r\n                $(\">li\", this.wrapper).each(function (i) {\r\n                    $(this).click(function () {\r\n                        self.options.clickBack.call(this, i%self.size);\r\n                    });\r\n                })\r\n            }\r\n\r\n            this.sizeCount();\r\n            var that = this;\r\n\r\n            this.hammer = new Hammer.Manager(this.el); // 避免因为li里面的内容高度不够,而不能触发相关事件\r\n            this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_HORIZONTAL, threshold: 10}));\r\n            this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this.onPan, this));\r\n\r\n            $(window).resize(function () { // 在尺寸变化时,处理,是否可以考虑只在宽度变化时处理,横屏事件?\r\n                that.refresh();\r\n            });\r\n\r\n            if (this.options.index == null) {\r\n                var activeIndex = this.carouselItems.filter(\".ui-active\").index();\r\n                this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n            }\r\n\r\n            if (this.options.indicator) {\r\n                this._addIndicator();\r\n            }\r\n\r\n            this.show(this.options.index);\r\n        },\r\n        stop: function () {\r\n            this._pause();\r\n            this.options.autoPlay = false;\r\n        },\r\n        _pause: function () {\r\n            if (this.timeoutId) {\r\n                clearTimeout(this.timeoutId);\r\n                this.timeoutId = null;\r\n            }\r\n        },\r\n        prev: function () {\r\n            var index = this.currentIndex == 0 ? this.size - 1 : this.currentIndex - 1;\r\n            if (index == this.size - 1) {\r\n                this._show(this.size, false);\r\n                this.wrapper.width();\r\n            }\r\n            this._show(index, true);\r\n        },\r\n        next: function () {//下一张\r\n            var index = this.currentIndex == this.size ? 1 : this.currentIndex + 1;\r\n            if (index == 1) {\r\n                this._show(0, false);\r\n                this.wrapper.width();\r\n            }\r\n            this._show(index, true);\r\n        },\r\n        show: function (index) {//跳到指定索引处\r\n            // 用户指定跳时,在当前index==0时,涉及一个最近跳转处理,目前未处理,...不管了\r\n            if (index > this.size || index < 0) {\r\n                console.error(\"index超出范围!\");\r\n            } else {\r\n                this._show(index); // 默认追加动画\r\n            }\r\n        },\r\n        play: function () {\r\n            this.options.autoPlay = true;\r\n            this._play();\r\n        },\r\n        _play: function () {\r\n            if (this.options.autoPlay && !this.timeoutId) {\r\n                var that = this;\r\n                this.timeoutId = setTimeout(function () {\r\n                    that.timeoutId = null;//清空这个timeoutId,代表该次处理已经执行了\r\n                    that.next();\r\n                }, that.options.duration);\r\n            }\r\n        },\r\n        _end: function () {//移动结束时调用\r\n            var currentIndex = this.currentIndex;\r\n\r\n            if (this.options.callBack) {\r\n                this.options.callBack(currentIndex, this.lastItem);//返回当前索引,以及是滞最后一项参数\r\n            }\r\n\r\n            if (this.indicator) {\r\n                this.indicatorIndexs.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n            }\r\n            this.carouselItems.eq(currentIndex).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n\r\n            this._play();//处理自动播放\r\n        },\r\n        _addIndicator: function () {\r\n            var html = \"\";\r\n            for (var i = 0; i < this.size; i++) {\r\n                html += \"<li></li>\";\r\n            }\r\n            html = \"<ul class='ui-carousel-indicator'>\" + html + \"</ul>\";\r\n            this.indicator = $(html).appendTo(this.el);\r\n            this.indicatorIndexs = $(\"li\", this.indicator);\r\n        },\r\n        sizeCount: function () {\r\n            this.wrapperSize = this.wrapper.outerWidth(true);\r\n            this.itemSize = this.carouselItems.eq(0).outerWidth(true);\r\n            this.mostSize = this.size * this.itemSize; // 宽度*数量\r\n            $(this.wrapper).removeClass(\"ui-carousel-animate\").width();\r\n\r\n            var that = this;\r\n            $(\">li\", this.wrapper).each(function (index, dom) { // 此处要注意,最后一个子项是后加进入的,要重新使用jquery处理一下,不能直接使用this.xx来处理\r\n                that.carouselItemSizes[index] = $(this).position().left;\r\n            });\r\n        },\r\n        refresh: function () {\r\n            if (this.wrapperSize != this.wrapper.outerWidth(true)) {\r\n                this.sizeCount();\r\n                this._show(this.currentIndex, true); //新的位置\r\n            }\r\n        },\r\n        move: function (moveLen) { // 类似mouseMove时的处理函数\r\n            this._pause();\r\n            $(this.wrapper).removeClass(\"ui-carousel-animate\");\r\n            var move = (this.moveLen - moveLen) % this.mostSize;\r\n            move = (move + this.mostSize) % this.mostSize;\r\n            this.displayMoveLen = move;\r\n\r\n            move = -move + \"px\";\r\n            $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n        },\r\n        _show: function (index, animate) { // 知道最终移动到的项时,调用\r\n            if (animate !== false) { // 默认值为true\r\n                animate = true;\r\n            }\r\n\r\n            this._pause();\r\n            $(this.wrapper).toggleClass(\"ui-carousel-animate\", animate);\r\n            this.currentIndex = index % this.size;\r\n            //this.currentIndex = index;\r\n            this.lastItem = index == this.size;\r\n            var move = this.carouselItemSizes[index];\r\n            this.moveLen = move;\r\n            move = -move + \"px\";\r\n\r\n            $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n            if (animate) {\r\n                this._end();\r\n            }\r\n        },\r\n        onPan: function (ev) {\r\n            var delta = ev.deltaX;\r\n            // pancancel与panend,有效的pan事件结束与无效的pan事件结束?\r\n            if (ev.type == 'panend' || ev.type == 'pancancel') {\r\n                var value = delta / this.itemSize;\r\n                var intValue = parseInt(Math.abs(value));               // 取整数\r\n                var decimal = Math.abs(value) % 1;                   // 取小数\r\n\r\n                if (decimal > 0.2) { // 滑动超过页面宽20%;\r\n                    intValue = intValue + 1;\r\n                }\r\n                if (value > 0) {\r\n                    intValue = -intValue;\r\n                }\r\n\r\n                var index = (this.currentIndex + intValue) % this.size;\r\n                index = (index + this.size) % this.size; // 因为可能是个负值,转换成正值\r\n\r\n                // 当前位移大于一个项的长度,这由move方法导致的,所以此时只能是最后一项在显示,所以要显示最后一项\r\n                if (index == 0 && this.displayMoveLen > this.itemSize) {\r\n                    index = this.size;\r\n                }\r\n                this._show(index);\r\n            } else if (ev.type == 'panmove'){\r\n                this.move(delta);\r\n            }\r\n        }\r\n    };\r\n\r\n    ipu.hammerCarousel = function (slt, options) {\r\n        return new HammerCarousel(slt, options);\r\n    };\r\n})(ipu || window, jQuery,  Hammer);\r\n\n(function (ipu, $) {\r\n    //$ extends\r\n    function __dealCssEvent(eventNameArr, callback) {\r\n        // console.log('__dealCssEvent');\r\n        var events = eventNameArr,\r\n            i, dom = this;// jshint ignore:line\r\n\r\n        function fireCallBack(e) {\r\n            /*jshint validthis:true */\r\n            if (e.target !== this) return;\r\n            callback.call(this, e);\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.off(events[i], fireCallBack);\r\n            }\r\n        }\r\n\r\n        if (callback) {\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.on(events[i], fireCallBack);\r\n            }\r\n        }\r\n    }\r\n\r\n    $.fn.transitionEnd = function (callback) {\r\n        // console.log('transitionEnd');\r\n        __dealCssEvent.call(this, ['webkitTransitionEnd', 'transitionend'], callback);\r\n        return this;\r\n    };\r\n\r\n\r\n\r\n    var _modalTemplateTempDiv = document.createElement('div');\r\n\r\n    var defaults = {\r\n        modalStack: true,\r\n        modalButtonOk: '确定',\r\n        modalButtonCancel: '取消',\r\n        modalPreloaderTitle: '加载中',\r\n        modalContainer: document.body ? document.body : 'body'\r\n    };\r\n\r\n    ipu.modalStack = [];\r\n\r\n    ipu.modalStackClearQueue = function () {\r\n        if (ipu.modalStack.length) {\r\n            (ipu.modalStack.shift())();\r\n        }\r\n    };\r\n    ipu.modal = function (params) {\r\n        params = params || {};\r\n        var modalHTML = '';\r\n        var buttonsHTML = '';\r\n        if (params.buttons && params.buttons.length > 0) {\r\n            for (var i = 0; i < params.buttons.length; i++) {\r\n                buttonsHTML += '<span class=\"ui-modal-button' + (params.buttons[i].bold ? ' ui-modal-button-bold' : '') + '\">' + params.buttons[i].text + '</span>';\r\n            }\r\n        }\r\n        var extraClass = params.extraClass || '';\r\n        var titleHTML = params.title ? '<div class=\"ui-modal-title\">' + params.title + '</div>' : '';\r\n        var textHTML = params.text ? '<div class=\"ui-modal-text\">' + params.text + '</div>' : '';\r\n        var afterTextHTML = params.afterText ? params.afterText : '';\r\n        var noButtons = !params.buttons || params.buttons.length === 0 ? 'ui-modal-no-buttons' : '';\r\n        var verticalButtons = params.verticalButtons ? 'ui-modal-buttons-vertical' : '';\r\n        modalHTML = '<div class=\"ui-modal ' + extraClass + ' ' + noButtons + '\"><div class=\"ui-modal-inner\">' + (titleHTML + textHTML + afterTextHTML) + '</div><div class=\"ui-modal-buttons ' + verticalButtons + '\">' + buttonsHTML + '</div></div>';\r\n\r\n        _modalTemplateTempDiv.innerHTML = modalHTML;\r\n\r\n        var modal = $(_modalTemplateTempDiv).children();\r\n\r\n        $(defaults.modalContainer).append(modal[0]);\r\n\r\n        // Add events on buttons\r\n        modal.find('.ui-modal-button').each(function (index, el) {\r\n            $(el).on('click', function (e) {\r\n                if (params.buttons[index].close !== false) ipu.closeModal(modal);\r\n                if (params.buttons[index].onClick) params.buttons[index].onClick(modal, e);\r\n                if (params.onClick) params.onClick(modal, index);\r\n            });\r\n        });\r\n        ipu.openModal(modal);\r\n        return modal[0];\r\n    };\r\n    ipu.alert = function (text, title, callbackOk) {\r\n        if (typeof title === 'function') {\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            buttons: [{text: defaults.modalButtonOk, bold: true, onClick: callbackOk}]\r\n        });\r\n    };\r\n    ipu.confirm = function (text, title, callbackOk, callbackCancel) {\r\n        if (typeof title === 'function') {\r\n            callbackCancel = arguments[2];\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            buttons: [\r\n                {text: defaults.modalButtonCancel, omodalButtonCancelnClick: callbackCancel},\r\n                {text: defaults.modalButtonOk, bold: true, onClick: callbackOk}\r\n            ]\r\n        });\r\n    };\r\n    ipu.prompt = function (text, title, callbackOk, callbackCancel) {\r\n        if (typeof title === 'function') {\r\n            callbackCancel = arguments[2];\r\n            callbackOk = arguments[1];\r\n            title = undefined;\r\n        }\r\n        return ipu.modal({\r\n            text: text || '',\r\n            title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n            afterText: '<input type=\"text\" class=\"ui-modal-text-input\">',\r\n            buttons: [\r\n                {\r\n                    text: defaults.modalButtonCancel\r\n                },\r\n                {\r\n                    text: defaults.modalButtonOk,\r\n                    bold: true\r\n                }\r\n            ],\r\n            onClick: function (modal, index) {\r\n                if (index === 0 && callbackCancel) callbackCancel($(modal).find('.ui-modal-text-input').val());\r\n                if (index === 1 && callbackOk) callbackOk($(modal).find('.ui-modal-text-input').val());\r\n            }\r\n        });\r\n    };\r\n\r\n    var minLoad = false;        // 是否最小时间调用方式\r\n    var loadOverTime = false;   // 是否超过最小调用时间\r\n    var loadEnd = false;        // 是否调用结束\r\n    var loadTimeOut = null;     // 延时调用ID\r\n\r\n    ipu.showPreloader = function (title, minTime) {\r\n        ipu.hidePreloader(true);\r\n\r\n        ipu.showPreloader.preloaderModal = ipu.modal({\r\n            title: title || defaults.modalPreloaderTitle,\r\n            text: '<div class=\"ui-preloader\"></div>'\r\n        });\r\n\r\n        if(minTime){\r\n            minLoad = true;\r\n            loadTimeOut = setTimeout(function () {\r\n                loadOverTime = true;\r\n                if(loadEnd){\r\n                    ipu.hidePreloader();\r\n                }\r\n            }, minTime);\r\n        }\r\n\r\n        return ipu.showPreloader.preloaderModal;\r\n    };\r\n    ipu.hidePreloader = function (force) {\r\n        if(force || !minLoad || (minLoad && loadOverTime)){\r\n            if(force && loadTimeOut){\r\n                window.clearTimeout(loadTimeOut);\r\n            }\r\n            ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);\r\n            minLoad = false; // 重置各标志位\r\n            loadOverTime = false;\r\n            loadEnd = false;\r\n            loadTimeOut = null;\r\n        }else{\r\n            loadEnd = true;\r\n        }\r\n    };\r\n    ipu.showIndicator = function () {\r\n        if ($('.ui-preloader-indicator-modal')[0]) return;\r\n        $(defaults.modalContainer).append('<div class=\"ui-preloader-indicator-overlay\"></div><div class=\"ui-preloader-indicator-modal\"><span class=\"ui-preloader ui-preloader-white\"></span></div>');\r\n    };\r\n    ipu.hideIndicator = function () {\r\n        $('.ui-preloader-indicator-overlay, .ui-preloader-indicator-modal').remove();\r\n    };\r\n    // Action Sheet\r\n    ipu.actions = function (params) {\r\n        var modal, groupSelector, buttonSelector;\r\n        params = params || [];\r\n\r\n        if (params.length > 0 && !$.isArray(params[0])) {\r\n            params = [params];\r\n        }\r\n        var modalHTML;\r\n        var buttonsHTML = '';\r\n        for (var i = 0; i < params.length; i++) {\r\n            for (var j = 0; j < params[i].length; j++) {\r\n                if (j === 0) buttonsHTML += '<div class=\"ui-actions-modal-group\">';\r\n                var button = params[i][j];\r\n                var buttonClass = button.label ? 'ui-actions-modal-label' : 'ui-actions-modal-button';\r\n                if (button.bold) buttonClass += ' ui-actions-modal-button-bold';\r\n                if (button.color) buttonClass += ' ui-color-' + button.color;\r\n                if (button.bg) buttonClass += ' ui-bg-' + button.bg;\r\n                if (button.disabled) buttonClass += ' disabled';\r\n                buttonsHTML += '<span class=\"' + buttonClass + '\">' + button.text + '</span>';\r\n                if (j === params[i].length - 1) buttonsHTML += '</div>';\r\n            }\r\n        }\r\n        modalHTML = '<div class=\"ui-actions-modal\">' + buttonsHTML + '</div>';\r\n        _modalTemplateTempDiv.innerHTML = modalHTML;\r\n        modal = $(_modalTemplateTempDiv).children();\r\n        $(defaults.modalContainer).append(modal[0]);\r\n        groupSelector = '.ui-actions-modal-group';\r\n        buttonSelector = '.ui-actions-modal-button';\r\n\r\n        var groups = modal.find(groupSelector);\r\n        groups.each(function (index, el) {\r\n            var groupIndex = index;\r\n            $(el).children().each(function (index, el) {\r\n                var buttonIndex = index;\r\n                var buttonParams = params[groupIndex][buttonIndex];\r\n                var clickTarget;\r\n                if ($(el).is(buttonSelector)) clickTarget = $(el);\r\n                // if (toPopover && $(el).find(buttonSelector).length > 0) clickTarget = $(el).find(buttonSelector);\r\n\r\n                if (clickTarget) {\r\n                    clickTarget.on('click', function (e) {\r\n                        if (buttonParams.close !== false) ipu.closeModal(modal);\r\n                        if (buttonParams.onClick) buttonParams.onClick(modal, e);\r\n                    });\r\n                }\r\n            });\r\n        });\r\n        ipu.openModal(modal);\r\n        return modal[0];\r\n    };\r\n\r\n    //显示一个消息,会在2秒钟后自动消失\r\n    ipu.toast = function (msg, duration, extraclass) {\r\n        var $toast = $('<div class=\"ui-modal ui-toast ' + (extraclass || '') + '\">' + msg + '</div>').appendTo(document.body);\r\n        ipu.openModal($toast, function () {\r\n            setTimeout(function () {\r\n                ipu.closeModal($toast);\r\n            }, duration || 2000);\r\n        });\r\n    };\r\n    ipu.openModal = function (modal, cb) {\r\n        modal = $(modal);\r\n        var isModal = modal.hasClass('ui-modal'),\r\n            isNotToast = !modal.hasClass('ui-toast');\r\n            isNotToast = false; // 强制打开新窗口\r\n        if ($('.ui-modal.ui-modal-in:not(.ui-modal-out)').length && defaults.modalStack && isModal && isNotToast) {\r\n            ipu.modalStack.push(function () {\r\n                ipu.openModal(modal, cb);\r\n            });\r\n            return;\r\n        }\r\n        var isPopup = modal.hasClass('ui-popup');\r\n        var isLoginScreen = modal.hasClass('ui-login-screen');\r\n        var isPickerModal = modal.hasClass('ui-picker-modal');\r\n        var isToast = modal.hasClass('ui-toast');\r\n        if (isModal) {\r\n            modal.show();\r\n            modal.css({\r\n                marginTop: -Math.round(modal.outerHeight() / 2) + 'px'\r\n            });\r\n        }\r\n        if (isToast) {\r\n            modal.css({\r\n                marginLeft: -Math.round(modal.outerWidth() / 2 / 1.185) + 'px' //1.185 是初始化时候的放大效果\r\n            });\r\n        }\r\n\r\n        var overlay;\r\n        if (!isLoginScreen && !isPickerModal && !isToast) {\r\n            if ($('.ui-modal-overlay').length === 0 && !isPopup) {\r\n                $(defaults.modalContainer).append('<div class=\"ui-modal-overlay\"></div>');\r\n            }\r\n            if ($('.ui-popup-overlay').length === 0 && isPopup) {\r\n                $(defaults.modalContainer).append('<div class=\"ui-popup-overlay\"></div>');\r\n            }\r\n            overlay = isPopup ? $('.ui-popup-overlay') : $('.ui-modal-overlay');\r\n        }\r\n\r\n        //Make sure that styles are applied, trigger relayout;\r\n        var clientLeft = modal[0].clientLeft;\r\n\r\n        // Trugger open event\r\n        modal.trigger('open');\r\n\r\n        // Picker modal body class\r\n        if (isPickerModal) {\r\n            $(defaults.modalContainer).addClass('ui-with-picker-modal');\r\n        }\r\n\r\n        // Classes for transition in\r\n        if (!isLoginScreen && !isPickerModal && !isToast) overlay.addClass('ui-modal-overlay-visible');\r\n        modal.removeClass('ui-modal-out').addClass('ui-modal-in').transitionEnd(function (e) {\r\n            if (modal.hasClass('ui-modal-out')) modal.trigger('closed');\r\n            else modal.trigger('opened');\r\n        });\r\n        // excute callback\r\n        if (typeof cb === 'function') {\r\n            cb.call(this);\r\n        }\r\n        return true;\r\n    };\r\n    ipu.closeModal = function (modal) {\r\n        modal = $(modal || '.ui-modal-in');\r\n        if (typeof modal !== 'undefined' && modal.length === 0) {\r\n            return;\r\n        }\r\n        var isModal = modal.hasClass('ui-modal'),\r\n            isPopup = modal.hasClass('ui-popup'),\r\n            isToast = modal.hasClass('ui-toast'),\r\n            isLoginScreen = modal.hasClass('ui-login-screen'),\r\n            isPickerModal = modal.hasClass('ui-picker-modal'),\r\n            removeOnClose = modal.hasClass('ui-remove-on-close'),\r\n            overlay = isPopup ? $('.ui-popup-overlay') : $('.ui-modal-overlay');\r\n        if (isPopup) {\r\n            if (modal.length === $('.ui-popup.ui-modal-in').length) {\r\n                overlay.removeClass('ui-modal-overlay-visible');\r\n            }\r\n        }\r\n        else if (!(isPickerModal || isToast)) {\r\n            overlay.removeClass('ui-modal-overlay-visible');\r\n        }\r\n        modal.trigger('close');\r\n\r\n        // Picker modal body class\r\n        if (isPickerModal) {\r\n            $(defaults.modalContainer).removeClass('ui-with-picker-modal');\r\n            $(defaults.modalContainer).addClass('ui-picker-modal-closing');\r\n        }\r\n\r\n        modal.removeClass('ui-modal-in').addClass('ui-modal-out').transitionEnd(function (e) {\r\n            if (modal.hasClass('ui-modal-out')) modal.trigger('closed');\r\n            else modal.trigger('opened');\r\n\r\n            if (isPickerModal) {\r\n                $(defaults.modalContainer).removeClass('ui-picker-modal-closing');\r\n            }\r\n            if (isPopup || isLoginScreen || isPickerModal) {\r\n                modal.removeClass('ui-modal-out').hide();\r\n                if (removeOnClose && modal.length > 0) {\r\n                    modal.remove();\r\n                }\r\n            }\r\n            else {\r\n                modal.remove();\r\n            }\r\n        });\r\n        if (isModal && defaults.modalStack) {\r\n            ipu.modalStackClearQueue();\r\n        }\r\n\r\n        return true;\r\n    };\r\n    function handleClicks(e) {\r\n        /*jshint validthis:true */\r\n        var clicked = $(this);\r\n        var url = clicked.attr('href');\r\n\r\n\r\n        //Collect Clicked data- attributes\r\n       /* var clickedData = clicked.dataset();\r\n\r\n        // Popup\r\n        var popup;\r\n        if (clicked.hasClass('ui-open-popup')) {\r\n            if (clickedData.popup) {\r\n                popup = clickedData.popup;\r\n            }\r\n            else popup = '.ui-popup';\r\n            ipu.popup(popup);\r\n        }\r\n        if (clicked.hasClass('ui-close-popup')) {\r\n            if (clickedData.popup) {\r\n                popup = clickedData.popup;\r\n            }\r\n            else popup = '.ui-popup.modal-in';\r\n            ipu.closeModal(popup);\r\n        }*/\r\n\r\n        // Close Modal\r\n        if (clicked.hasClass('ui-modal-overlay')) {\r\n            if ($('.ui-modal.ui-modal-in').length > 0 && defaults.modalCloseByOutside)\r\n                ipu.closeModal('.ui-modal.ui-modal-in');\r\n            if ($('.ui-actions-modal.ui-modal-in').length > 0 && defaults.actionsCloseByOutside)\r\n                ipu.closeModal('.ui-actions-modal.ui-modal-in');\r\n\r\n        }\r\n        if (clicked.hasClass('ui-popup-overlay')) {\r\n            if ($('.ui-popup.ui-modal-in').length > 0 && defaults.popupCloseByOutside)\r\n                ipu.closeModal('.ui-popup.modal-in');\r\n        }\r\n    }\r\n\r\n    $(document).on('click', ' .ui-modal-overlay, .ui-popup-overlay, .ui-close-popup, .ui-open-popup, .ui-close-picker', handleClicks);\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\r\n    NavBar.prototype.defaultOpt = {\r\n        animate: false,           // 默认有动画\r\n        contentSlt: \".ui-nav-content\",\r\n        callBack: function (currentIndex, lastIndex) { // currentIndex: 当前索引,lastIndex上一次索引(第一次时为null)\r\n        }\r\n    };\r\n\r\n    function NavBar(slt, options) {\r\n        this.options = $.extend({}, this.defaultOpt, options);\r\n        this.content = $(this.options.contentSlt);\r\n        this.nav = $(slt);\r\n        this.wrapper = $(\">ul\", this.content);\r\n        this.contents = $(\">li\", this.wrapper);\r\n        this.navs = $(\">a\", this.nav);\r\n        var me = this;\r\n\r\n        var activeIndex = this.navs.filter(\".ui-active\").index(); // 查找默认有active的索引\r\n        if (activeIndex == -1) {\r\n            activeIndex = this.contents.filter(\".ui-active\").index(); // 查找默认有active的索引\r\n        }\r\n        this.options.index = activeIndex != -1 ? activeIndex : 0;\r\n\r\n        if (!this.options.animate) {\r\n            this.wrapper.addClass(\"ui-no-animation\")\r\n        }\r\n\r\n        this.navs.each(function (index, i) {\r\n            $(this).click(function () {\r\n                me.show(index);\r\n            });\r\n        });\r\n\r\n        this.lastIndex = null;\r\n        this.currentIndex = null;\r\n        me.show(this.options.index);\r\n    }\r\n\r\n    NavBar.prototype.show = function (index) {\r\n        if (this.currentIndex != index) {\r\n            var currentContent = $(this.contents[index]).addClass(\"ui-show\");\r\n\r\n            if (this.options.animate) {\r\n                if (this.lastIndex != null && this.lastIndex != index) {\r\n                    $(this.contents[this.lastIndex]).removeClass(\"ui-show\"); // 隐藏上上个元素\r\n                }\r\n\r\n                if (this.currentIndex != null) {        // 非第一次需要动画效果\r\n                    if (this.currentIndex < index) {   // 需要内容为往左走,显示右边的内容\r\n                        if (this.lastIndex != null && this.lastIndex < this.currentIndex) {  // 内容已经左走过了,则需要移除动画复原位置,再通过width()方法强制生效\r\n                            this.wrapper.addClass(\"ui-no-animation\").removeClass(\"ui-nav-content-right\").width(); // 可以强制刷新,默认jquery应该会将这些dom上的修改延时处理?\r\n                        }\r\n                    } else {\r\n                        if (this.lastIndex == null || this.lastIndex > this.currentIndex) { // 类似同上\r\n                            this.wrapper.addClass(\"ui-no-animation\").addClass(\"ui-nav-content-right\").width(); // 可以强制刷新不?\r\n                        }\r\n                    }\r\n                    this.wrapper.removeClass(\"ui-no-animation\").toggleClass(\"ui-nav-content-right\");\r\n                }\r\n            } else {\r\n                $(this.contents[this.currentIndex]).removeClass(\"ui-show\");\r\n            }\r\n\r\n            // 更新class,ui-active状态\r\n            $(this.contents[index]).addClass(\"ui-active\").siblings(\".ui-active\").removeClass(\"ui-active\");\r\n            $(this.navs[index]).addClass(\"ui-active\").siblings(\".ui-active\").removeClass(\"ui-active\");\r\n\r\n            this.lastIndex = this.currentIndex;\r\n            this.currentIndex = index;\r\n\r\n            if (this.options.callBack) {\r\n                this.options.callBack(this.currentIndex, this.lastIndex);\r\n            }\r\n        }\r\n    };\r\n\r\n    ipu.navBar = function (slt, options) {\r\n        return new NavBar(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\r\n    function __dealCssEvent(eventNameArr, callback) {\r\n        var events = eventNameArr,\r\n            i, dom = this;// jshint ignore:line\r\n\r\n        function fireCallBack(e) {\r\n            if (e.target !== this) return;\r\n            callback.call(this, e);\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.off(events[i], fireCallBack);\r\n            }\r\n        }\r\n\r\n        if (callback) {\r\n            for (i = 0; i < events.length; i++) {\r\n                dom.on(events[i], fireCallBack);\r\n            }\r\n        }\r\n    }\r\n\r\n    $.fn.animationEnd = function (callback) {\r\n        __dealCssEvent.call(this, ['webkitAnimationEnd', 'animationend'], callback);\r\n        return this;\r\n    };\r\n\r\n    function submitForm(doc, url ,params){\r\n        var form = doc.createElement(\"form\");\r\n        form.action = url;\r\n        form.method = \"post\";\r\n        form.style.display = \"none\";\r\n\r\n        for (var x in params) {\r\n            var ele = doc.createElement(\"input\");\r\n            ele.type=\"hidden\";\r\n            ele.name = x;\r\n            ele.value =  params[x];\r\n            form.appendChild(ele);\r\n        }\r\n\r\n        doc.body.appendChild(form);\r\n        form.submit();\r\n    }\r\n\r\n    // 检查是否有ui-pages的结构\r\n    function checkPages() {\r\n        if(!hasPages){\r\n            pagesObj = $(\".ui-pages\"); // pagesObj为空则进行jquery取值\r\n            if(pagesObj.size() == 0){\r\n                pagesObj =  $(\"<div class='ui-pages'><div class='ui-page ui-show \"+zeroPageClass+\"' id='\"+pageIdPrefix+\"0'></div>\").appendTo(\"body\");\r\n            }\r\n            hasPages = true;\r\n        }\r\n    }\r\n\r\n    // 站位页面\r\n    function isZeroPage(page) {\r\n        return $(page).hasClass(zeroPageClass);\r\n    }\r\n\r\n    var page = {};\r\n    var hasPages = false;\r\n    var maps = {};\r\n    var pageNo = 1; // 编号0留给主页面或当前页面,或没有\r\n    var pageIdPrefix = \"ipuPage-\";\r\n    var pagesObj = null;\r\n    var animateInClass = \"ui-anim ui-slideRightIn\";\r\n    var animateOutClass  = \"ui-anim ui-slideRightOut\";\r\n    var eventName = \"ipuUIPageBack\";\r\n    var zeroPageClass = 'ui-page-zero';\r\n    var zeroPagesClass = 'ui-pages-zero';\r\n\r\n    page.options = {     // 那个窗口执行open,默认父窗口\r\n        target: window.parent, // 默认执行父窗口\r\n        backIndex: -1,    // 默认回退一页\r\n        closeIndex: -1,   // 默认关闭最近一个页面\r\n        params:{},        // post的默认参数\r\n        animate: true,     // 是否动画效果\r\n        showLoading: true,   // 是否显示加载消息\r\n        loadingMessage: '正在加载中',\r\n        method : null,     // 请求方式,用户不需要设置\r\n        minMessageTime: 500, // 最小显示加载时间,避免出现闪现的情况\r\n        callBack:function () { // 事件回调\r\n        }\r\n    };\r\n\r\n    // 当前页面加载,针对顶层父窗口\r\n    page.openPage = function (url, options) {\r\n        var newPage = null;\r\n        var nowPageNo = pageIdPrefix + (pageNo++);\r\n        maps[nowPageNo] = url;\r\n\r\n        checkPages();\r\n\r\n        if(options.showLoading){\r\n            ipu.showPreloader(options.loadingMessage, options.minMessageTime);\r\n        }\r\n\r\n        if(options.method == 'post'){\r\n            newPage = $(\"<div class='ui-page' id='\"+nowPageNo+\"'><iframe class='ui-page-iframe'></iframe></div>\");\r\n        }else{\r\n            newPage = $(\"<div class='ui-page' id='\"+nowPageNo+\"'><iframe class='ui-page-iframe' src='\"+url+\"'></iframe></div>\");\r\n        }\r\n\r\n        var zeroPage = isZeroPage($(\".ui-page:last\", pagesObj));\r\n        var animatePage = newPage;\r\n        if(zeroPage){\r\n            animatePage = pagesObj.addClass(zeroPagesClass);\r\n        }\r\n\r\n        function end() {\r\n            if(options.showLoading) {\r\n                ipu.hidePreloader();\r\n            }\r\n\r\n            if(options.animate) {\r\n                animatePage.removeClass(animateInClass);\r\n            }\r\n\r\n            newPage.siblings(\".ui-show\").removeClass('ui-show');\r\n            if(options.callBack){\r\n                options.callBack();\r\n            }\r\n        }\r\n\r\n        $(\".ui-page-iframe\", newPage).one('load', function () {\r\n            newPage.addClass(\"ui-show\").width(); // 强制生效,否则可能出现页面闪现,无动画情况\r\n\r\n            if(zeroPage){\r\n                animatePage.removeClass(zeroPagesClass);\r\n            }\r\n            if(options.animate){\r\n                animatePage.addClass(animateInClass).animationEnd(end);\r\n            }else{\r\n                end();\r\n            }\r\n        });\r\n\r\n        newPage.appendTo(pagesObj);\r\n        if(options.method == 'post') {\r\n            var pageDoc = $(\".ui-page-iframe\", newPage)[0].contentDocument;\r\n            submitForm(pageDoc, url, options.params);\r\n        }\r\n    };\r\n\r\n    // post方式加载页面\r\n    page.postPage = function (url, options) {\r\n        options.method = 'post';\r\n        page.openPage(url, options);\r\n    };\r\n\r\n    // 当前页面后退,针对顶层父窗口\r\n    page.backPage = function (options) {\r\n        var backIndex = options.backIndex;\r\n        var page = null;\r\n        var nowPage = $(\".ui-page.ui-show\", pagesObj);\r\n\r\n        if(backIndex == 0){\r\n            page = $(\".ui-page:first\", pagesObj);\r\n        }else { // 越界的情况\r\n            var prevPage = nowPage.prevAll(\".ui-page\");\r\n            if(backIndex < 0){\r\n                page= $(prevPage[-backIndex - 1]);\r\n            }else{\r\n                page= $(prevPage[prevPage.size() - backIndex]);\r\n            }\r\n        }\r\n\r\n        var animatePage = nowPage;\r\n        var zeroPage = isZeroPage(page);\r\n\r\n        // 主页面模式时\r\n        if(zeroPage){\r\n            animatePage = pagesObj;\r\n        }else{\r\n            page.addClass(\"ui-show\"); //显示前一个\r\n        }\r\n\r\n        function end (){\r\n            $(this).removeClass(animateOutClass);\r\n            page.nextAll(\".ui-page\").remove();\r\n\r\n            var iframe = $(\".ui-page-iframe\", page);\r\n            var nowDoc;\r\n\r\n            if(iframe.size() == 0){ // 找不到子窗口就当是返回了主页面,在当前窗口触发\r\n                nowDoc = window.document;\r\n            }else{\r\n                nowDoc = iframe[0].contentDocument;\r\n            }\r\n\r\n            if(zeroPage){\r\n                pagesObj.addClass(zeroPagesClass);\r\n            }\r\n\r\n            var evt = nowDoc.createEvent('Event');\r\n            evt.initEvent(eventName, true, true);\r\n            if(options.data){\r\n                evt.data = options.data;\r\n            }\r\n            nowDoc.body.dispatchEvent(evt);\r\n            if(options.callBack){\r\n                options.callBack();\r\n            }\r\n        }\r\n\r\n        if(options.animate){\r\n            animatePage.addClass(animateOutClass).animationEnd(end);\r\n        }else{\r\n            end();\r\n        }\r\n    };\r\n\r\n    // 往前关闭窗口\r\n    page.closePage = function (options) {\r\n        var closeIndex = options.closeIndex;\r\n        var prevPage = $(\".ui-page.ui-show\", pagesObj).prevAll(\".ui-page\");\r\n\r\n        if(closeIndex < 0){\r\n            closeIndex = -closeIndex -1;\r\n        }else{\r\n            closeIndex = prevPage.size() - closeIndex;\r\n        }\r\n\r\n        $(prevPage[closeIndex]).remove();\r\n        if(options.callBack){\r\n            options.callBack();\r\n        }\r\n    };\r\n\r\n    // 调用父窗口打开页面\r\n    page.open = function (url, options) {\r\n        options = $.extend({}, this.options, options);\r\n        options.target.ipu.page.openPage(url, options);\r\n    };\r\n\r\n    // post方法\r\n    page.post = function (url, options) {\r\n        options = $.extend({}, this.options, options);\r\n        options.method = 'post';\r\n        options.target.ipu.page.openPage(url, options);\r\n    };\r\n\r\n    // 调用父窗口,回退\r\n    page.back = function (options) {\r\n        options = $.extend({}, this.options, options);\r\n        options.target.ipu.page.backPage(options);\r\n    };\r\n\r\n    // 返回首页\r\n    page.backHome = function (options) {\r\n        options = options || {};\r\n        options.backIndex = 0;\r\n        page.back(options);\r\n    };\r\n\r\n    // 子窗口,待确认\r\n    page.close = function (options) {\r\n        options = $.extend({}, this.options, options);\r\n        options.target.ipu.page.closePage(options);\r\n    };\r\n\r\n    // 添加回调事件\r\n    page.onBack = function (back) {\r\n        $(\"body\").on(eventName, function (e) {\r\n            var data = e.originalEvent.data;\r\n            back(data);\r\n        });\r\n    };\r\n\r\n    // 提供一个关闭一群窗口的方法\r\n    ipu.page = page;\r\n})(ipu || window, jQuery);\r\n\n// picker\r\n(function (ipu, $, Hammer) {\r\n    var showItemSize = 9;   // 显示的子项数量,\r\n    var r = 90;             // 计算旋转的圆半径,结果应该缩小,是为了r不要距离容器太近\r\n    var itemAngle = 180 / showItemSize;   // 每项对应的角度是 180/9 = 20\r\n    var maxExceed = itemAngle;         // 滚动时允许超出边界的最大角度\r\n    // itemHeight = 40px;       // 需要给出r=89是怎么计算出来的,是根据 40/2/Math.tan(40/2/180*Math.PI)=113,直接太大不好看\r\n\r\n    function Picker(slt, options) {\r\n        this.el = $(slt)[0];\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this._init();\r\n    }\r\n\r\n    // 默认参数\r\n    Picker.prototype.defaultOptions = {\r\n        onChange: function () {       // 子项选中事件\r\n        },\r\n        listen: true,                  // 默认已开记监听变化\r\n        data: []\r\n    };\r\n\r\n    Picker.prototype._init = function () {\r\n        var self = this;\r\n        this.wrap = $(\">ul\", this.el);\r\n        this.index = null;\r\n        this.listen = !!this.options.listen;\r\n\r\n        this.beginAngle = 0;\r\n        this.beginExceed = this.beginAngle - maxExceed;       // 最小角度值\r\n        this.stopInertiaMove = false;\r\n        this.lastAngle = null; // 保存滑动前的角度\r\n        this.empty = this.options.data.length == 0;\r\n\r\n        // 如果是ios,则ul的旋转中心点,有变化\r\n        if(ipu.device.ios){\r\n            this.wrap.css(\"transform-origin\", \"center center \"+r+\"px\"); //如果是ios,要变更旋转的中心点\r\n        }\r\n\r\n        this.hammer = new Hammer.Manager(this.el);\r\n        this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL, threshold: 5}));\r\n        this.hammer.add(new Hammer.Press({threshold: 4}));  //\r\n        this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this._onPan, this));\r\n\r\n        this.hammer.on(\"press pressup\", function (e) {  // 如果用户点击了,是停止自动滚动\r\n           // console.log('press');\r\n            if(this.empty){\r\n                return ;\r\n            }\r\n\r\n            self.stopInertiaMove = true;\r\n            if (e.type == 'pressup') {\r\n                self.endScroll();\r\n            }\r\n        });\r\n\r\n        this.setItems(this.options.data);\r\n    };\r\n\r\n    Picker.prototype.setItems = function (data, textName) {\r\n        this.wrap.empty(); // 清空历史数据\r\n        this.data = data = data || [];\r\n        this.empty = data.length == 0; // 数据是否为空\r\n\r\n        this.newData = true; // 表示设置了新数据,触发change回调,但第一次设置时,不需要触发\r\n        var self = this;\r\n        var lis = \"\";\r\n        textName = textName || 'text';\r\n\r\n        for (var i = 0, j = data.length; i < j; i++) {\r\n            lis = lis + \"<li>\" + data[i][textName] + \"</li>\";\r\n        }\r\n\r\n        $(lis).appendTo(this.wrap);\r\n\r\n        this.items = $(\">li\", this.wrap);\r\n        this.itemsSize = this.items.size();\r\n\r\n        this.endAngle = (this.empty ? 0 : this.itemsSize - 1) * itemAngle;\r\n        this.endExceed = this.endAngle + maxExceed;  // 最大旋转角度值\r\n\r\n        // 初始化各子项角度\r\n        this.items.each(function (i) {\r\n            $(this).css({\r\n                \"transform\": \"translateZ(\" + r + \"px) rotateX(-\" + (i * itemAngle) + \"deg)\",\r\n                \"transform-origin\": \"center center -\" + r + \"px\"\r\n            });\r\n            $(this).click(function () {\r\n                console.log('click');\r\n                self.stopInertiaMove = true;\r\n                self.setAngle(i * itemAngle, true);\r\n            })\r\n        });\r\n\r\n        var newAngle ;\r\n        if(this.empty || this.index == null){\r\n            newAngle = 0;\r\n        }else {\r\n            if(this.index > this.itemsSize - 1){\r\n                newAngle = (this.itemsSize - 1) * itemAngle;\r\n            }else{\r\n                newAngle = this.index * itemAngle;\r\n            }\r\n        }\r\n        this.setAngle(newAngle, true);\r\n\r\n        /*if (this.index !== null) { // 当前已经旋转则,保留当前的索引\r\n         if (this.index > this.itemsSize - 1 && !this.empty) {\r\n         this.index = this.itemsSize - 1;\r\n         }\r\n         this.setAngle(this.index * itemAngle, true);\r\n         } else { // 第一次初始数据,不触发change事件\r\n         this.index = 0;     // 被调用后,不能再使用null值了\r\n         this.setAngle(0, false); // 第一次设置初始化时,不触发change事件\r\n         }*/\r\n    };\r\n\r\n    Picker.prototype._onPan = function (ev) {\r\n        if(this.empty){\r\n            return ;\r\n        }\r\n\r\n        //console.log(ev.deltaX + \"==\"+ ev.deltaY);\r\n        if (ev.type == 'panstart') { // 好像一定要移动才有startg事件\r\n            self.stopInertiaMove = true;\r\n            this.lastAngle = this.angle;\r\n            this.wrap.addClass(\"ui-noanimate\");    // 移除动画\r\n            this.stopInertiaMove = true; //  停止自动减速滚动\r\n           // console.log('panstart');\r\n\r\n        } else if (ev.type == 'panmove') {\r\n            var moveAngle = this.calcAngle(ev.deltaY);\r\n            var newAngle = this.lastAngle - moveAngle;   //最新的角度\r\n            //console.log('=='+newAngle);\r\n            // 一个可以转动的最小值和最大值过滤\r\n            if (newAngle < this.beginExceed) {\r\n                newAngle = this.beginExceed;\r\n            }\r\n            if (newAngle > this.endExceed) {\r\n                newAngle = this.endExceed;\r\n            }\r\n            this.setAngle(newAngle);\r\n\r\n        } else { // end or cancel事件\r\n            // console.log('end or cancel:' + ev.type);\r\n            var v = ev.overallVelocityY;    // 滑动的速度\r\n            var dir = v > 0 ? -1 : 1; //加速度方向\r\n            var deceleration = dir * 0.0006 * -1;\r\n            var duration = Math.abs(v / deceleration); // 速度消减至0所需时间\r\n            var dist = v * duration / 2; //最终移动多少\r\n\r\n            var startAngle = this.angle;\r\n            var distAngle = -this.calcAngle(dist);\r\n           //  console.log(\"dist=\" + dist + \", distAngle\" + distAngle);\r\n\r\n            //----\r\n            var srcDistAngle = distAngle;\r\n            if (startAngle + distAngle < this.beginExceed) {\r\n                distAngle = this.beginExceed - startAngle;\r\n                duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n            }\r\n            if (startAngle + distAngle > this.endExceed) {\r\n                distAngle = this.endExceed - startAngle;\r\n                duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n            }\r\n\r\n            if (distAngle == 0) {\r\n                this.endScroll();\r\n                return;\r\n            }\r\n            this.scrollDistAngle(startAngle, distAngle, duration);\r\n        }\r\n    };\r\n\r\n    // 计算移动的角度,转动的角度,就是移动的距离对应相关圆周\r\n    // 2*r*PI = 360,  angle = 360*c/(2*r*PI)\r\n    var ca = 360 / (2 * r * Math.PI);\r\n    Picker.prototype.calcAngle = function (c) {\r\n        return c * ca;\r\n    };\r\n\r\n    // endScroll 是否为结束的滚动结束,滚动结束需要调用结束事件\r\n    Picker.prototype.setAngle = function (newAngle, endScroll) {\r\n        this.angle = newAngle; // 存储最新值\r\n        this.wrap.css(\"transform\", \"perspective(1000px) rotateY(0deg) rotateX(\" + newAngle + \"deg)\");\r\n        this.calcItemVisable(newAngle);\r\n\r\n        if (endScroll) {\r\n            var index = newAngle / itemAngle;\r\n            var oldIndex = this.index;\r\n            this.index = this.empty ? null : index; // 这里可以做一个判断,如果是empty,则index值可以不改变\r\n\r\n            // 这个地方要判断下,数据更新或索引更新都要触发\r\n            if (oldIndex != index || this.newData) {\r\n                this.newData = false;\r\n               // console.log('change');\r\n                if (this.options.onChange && this.listen) {\r\n                    // console.log('changed call');\r\n                    this.options.onChange(this.getSelectedItem(), this.index, oldIndex, this.newData);\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    // 计算子项的显示情况\r\n    Picker.prototype.calcItemVisable = function (angle) {\r\n        this.items.each(function (index) {\r\n            var difference = Math.abs(index * itemAngle - angle);\r\n\r\n            if (difference < itemAngle / 2) {\r\n                $(this).addClass(\"ui-highlight ui-visible\");\r\n            } else if (difference >= (90 - itemAngle / 2)) { // 距离不能超过90度\r\n                $(this).removeClass(\"ui-highlight ui-visible\");\r\n            } else {\r\n                $(this).addClass(\"ui-visible\").removeClass(\"ui-highlight\");\r\n            }\r\n        });\r\n    };\r\n\r\n    // 设置最后回归位置\r\n    Picker.prototype.endScroll = function () {\r\n        this.wrap.removeClass(\"ui-noanimate\");\r\n        var endAngle;\r\n\r\n        if (this.angle < this.beginAngle) {\r\n            endAngle = this.beginAngle;\r\n        } else if (this.angle > this.endAngle) {\r\n            endAngle = this.endAngle;\r\n        } else {\r\n            var index = parseInt((this.angle / itemAngle).toFixed(0));\r\n            endAngle = (itemAngle * index);\r\n        }\r\n\r\n        this.setAngle(endAngle, true);\r\n    };\r\n\r\n    // 进行惯性滚动\r\n    Picker.prototype.scrollDistAngle = function (startAngle, distAngle, duration) {\r\n        var self = this;\r\n        var nowTime = new Date().getTime();\r\n        this.stopInertiaMove = false;\r\n        duration = 1 * duration; // 滚动时长控制修改\r\n\r\n        // hammer调用的惯性函数\r\n        (function (nowTime, startAngle, distAngle, duration) {\r\n            var frameInterval = 13;\r\n            var stepCount = duration / frameInterval;\r\n            var stepIndex = 0;\r\n\r\n            (function inertiaMove() {\r\n                if (self.stopInertiaMove) return;\r\n                var newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\r\n                self.setAngle(newAngle);\r\n                stepIndex++;\r\n\r\n                if (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\r\n                    self.endScroll();\r\n                    return;\r\n                }\r\n\r\n                setTimeout(inertiaMove, frameInterval);\r\n            })();\r\n\r\n        })(nowTime, startAngle, distAngle, duration);\r\n    };\r\n\r\n    Picker.prototype.setListen = function (bool) {\r\n        this.listen = !!bool;\r\n    };\r\n\r\n    Picker.prototype.quartEaseOut = function (t, b, c, d) {\r\n        return -c * ((t = t / d - 1) * t * t * t - 1) + b;\r\n    };\r\n\r\n    Picker.prototype.setSelectedValue = function (value) {\r\n        var self = this;\r\n        for (var index in self.data) {\r\n            var item = self.data[index];\r\n            if (item.value == value) {\r\n                self.setAngle(index* itemAngle, true);\r\n                return;\r\n            }\r\n        }\r\n    };\r\n\r\n    // 获取当前选中的值\r\n    Picker.prototype.getSelectedItem = function () {\r\n        return this.empty ? {}: this.data[this.index];\r\n    };\r\n\r\n    Picker.prototype.getSelectedValue = function () {\r\n        return this.getSelectedItem().value;\r\n    };\r\n\r\n    Picker.prototype.getSelectedText = function () {\r\n        return this.getSelectedItem().text;\r\n    };\r\n\r\n    Picker.prototype.getSelectedIndex = function () {\r\n        return this.index;\r\n    };\r\n\r\n    ipu.Picker = Picker;\r\n\r\n})(ipu || window, jQuery, Hammer);\r\n\n// popPicker\r\n(function (ipu, $) {\r\n    var Picker = ipu.Picker;\r\n\r\n    function PopPicker(options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        if(!Picker){\r\n            Picker = ipu.Picker;\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    PopPicker.prototype.defaultOptions = {\r\n        template: '<div class=\"ui-poppicker\">\\\r\n                        <div class=\"ui-poppicker-header\">\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-cancel\">取消</button>\\\r\n                            <button class=\"ui-btn ui-btn-s ui-poppicker-btn-ok\">确定</button>\\\r\n                        </div>\\\r\n                        <div class=\"ui-poppicker-body\">\\\r\n                        </div>\\\r\n                    </div>',\r\n        pickerTemplate: '<div class=\"ui-picker\">\\\r\n                            <div class=\"ui-picker-selectbox\"></div>\\\r\n                            <ul></ul>\\\r\n                          </div>',\r\n        data: [],    // 数据\r\n        layer: 1,   // 数据层级\r\n        btns: ['取消', '确认'],\r\n        callBack: function () { // 选择数据时的回调函数\r\n\r\n        }\r\n    };\r\n\r\n    PopPicker.prototype._init = function () {\r\n        this.holder = $(this.options.template).appendTo(\"body\");\r\n        var bodyHtml = $(\".ui-poppicker-body\", this.holder);\r\n\r\n        var layer = this.options.layer;\r\n        var width = (100 / layer) + \"%\";\r\n        this.pickers = new Array(layer);\r\n        var self = this;\r\n        var pickerHtml;\r\n        this.mask = this.createMask();\r\n\r\n        // 先初始化最底层picerk,再上面来\r\n        for (var i = layer -1; i >=0; i--) {\r\n            pickerHtml = $(this.options.pickerTemplate).prependTo(bodyHtml).css({width: width});\r\n\r\n            this.pickers[i] = new  Picker(pickerHtml, {\r\n                onChange: (function (i) {\r\n                    return function (item, index) { // 更新底部的值\r\n                        if (i != layer - 1) {\r\n                            self.pickers[i + 1].setItems(item.data);\r\n                        }\r\n                    };\r\n                })(i)\r\n            });\r\n        }\r\n\r\n        $(\".ui-poppicker-btn-ok\", this.holder).click(function () {\r\n            var rs = self.getSelectItems();\r\n            if (self.options.callBack(rs) !== false) {\r\n                self.hide();\r\n            }\r\n        }).text(this.options.btns[1]);\r\n\r\n        $(\".ui-poppicker-btn-cancel\", this.holder).click(function () {\r\n            self.hide();\r\n        }).text(this.options.btns[0]);\r\n    };\r\n\r\n    PopPicker.prototype.setData = function (data) {\r\n        this.pickers[0].setItems(data);\r\n    };\r\n\r\n    PopPicker.prototype.show = function (callBack) {\r\n        if (callBack) {\r\n            this.options.callBack = callBack;\r\n        }\r\n        this.mask.show();\r\n        this.holder.addClass(\"ui-active\");\r\n    };\r\n\r\n    PopPicker.prototype.hide = function () {\r\n        this.mask.close();\r\n        this.holder.removeClass(\"ui-active\");\r\n    };\r\n\r\n    // 获取相关值\r\n    PopPicker.prototype.getSelectItems = function () {\r\n        if (this.options.layer == 1) {\r\n            return this.pickers[0].getSelectedItem();\r\n        } else {\r\n            var rs = [];\r\n            for (var i = 0; i < this.options.layer; i++) {\r\n                rs.push(this.pickers[i].getSelectedItem());\r\n            }\r\n            return rs;\r\n        }\r\n    };\r\n\r\n    // 应该移除callback参数,提取出业成一个工具方法\r\n    PopPicker.prototype.createMask = function(callback) {\r\n        var self = this;\r\n        var element = document.createElement('div');\r\n        element.classList.add(\"ui-picker-backup\");\r\n        //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n        element.addEventListener('click', function() {\r\n            self.hide();\r\n        });\r\n        var mask = [element];\r\n        mask._show = false;\r\n        mask.show = function() {\r\n            mask._show = true;\r\n            element.setAttribute('style', 'opacity:1');\r\n            document.body.appendChild(element);\r\n            return mask;\r\n        };\r\n        mask._remove = function() {\r\n            if (mask._show) {\r\n                mask._show = false;\r\n                element.setAttribute('style', 'opacity:0');\r\n                setTimeout(function() {\r\n                    var body = document.body;\r\n                    element.parentNode === body && body.removeChild(element);\r\n                }, 350);\r\n            }\r\n            return mask;\r\n        };\r\n        mask.close = function() {\r\n            if(mask._show){\r\n                if (callback) {\r\n                    if (callback() !== false) {\r\n                        mask._remove();\r\n                    }\r\n                } else {\r\n                    mask._remove();\r\n                }\r\n            }\r\n        };\r\n        return mask;\r\n    };\r\n\r\n    ipu.popPicker = function (options) {\r\n        return new PopPicker(options);\r\n    };\r\n\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\r\n\r\n    /**\r\n     *进度条\r\n     */\r\n    function progressBar(id, options) {\r\n        this.id = id;\r\n        this.level = options.level;\r\n        this.progress = options.progress;\r\n        this.progressBar = $(id).eq(0);\r\n\r\n        if (options.progress != null) {\r\n            this.setProgress(this.progress);\r\n        }\r\n        if (options.level != null) {\r\n            this.setLevel(this.level);\r\n        }\r\n    }\r\n\r\n    progressBar.prototype.setProgress = function (pro) {\r\n        if (pro < 0 || pro > 100) return;\r\n\r\n        $(this.progressBar.find(\".ipu-progressbar\")).css(\"transform\", \"translate3d(\" + (-(100 - pro)) + \"%, 0px, 0px)\");\r\n        this.progress = pro;\r\n    };\r\n\r\n    progressBar.prototype.getProgress = function () {\r\n        return this.progress;\r\n    };\r\n\r\n    progressBar.prototype.setLevel = function (level) {\r\n        if (level == \"default\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-hightlight ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progress\");\r\n        } else if (level == \"success\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-highlight ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-success\");\r\n        } else if (level == \"highlight\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-warning\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-highlight\");\r\n        } else if (level == \"warning\") {\r\n            $(this.progressBar).removeClass(\"ui-progressbar-success ui-progressbar-highlight\");\r\n            $(this.progressBar).addClass(\"ui-progressbar-warning\");\r\n        }\r\n    };\r\n\r\n    ipu.progressBar = function (slt, options) {\r\n        return new progressBar(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $, iScroll) {\r\n\r\n    // 扩展参数,iscroll组件的参数选项\r\n    // 扩展参数,用户直接在页面上自定好,顶端和底部加载html\r\n    // 设置上下条件长度,或计算函数\r\n    // 处理resize的问题,用户主动调用refresh??\r\n    // 底部启用或停用时,应该刷新组件iscroll高度\r\n    // 顶部正在加载时,自动停止底端加载状态,停用底部加载,停用底部加载时,可以不隐藏,变性成显示不见,或者隐藏,然后修改iscroll参数\r\n\r\n    Refresh.prototype.defaultOptions = {\r\n        bottomLoadFun: null,           // 底部加载处理函数\r\n        topLoadFun: null,               // 顶部加载处理函数\r\n        initEnableTop: true,            // 初始时启用刷新,有时用户并不想启用\r\n        initEnableBottom: true,         // 初始时启用加载更多,用时用户并不想启用\r\n        bottomLoadHtml: '<div class=\"ui-refresh-bottom\"><span class=\"ui-refresh-loading\"></span></div>',  // 默认底部加载显示内容\r\n        topLoadHtml: '<div class=\"ui-refresh-top\"><span class=\"ui-refresh-loading\"></span><div class=\"ui-refresh-arrow\"></div></div>',\r\n                // 默认顶部加载显示内容,最上层节点class有下面三个阶段变化\r\n                // 默认阶段,不是顶部加载状态时,且拖动时未达到加载距离,无特殊class,移除ui-refresh-top-loading\r\n                // 拖动达到加载距离,则增加class:ui-refresh-toload\r\n                // 加载中,则增加class:ui-refresh-top-loading,移除class:ui-refresh-toload\r\n        bottomAddLen: 0,  // 底部提前加载距离,单位px\r\n        iScrollOptions:{} // 主要是用来接收外面一些函数,不能传递回调的相关函数如refresh,也可在本地函数调用完后,再调用参数的函数,不推荐\r\n    };\r\n\r\n    function Refresh(slt, options) {\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this.el = $(slt).get(0);\r\n        this._initBottomAndTop();\r\n        var me = this;\r\n\r\n        this.iScrollOptions = {\r\n            onScrollMove: function (e) {\r\n                if (me.topEnable && !me.topLoading) { // 顶部是松手才加载\r\n                    if (this.y >= me.topPullOffset && !me.topEl.hasClass('ui-refresh-toload')) { // 达到刷新距离,更新显示状态\r\n                        me.topEl.addClass('ui-refresh-toload');\r\n                    } else if (this.y < me.topPullOffset && me.topEl.hasClass('ui-refresh-toload')) { // 从达到刷新距离更新为未达到距离,更新显示状态\r\n                        me.topEl.removeClass('ui-refresh-toload');\r\n                    }\r\n                }\r\n\r\n                me._checkBottomLoading(); // 底部加载条件和顶部条件不一样,只要滚动离底部一定高度就开始加载\r\n                me.goTop = this.y > me.topPullOffset; // 记录是否位于顶部位置,以便刷新后可以回到此位置\r\n            },\r\n            onBeforeScrollEnd: function () {    // 一定是用户拖动触发,在滚动结束前应该触发\r\n                me._checkTopLoading();\r\n                me._checkBottomLoading();\r\n            },\r\n            onScrollEnd: function () { // 这个事件可能由非用户拖动时触发,可能是拖动惯性导致,所有顶部不应该处理,但顶部不管是否惯性,位置条件满足即触发\r\n                if (me.topLoading && this.y < this.minScrollY && me.goTop) {\r\n                    me.iScroll.scrollTo(0, this.minScrollY, 0);\r\n                }\r\n                me._checkBottomLoading(); // 在beforend执行还不够,还在要end执行\r\n            },\r\n            onRefresh: function () { // 刷新时,若顶部加载还在进行,且当前显示的顶部加载,则继续显示,否则刷新后会消失顶部加载,这里代码没有考虑重用了,应该可以做一步提取\r\n                if (me.topLoading) { // 如果顶部在加载,则刷新的时候,设置最小顶部距离,显示顶部加载状态\r\n                    this.minScrollY = this.minScrollY + me.topPullOffset;\r\n                }\r\n            }\r\n        };\r\n\r\n        this.iScrollOptions = $.extend({}, this.options.iScrollOptions, this.iScrollOptions);\r\n        this.iScroll = new iScroll(this.el, this.iScrollOptions);\r\n        this._checkContentLoading();\r\n    }\r\n\r\n    Refresh.prototype._initBottomAndTop = function () {\r\n        this.scrollEl = $(\">.ui-refresh-wrapper\" ,this.el);\r\n        this.bottomEl = $(this.options.bottomLoadHtml).appendTo(this.scrollEl);\r\n        this.topEl = $(this.options.topLoadHtml).prependTo(this.scrollEl);\r\n\r\n        this.topPullOffset = this.topEl.outerHeight();\r\n        this.bottomPullOffset = this.bottomEl.outerHeight() + this.options.bottomAddLen; // 增加100;最好配一个额外参数\r\n\r\n        this.topLoading = false;        // 顶部正在载加载\r\n        this.bottomLoading = false;     // 底部正在加载\r\n        this.bottomEnable = this.options.initEnableBottom && !!this.options.bottomLoadFun;\r\n        this.topEnable = this.options.initEnableTop && !!this.options.topLoadFun;\r\n        this.goTop = false;         // 用来处理,因为iScroll使用momentum(惯性), 导致有时顶部显示不正确问题,true表示顶部显示加载条\r\n\r\n        this.enableBottom(this.bottomEnable);\r\n        this.enableTop(this.topEnable);\r\n    };\r\n\r\n    // 检查是否需要底部加载\r\n    Refresh.prototype._checkBottomLoading = function () {\r\n        if (this.bottomEnable && !this.bottomLoading) {\r\n            if (this.iScroll.y < this.iScroll.maxScrollY + this.bottomPullOffset) {\r\n                this._startBottomLoading();\r\n            }\r\n        }\r\n    };\r\n\r\n    Refresh.prototype._checkTopLoading = function () {\r\n        if (this.topEnable && !this.topLoading) {\r\n            if (this.topEl.hasClass('ui-refresh-toload')) {\r\n                this._startTopLoading();\r\n            }\r\n        }\r\n    };\r\n\r\n    // 检查内容是否超出容器高度,未超出时,自动调用底部加载\r\n    Refresh.prototype._checkContentLoading = function () {\r\n        if(this.iScroll.maxScrollY >= -this.bottomPullOffset){ // 此处要计算底端的高度\r\n            this._startBottomLoading();\r\n        }\r\n    };\r\n\r\n    // 开始底部加载\r\n    Refresh.prototype._startBottomLoading = function () {\r\n        if (this.bottomEnable && !this.bottomLoading) {\r\n            this.bottomLoading = true;\r\n            this.options.bottomLoadFun(); // 刷新当前索引加载更多的数据\r\n        }\r\n    };\r\n\r\n    // 开始顶部加载\r\n    Refresh.prototype._startTopLoading = function () {\r\n        if (this.topEnable && !this.topLoading) {\r\n            this.topLoading = true;\r\n            this.topEl.removeClass('ui-refresh-toload').addClass('ui-refresh-top-loading');\r\n            this.iScroll.minScrollY = this.iScroll.minScrollY + this.topPullOffset;\r\n            this.options.topLoadFun(); // 刷新当前索引加载更多的数据\r\n        }\r\n    };\r\n\r\n    // 结束底部加载\r\n    Refresh.prototype.endBottomLoading = function () {\r\n        this.bottomLoading = false;\r\n        this.refresh();\r\n    };\r\n\r\n    // 结束顶部加载\r\n    Refresh.prototype.endTopLoading = function () {\r\n        this.topEl.removeClass('ui-refresh-top-loading');\r\n        this.topLoading = false;\r\n        // this.iScroll.scrollTo(0, 0); // 刷新加载则应该回到顶部,待测试确认\r\n        this.refresh();\r\n    };\r\n\r\n    // 设置顶部加载是否可用,true可用,否则不可用\r\n    Refresh.prototype.enableTop = function (enable) {\r\n        this.topEnable = enable;\r\n        if (enable) {\r\n            this.topEl.show();\r\n        } else {\r\n            this.topEl.hide();\r\n        }\r\n    };\r\n\r\n    // 设置底部加载是否可用,true可用,否则不可用\r\n    Refresh.prototype.enableBottom = function (enable) {\r\n        this.bottomEnable = enable;\r\n        if (enable) {\r\n            this.bottomEl.show();\r\n        } else {\r\n            this.bottomEl.hide();\r\n        }\r\n    };\r\n\r\n    // 只有在内容发生变更时,但是又没有触发调用end相关方法时,使用此方法更新高度信息\r\n    // 或者组件在一开始未显示??\r\n    // 刷新会移除拖动中状态\r\n    Refresh.prototype.refresh = function () {\r\n        this.iScroll.refresh();\r\n        this._checkContentLoading();\r\n    };\r\n\r\n    ipu.refresh = function (slt, optoins) {\r\n        return new Refresh(slt, optoins);\r\n    };\r\n\r\n})(ipu || window, jQuery, iScroll);\r\n\n// Tab\r\n(function (ipu, $) {\r\n    function Tab(holder, options) {\r\n        this.el = $(holder).get(0);\r\n        this.titleItems = $(\".ui-tab-title:first>li\", this.el);\r\n        this.bodyWrapper = $(\".ui-tab-body-wrapper:first\", this.el);\r\n        this.contentItems = $(\">li\", this.bodyWrapper);\r\n\r\n        this.options = $.extend({}, this.defaultOptions, options);\r\n        this.itemSize = this.contentItems.size();\r\n        this.fixed = $(this.el).is(\".ui-tab-fixed\"); // 是否为固定高度的\r\n\r\n        var that = this;\r\n        this.titleItems.each(function (index) {\r\n            $(this).click(function () {\r\n                that.show(index);\r\n            });\r\n        });\r\n    }\r\n\r\n    Tab.prototype.defaultOptions = {\r\n        callBack: null  // 回调函数,tab切换时回调函数\r\n    };\r\n\r\n    Tab.prototype.show = function (index) {\r\n        if (this.fixed) {\r\n            var move = -index * 100 + \"%\";\r\n            this.bodyWrapper.css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n\r\n        }\r\n        this.contentItems.eq(index).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n        this.titleItems.eq(index).addClass(\"ui-active\").siblings().removeClass(\"ui-active\");\r\n        this._end(index);\r\n    };\r\n\r\n    Tab.prototype._end = function (index) {\r\n        this.lastIndex = this.currentIndex;\r\n        this.currentIndex = this.index;\r\n\r\n        if (this.options.callBack) {\r\n            this.options.callBack(index, this.lastIndex);\r\n        }\r\n    };\r\n\r\n    ipu.tab = function (slt, options) {\r\n        return new Tab(slt, options);\r\n    };\r\n})(ipu || window, jQuery);\r\n\r\n\n/*===========================\r\nDevice/OS Detection\r\n===========================*/\r\n// from sui,但IPU框架的ua不是这样的\r\n;(function (ipu, $) {\r\n    \"use strict\";\r\n    var device = {};  // Classes\r\n    var classNames = [];\r\n    var ua = navigator.userAgent;\r\n    console.log('device');\r\n\r\n    // 这中针对ipu框架的情况,待测试\r\n    if(ua.match(/ipumobile/i)){\r\n        device.ios =  !!ua.match(/ios/i);\r\n        device.android = !!ua.match(/android/i);\r\n    }else{\r\n        var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\r\n        var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\r\n        var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\r\n        var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\r\n\r\n        device.ios = device.android = device.iphone = device.ipad = device.androidChrome = false;\r\n\r\n        // Android\r\n        if (android) {\r\n            device.os = 'android';\r\n            device.osVersion = android[2];\r\n            device.android = true;\r\n            device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\r\n        }\r\n        if (ipad || iphone || ipod) {\r\n            device.os = 'ios';\r\n            device.ios = true;\r\n        }\r\n        // iOS\r\n        if (iphone && !ipod) {\r\n            device.osVersion = iphone[2].replace(/_/g, '.');\r\n            device.iphone = true;\r\n        }\r\n        if (ipad) {\r\n            device.osVersion = ipad[2].replace(/_/g, '.');\r\n            device.ipad = true;\r\n        }\r\n        if (ipod) {\r\n            device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\r\n            device.iphone = true;\r\n        }\r\n        // iOS 8+ changed UA\r\n        if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\r\n            if (device.osVersion.split('.')[0] === '10') {\r\n                device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\r\n            }\r\n        }\r\n\r\n        // Webview\r\n        device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\r\n\r\n        // Minimal UI\r\n        if (device.os && device.os === 'ios') {\r\n            var osVersionArr = device.osVersion.split('.');\r\n            device.minimalUi = !device.webView &&\r\n                (ipod || iphone) &&\r\n                (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) &&\r\n                $('meta[name=\"viewport\"]').length > 0 && $('meta[name=\"viewport\"]').attr('content').indexOf('minimal-ui') >= 0;\r\n        }\r\n\r\n        // Check for status bar and fullscreen app mode\r\n        var windowWidth = $(window).width();\r\n        var windowHeight = $(window).height();\r\n        device.statusBar = false;\r\n        if (device.webView && (windowWidth * windowHeight === screen.width * screen.height)) {\r\n            device.statusBar = true;\r\n        }\r\n        else {\r\n            device.statusBar = false;\r\n        }\r\n\r\n\r\n        // Pixel Ratio\r\n        device.pixelRatio = window.devicePixelRatio || 1;\r\n        classNames.push('pixel-ratio-' + Math.floor(device.pixelRatio));\r\n        if (device.pixelRatio >= 2) {\r\n            classNames.push('retina');\r\n        }\r\n\r\n        // OS classes\r\n        if (device.os) {\r\n            classNames.push(device.os, device.os + '-' + device.osVersion.split('.')[0], device.os + '-' + device.osVersion.replace(/\\./g, '-'));\r\n            if (device.os === 'ios') {\r\n                var major = parseInt(device.osVersion.split('.')[0], 10);\r\n                for (var i = major - 1; i >= 6; i--) {\r\n                    classNames.push('ios-gt-' + i);\r\n                }\r\n            }\r\n\r\n        }\r\n        // Status bar classes\r\n        if (device.statusBar) {\r\n            classNames.push('with-statusbar-overlay');\r\n        }\r\n        else {\r\n            $('html').removeClass('with-statusbar-overlay');\r\n        }\r\n\r\n\r\n        // keng..\r\n        device.isWeixin = /MicroMessenger/i.test(ua);\r\n    }\r\n\r\n    // Add html classes\r\n    if (classNames.length > 0){\r\n        $('html').addClass(classNames.join(' '));\r\n    }\r\n\r\n    ipu.device = device;\r\n})(ipu || window, jQuery);\r\n\n\n        // 初始化代码\n        jQuery(function () {\n            FastClick.attach(document.body);\n        });\n\n        return ipu;\n    }\n\n    // todo:可以添加一个和其它库的适配处理,\n    // 这里假设第三方库,jquery,iScroll,Hammer的史称已经固定\n    if ( typeof define === \"function\" && define.amd ) {\n        define(['jquery', 'iScroll', 'Hammer', 'FastClick'], function (jquery, iscroll, hammer, FastClick) {\n            return window.ipu = setup(jquery, iscroll, hammer, FastClick);\n        });\n    } else {\n        window.ipu = setup(window.jQuery, window.iScroll, window.Hammer, window.FastClick);\n    }\n})();\n\r\n//# sourceMappingURL=ipu.js.map\r\n"]}

参考收入宝代码更新获取MAC地址代码 · fb48ba931c - Nuosi Git Service
Explorar el Código

参考收入宝代码更新获取MAC地址代码

zhanglong7 %!s(int64=4) %!d(string=hace) años
padre
commit
fb48ba931c

+ 108 - 11
ipu-plugin-basic/src/main/java/com/ai/ipu/mobile/plugin/MobileInfo.java

@ -1,18 +1,13 @@
1 1
package com.ai.ipu.mobile.plugin;
2 2
3
import java.net.InetAddress;
4
import java.net.NetworkInterface;
5
import java.net.SocketException;
6
import java.util.Enumeration;
7
import java.util.TimeZone;
8
9
import org.json.JSONArray;
10
3
import android.annotation.SuppressLint;
11 4
import android.content.Context;
12 5
import android.net.wifi.WifiInfo;
13 6
import android.net.wifi.WifiManager;
7
import android.os.Build;
14 8
import android.provider.Settings;
15 9
import android.telephony.TelephonyManager;
10
import android.text.TextUtils;
16 11
17 12
import com.ai.ipu.mobile.frame.IIpuMobile;
18 13
import com.ai.ipu.mobile.frame.plugin.Plugin;
@ -23,9 +18,26 @@ import com.ailk.common.data.IData;
23 18
import com.ailk.common.data.impl.DataMap;
24 19
import com.mashape.relocation.conn.util.InetAddressUtils;
25 20
21
import org.json.JSONArray;
22
23
import java.io.BufferedReader;
24
import java.io.File;
25
import java.io.FileReader;
26
import java.io.IOException;
27
import java.net.InetAddress;
28
import java.net.NetworkInterface;
29
import java.net.SocketException;
30
import java.util.Collections;
31
import java.util.Enumeration;
32
import java.util.List;
33
import java.util.Locale;
34
import java.util.TimeZone;
35
26 36
public class MobileInfo extends Plugin {
27 37
    public String platform = "Android";
28 38
39
    public static final String MAC_FAIL = "02:00:00:00:00:00";
40
29 41
    public MobileInfo(IIpuMobile ipumobile) {
30 42
        super(ipumobile);
31 43
    }
@ -198,9 +210,94 @@ public class MobileInfo extends Plugin {
198 210
    }
199 211
200 212
    public String getMac() {
201
        WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
202
        WifiInfo info = wifi.getConnectionInfo();
203
        return info.getMacAddress();
213
        String mac = null;
214
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
215
            mac = getMacDefault(context);
216
        } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
217
            mac = getMacFromFile();
218
        } else {
219
            mac = getMacFromHardware();
220
        }
221
        return mac;
222
    }
223
224
    /**
225
     * 遍历循环所有的网络接口,找到接口是 wlan0
226
     * 必须的权限 <uses-permission android:name="android.permission.INTERNET" />
227
     * @return
228
     */
229
    private String getMacFromHardware() {
230
        try {
231
            List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
232
            for (NetworkInterface nif : all) {
233
                if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
234
235
                byte[] macBytes = nif.getHardwareAddress();
236
                if (macBytes == null) {
237
                    return MAC_FAIL;
238
                }
239
240
                StringBuilder res1 = new StringBuilder();
241
                for (byte b : macBytes) {
242
                    res1.append(String.format("%02X:", b));
243
                }
244
245
                if (res1.length() > 0) {
246
                    res1.deleteCharAt(res1.length() - 1);
247
                }
248
                return res1.toString();
249
            }
250
        } catch (Exception e) {
251
            e.printStackTrace();
252
        }
253
        return MAC_FAIL;
254
    }
255
256
    /**
257
     * Android 6.0(包括) - Android 7.0(不包括)
258
     * @return
259
     */
260
    private String getMacFromFile() {
261
        String WifiAddress = MAC_FAIL;
262
        try {
263
            WifiAddress = new BufferedReader(new FileReader(new File("/sys/class/net/wlan0/address"))).readLine();
264
        } catch (IOException e) {
265
            e.printStackTrace();
266
        }
267
        return WifiAddress;
268
    }
269
270
    /**
271
     * Android  6.0 之前(不包括6.0)
272
     * 必须的权限  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
273
     * @param context
274
     * @return
275
     */
276
    @SuppressLint("HardwareIds")
277
    private String getMacDefault(Context context) {
278
        String mac = MAC_FAIL;
279
        if (context == null) {
280
            return mac;
281
        }
282
283
        WifiManager wifi = (WifiManager) context.getApplicationContext()
284
                .getSystemService(Context.WIFI_SERVICE);
285
        if (wifi == null) {
286
            return mac;
287
        }
288
        WifiInfo info = null;
289
        try {
290
            info = wifi.getConnectionInfo();
291
        } catch (Exception ignored) {
292
        }
293
        if (info == null) {
294
            return null;
295
        }
296
        mac = info.getMacAddress();
297
        if (!TextUtils.isEmpty(mac)) {
298
            mac = mac.toUpperCase(Locale.ENGLISH);
299
        }
300
        return mac;
204 301
    }
205 302
206 303
    public String getIP() throws SocketException {

android-share - Nuosi Git Service

ipu的trunk版的android工程和服务端工程。

expand-mobile.js 17KB

    /** * 提供给外围自行扩展和终端交互的js API。 */ define(["require"],function(require) { var ExpandMobile = (function(){ return{ loadingStart:function(message,title,cancelable,err){ //加载进度条 execute("loadingStart", [message,title,cancelable],err); },loadingStop:function(err){ //结束进度条 execute("loadingStop", [],err); },getChoice:function(callback,options,values,title,iconName,err){ storageCallback("getChoice", callback); execute("getChoice", [options,values,title,iconName], err); },tip:function(msg,type,err){ if(type==undefined){ type = 0;//0-短提示,-1长提示 } execute("tip", [msg,type],err); },alert:function(msg,type,err){ if(type==undefined){ type = 0;//0-短提示,-1长提示 } execute("alert", [msg,type],err); },getDate:function(callback,date,format,err){ if(format==undefined){ format = "yyyy-MM-dd"; } storageCallback("getDate",callback); execute("getDate", [date,format],err); },getContactsView:function(callback,data,setting,err){ if(data==undefined){ data = new Wade.DataMap(); } if(setting==undefined){ setting = new Wade.DataMap(); } storageCallback("getContactsView",callback); execute("getContactsView", [data.toString(),setting.toString()],err); },getPhoto:function(callback,type,err){//获取照片 if(type==undefined){ type = 1;//0-Base64编码的字符串 1- 文件路径 } storageCallback("getPhoto",callback); execute("getPhoto", [type],err); },getPicture:function(callback,type,err){//获取照片 if(type==undefined){ type = 1;//0-Base64编码的字符串 1- 文件路径 } storageCallback("getPicture",callback); execute("getPicture", [type],err); },getVideoPath:function(callback){//获取视频 storageCallback("getVideoPath", callback); execute("getVideoPath",[]); },transImageToBase64:function(callback,path,err){ storageCallback("transImageToBase64",callback); execute("transImageToBase64", [path],err); },compressImage:function(callback,path,fileSize,quality,err){ if(fileSize==undefined){ fileSize = 10;//压缩到10K左右大小 } if(quality==undefined){ quality = 30;//图片质量30 } storageCallback("compressImage",callback); execute("compressImage", [path,fileSize,quality],err); },beep:function(count,err){ execute("beep", [count],err); },shock:function(time,err){ execute("shock", [time],err); },call:function(sn,autoCall,err){ if(autoCall==undefined){ autoCall = false;// false-跳转至拨打界面,true-直接拨打 } execute("call", [sn,autoCall],err); },sms:function(sn,msg,autoSms,err){ if(autoSms==undefined){ autoSms = false;// false-跳转至短信界面,true-直接短信 } execute("sms", [sn,msg,autoSms],err); },openApp:function(appId,urlParams,installUrl,err){ execute("openApp", [appId,urlParams,installUrl],err); },showKeyBoard:function(type,err){ execute("showKeyBoard", [type],err); },hideKeyBoard:function(err){ execute("hideKeyBoard", [],err); },setTitleView:function(title,err){ execute("setTitleText", [title],err); },getSysInfo:function(callback,key,err){//TELNUMBER|IMEI|IMSI|SDKVERSION|OSVERSION|PLATFORM|SIMNUMBER storageCallback("getSysInfo",callback); execute("getSysInfo", [key],err); },getNetInfo:function(callback,key,err){//MAC|IP storageCallback("getNetInfo",callback); execute("getNetInfo", [key],err); },explorer:function(callback,fileType,initPath){ storageCallback("explorer",callback); execute("explorer",[callback,fileType,initPath]); },httpDownloadFile : function(targetFilePath,fileName,callback,suc,err){//客户端直接访问服务端进行下载 storageCallback("httpDownloadFile",callback); execute("httpDownloadFile",[targetFilePath,fileName],suc,err); },location:function(callback,err){ storageCallback("location",callback); execute("location",[],err); },markMap:function(callback,markParam,isSelect,isJump,err){ if (typeof(markParam)=="object" && (markParam instanceof Wade.DataMap)) { var markParams = new Wade.DatasetList(); markParams.add(markParam); markParam = markParams; } storageCallback("markMap", callback); execute("markMap", [markParam.toString(),isSelect,isJump,err]); },selectLocation:function(callback,isLocation,longitude,latitude,scale){ storageCallback("selectLocation",callback); execute("selectLocation",[isLocation, longitude, latitude, scale]); },scanQrCode:function(callback){ storageCallback("scanQrCode",callback); execute("scanQrCode",[]); },createQrCode:function(callback,content){ storageCallback("createQrCode",callback); execute("createQrCode",[content]); },httpGet:function(callback,url,encode){ storageCallback("httpGet",callback); execute("httpGet",[url,encode]); },removeMemoryCache:function(key,err){ execute("removeMemoryCache",[key],err); },clearMemoryCache:function(err){ execute("clearMemoryCache",[],err); },setMemoryCache:function(key,value,err){ execute("setMemoryCache",[key,value],err); },getMemoryCache:function(callback,key,defValue,err){ storageCallback("getMemoryCache",callback); execute("getMemoryCache",[key,defValue],err); },setOfflineCache:function(key,value,err){ execute("setOfflineCache", [key,value],err); },getOfflineCache:function(callback,key,defValue,err){ storageCallback("getOfflineCache",callback); return execute("getOfflineCache", [key,defValue],err); },removeOfflineCache:function(key,err){ execute("removeOfflineCache", [key],err); },clearOfflineCache:function(err){ execute("clearOfflineCache", [],err); },writeFile:function(content,fileName,type,isSdcard,err){ execute("writeFile",[content,fileName,type,isSdcard],err); },appendFile:function(content,fileName,type,isSdcard,err){ execute("appendFile",[content,fileName,type,isSdcard],err); },readFile:function(callback,fileName,type,isSdcard,isEscape,err){ storageCallback("readFile",callback,isEscape); execute("readFile",[fileName,type,isSdcard,isEscape],err); },openFile:function(filename,type,isSdcard,err){ execute("openFile", [filename,type,isSdcard],err); },deleteFile:function(filename,type,isSdcard,err){ execute("deleteFile", [filename,type,isSdcard],err); },getAllFile:function(callback,filename,type,isSdcard,err){ storageCallback("getAllFile", callback); execute("getAllFile", [filename,type,isSdcard],err); },getRelativePath:function(callback,filename,type,err){ storageCallback("getRelativePath",callback); execute("getRelativePath", [filename,type],err); },cleanResource:function(type,isSdcard,err){ execute("cleanResource",[type,isSdcard],err); },shareByBluetooth:function(err){ execute("shareByBluetooth", [],err); },openBrowser:function(url,err){ execute("openBrowser",[url],err); },setSmsListener:function(callback,telString,err){ storageCallback("setSmsListener", callback); execute("setSmsListener", [telString],err); },audioRecord:function(callback,auto,err){ if(auto == undefined) { auto = false; //false-按住录音,true-自动录音 } storageCallback("audioRecord",callback); execute("audioRecord", [auto],err); },audioPlay:function(audioPath,hasRipple,err){ if (hasRipple == undefined) { hasRipple = true; //true-弹出波纹,false-无效果 } execute("audioPlay",[audioPath,hasRipple],err); },logCat:function(msg,title,err){ //将日志输出至LogCat控制台(异步) execute("logCat",[msg,title],err); },execSQL:function(dbName,sql,bindArgs,limit,offset,callback,err){ if(bindArgs == undefined){ bindArgs = new Wade.DataMap(); } if(limit == null) limit = ""; else if(!isNaN(limit)) limit = "\"" + limit + "\""; if(offset == null) offset = ""; else if(!isNaN(offset)) offset = "\"" + offset + "\""; storageCallback("execSQL",callback); execute("execSQL",[dbName,sql,bindArgs.toString(),limit,offset],err); },insert:function(dbName,table,datas,callback,err){ if(datas==undefined){ datas = new Wade.DataMap(); } storageCallback("insert",callback); execute("insert",[dbName,table,datas.toString()],err); },delete:function(dbName,table,condSQL,conds,callback,err){ if(conds==undefined){ conds = new Wade.DataMap(); } storageCallback("delete",callback); execute("delete",[dbName,table,condSQL,conds.toString()],err); },update:function(dbName,table,datas,condSQL,conds,callback,err){ if(datas==undefined){ datas = new Wade.DataMap(); } if(conds==undefined){ conds = new Wade.DataMap(); } storageCallback("update",callback); execute("update",[dbName,table,datas.toString(),condSQL,conds.toString()],err); },select:function(dbName,table,columns,condSQL,conds,limit,offset,callback,err){ if(columns == null){ columns = new Array(); } if(conds == null){ conds = new Wade.DataMap(); } if(limit == null) limit = ""; else if(!isNaN(limit)) limit = "\"" + limit + "\""; if(offset == null) offset = ""; else if(!isNaN(offset)) offset = "\"" + offset + "\""; storageCallback("select",callback); execute("select",[dbName,table,columns,condSQL,conds.toString(),limit,offset],err); },selectFirst:function(dbName,table,columns,condSQL,conds,callback,err){ this.select(dbName,table,columns,condSQL,conds,1,0,callback,err); },registerForPush:function(account,callback,err){ storageCallback("registerForPush",callback); execute("registerForPush",[account],err); },unregisterForPush:function(callback){ storageCallback("unregisterForPush",callback); execute("unregisterForPush", []); },sendText:function(account,content,callback,err){ storageCallback("sendText",callback); execute("sendText", [account,content],err); },setCallbackForPush:function(callback){ execute("setCallbackForPush", [callback]); },registerForPushWithYunba:function(account,callback,err){ storageCallback("registerForPushWithYunba",callback); execute("registerForPushWithYunba",[account],err); },unregisterForPushWithYunba:function(callback){ storageCallback("unregisterForPushWithYunba",callback); execute("unregisterForPushWithYunba", []); },sendTextWithYunba:function(account,content,callback,err){ storageCallback("sendTextWithYunba",callback); execute("sendTextWithYunba", [account,content],err); },setCallbackForPushWithYunba:function(callback){ execute("setCallbackForPushWithYunba", [callback]); },aliPay:function(tradeNo,subject,body,price,callback,err){ storageCallback("aliPay",callback); execute("aliPay",[tradeNo,subject,body,price],err); },uploadWithServlet:function(filePath,dataAction,param,callback,err){ if(typeof(filePath)=="string"){ filePath = [filePath]; } storageCallback("uploadWithServlet",callback); execute("uploadWithServlet",[filePath,dataAction,param],err); },downloadWithServlet:function(savePath,dataAction,param,callback,err){ storageCallback("downloadWithServlet",callback); execute("downloadWithServlet",[savePath,dataAction,param],err); },uploadFile:function(filePath,servletUrl,callback,err){ storageCallback("uploadFile",callback); execute("uploadFile",[filePath,servletUrl],err); },downloadFile:function(savePath,servletUrl,callback,err){ storageCallback("downloadFile",callback); execute("downloadFile",[savePath,servletUrl],err); },recordVideo:function(callback,compressRatio,timeLimit,err){ storageCallback("recordVideo",callback); execute("recordVideo",[compressRatio,timeLimit],err); },playVideo:function(videoPath,callback,err){ storageCallback("playVideo",callback); execute("playVideo",[videoPath],err); },getContacts:function(callback,err){ storageCallback("getContacts",callback); execute("getContacts",[], err); },openKeyboard:function(value,err){ execute("openKeyboard",[value],err); },setScreenLock:function(dataParam,callback,err){ storageCallback("setScreenLock",callback); execute("setScreenLock",[dataParam],err); },getScreenLockState:function(callback,err){ storageCallback("getScreenLockState",callback); execute("getScreenLockState",[],err); },screenUnlock:function(forgetPageAction,callback,err){ storageCallback("screenUnlock",callback); execute("screenUnlock",[forgetPageAction],err); },initNfc:function(cmds,callbackName,err) { execute("initNfc", [cmds, callbackName], err); },scanSingle:function(callback){ storageCallback("scanSingle",callback); execute("scanSingle",[]); },scanMultiple:function(callback){ storageCallback("scanMultiple",callback); execute("scanMultiple",[]); },showNotification:function(content,title,icon,id){ execute("showNotification",[content,title,icon,id]); },startListen:function(callback,err){ if(callback){ storageCallback("startListen",callback); } execute("startListen",[],err); },voiceSpeak:function(content,err){ execute("voiceSpeak",[content],err); },shareTextQQFriend:function(content){ execute("shareTextQQFriend",[content]); },shareTextWeChatFriend:function(content){ execute("shareTextWeChatFriend",[content]); },shareFileQQFriend:function(content){ execute("shareFileQQFriend",[content]); },shareFileWeChatFriend:function(content){ execute("shareFileWeChatFriend",[content]); },shareTextMore:function(content){ execute("shareTextMore",[content]); },shareFileMore:function(content){ execute("shareFileMore",[content]); },shareImageBymail:function(param){ execute("shareImageBymail",[param]); },baiduLocation:function(callback,err){ storageCallback("baiduLocation",callback); execute("baiduLocation",[],err); },baiduMapLocation:function(callback,err){ execute("baiduMapLocation",[],err); },baiduMapPosition:function(pointParam,err){ execute("baiduMapPosition",[pointParam.toString()],err); },addPolygon:function(markParams,err){ execute("addPolygon",[markParams.toString()],err); },clickBaiduMap:function(callback,err){ storageCallback("clickBaiduMap",callback); execute("clickBaiduMap",[],err); },videoCompressor:function(param){ execute("videoCompressor",[param]); },sweetAlert:function(param){ execute("sweetAlert",[param]); },sweetConfirm:function(param){ execute("sweetConfirm",[param]); },sweetLoading:function(param){ execute("sweetLoading",[param]); },poiCitySearch:function(city,keyword,err){ execute("poiCitySearch",[city,keyword],err); },poiNearbySearch:function(latlon,radius,keyword,err){ execute("poiNearbySearch",[latlon.toString(),radius,keyword],err); },poiBoundsSearch:function(swParam,neParam,keyword,err){ execute("poiBoundsSearch",[swParam.toString(),neParam.toString(),keyword],err); },lbsLocalSearch:function(ak,geoTableId,q,region,err){ execute("lbsLocalSearch",[ak,geoTableId,q,region],err); },lbsNearbySearch:function(ak,geoTableId,q,loc,radius,err){ execute("lbsNearbySearch",[ak,geoTableId,q,loc,radius],err); },lbsBoundsSearch:function(ak,geoTableId,q,bounds,err){ execute("lbsBoundsSearch",[ak,geoTableId,q,bounds],err); },testUnRegister:function(callback){ execute("testUnRegister",[]); },res_add:function(a,b,callback){ storageCallback("res_add",callback); execute("res_add",[a,b]); },bd_connect:function(str1,str2){ execute("bd_connect",[str1,str2]); },openActivityFromPlugin:function(){ execute("openActivityFromPlugin",[]); },openPathMenu:function(param){ execute("openPathMenu",[param]); },closePathMenu:function(){ execute("closePathMenu",[]); },clearBackStack:function(){ if(WadeMobile.isAndroid()){ execute("clearBackStack",[]); } } }; })(); var WadeMobile; function execute(action, args, error, success) { /*循环依赖,懒加载*/ if(!WadeMobile){ WadeMobile = require("wadeMobile") } return WadeMobile.execute(action, args, error, success) } function storageCallback(action,callback) { /*循环依赖,懒加载*/ if(!WadeMobile){ WadeMobile = require("wadeMobile") } WadeMobile.callback.storageCallback(action,callback) } return ExpandMobile; });
android-share - Nuosi Git Service

ipu的trunk版的android工程和服务端工程。

leijie c6e543f7e7 Merge origin/dev from 8ba37d лет назад: 2
..
src c6e543f7e7 Merge origin/dev from 8ba37d лет назад: 2
build.gradle 786bb5c3e9 show-client新增依赖ipu-watermark界面水印功能 лет назад: 2
proguard-project.txt 3b751fd7a7 迁出ipu-mobile-ui,ipu-plugin-basic工程;迁入keep-live,show-client,show-server,ipu-sdk-demo,ipu-push-test,super-client工程; лет назад: 3
proguard-rules.pro 3b751fd7a7 迁出ipu-mobile-ui,ipu-plugin-basic工程;迁入keep-live,show-client,show-server,ipu-sdk-demo,ipu-push-test,super-client工程; лет назад: 3
showshow.keystore 3b751fd7a7 迁出ipu-mobile-ui,ipu-plugin-basic工程;迁入keep-live,show-client,show-server,ipu-sdk-demo,ipu-push-test,super-client工程; лет назад: 3
Accedi - Nuosi Git Service

Accedi