ttons-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} 1
html{font-size:85.33333px}@media screen and (min-width:320px) and (max-width:350px){html{font-size:85.33333px}}@media screen and (min-width:350px) and (max-width:375px){html{font-size:93.33333px}}@media screen and (min-width:375px) and (max-width:384px){html{font-size:100px}}@media screen and (min-width:384px) and (max-width:400px){html{font-size:102.4px}}@media screen and (min-width:400px) and (max-width:414px){html{font-size:106.66667px}}@media screen and (min-width:414px) and (max-width:450px){html{font-size:110.4px}}@media screen and (min-width:450px) and (max-width:480px){html{font-size:120px}}@media screen and (min-width:480px) and (max-width:520px){html{font-size:128px}}@media screen and (min-width:520px) and (max-width:640px){html{font-size:138.66667px}}@media screen and (min-width:640px){html{font-size:170.66667px}}blockquote,body,button,dd,dl,dt,fieldset,h1,h2,h3,h4,h5,h6,hr,input,lengend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-weight:400;font-size:100%}address,cite,dfn,em,i,strong,var{font-style:normal}ol,ul{list-style:none}a{text-decoration:none}fieldset,img{border:none}button,input,select,textarea{font:inherit}table{border-collapse:collapse;border-spacing:0}caption,th{text-align:left}ins{text-decoration:none}del{text-decoration:line-through}*{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;word-break:break-all}body,html{height:100%;position:relative}body{font-family:Arial,Helvetica,sans-serif;line-height:1.5;font-size:.15rem;color:#666;background-color:#f8f8f8;-webkit-user-select:none}:focus{outline:0;-webkit-tap-highlight-color:transparent}a{color:#8bcbe4}a:active{color:#62b8da}img{max-width:100%}.ui-txt-xxl{font-size:.24rem}.ui-txt-xl{font-size:.2rem}.ui-txt-l{font-size:.17rem}.ui-txt-m{font-size:.15rem}.ui-txt-s{font-size:.14rem}.ui-txt-xs{font-size:.13rem}.ui-txt-rl{font-size:1.2em}.ui-txt-rs{font-size:.85em}.ui-txt-black{color:#000}.ui-txt-dark{color:#333}.ui-txt-default{color:#666}.ui-txt-gray{color:#999}.ui-txt-light{color:#ccc}.ui-txt-white{color:#fff}.ui-txt-primary{color:#8bcbe4}.ui-txt-warning{color:#ff4222}.ui-txt-success{color:#4cd964}.ui-txt-highlight{color:#ff8444}.ui-txt-center{text-align:center}.ui-txt-left{text-align:left}.ui-txt-right{text-align:right}.ui-txt-justify{text-align:justify}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes b{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes b{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui-icon.fa:before{font-size:.75em;display:block;min-height:1.333em;text-align:center}.ui-icon.fa{font-size:.32rem;line-height:100%}.ui-btn{display:inline-block;position:relative;min-width:.75rem;padding:0 .075rem;font-size:.14rem;line-height:2.4;color:#fff;text-align:center;background-color:#8bcbe4;border:0;box-sizing:border-box;border-radius:.03rem;-webkit-appearance:none}.ui-btn.ui-active,.ui-btn:not(.ui-disabled):not(:disabled):active{background:#62b8da}.ui-btn.ui-disabled,.ui-btn:disabled{opacity:.5}.ui-btn .ui-icon{font-size:inherit;line-height:inherit;margin-right:.03rem}.ui-btn-s{padding:0 .06375rem;min-width:.6375rem;font-size:.119rem}.ui-btn-l{padding:0 .09rem;min-width:.9rem;font-size:.168rem}.ui-btn-warning{background-color:#ff4222}.ui-btn-warning.ui-active,.ui-btn-warning:not(.ui-disabled):not(:disabled):active{background-color:#e20}.ui-btn-highlight{background-color:#ff8444}.ui-btn-highlight.ui-active,.ui-btn-highlight:not(.ui-disabled):not(:disabled):active{background:#ff6211}.ui-btn-success{background-color:#4cd964}.ui-btn-success.ui-active,.ui-btn-success:not(.ui-disabled):not(:disabled):active{background:#2ac845}.ui-btn-block{display:block;width:100%;box-sizing:border-box}.ui-btn-wrap{padding:.1rem;overflow:auto}.ui-img-responsive{display:block;max-width:100%;height:auto}.ui-img-border{border-radius:.03rem}.ui-img-circle{border-radius:50%}.ui-img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:.05rem;border:1px solid #dfe0e1;border-radius:.03rem;background-color:#fff;box-sizing:border-box}.ui-form{background-color:#fff;border-top:1px solid #e0e0e0}.ui-form-item{box-sizing:border-box;position:relative;font-size:.15rem;padding:.1rem .15rem .11rem;border-bottom:1px solid #e0e0e0}.ui-form-item label:not(.ui-switch):not(.ui-checkbox):not(.ui-radio){width:.9rem;position:absolute;text-align:left;box-sizing:border-box}.ui-form-item input,.ui-form-item textarea{width:100%;box-sizing:border-box;-webkit-appearance:none;border:0;background:none;padding-left:.9rem}.ui-form-item input[type=checkbox],.ui-form-item input[type=radio]{padding-left:0}.ui-form-item .ui-icon-close{position:absolute;top:0;right:.06rem}.ui-form-item-link>a,.ui-form-item-order>a{display:block}.ui-form-item-order:active{background-color:#e5e6e7}.ui-form-item-textarea{height:.65rem}.ui-form-item-textarea label{vertical-align:top}.ui-form-item-textarea textarea{margin-top:.15rem;border:none;resize:none}.ui-form-item-textarea textarea:focus{outline:none}.ui-form-item-link>li: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-l label{color:#8bcbe4;text-align:center}.ui-form-item-r .ui-icon-close{right:1.25rem}.ui-form-item-l input:not([type=checkbox]):not([type=radio]){padding-left:1.15rem;box-sizing:border-box}.ui-form-item-r{padding-right:0}.ui-form-item-r input:not([type=checkbox]):not([type=radio]){padding-left:0;padding-right:1.5rem;box-sizing:border-box}.ui-form-item-r button{position:absolute;top:.1rem;right:.15rem}.ui-form-item-r button.disabled{color:#ddd}.ui-form-item-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:#8bcbe4}.ui-radio input:checked:after{content:"";position:absolute;left:.06rem;top:.06rem;width:.12rem;height:.12rem;background:#8bcbe4;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:#8bcbe4;border-color:#8bcbe4}.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:#8bcbe4}.ui-table-bg-primary th{background-color:#8bcbe4;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:#8bcbe4;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:#8bcbe4;background-color:#fff;border:none;outline:none;margin-top:.09rem}.ui-toolbar-btn.ui-active,.ui-toolbar-btn:active{color:#fff;background-color:#62b8da}.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:#8bcbe4;text-align:center;border:1px solid #62b8da;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:#62b8da}.ui-mtab .ui-mtab-item:not(.ui-active):active{background-color:#b4deee}.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:#8bcbe4;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:#8bcbe4;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:#8bcbe4}.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:#8bcbe4;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:#8bcbe4;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:#8bcbe4}.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 #8bcbe4;color:#8bcbe4}.ui-tab-title-button{color:#8bcbe4;border:1px solid #8bcbe4;border-radius:.03rem;margin:.1rem}.ui-tab-title-button>li{border-left:1px solid #8bcbe4;font-size:.12rem;line-height:2}.ui-tab-title-button>li.ui-active{background-color:#8bcbe4;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
ipuui/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  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"]}
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: #8BCBE4; }\n\na:active {\n  color: #62b8da; }\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: #8BCBE4; }\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: #8BCBE4;\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: #62b8da; }\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: #8BCBE4;\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: #8BCBE4; }\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: #8BCBE4;\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: #8BCBE4;\n  border-color: #8BCBE4; }\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: #8BCBE4; }\n\n.ui-table-bg-primary th {\n  background-color: #8BCBE4;\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: #8BCBE4;\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: #8BCBE4;\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: #62b8da; }\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: #8BCBE4;\n  text-align: center;\n  border: 1px solid #62b8da;\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: #62b8da; }\n  .ui-mtab .ui-mtab-item:not(.ui-active):active {\n    background-color: #b4deee; }\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: #8BCBE4;\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: #8BCBE4;\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: #8BCBE4; }\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: #8BCBE4;\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: #8BCBE4;\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: #8BCBE4; }\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 #8BCBE4;\n    color: #8BCBE4; }\n\n.ui-tab-title-button {\n  color: #8BCBE4;\n  border: 1px solid #8BCBE4;\n  border-radius: 0.03rem;\n  margin: .1rem; }\n  .ui-tab-title-button > li {\n    border-left: 1px solid #8BCBE4;\n    font-size: 0.12rem;\n    line-height: 2; }\n    .ui-tab-title-button > li.ui-active {\n      background-color: #8BCBE4;\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"]}

+ 1 - 1
ipuui/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;AACA;AACA;AACA;AACA;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"]}
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\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    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","\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"]}

+ 1 - 1
ipuui/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","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"]}
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\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    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\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\r\n//# sourceMappingURL=ipu.js.map\r\n"]}

【提交内容】:nfc · d351395ca3 - Nuosi Git Service
瀏覽代碼

【提交内容】:nfc

wangyj18 9 年之前
父節點
當前提交
d351395ca3

+ 3 - 0
display-client/assets/mobile-action.xml

@ -18,6 +18,9 @@
18 18
	<action name="setSmsListener" class="com.wade.mobile.func.MobileNetWork" method="setSmsListener"></action>
19 19
	<action name="downloadWithServlet" class="com.wade.mobile.func.MobileNetWork" method="downloadWithServlet"></action>
20 20
	<action name="uploadWithServlet" class="com.wade.mobile.func.MobileNetWork" method="uploadWithServlet"></action>
21
	<!-- NFC -->
22
	<action name="initDfc" class="com.wade.mobile.func.MobileDevice" method="initDfc"></action>
23
	
21 24
	<!-- MobileUI -->
22 25
	<action name="tip" class="com.wade.mobile.func.MobileUI" method="tip"/>
23 26
	<action name="openUrl" class="com.wade.mobile.func.MobileUI" method="openUrl"/>

+ 1 - 0
display-server/etc/server-page.xml

@ -12,6 +12,7 @@
12 12
	<action name="Map" template="template/webapp/plugin/Map.html"></action>
13 13
	<action name="Photo" template="template/webapp/plugin/Photo.html"></action>
14 14
	<action name="File" template="template/webapp/plugin/File.html"></action>
15
	<action name="NFC" template="template/webapp/plugin/NFC.html"></action>
15 16
	<!-- 提供给File使用 -->
16 17
	<action name="FileDetail" template="template/webapp/plugin/FileDetail.html" data="FileDetail"></action>
17 18
	<action name="Storage" template="template/webapp/plugin/Storage.html"></action>

+ 2 - 0
display-server/web/res/js/mobile/expand-mobile.js

@ -293,6 +293,8 @@ define(["require"],function(require) {
293 293
				execute("setScreeLock",[dataAction,param,indexPage],err);
294 294
			},screeUnlock:function(screenUnlockType, forgetPageAction, err){
295 295
				execute("screeUnlock",[screenUnlockType, forgetPageAction],err);
296
			},initDfc:function(cmds, err) {
297
				execute("initDfc", [cmds], err);
296 298
			}
297 299
		};
298 300
	})();

+ 4 - 0
display-server/web/res/js/mobile/mobile-browser.js

@ -218,6 +218,10 @@ define(["browserTool","jcl"],function(browserTool,Wade) {
218 218
		this.openNative = function(data,err){
219 219
			alert("等待实现");
220 220
		}
221
		// 初始化NFC
222
		this.initDfc = function(data,err){
223
			alert("等待实现");
224
		}
221 225
	}
222 226
	
223 227
	return Mobile;

+ 5 - 0
display-server/web/res/js/mobile/mobile-client.js

@ -181,6 +181,11 @@ define(["wadeMobile","clientTool"],function(WadeMobile,clientTool) {
181 181
		this.openNative = function(data,err){
182 182
			WadeMobile.openNative(data.toString(),err);
183 183
		}
184
		// 初始化NFC
185
		this.initDfc = function(data,err){
186
			WadeMobile.initDfc(data.toString(),err);
187
		}
188
		
184 189
	};
185 190
	
186 191
	return Mobile;

+ 14 - 0
display-server/web/template/common/Head.html

@ -10,6 +10,20 @@ require(["domReady!","mobile","jcl","tap"],function(doc, Mobile, $) {
10 10
	$(".c_navBar").find(".back").tap(function(){
11 11
		Mobile.back();
12 12
	});
13
	
14
	var cmds1 = new $.DataMap();
15
	cmds1.put("cmd1","00A404000E315041592E5359532E444446303100");
16
	cmds1.put("cmd2","00B0840000");
17
	cmds1.put("cmd3","00B0850000");
18
	cmds1.put("cmd4","00A4000002100100");
19
	cmds1.put("cmd5","805C000204");
20
	var cmds = new $.DataMap();
21
	cmds.put("cmds1",cmds1);
22
	Mobile.initDfc(cmds);
23
	
24
	window.getNfcMsg = function(msg){
25
		alert(msg);
26
	}
13 27
}); 
14 28
</script>
15 29


+ 4 - 0
display-server/web/template/webapp/PluginIndex.html

@ -55,4 +55,8 @@
55 55
		<div class="pic"><span class="e_ico-storage"></span></div>
56 56
		<div class="text">通讯录</div>
57 57
	</li>
58
	<li action="NFC">
59
		<div class="pic"><span class="e_ico-storage"></span></div>
60
		<div class="text">NFC</div>
61
	</li>
58 62
</ul>

+ 37 - 0
display-server/web/template/webapp/plugin/NFC.html

@ -0,0 +1,37 @@
1
<!DOCTYPE HTML>
2
<html class="s_bs">
3
<head>
4
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
6
	<title>NFC</title>
7
	{%>template/common/Head.html%}
8
	<link href="biz/css/project.css" rel="stylesheet" type="text/css" />
9
</head>
10
<body>
11

12
<div class="c_navBar">
13
	<div class="left">
14
		<div class="back">
15
			<span class="e_ico-back"></span>
16
			<span class="text">NFC</span>
17
		</div>
18
	</div>
19
</div>
20

21
<div class="m_content m_content-nofooter" id="content" >
22
	<div class="c_title">初始化NFC</div>
23
	<div class="c_list">
24
		<ul>
25
			<li>
26
				<div class="content">
27
					<div class="main">
28
						<div class="title">初始化NFC</div>
29
						<div class="info">在公共方法中初始化nfc,如指令等</div>
30
					</div>
31
				</div>
32
			</li>
33
		</ul>
34
	</div>
35
</div>
36
</body>
37
</html>

+ 1 - 1
ipu-server/etc/server-config.xml

@ -23,7 +23,7 @@
23 23
	<!-- 自定义安全管理器 -->
24 24
	<config name="securityHandler" value="com.ipu.server.core.handle.IpuSecurityHandler"/>
25 25
	<!-- 是否运行标签引擎 -->
26
	<config name="isUseTag" value="true"/>
26
	<config name="isUseTag" value="true" />
27 27
</configs>
28 28

29 29


二進制
wade-mobile-common/libs/wade-mobile-com.jar


二進制
wade-mobile-common/libs/wade-mobile-data.jar


二進制
wade-mobile-common/libs/wade-mobile-func.jar


二進制
wade-mobile-common/libs/wade-mobile-im.jar


二進制
wade-mobile-common/libs/wade-mobile-ui.jar


二進制
wade-mobile-common/libs/wade-mobile.jar


+ 8 - 5
wade-mobile-func/.classpath

@ -1,11 +1,14 @@
1 1
<?xml version="1.0" encoding="UTF-8"?>
2 2
<classpath>
3 3
	<classpathentry kind="src" path="src"/>
4
	<classpathentry combineaccessrules="false" kind="src" path="/wade-mobile"/>
5
	<classpathentry combineaccessrules="false" kind="src" path="/wade-mobile-com"/>
6
	<classpathentry combineaccessrules="false" kind="src" path="/wade-mobile-data"/>
7
	<classpathentry combineaccessrules="false" kind="src" path="/wade-mobile-im"/>
8
	<classpathentry combineaccessrules="false" kind="src" path="/wade-mobile-ui"/>
4
	<classpathentry kind="lib" path="libs/android-lite-http.jar"/>
9 5
	<classpathentry kind="lib" path="libs/android.jar"/>
6
	<classpathentry kind="lib" path="libs/scan-code.jar"/>
7
	<classpathentry kind="lib" path="libs/wade-mobile-com.jar"/>
8
	<classpathentry kind="lib" path="libs/wade-mobile-data.jar"/>
9
	<classpathentry kind="lib" path="libs/wade-mobile-im.jar"/>
10
	<classpathentry kind="lib" path="libs/wade-mobile-ui.jar"/>
11
	<classpathentry kind="lib" path="libs/unirest-java-1.3.2-SNAPSHOT-withDependency-ShadedForAndroid.jar"/>
12
	<classpathentry combineaccessrules="false" kind="src" path="/wade-mobile-com"/>
10 13
	<classpathentry kind="output" path="bin"/>
11 14
</classpath>

二進制
wade-mobile-func/libs/wade-mobile-com.jar


二進制
wade-mobile-func/libs/wade-mobile.jar


+ 51 - 0
wade-mobile-func/src/com/wade/mobile/func/MobileDevice.java

@ -0,0 +1,51 @@
1
package com.wade.mobile.func;
2

3
import org.json.JSONArray;
4
import org.json.JSONObject;
5

6
import android.os.Bundle;
7
import android.os.Handler;
8

9
import com.wade.mobile.common.nfc.util.NfcConstant;
10
import com.wade.mobile.frame.IWadeMobile;
11
import com.wade.mobile.frame.plugin.Plugin;
12
import com.wade.mobile.util.EscapeUnescape;
13

14
public class MobileDevice extends Plugin {
15

16
	public MobileDevice(IWadeMobile wademobile) {
17
		super(wademobile);
18
	}
19

20
	/**
21
	 * 初始化nfc
22
	 * 
23
	 * @param param
24
	 * @throws Exception
25
	 */
26
	public void initDfc(JSONArray param) throws Exception {
27
		NfcConstant.handler = handler;
28

29
		String cmdsStr = param.getString(0);
30
		if (cmdsStr != null && !"".equals(cmdsStr)) {
31
			JSONObject cmds = new JSONObject(cmdsStr);
32
			NfcConstant.setCmds(cmds);
33
		}
34

35
	}
36

37
	final Handler handler = new Handler() {
38
		public void handleMessage(android.os.Message msg) {
39
			super.handleMessage(msg);
40
			if (msg.what == NfcConstant.NFC_INFO) {
41
				Bundle data = msg.getData();
42
				String nfcMsg = data.getString("nfcMsgInfo");
43

44
				// 转义
45
				String callback = "(function(msg){" + "getNfcMsg" + "(unescape(msg));})";
46
				String ret = callback + "('" + EscapeUnescape.escape(nfcMsg) + "')";
47
				wademobile.getCurrentWebView().executeJs(ret);
48
			}
49
		}
50
	};
51
}