From 77aa89db59f060183ef8a20433efe48b5a01e8e1 Mon Sep 17 00:00:00 2001 From: Hao Sun Date: Thu, 4 Nov 2021 17:41:28 +0800 Subject: [PATCH 01/55] =?UTF-8?q?*=20add=20new=20icons:=20version=E3=80=81?= =?UTF-8?q?thumbs-up=E3=80=81thumbs-down.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- www/theme/zui/css/min.css | 4 ++-- www/theme/zui/fonts/ZentaoIcon.eot | Bin 52142 -> 53322 bytes www/theme/zui/fonts/ZentaoIcon.svg | 6 +++++- www/theme/zui/fonts/ZentaoIcon.ttf | Bin 51964 -> 53144 bytes www/theme/zui/fonts/ZentaoIcon.woff | Bin 52040 -> 53220 bytes 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/www/theme/zui/css/min.css b/www/theme/zui/css/min.css index a7c7885267..b2f898482a 100644 --- a/www/theme/zui/css/min.css +++ b/www/theme/zui/css/min.css @@ -1,5 +1,5 @@ /*! - * ZUI: ZUI for Zentao - v1.9.2 - 2021-09-23 + * ZUI: ZUI for Zentao - v1.10.0 - 2021-11-04 * http://openzui.com * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2021 cnezsoft.com; Licensed MIT @@ -13,4 +13,4 @@ * * Copyright (c) 2011-2016 Harvest http://getharvest.com * MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -*/.chosen-container{position:relative;display:block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container .chosen-drop.chosen-auto-max-width{min-width:100%;border-top:1px solid rgba(0,0,0,.15);opacity:0}.chosen-container .chosen-drop.chosen-auto-max-width>.chosen-results>li{display:inline-block;white-space:nowrap}.chosen-container .chosen-drop.chosen-auto-max-width.in{opacity:1}.chosen-container .chosen-drop.chosen-auto-max-width.in>.chosen-results>li{display:block;white-space:normal}.chosen-container .chosen-drop.chosen-no-wrap>.chosen-results>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap!important}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container.chosen-highlight-selected .result-selected{color:#0c64eb;background:#e9f2fb}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:5px;right:24px;display:block;width:20px;height:20px;font-family:sans-serif;font-size:18px;font-weight:700;line-height:18px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{display:block;content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent;opacity:.5}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 4px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;line-height:12px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:1px;right:0;display:block;width:20px;height:18px;line-height:18px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-shadow:0 1px 0 #fff;text-transform:none;content:'\d7';speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0!important;border-bottom-left-radius:0!important;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-compact.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-compact.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-compact.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-compact.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}select.chosen[multiple]{height:32px;overflow:hidden}select.chosen[multiple] option{visibility:hidden}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}@media screen and (min-width:1920px){body{font-size:14px}}a:active,a:focus,button:active,button:focus{outline:0!important}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 3000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 3000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 3000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 3000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}.ie *{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}@font-face{font-family:Oswald;font-weight:400;src:url(../fonts/Oswald-Regular.ttf)}@font-face{font-family:Oswald;font-weight:500;src:url(../fonts/Oswald-Medium.ttf)}@font-face{font-family:Oswald;font-weight:300;src:url(../fonts/Oswald-Light.ttf)}.num{font-family:Oswald;font-weight:400}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.16.1);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.16.1) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.16.1) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.16.1) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.16.1) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:14px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:28px}.icon-3x{font-size:42px}.icon-4x{font-size:56px}.icon-5x{font-size:70px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-zentao:before{content:"\e901"}.icon-zentao-alt:before{content:"\e900"}.icon-help:before{content:"\e968"}.icon-import:before{content:"\e904"}.icon-download:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-lightbulb:before{content:"\e91c"}.icon-close:before{content:"\e936"}.icon-check:before{content:"\e5ca"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-expand-alt:before{content:"\e6f1"}.icon-collapse-alt:before{content:"\e6f2"}.icon-fullscreen:before{content:"\e96b"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-exclamation-sign:before{content:"\e930"}.icon-flag:before{content:"\e937"}.icon-check-circle:before{content:"\e92f"}.icon-check-sign:before{content:"\e938"}.icon-chart-pie:before{content:"\e95b"}.icon-history:before{content:"\e95f"}.icon-pencil:before{content:"\e254"}.icon-search:before{content:"\e928"}.icon-restart:before{content:"\e95e"}.icon-cog:before{content:"\e93b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-bar-chart:before{content:"\e95d"}.icon-exchange:before{content:"\e927"}.icon-severity:before{content:"\e973"}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-severity-solid:before{content:"\e902"}.icon-chat-line:before{content:"\e998"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-chat:before{content:"\e940"}.icon-message:before{content:"\e940"}.icon-more:before{content:"\e744"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-columns:before{content:"\f0db"}.icon-envelope-o:before{content:"\e92a"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-angle-double-right:before{content:"\f101"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-text:before{content:"\e929"}.icon-share:before{content:"\f064"}.icon-list:before{content:"\e9a8"}.icon-format-list-bulleted:before{content:"\e9a8"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-aiux:before{content:"\e99e"}.icon-qc:before{content:"\e986"}.icon-qc-q:before{content:"\e985"}.icon-qc-c:before{content:"\e987"}.icon-menu-my:before{content:"\e97a"}.icon-home:before{content:"\e97a"}.icon-program:before{content:"\e9aa"}.icon-lightbulb-alt:before{content:"\e98f"}.icon-product:before{content:"\e98f"}.icon-rocket:before{content:"\e99c"}.icon-project:before{content:"\e99c"}.icon-run:before{content:"\e9a9"}.icon-test:before{content:"\e956"}.icon-infinite:before{content:"\e9a3"}.icon-devops:before{content:"\e9a3"}.icon-ops:before{content:"\e903"}.icon-doc:before{content:"\e99b"}.icon-menu-doc:before{content:"\e99b"}.icon-statistic:before{content:"\e999"}.icon-menu-backend:before{content:"\e993"}.icon-assets:before{content:"\e9ae"}.icon-diamond:before{content:"\e9ae"}.icon-feedback:before{content:"\e991"}.icon-flow:before{content:"\e994"}.icon-oa:before{content:"\e9a1"}.icon-more-circle:before{content:"\e988"}.icon-controls:before{content:"\e995"}.icon-account:before{content:"\e992"}.icon-about:before{content:"\e996"}.icon-cog-outline:before{content:"\e997"}.icon-backend:before{content:"\e997"}.icon-exit:before{content:"\e99a"}.icon-theme:before{content:"\e9a0"}.icon-globe:before{content:"\f0ac"}.icon-lang:before{content:"\f0ac"}.icon-usecase:before{content:"\e99d"}.icon-code:before{content:"\e990"}.icon-summary:before{content:"\e9ad"}.icon-more-alt:before{content:"\e9a7"}.icon-waterfall:before{content:"\e9a4"}.icon-manual:before{content:"\e98d"}.icon-kanban:before{content:"\e983"}.icon-lane:before{content:"\e9b1"}.icon-p-square:before{content:"\e97b"}.icon-video-play:before{content:"\e97f"}.icon-plus-solid-circle:before{content:"\e974"}.icon-s:before{content:"\e975"}.icon-c:before{content:"\e976"}.icon-t:before{content:"\e977"}.icon-guide:before{content:"\e978"}.icon-todo:before{content:"\e979"}.icon-side-left:before{content:"\e9b3"}.icon-side-right:before{content:"\e9b2"}.icon-fullscreen-exit:before{content:"\e972"}.icon-back:before{content:"\e93f"}.icon-swap:before{content:"\e9b0"}.icon-clock:before{content:"\e97c"}.icon-cost:before{content:"\e97d"}.icon-pencil-alt:before{content:"\e984"}.icon-rich-text:before{content:"\e913"}.icon-markdown:before{content:"\e916"}.icon-excel:before{content:"\e933"}.icon-text-link:before{content:"\e94d"}.icon-ppt:before{content:"\e957"}.icon-word:before{content:"\e958"}.icon-doc-lib:before{content:"\e96f"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-menu-collapse:before{content:"\e980"}.icon-menu-expand:before{content:"\e981"}.icon-group:before{content:"\e97e"}.icon-menu-users:before{content:"\e97e"}.icon-persons:before{content:"\e97e"}.icon-team:before{content:"\e97e"}.icon-estimate:before{content:"\e9ac"}.icon-sprint:before{content:"\e9a2"}.icon-shield-check:before{content:"\e9a5"}.icon-ok:before{content:"\e9a6"}.icon-printer:before{content:"\e906"}.icon-bullhorn:before{content:"\e910"}.icon-person:before{content:"\e941"}.icon-fields:before{content:"\e989"}.icon-trigger:before{content:"\e98a"}.icon-layout:before{content:"\e98b"}.icon-audit:before{content:"\e98c"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-eye:before{content:"\e94e"}.icon-eye-off:before{content:"\e96e"}.icon-unlock:before{content:"\e94f"}.icon-lock:before{content:"\e950"}.icon-private:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-hand-right:before{content:"\e907"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-change:before{content:"\e970"}.icon-alter:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-review:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-testcase:before{content:"\e915"}.icon-pluses:before{content:"\e917"}.icon-report-list:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-active:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-split:before{content:"\e98e"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-sm:before{font-size:14px;vertical-align:10%}.icon-qc{position:relative}.icon-qc:before{width:1em;color:#7cb938;content:"\e985"}.icon-qc:after{position:absolute;top:0;left:0;width:1em;height:1em;font-family:ZentaoIcon;font-size:14px;font-size:inherit;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#36a742;text-transform:none;content:"\e987";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-message.has-dot{position:relative}.icon-message.has-dot::after{position:absolute;top:-3px;right:-5px;display:block;width:6px;height:6px;content:' ';background-color:#ff5d5d;border-radius:50%}.icon-project{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}.icon-product{-webkit-transform:scale(1.15);-ms-transform:scale(1.15);-o-transform:scale(1.15);transform:scale(1.15)}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c495c;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.angle-btn:first-child{border-radius:2px 0 0 2px}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-radius:2px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.btn.btn-action,.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}.btn.btn-action>i,.c-actions .btn>i{position:relative;top:1px;font-size:18px}.btn.btn-action:hover,.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}.c-actions .btn+.btn{margin-left:-4px}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-outline.label-info{border-color:rgba(33,150,243,.25)}.label-outline.label-warning{border-color:rgba(255,152,0,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:18px;max-width:67px;height:18px;padding:0 4px;overflow:hidden;font-size:12px;line-height:16px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:1px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;font-weight:bolder;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:14px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#ff8f00}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#fdd835}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#cddc39}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#ff8f00}.label-severity-custom[data-severity="3"]{color:#fdd835}.label-severity-custom[data-severity="4"]{color:#cddc39}.label-severity-custom[data-severity="5"]{color:#8bc34a}.label-selector{padding:0 10px}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-top:2px}.ie .checkbox input[type=checkbox],.ie .checkbox-inline input[type=checkbox],.ie .radio input[type=radio],.ie .radio-inline input[type=radio]{margin-top:4px}.is-firefox .checkbox input[type=checkbox],.is-firefox .checkbox-inline input[type=checkbox],.is-firefox .radio input[type=radio],.is-firefox .radio-inline input[type=radio]{margin-top:3px}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8;text-align:center;border-radius:4px}.panel-actions>li>a:hover{color:#3c495c;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie canvas{display:block}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.progress-pie-24 .progress-info{right:-10px;left:-10px;width:auto;padding-top:0;font-size:12px;line-height:24px;-webkit-transform:scale(.9,1);-ms-transform:scale(.9,1);-o-transform:scale(.9,1);transform:scale(.9,1)}.progress-pie-24[data-value="100"] .progress-info{-webkit-transform:scale(.8,1);-ms-transform:scale(.8,1);-o-transform:scale(.8,1);transform:scale(.8,1)}.progress-pie-26 .progress-info{right:-10px;left:-10px;width:auto;padding-top:0;font-size:12px;line-height:26px;-webkit-transform:scale(.9,1);-ms-transform:scale(.9,1);-o-transform:scale(.9,1);transform:scale(.9,1)}.progress-pie-26[data-value="100"] .progress-info{-webkit-transform:scale(.8,1);-ms-transform:scale(.8,1);-o-transform:scale(.8,1);transform:scale(.8,1)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-icon{vertical-align:middle}.messager-icon>.icon{font-size:24px}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff!important}.messagger-zt .messager-icon>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-icon>.icon{color:#00da88}.messagger-zt.messager-danger .messager-icon>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-icon>.icon{color:#ff9800}.messagger-zt.messager-info .messager-icon>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c495c}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c495c;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c495c;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li>a:hover>.icon{opacity:.8}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:1px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:14px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c495c}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c495c}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container .chosen-results{max-height:245px;padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.chosen-compact.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-compact.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-compact.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-addon:first-child{border-left-width:1px}.input-group-addon:last-child{border-right-width:1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}.form-unsaved{outline:2px solid #ff9800;-webkit-box-shadow:0 1px 12px #ff9800;box-shadow:0 1px 12px #ff9800;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading>.btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading>.btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:1400px){#navbar .nav>li>a{padding:10px 8px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px 8px;background:rgba(255,255,255,.4)}@media (max-width:1400px){#navbar .nav>li.divider{margin:15px 5px}}@media (max-width:1300px){#navbar .nav>li.divider{margin:15px 3px}}#navbar .nav>li.divider:last-child{display:none}#navbar .nav .dropdown-menu li>a{text-align:left}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#showSearchGo{color:#fff;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.5)}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#16a8f8;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:-ms-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus:-ms-input-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a:hover>i{opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c495c}#subNavbar .nav>li>a:hover{color:#3c495c;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}[lang=en] #subNavbar>.nav>li>a{padding-right:8px;padding-left:8px}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{min-width:1200px;padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}.main-form{margin:0}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{height:30px;padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:10px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>i,#prevPage>i{display:block;font-size:18px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s,opacity .5s;-o-transition:background-color .2s,opacity .5s;transition:background-color .2s,opacity .5s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s,opacity .2s;-o-transition:left .2s,opacity .2s;transition:left .2s,opacity .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px;visibility:hidden;opacity:0}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{width:100%;margin-left:0}.body-modal #mainMenu>.btn-toolbar .page-title>.text{position:relative;top:-2px;display:inline-block;max-width:85%;max-width:-webkit-calc(100% - 100px);max-width:calc(100% - 100px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn-link{color:#3c495c;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin .3s;-o-transition:opacity .3s,margin .3s;transition:opacity .3s,margin .3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-right:4px;padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:1px;right:1px;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-header-fixed .table-header{position:fixed;top:0}.table-header-fixed .table-header>.btn-toolbar{background-color:transparent}.table-header-fixed .table-header>.btn-toolbar .btn{color:#fff}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic,.table-footer .btn-toolbar+.text{margin-left:10px}.table-footer .text{float:left;line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:0 0}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c495c;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>.dropdown>a,.table.fixed-header-copy thead>tr>th>.dropdown>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>.dropdown>a:hover,.table.fixed-header-copy thead>tr>th>.dropdown>a:hover{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.table-nest-hide{display:none!important}th.table-nest-title{position:relative;padding-left:30px!important}.table-nest-icon{position:relative;display:inline-block;width:22px;height:22px;font-size:16px;color:#a6aab8;text-align:center;border-radius:4px}.table-nest-toggle:before{line-height:22px;content:"\e6f2"}.table-nest-toggle:hover{color:#0c64eb;background-color:rgba(0,0,0,.1)}.table-nest-child-hide .table-nest-toggle:before{font-size:16px;content:"\e6f1"}th.table-nest-title .table-nest-toggle{position:absolute!important;top:7px;left:8px}.table-nest-toggle.table-nest-toggle-global{width:22px;height:22px;padding:0!important;line-height:22px;text-align:center;border-radius:4px}.table-nest-toggle.table-nest-toggle-global:before{position:static!important;font-size:16px!important;line-height:22px!important;content:"\e6f2"!important;opacity:1!important}.table-nest-toggle.table-nest-toggle-global:after{display:none!important}.table-nest-collapsed .table-nest-toggle.table-nest-toggle-global:before{font-size:16px!important;content:"\e6f1"!important}.disable-empty-nest-row .is-nest-child .table-nest-icon:before,.disable-empty-nest-row .no-nest .table-nest-icon:before{position:relative;top:-1px;width:6px;min-width:6px;height:6px;content:' ';background-color:#cbd0db;border-radius:1px}.table-nest-child-hover>td:first-child,.table-nest-hover>td:first-child{-webkit-box-shadow:inset 3px 0 0 #cbd0db;box-shadow:inset 3px 0 0 #cbd0db}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content a{color:#0c64eb}.article-content a:focus,.article-content a:hover{color:#16a8f8}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.search-list .list-group>a.active{color:inherit;background-color:inherit}.search-list.searchbox-focus .list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.search-list .list-group>a.active:hover,.search-list.searchbox-focus .list-group>a.active:hover{color:#fff;background-color:#0c64eb}#dropMenu{width:initial;max-width:initial}#dropMenu>.search-box{width:100%;padding:10px 10px 0;margin:0}#dropMenu>.search-box .icon-search{color:#333}#dropMenu>.search-box.has-icon-right>.form-control{padding-left:26px}#dropMenu .input-control-icon-left{top:10px;left:10px}#dropMenu .input-control-icon-right{top:11px;right:11px}#dropMenu .input-control-icon-right .icon{position:relative;top:2px}#dropMenu .list-group{max-height:initial;margin:0}#dropMenu .table-row{margin:0 -10px;table-layout:auto}#dropMenu .table-col{position:relative;width:100%;min-width:250px;max-width:450px}#dropMenu .table-col .list-group{max-height:300px;padding:0 10px 5px}#dropMenu .col-left{padding-bottom:30px}#dropMenu .col-right{display:none}#dropMenu .col-footer{position:absolute;right:0;bottom:0;left:0;padding:5px 10px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col .table-col{width:50%}#dropMenu.show-right-col .col-right{display:table-cell;border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{max-height:335px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}#dropMenu.has-search-text .list-group{overflow-x:hidden}#dropMenu.has-search-text>.search-box{width:100%!important}#dropMenu.has-search-text>.list-group>.table-row{display:block}#dropMenu.has-search-text>.list-group>.table-row>.table-col{display:block;width:100%}#dropMenu.has-search-text .col-left{padding-bottom:0}#dropMenu.has-search-text .pull-right.toggle-right-col{display:none}#dropMenu.has-search-text .col-left .list-group{margin-bottom:0}#dropMenu.has-search-text .col-right .list-group{margin-bottom:0}#dropMenu.has-search-text .col-right .list-group>a{opacity:.7}#dropMenu.has-search-text .col-footer,#dropMenu.has-search-text .hide-in-search{display:none}#swapper{position:relative}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#0c64eb!important}#swapper #dropMenu .tree{margin:0}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active>.icon,#footer .breadcrumb>li>a>.icon{display:none}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px}#heading{top:0}.header-btn{position:relative;padding:8px 0}.header-btn .btn{position:relative;height:34px;padding:1px 6px;margin:0;overflow:visible;font-size:13px;font-weight:400;line-height:28px;color:#fff;background-color:transparent;border-color:transparent!important;border-right:none;-webkit-transition:none;-o-transition:none;transition:none}.header-btn .btn>.caret{margin-left:0;border-width:4px}.header-btn .btn>.text{display:inline-block;max-width:150px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.header-btn .btn:hover{-webkit-box-shadow:none;box-shadow:none}.header-btn .btn:hover,.header-btn.active .btn{color:#fff;background:rgba(0,0,0,.15)}.header-btn .btn:hover>.caret,.header-btn.active .btn>.caret{opacity:1}.header-btn+.header-btn{margin-left:10px}.header-btn+.header-btn:before{position:absolute;top:16px;left:-13px;display:block;font-family:ZentaoIcon;font-size:14px;font-size:16px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e315";opacity:.6;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.header-btn .dropdown-menu{margin-top:-10px}#toolbar{top:0;height:50px}#userNav>li{margin-right:0}#userNav>li>a{padding:10px 5px}#userNav>li>a>.icon{font-size:30px;filter:brightness(1.2) hue-rotate(30deg);opacity:.9;-webkit-filter:brightness(1.2) hue-rotate(30deg)}#userNav>li:hover>a{background-color:rgba(0,0,0,.1)}#userNav .dropdown-menu>li>a{position:relative;padding-left:24px}#userNav .dropdown-menu>li>a>.icon{top:1px;left:0}#userNav .dropdown-menu>li.user-profile-item>a{padding-left:45px} \ No newline at end of file +*/.chosen-container{position:relative;display:block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container .chosen-drop.chosen-auto-max-width{min-width:100%;border-top:1px solid rgba(0,0,0,.15);opacity:0}.chosen-container .chosen-drop.chosen-auto-max-width>.chosen-results>li{display:inline-block;white-space:nowrap}.chosen-container .chosen-drop.chosen-auto-max-width.in{opacity:1}.chosen-container .chosen-drop.chosen-auto-max-width.in>.chosen-results>li{display:block;white-space:normal}.chosen-container .chosen-drop.chosen-no-wrap>.chosen-results>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap!important}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container.chosen-highlight-selected .result-selected{color:#0c64eb;background:#e9f2fb}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:5px;right:24px;display:block;width:20px;height:20px;font-family:sans-serif;font-size:18px;font-weight:700;line-height:18px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{display:block;content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent;opacity:.5}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 4px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;line-height:12px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:1px;right:0;display:block;width:20px;height:18px;line-height:18px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-shadow:0 1px 0 #fff;text-transform:none;content:'\d7';speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0!important;border-bottom-left-radius:0!important;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-compact.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-compact.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-compact.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-compact.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}select.chosen[multiple]{height:32px;overflow:hidden}select.chosen[multiple] option{visibility:hidden}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}@media screen and (min-width:1920px){body{font-size:14px}}a:active,a:focus,button:active,button:focus{outline:0!important}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 3000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 3000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 3000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 3000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}.ie *{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}@font-face{font-family:Oswald;font-weight:400;src:url(../fonts/Oswald-Regular.ttf)}@font-face{font-family:Oswald;font-weight:500;src:url(../fonts/Oswald-Medium.ttf)}@font-face{font-family:Oswald;font-weight:300;src:url(../fonts/Oswald-Light.ttf)}.num{font-family:Oswald;font-weight:400}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.18);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.18) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.18) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.18) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.18) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:14px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:28px}.icon-3x{font-size:42px}.icon-4x{font-size:56px}.icon-5x{font-size:70px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-zentao:before{content:"\e901"}.icon-zentao-alt:before{content:"\e900"}.icon-help:before{content:"\e968"}.icon-import:before{content:"\e904"}.icon-download:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-lightbulb:before{content:"\e91c"}.icon-close:before{content:"\e936"}.icon-check:before{content:"\e5ca"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-expand-alt:before{content:"\e6f1"}.icon-collapse-alt:before{content:"\e6f2"}.icon-fullscreen:before{content:"\e96b"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-exclamation-sign:before{content:"\e930"}.icon-flag:before{content:"\e937"}.icon-check-circle:before{content:"\e92f"}.icon-check-sign:before{content:"\e938"}.icon-chart-pie:before{content:"\e95b"}.icon-history:before{content:"\e95f"}.icon-pencil:before{content:"\e254"}.icon-search:before{content:"\e928"}.icon-restart:before{content:"\e95e"}.icon-cog:before{content:"\e93b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-bar-chart:before{content:"\e95d"}.icon-exchange:before{content:"\e927"}.icon-severity:before{content:"\e973"}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-severity-solid:before{content:"\e902"}.icon-chat-line:before{content:"\e998"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-chat:before{content:"\e940"}.icon-message:before{content:"\e940"}.icon-more:before{content:"\e744"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-columns:before{content:"\f0db"}.icon-envelope-o:before{content:"\e92a"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-angle-double-right:before{content:"\f101"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-text:before{content:"\e929"}.icon-share:before{content:"\f064"}.icon-list:before{content:"\e9a8"}.icon-format-list-bulleted:before{content:"\e9a8"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-aiux:before{content:"\e99e"}.icon-qc:before{content:"\e986"}.icon-qc-q:before{content:"\e985"}.icon-qc-c:before{content:"\e987"}.icon-menu-my:before{content:"\e97a"}.icon-home:before{content:"\e97a"}.icon-program:before{content:"\e9aa"}.icon-lightbulb-alt:before{content:"\e98f"}.icon-product:before{content:"\e98f"}.icon-rocket:before{content:"\e99c"}.icon-project:before{content:"\e99c"}.icon-run:before{content:"\e9a9"}.icon-test:before{content:"\e956"}.icon-infinite:before{content:"\e9a3"}.icon-devops:before{content:"\e9a3"}.icon-ops:before{content:"\e903"}.icon-doc:before{content:"\e99b"}.icon-menu-doc:before{content:"\e99b"}.icon-statistic:before{content:"\e999"}.icon-menu-backend:before{content:"\e993"}.icon-assets:before{content:"\e9ae"}.icon-diamond:before{content:"\e9ae"}.icon-feedback:before{content:"\e991"}.icon-flow:before{content:"\e994"}.icon-oa:before{content:"\e9a1"}.icon-more-circle:before{content:"\e988"}.icon-controls:before{content:"\e995"}.icon-account:before{content:"\e992"}.icon-about:before{content:"\e996"}.icon-cog-outline:before{content:"\e997"}.icon-backend:before{content:"\e997"}.icon-exit:before{content:"\e99a"}.icon-theme:before{content:"\e9a0"}.icon-globe:before{content:"\f0ac"}.icon-lang:before{content:"\f0ac"}.icon-usecase:before{content:"\e99d"}.icon-code:before{content:"\e990"}.icon-summary:before{content:"\e9ad"}.icon-more-alt:before{content:"\e9a7"}.icon-waterfall:before{content:"\e9a4"}.icon-manual:before{content:"\e98d"}.icon-kanban:before{content:"\e983"}.icon-lane:before{content:"\e9b1"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-hash:before{content:"\e9ab"}.icon-version:before{content:"\e9ab"}.icon-p-square:before{content:"\e97b"}.icon-video-play:before{content:"\e97f"}.icon-plus-solid-circle:before{content:"\e974"}.icon-s:before{content:"\e975"}.icon-c:before{content:"\e976"}.icon-t:before{content:"\e977"}.icon-guide:before{content:"\e978"}.icon-todo:before{content:"\e979"}.icon-side-left:before{content:"\e9b3"}.icon-side-right:before{content:"\e9b2"}.icon-fullscreen-exit:before{content:"\e972"}.icon-alert:before{content:"\e99f"}.icon-back:before{content:"\e93f"}.icon-swap:before{content:"\e9b0"}.icon-clock:before{content:"\e97c"}.icon-cost:before{content:"\e97d"}.icon-pencil-alt:before{content:"\e984"}.icon-rich-text:before{content:"\e913"}.icon-markdown:before{content:"\e916"}.icon-excel:before{content:"\e933"}.icon-text-link:before{content:"\e94d"}.icon-ppt:before{content:"\e957"}.icon-word:before{content:"\e958"}.icon-doc-lib:before{content:"\e96f"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-menu-collapse:before{content:"\e980"}.icon-menu-expand:before{content:"\e981"}.icon-group:before{content:"\e97e"}.icon-menu-users:before{content:"\e97e"}.icon-persons:before{content:"\e97e"}.icon-team:before{content:"\e97e"}.icon-estimate:before{content:"\e9ac"}.icon-sprint:before{content:"\e9a2"}.icon-shield-check:before{content:"\e9a5"}.icon-ok:before{content:"\e9a6"}.icon-printer:before{content:"\e906"}.icon-bullhorn:before{content:"\e910"}.icon-person:before{content:"\e941"}.icon-fields:before{content:"\e989"}.icon-trigger:before{content:"\e98a"}.icon-layout:before{content:"\e98b"}.icon-audit:before{content:"\e98c"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-eye:before{content:"\e94e"}.icon-eye-off:before{content:"\e96e"}.icon-unlock:before{content:"\e94f"}.icon-lock:before{content:"\e950"}.icon-private:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-hand-right:before{content:"\e907"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-change:before{content:"\e970"}.icon-alter:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-review:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-testcase:before{content:"\e915"}.icon-pluses:before{content:"\e917"}.icon-report-list:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-active:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-split:before{content:"\e98e"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-sm:before{font-size:14px;vertical-align:10%}.icon-qc{position:relative}.icon-qc:before{width:1em;color:#7cb938;content:"\e985"}.icon-qc:after{position:absolute;top:0;left:0;width:1em;height:1em;font-family:ZentaoIcon;font-size:14px;font-size:inherit;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#36a742;text-transform:none;content:"\e987";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-message.has-dot{position:relative}.icon-message.has-dot::after{position:absolute;top:-3px;right:-5px;display:block;width:6px;height:6px;content:' ';background-color:#ff5d5d;border-radius:50%}.icon-project{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}.icon-product{-webkit-transform:scale(1.15);-ms-transform:scale(1.15);-o-transform:scale(1.15);transform:scale(1.15)}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c495c;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.angle-btn:first-child{border-radius:2px 0 0 2px}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-radius:2px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.btn.btn-action,.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}.btn.btn-action>i,.c-actions .btn>i{position:relative;top:1px;font-size:18px}.btn.btn-action:hover,.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}.c-actions .btn+.btn{margin-left:-4px}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-outline.label-info{border-color:rgba(33,150,243,.25)}.label-outline.label-warning{border-color:rgba(255,152,0,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:18px;max-width:67px;height:18px;padding:0 4px;overflow:hidden;font-size:12px;line-height:16px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:1px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;font-weight:bolder;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:14px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#ff8f00}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#fdd835}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#cddc39}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#ff8f00}.label-severity-custom[data-severity="3"]{color:#fdd835}.label-severity-custom[data-severity="4"]{color:#cddc39}.label-severity-custom[data-severity="5"]{color:#8bc34a}.label-selector{padding:0 10px}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-top:2px}.ie .checkbox input[type=checkbox],.ie .checkbox-inline input[type=checkbox],.ie .radio input[type=radio],.ie .radio-inline input[type=radio]{margin-top:4px}.is-firefox .checkbox input[type=checkbox],.is-firefox .checkbox-inline input[type=checkbox],.is-firefox .radio input[type=radio],.is-firefox .radio-inline input[type=radio]{margin-top:3px}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8;text-align:center;border-radius:4px}.panel-actions>li>a:hover{color:#3c495c;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie canvas{display:block}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.progress-pie-24 .progress-info{right:-10px;left:-10px;width:auto;padding-top:0;font-size:12px;line-height:24px;-webkit-transform:scale(.9,1);-ms-transform:scale(.9,1);-o-transform:scale(.9,1);transform:scale(.9,1)}.progress-pie-24[data-value="100"] .progress-info{-webkit-transform:scale(.8,1);-ms-transform:scale(.8,1);-o-transform:scale(.8,1);transform:scale(.8,1)}.progress-pie-26 .progress-info{right:-10px;left:-10px;width:auto;padding-top:0;font-size:12px;line-height:26px;-webkit-transform:scale(.9,1);-ms-transform:scale(.9,1);-o-transform:scale(.9,1);transform:scale(.9,1)}.progress-pie-26[data-value="100"] .progress-info{-webkit-transform:scale(.8,1);-ms-transform:scale(.8,1);-o-transform:scale(.8,1);transform:scale(.8,1)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-icon{vertical-align:middle}.messager-icon>.icon{font-size:24px}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff!important}.messagger-zt .messager-icon>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-icon>.icon{color:#00da88}.messagger-zt.messager-danger .messager-icon>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-icon>.icon{color:#ff9800}.messagger-zt.messager-info .messager-icon>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c495c}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c495c;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c495c;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li>a:hover>.icon{opacity:.8}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:1px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:14px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c495c}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c495c}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container .chosen-results{max-height:245px;padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.chosen-compact.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-compact.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-compact.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-addon:first-child{border-left-width:1px}.input-group-addon:last-child{border-right-width:1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}.form-unsaved{outline:2px solid #ff9800;-webkit-box-shadow:0 1px 12px #ff9800;box-shadow:0 1px 12px #ff9800;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading>.btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading>.btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:1400px){#navbar .nav>li>a{padding:10px 8px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px 8px;background:rgba(255,255,255,.4)}@media (max-width:1400px){#navbar .nav>li.divider{margin:15px 5px}}@media (max-width:1300px){#navbar .nav>li.divider{margin:15px 3px}}#navbar .nav>li.divider:last-child{display:none}#navbar .nav .dropdown-menu li>a{text-align:left}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#showSearchGo{color:#fff;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.5)}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#16a8f8;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:-ms-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus:-ms-input-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a:hover>i{opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c495c}#subNavbar .nav>li>a:hover{color:#3c495c;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}[lang=en] #subNavbar>.nav>li>a{padding-right:8px;padding-left:8px}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{min-width:1200px;padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}.main-form{margin:0}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{height:30px;padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:10px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>i,#prevPage>i{display:block;font-size:18px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s,opacity .5s;-o-transition:background-color .2s,opacity .5s;transition:background-color .2s,opacity .5s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-1px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s,opacity .2s;-o-transition:left .2s,opacity .2s;transition:left .2s,opacity .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px;visibility:hidden;opacity:0}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{width:100%;margin-left:0}.body-modal #mainMenu>.btn-toolbar .page-title>.text{position:relative;top:-2px;display:inline-block;max-width:85%;max-width:-webkit-calc(100% - 100px);max-width:calc(100% - 100px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn-link{color:#3c495c;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin .3s;-o-transition:opacity .3s,margin .3s;transition:opacity .3s,margin .3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-right:4px;padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:1px;right:1px;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-header-fixed .table-header{position:fixed;top:0}.table-header-fixed .table-header>.btn-toolbar{background-color:transparent}.table-header-fixed .table-header>.btn-toolbar .btn{color:#fff}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic,.table-footer .btn-toolbar+.text{margin-left:10px}.table-footer .text{float:left;line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:0 0}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c495c;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>.dropdown>a,.table.fixed-header-copy thead>tr>th>.dropdown>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>.dropdown>a:hover,.table.fixed-header-copy thead>tr>th>.dropdown>a:hover{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.table-nest-hide{display:none!important}th.table-nest-title{position:relative;padding-left:30px!important}.table-nest-icon{position:relative;display:inline-block;width:22px;height:22px;font-size:16px;color:#a6aab8;text-align:center;border-radius:4px}.table-nest-toggle:before{line-height:22px;content:"\e6f2"}.table-nest-toggle:hover{color:#0c64eb;background-color:rgba(0,0,0,.1)}.table-nest-child-hide .table-nest-toggle:before{font-size:16px;content:"\e6f1"}th.table-nest-title .table-nest-toggle{position:absolute!important;top:7px;left:8px}.table-nest-toggle.table-nest-toggle-global{width:22px;height:22px;padding:0!important;line-height:22px;text-align:center;border-radius:4px}.table-nest-toggle.table-nest-toggle-global:before{position:static!important;font-size:16px!important;line-height:22px!important;content:"\e6f2"!important;opacity:1!important}.table-nest-toggle.table-nest-toggle-global:after{display:none!important}.table-nest-collapsed .table-nest-toggle.table-nest-toggle-global:before{font-size:16px!important;content:"\e6f1"!important}.disable-empty-nest-row .is-nest-child .table-nest-icon:before,.disable-empty-nest-row .no-nest .table-nest-icon:before{position:relative;top:-1px;width:6px;min-width:6px;height:6px;content:' ';background-color:#cbd0db;border-radius:1px}.table-nest-child-hover>td:first-child,.table-nest-hover>td:first-child{-webkit-box-shadow:inset 3px 0 0 #cbd0db;box-shadow:inset 3px 0 0 #cbd0db}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content a{color:#0c64eb}.article-content a:focus,.article-content a:hover{color:#16a8f8}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.search-list .list-group>a.active{color:inherit;background-color:inherit}.search-list.searchbox-focus .list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.search-list .list-group>a.active:hover,.search-list.searchbox-focus .list-group>a.active:hover{color:#fff;background-color:#0c64eb}#dropMenu{width:initial;max-width:initial}#dropMenu>.search-box{width:100%;padding:10px 10px 0;margin:0}#dropMenu>.search-box .icon-search{color:#333}#dropMenu>.search-box.has-icon-right>.form-control{padding-left:26px}#dropMenu .input-control-icon-left{top:10px;left:10px}#dropMenu .input-control-icon-right{top:11px;right:11px}#dropMenu .input-control-icon-right .icon{position:relative;top:2px}#dropMenu .list-group{max-height:initial;margin:0}#dropMenu .table-row{margin:0 -10px;table-layout:auto}#dropMenu .table-col{position:relative;width:100%;min-width:250px;max-width:450px}#dropMenu .table-col .list-group{max-height:300px;padding:0 10px 5px}#dropMenu .col-left{padding-bottom:30px}#dropMenu .col-right{display:none}#dropMenu .col-footer{position:absolute;right:0;bottom:0;left:0;padding:5px 10px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col .table-col{width:50%}#dropMenu.show-right-col .col-right{display:table-cell;border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{max-height:335px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}#dropMenu.has-search-text .list-group{overflow-x:hidden}#dropMenu.has-search-text>.search-box{width:100%!important}#dropMenu.has-search-text>.list-group>.table-row{display:block}#dropMenu.has-search-text>.list-group>.table-row>.table-col{display:block;width:100%}#dropMenu.has-search-text .col-left{padding-bottom:0}#dropMenu.has-search-text .pull-right.toggle-right-col{display:none}#dropMenu.has-search-text .col-left .list-group{margin-bottom:0}#dropMenu.has-search-text .col-right .list-group{margin-bottom:0}#dropMenu.has-search-text .col-right .list-group>a{opacity:.7}#dropMenu.has-search-text .col-footer,#dropMenu.has-search-text .hide-in-search{display:none}#swapper{position:relative}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#0c64eb!important}#swapper #dropMenu .tree{margin:0}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active>.icon,#footer .breadcrumb>li>a>.icon{display:none}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px}#heading{top:0}.header-btn{position:relative;padding:8px 0}.header-btn .btn{position:relative;height:34px;padding:1px 6px;margin:0;overflow:visible;font-size:13px;font-weight:400;line-height:28px;color:#fff;background-color:transparent;border-color:transparent!important;border-right:none;-webkit-transition:none;-o-transition:none;transition:none}.header-btn .btn>.caret{margin-left:0;border-width:4px}.header-btn .btn>.text{display:inline-block;max-width:150px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.header-btn .btn:hover{-webkit-box-shadow:none;box-shadow:none}.header-btn .btn:hover,.header-btn.active .btn{color:#fff;background:rgba(0,0,0,.15)}.header-btn .btn:hover>.caret,.header-btn.active .btn>.caret{opacity:1}.header-btn+.header-btn{margin-left:10px}.header-btn+.header-btn:before{position:absolute;top:16px;left:-13px;display:block;font-family:ZentaoIcon;font-size:14px;font-size:16px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e315";opacity:.6;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.header-btn .dropdown-menu{margin-top:-10px}#toolbar{top:0;height:50px}#userNav>li{margin-right:0}#userNav>li>a{padding:10px 5px}#userNav>li>a>.icon{font-size:30px;filter:brightness(1.2) hue-rotate(30deg);opacity:.9;-webkit-filter:brightness(1.2) hue-rotate(30deg)}#userNav>li:hover>a{background-color:rgba(0,0,0,.1)}#userNav .dropdown-menu>li>a{position:relative;padding-left:24px}#userNav .dropdown-menu>li>a>.icon{top:1px;left:0}#userNav .dropdown-menu>li.user-profile-item>a{padding-left:45px} \ No newline at end of file diff --git a/www/theme/zui/fonts/ZentaoIcon.eot b/www/theme/zui/fonts/ZentaoIcon.eot index 153ad6521b2187a09ca7f7d24412110408238e40..24d7b7b6c9b75a0ee24bf67d231487ff7782d937 100644 GIT binary patch delta 1990 zcmah~ZA?>F7(VCTw$RUe+uM6fZ_AaoYk?Muw9sNpS%(Z)$CrqJfI<^*YgLsGW-M}!Vu9FqAYmrNtoL*WKoGE{3CI?l!}A%wn#-m$4C+Fy+f z352j2?E71y1N|`52ocax`j&04y;9a$_&(Sf2%VYUx;ffqtG0I|bS@qIzO4YLwCR6= z9R~Zktvx#jx3hr(u)7c<_ipRk6dnAgatxvKf5JOPd!mE==x;Z^gU}D3z=EvaXwT;F z9FtjKpM!wU`}+oVA`(34;-Kh9B>5=51MhMD43-CM3DO~qvVL#)gS$R)ee(L%8~1Kj z+J^;{5pe8t)#hb`Od;Q)}iu+;&8 z4_jrKc-|kv3w{7negJ%4?f(VzQXEH3#Zu#xI~;b41L02DOTlMi#3_zS+QmR(isB++ zchW9yLclIbZ~>MYz_GYFeikfshk@qAm7c>nF(7(w2YHvYA{Mz&0KJ5e)M9mHJA8gz zhJgSB7I2yd+aUQgtic8Wdo3QH-{;82Zfw)eGqXUHjRod_7~oOQc?-$clWC41O-Xck zFH&!*+RX{2B{Vof^uS}tQoVU2B*|6#l;MyUugLc96!B5H<@STdE?Ba zIO04h!?zKcjFd6K)S}1B=b!WocyeS(_%v_ijnH_!+{9plnCaH@@IYenK90D zE-pZciH}3_7!>kcFWF1lkrI`m-3a*~i{SA=rMjRvMO`$alF(dOD=I7CRH+v^vdb{I z7eVxNFvQD6lmaM)iOXCF zd@R8elp6GMB~8hsj1J>KLB!ixV5o>?FpPB_2$g$-$=_1 zv%}pP8eWyxXAXM2^`5-UU=!~X%td@|j!mg>ZZ~V~3>{L6tS)mh63*OQN3z9cV4QJs zaNOAfV?uVq#|UnH^@!D<`)2-3mOui;xrEvAMD_yjTW-^M55^ZbSZm&BKy7vgs( GM*jua*|K^7 delta 788 zcmX@LfO*|?X0~;w85sVYn#g9xBC)zmdZI%JquE4%>4_Ue>#r~{Fzf;1gyh`B0+pZ2 zYzz#HGC=;H^u*!)BtQU|DDZ9#r<2?NkN28L62K=KUC%)cfVF;?q70P;+Ld=>@~ z21W*jM}pLpPsus|N3&?%T+Jez1;jk?1S!yl*tlI+T06Xu6elu%J*T? zk`d<@=Mz{XFijvqKuJJ~{{#O`{`350{6awM7$;9;GTMBA$vUf^m7(x|9&g6FaRActY{=A%P7L8tf-`B%V=U|ENW~dCMqbxrp>6NW-4f6X3a<%zme%5J0~am zUnUS~z{bVJW&mV;GhmN^^1mSqLdBSFbF%A$GysYDTx@@XKy0RUAl?5QL2SnTAU1aK z&Hr-eYHY5a9wxYX?Mf@o&D~o~h2=E9Ntdmbi08NY%D~M63}6O^yWUf}VD#jBC(Ie| zY!*8iz{CQSEu5TnI)C!r(>jxR&!}#;I@8Wr-(vdCLe8qrYMZs4^#hwen@hHJb}Q^1 z90VL}9JV;NIGH%Db53x+=laS`#qF58j{5^oE6+uqm%Nww9P^FvJ>lo(cf!9Tz%5{3 z;EAA`V4dJ|A*Vv+LQ_I#gq{lH2s;oi6}~NELd1@U2az0+29arzYa*{i{)wuIdKWDh z-4`=KB32@HN*r5ULfnV=B?%GX&W diff --git a/www/theme/zui/fonts/ZentaoIcon.svg b/www/theme/zui/fonts/ZentaoIcon.svg index 1b57264a3f..f063d8af55 100644 --- a/www/theme/zui/fonts/ZentaoIcon.svg +++ b/www/theme/zui/fonts/ZentaoIcon.svg @@ -151,7 +151,7 @@ - + @@ -179,6 +179,7 @@ + @@ -190,6 +191,7 @@ + @@ -200,6 +202,8 @@ + + diff --git a/www/theme/zui/fonts/ZentaoIcon.ttf b/www/theme/zui/fonts/ZentaoIcon.ttf index 161f3d97300150ae13e3b92bae2b24704cf2a38c..3a5f9eedd3f2dc70337fc2338c074d967ee1ffea 100644 GIT binary patch delta 1993 zcmah~du&rx7(eIUwp*X~w)fHXw!5sY?Y4Gn>3g)>ECYwdy@0We4HzAp%!NH*giJ8$ z693RYjENKsk|6#8iir|TQ8XH2c!kXw6I_T9F^h^kqGl2xn5>)M?FL~4V{;z&`+et} z+wb@LzH?^|kOz;DDTEP1YBY*Sw6t-Z*H0bRUIyeV=v%h-Cx_~hF@q4cfPHsca(D=4 z8X*EY%HOvA(4~CvhkF6g==1*sI}Y|Uz5TmJc5u;Q zu)7f=N4F1dU7j5Ivi3Ye-~0wIIoqEc8A5;I+X#Jo95xgUB>Q{LIVX$2z6Ab{hX#jt z!5@X+cO#M?k>rE7zTWHp0SrHwGGu^wihgPSmA^iIee(LX-|yU5dE?%#6Sp$c{B-$r z_w?)OUhGz$T(DkCzl&WweS$tnchPa$NsH87>KgSuwTI%S`)CUiHM|9%&#vIeRhqRE#*yQ(1?!khn_miMS{0kPac>lq|Ra%MIXocsPC< zEce8L-b_jV;gS>(JhzklgR~(Ixlt57kC5DIa~3vwE@|A3!Ge%P~10H2Uq8MUemeEwqIs2-TQ_hYm zWt|GSz!3i!%yPL*0$3Hrag@}JR;y9!Z(7Vkjg2^Eb2x0-I$MokwvgKlRQ3hhqEx|8 zX`zWvDMNOOr|>FiTpi&N*rP!e4q6{aQx%}ePo$Q5KJ?Z(um9CjIfa?WaNw)rgj!Doqu8% z@a)k=%cljCV1g##rDg^b#7rM6zypcNw{s6qAlW0*a%ls~6ns#nOhF>g4Uhw*1M0pS z?LjE=NCbZvGSv;qDe0nBbOpPkJ}2% z{A&aLSjs%))(Tov-|RkPzTV^x=IirRZbr>2wRTo(S1+SYUJg==cQFc$!V=`yw2Q2a zaf^6BbgQdq#$hn;aH%wQmk_jwA#-a?x{~G`*)#AU34myXeJ{^u)!Id~yK3G|)45FTRFT zhr+UoV03?UBGw$cUwO3hX4U@cGtaifo$y_>H#9U%G&VHpnkLq)T-&gYSU1#M)O>dRnHED!Tgw|QXIf@jPqpdV zKHIQm!%X{?_Sp_+M?=T%j*mL-Y!o)uY&`4Q6x`IkX>#+G&dr@aZmHYyelncA-L<*v z0fZxcho|sOq?JNLMEY;cq`hO4rV7-8deBZZj9x;6XaK%)KIDO3k?tQC)6wy>{{pR# BttkKi delta 785 zcmbO+pZU*J=6VK31_lOhh6V;^1_S?KeIx$4yjOrCdw@70IXAID<)<xl8U4ztJy&Q0|o}>f}H$h$HcV^HA@&6jt2lO*_E4EQNZwu@f8EZNgkjEg}lVv z)Wd35fR>-s0m`o}$S*DdIur;_-2urnFf;#}c%WMM0gz(?SUti99x$5P*mzzI`ebD`oGC7S=n|r~_H7_?n`Lh_cWW@Q!`2^MoOcO{D zP!f>h|Go#E4JLnJWZf*tWRX?R%24<}kGY@eHZU9%7z`L37=TU} zRx}cmWfWmkR#Z~6Wi&A}7Bw~!6BQI;(`HmsGZi#3vt}fX-^lcjos*OOFB6C~VB_Lq zGXS!_8L&q{`QMNQp<+z8Iob6=8i2%nF1EixAU4xFknVquAU5NE5F5MrW}n=-8kFTp73+?JK^6E;1;ki@I+8euukx~ zkW-;@p(&v=LQjQpgdGT%3f~qnA!0|wgGi1@gUGbVHIY{$|3uY9y^EHM?u(fq5i1cp rC5|mFA?`!`k_3r_O+c4}()*ps>&|{;G@HEOoH&r=JTEu-+POmjQt#_5 diff --git a/www/theme/zui/fonts/ZentaoIcon.woff b/www/theme/zui/fonts/ZentaoIcon.woff index fb44c2f2421effc7fe6bdabcde8f27a98d36a520..81eff9fce16bca760264a73c218f97c389d56cbe 100644 GIT binary patch delta 2011 zcmah~eN0nV6ugLQ6|3LhJuq|=KEMqQa)A+;i@| zzjN-rJ->7A?X{!i?UQ82n{`!H2qXA@xQ*1Q{us;+@j``Ad>$ z^yz>04eZ$m*ja?ggOcpxN=9}LZ3n;F$pSchRFZw)R*emG?Sq5AlYU56O8&wR2D=7& z5&E75pD!f2-N?%e$2 z(cQ|skMEzkpP1oi@@9Hw-jAQdZspmf*?aK^*d@?s=woy@9ig4HNX=3=sUNBR6pu)R zfii!hmniO!DG*wSlIP)23avr;D1zz{1jE=AoSx;w*cU9)2b}h7zmEq%;l?&606}b1 zWa3488D6pjkg@|1^y~l6VUXf^YC4wE)80tLD=EU8ny&_5h!N*`D(R3MiD`Wi%Cb&cCDNl=BCbvQC9uV2FPVX1QD@0j!GRI7$+u)oPUF1B+Rxuo35M4u>sS zZL1K>7IKGyO1@58lq&d?7Ml2qG9+*D6kabaoWDTvUs^MywHej~b+knv3oYc5<75`1 zQ4ZvKBV^hNnJr`$b_lho5Hcr4%2_Z+>ToLCrMQTJ@C&W~f#c^l=qEiUK`_ltNg8|P zjL=SGGIGWYT`P+V7Dwz7o;~aj|B@HR` zvx+nkb1QnW#IwDN+`vr;Lv4hXn?IJ?OLCXkIt=-PI;1!vo|icuvX)q6xf))@ZniN@ zMx`;o+y81o8O8=iuApeOk~KytEkUZ)0MXm)qh%w-+MwpN=yr=I=t3(f+jM$IacT>NB!OT#>!X*!`L=Me41RDrNkN<&&-Q9m-c9ZFRso*32L|81dpM% zkUk;NdRi0ImhG;H)b`S_iCRq(T8daEb^bEF7OU)9&ZbpzD%Pb+r_+6TCR%BnKir?8 z6EvP7OW5ac@Od)B%|cML1ccliyISSiWzjnrx=byxy2i!GcuPw?$rV|EamK~Nb?5R; ziI2|)8PUtuoHAeUq)HznwG192gl>M;s#)&ivzJ2nR>Ct@Psqsg2*nRx8N!D6!z=kX z6wkPtlTHr8Uj;}aa`inNJ06r32TG2VOoki7PfAaf-YYv&e(~j|h%?dHFd@d@of!QW>qfC8 delta 845 zcmaDdpZUZzW{GltH#Y`G1|T@?!N3ioPyGS%1tuFZiA>ZHuD_C;n^?fWz?cD)`2)f# zKb6_i6N`ajOesJ<2NVmW=TxQv#c~)J4g$pwrbP96GiRhG0@;Tz0M(d*u+qe-9vMJE z28JUbeJUW#BgpYGBe$diD5k@}zzj5(xge>@YIaV3GEkl0@i{=tcY*L)hMFb0i4{Nv zCnJCw6~OovgkoIcb|QF?(+QW%Xu$XyK^E0AzhLV2^yqEYK^NsL5;pgUe z!oMTHEnr{ZiJ+Qbo#1mJr$XgIQ$lBio(kg#I}k1vzAa)x#EysuksOf*k!g`@BCkaL ziK>Zu7cCdv7c)U3Rw8yv99vvM+=uuj2@(mLfG%eQ;yaUno&6|j#t_Dk%232m%#g{D T&yWXnL! From 8b6ba26c9f4f96861d7058ba6a6260393d77e516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?= Date: Fri, 5 Nov 2021 11:33:59 +0800 Subject: [PATCH 02/55] * fix bug #15189. --- lib/filter/filter.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/filter/filter.class.php b/lib/filter/filter.class.php index 3c92af1281..ebedf6292b 100644 --- a/lib/filter/filter.class.php +++ b/lib/filter/filter.class.php @@ -5,7 +5,7 @@ * * The author disclaims copyright to this source code. In place of * a legal notice, here is a blessing: - * + * * May you do good and not evil. * May you find forgiveness for yourself and forgive others. * May you share freely, never taking more than you give. @@ -15,7 +15,7 @@ helper::import(dirname(dirname(__FILE__)) . '/base/filter/filter.class.php'); /** * validater类,检查数据是否符合规则。 * The validater class, checking data by rules. - * + * * @package framework */ class validater extends baseValidater @@ -25,7 +25,7 @@ class validater extends baseValidater /** * fixer类,处理数据。 * fixer class, to fix data types. - * + * * @package framework */ class fixer extends baseFixer @@ -60,7 +60,7 @@ class fixer extends baseFixer } if($canImplode) $this->data->$field = implode(',', $value); } - if(isset($flowFields[$field]) and $flowFields[$field]->control == 'textarea') $this->skipSpecial($field); + if(isset($flowFields[$field]) and ($flowFields[$field]->control == 'textarea' or $flowFields[$field]->control == 'richtext')) $this->skipSpecial($field); $this->specialChars($field); } From 77da7770649523d372deac5429b228bbea8c7723 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Fri, 5 Nov 2021 15:46:52 +0800 Subject: [PATCH 03/55] * Finish task #43893. --- module/branch/control.php | 3 +- module/branch/model.php | 11 +++++-- module/bug/control.php | 2 +- module/productplan/control.php | 8 ++--- module/productplan/model.php | 19 ++++++++++- module/story/control.php | 48 +++++++++++++++++++++++++--- module/story/lang/en.php | 1 + module/story/lang/zh-cn.php | 1 + module/story/model.php | 38 ++++++++++++++++++++-- module/story/view/batchedit.html.php | 1 + 10 files changed, 115 insertions(+), 17 deletions(-) diff --git a/module/branch/control.php b/module/branch/control.php index e59c0aa6c7..8b57ddb8eb 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -70,8 +70,7 @@ class branch extends control $this->view->method = $method; $this->view->extra = $extra; - $branches = $this->branch->getPairs($productID); - $this->view->branches = $branches; + $this->view->branches = $this->branch->getPairs($productID, 'all'); $this->view->currentBranchID = $branch; $this->view->branchesPinyin = common::convert2Pinyin($branches); $this->display(); diff --git a/module/branch/model.php b/module/branch/model.php index f11c0a0f3d..c70accb810 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -40,6 +40,9 @@ class branchModel extends model */ public function getPairs($productID, $params = '') { + $product = $this->loadModel('product')->getById($productID); + if(!$product or $product->type == 'normal') return array(); + $branches = $this->dao->select('*')->from(TABLE_BRANCH) ->where('deleted')->eq(0) ->beginIF($productID)->andWhere('product')->eq($productID)->fi() @@ -49,10 +52,12 @@ class branchModel extends model if(strpos($params, 'noempty') === false) { - $product = $this->loadModel('product')->getById($productID); - if(!$product or $product->type == 'normal') return array(); + $branches = array('0' => $this->lang->branch->main) + $branches; + } - $branches = array('all' => $this->lang->branch->all, '0' => $this->lang->branch->main) + $branches; + if(strpos($params, 'all') !== false) + { + $branches = array('all' => $this->lang->branch->all) + $branches; } return $branches; } diff --git a/module/bug/control.php b/module/bug/control.php index 63a3446018..d3d9486b1f 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -226,7 +226,7 @@ class bug extends control $this->view->moduleID = $moduleID; $this->view->memberPairs = $this->user->getPairs('noletter|nodeleted'); $this->view->branch = $branch; - $this->view->branches = $this->loadModel('branch')->getPairs($productID, 'noempty'); + $this->view->branches = $this->loadModel('branch')->getPairs($productID); $this->view->executions = $executions; $this->view->plans = $this->loadModel('productplan')->getPairs($productID); $this->view->stories = $storyList; diff --git a/module/productplan/control.php b/module/productplan/control.php index fcd0b36611..386266f1fe 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -413,8 +413,8 @@ class productplan extends control else { $this->config->product->search['fields']['branch'] = $this->lang->product->branch; - $branches = array('' => '') + $this->loadModel('branch')->getPairs($plan->product, 'noempty'); - if($plan->branch) $branches = array('' => '', $plan->branch => $branches[$plan->branch]); + $branches = array('' => '', '0' => $this->lang->branch->main) + $this->loadModel('branch')->getPairs($plan->product, 'noempty'); + if($plan->branch) $branches = array('' => '', '0' => $this->lang->branch->main, $plan->branch => $branches[$plan->branch]); $this->config->product->search['params']['branch']['values'] = $branches; } $this->loadModel('search')->setSearchParams($this->config->product->search); @@ -554,8 +554,8 @@ class productplan extends control else { $this->config->bug->search['fields']['branch'] = $this->lang->product->branch; - $branches = array('' => '') + $this->loadModel('branch')->getPairs($productID, 'noempty'); - if($plan->branch) $branches = array('' => '', $plan->branch => $branches[$plan->branch]); + $branches = array('' => '', '0' => $this->lang->branch->main) + $this->loadModel('branch')->getPairs($productID, 'noempty'); + if($plan->branch) $branches = array('' => '', '0' => $this->lang->branch->main, $plan->branch => $branches[$plan->branch]); $this->config->bug->search['params']['branch']['values'] = $branches; } $this->loadModel('search')->setSearchParams($this->config->bug->search); diff --git a/module/productplan/model.php b/module/productplan/model.php index 0e76645121..d5fae673f5 100644 --- a/module/productplan/model.php +++ b/module/productplan/model.php @@ -237,7 +237,6 @@ class productplanModel extends model $plans = $this->dao->select('id,title,parent,begin,end')->from(TABLE_PRODUCTPLAN) ->where('product')->in($product) ->andWhere('deleted')->eq(0) - ->andWhere('end')->ge($date) ->beginIF($branch)->andWhere("branch")->in("0,$branch")->fi() ->beginIF($skipParent)->andWhere('parent')->ne(-1)->fi() ->orderBy('begin desc') @@ -319,6 +318,24 @@ class productplanModel extends model return $this->dao->select('*')->from(TABLE_PRODUCTPLAN)->where('parent')->eq((int)$planID)->andWhere('deleted')->eq('0')->fetchAll(); } + /** + * Get plan list by story id list. + * + * @param string|array $storyIdList + * @access public + * @return array + */ + public function getPlansByStories($storyIdList) + { + if(empty($storyIdList)) return array(); + return $this->dao->select('t1.id as storyID, t3.*')->from(TABLE_STORY)->alias('t1') + ->leftJoin(TABLE_PLANSTORY)->alias('t2')->on('t1.id=t2.story') + ->leftJoin(TABLE_PRODUCTPLAN)->alias('t3')->on('t2.plan=t3.id') + ->where('t1.id')->in($storyIdList) + ->andWhere('t3.deleted')->eq(0) + ->fetchGroup('storyID', 'id'); + } + /** * Create a plan. * diff --git a/module/story/control.php b/module/story/control.php index 90da967309..481e2fc666 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -306,7 +306,7 @@ class story extends control $this->view->users = $users; $this->view->moduleID = $moduleID ? $moduleID : (int)$this->cookie->lastStoryModule; $this->view->moduleOptionMenu = $moduleOptionMenu; - $this->view->plans = $this->loadModel('productplan')->getPairsForStory($productID, $branch, true); + $this->view->plans = $this->loadModel('productplan')->getPairsForStory($productID, $branch); $this->view->planID = $planID; $this->view->source = $source; $this->view->sourceNote = $sourceNote; @@ -626,6 +626,7 @@ class story extends control $this->view->stories = $stories; $this->view->users = $users; $this->view->product = $product; + $this->view->plans = $this->loadModel('productplan')->getPairsForStory($story->product, $story->branch); $this->view->products = $myProducts + $othersProducts; $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($story->product); $this->view->reviewers = implode(',', $reviewerList); @@ -1376,14 +1377,53 @@ class story extends control * Batch change branch. * * @param int $branchID + * @param string $confirm yes|no + * @param string $storyIdList * @access public * @return void */ - public function batchChangeBranch($branchID) + public function batchChangeBranch($branchID, $confirm = '', $storyIdList = '') { - $storyIdList = !empty($_POST['storyIdList']) ? $this->post->storyIdList : die(js::locate($this->session->storyList, 'parent')); + if(!empty($_POST['storyIdList'])) $storyIdList = $_POST['storyIdList']; + $storyIdList = !empty($storyIdList) ? $storyIdList : die(js::locate($this->session->storyList, 'parent')); + $plans = $this->loadModel('productplan')->getPlansByStories($storyIdList); + if(empty($confirm)) + { + $stories = $this->story->getByList($storyIdList); + $normalStotyIdList = ''; + $conflictStoryIdList = ''; + $conflictStoryArray = array(); + /* Determine whether there is a conflict between the branch of the story and the linked plan. */ + foreach($storyIdList as $storyID) + { + if($stories[$storyID]->branch != $branchID and $branchID != BRANCH_MAIN and isset($plans[$storyID])) + { + foreach($plans[$storyID] as $plan) + { + if($plan->branch != BRANCH_MAIN and $plan->branch != $branchID and strpos($conflictStoryIdList, '[' . $storyID . ']') === false) + { + $conflictStoryIdList .= '[' . $storyID . ']'; + $conflictStoryArray[] = $storyID; + } + } + } + } + + /* Prompt the user whether to continue to modify the conflicting stories branch. */ + if($conflictStoryIdList) + { + $normalStotyIdList = array_diff($storyIdList, $conflictStoryArray); + $normalStotyIdList = implode(',', $normalStotyIdList); + $storyIdList = implode(',', $storyIdList); + $confirmURL = $this->createLink('story', 'batchChangeBranch', "branchID=$branchID&confirm=yes&storyIdList=$storyIdList"); + $cancelURL = $this->createLink('story', 'batchChangeBranch', "branchID=$branchID&confirm=no&storyIdList=$normalStotyIdList"); + die(js::confirm(sprintf($this->lang->story->confirmChangeBranch, $conflictStoryIdList ), $confirmURL, $cancelURL)); + } + } + + if(is_string($storyIdList)) $storyIdList = array_filter(explode(',', $storyIdList)); $storyIdList = array_unique($storyIdList); - $allChanges = $this->story->batchChangeBranch($storyIdList, $branchID); + $allChanges = $this->story->batchChangeBranch($storyIdList, $branchID, $confirm, $plans); if(dao::isError()) die(js::error(dao::getError())); foreach($allChanges as $storyID => $changes) { diff --git a/module/story/lang/en.php b/module/story/lang/en.php index 9424fb6cdd..e8993a551f 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -277,6 +277,7 @@ $lang->story->moveChildrenTips = "Its Child {$lang->SRCommon} will be moved $lang->story->changeTips = 'The story associated with the requirements to change, click "Cancel" ignore this change, click "Confirm" to change the story.'; $lang->story->estimateMustBeNumber = 'Estimate value must be number.'; $lang->story->estimateMustBePlus = 'Estimated value cannot be negative'; +$lang->story->confirmChangeBranch = $lang->SRCommon . '%s is linked to the plan of its linked branch. If the branch is edited, ' . $lang->SRCommon . ' will be removed from the plan of its linked branch. Do you want to continue edit ' . $lang->SRCommon . '?'; $lang->story->form = new stdclass(); $lang->story->form->area = 'Scope'; diff --git a/module/story/lang/zh-cn.php b/module/story/lang/zh-cn.php index 1d34df98bd..9c2de764dd 100644 --- a/module/story/lang/zh-cn.php +++ b/module/story/lang/zh-cn.php @@ -277,6 +277,7 @@ $lang->story->moveChildrenTips = "修改父{$lang->SRCommon}的所属产品 $lang->story->changeTips = '该软件需求关联的用户需求有变更,点击“不变更”忽略此条变更,点击“变更”来进行该软件需求的变更。'; $lang->story->estimateMustBeNumber = '估算值必须是数字'; $lang->story->estimateMustBePlus = '估算值不能是负数'; +$lang->story->confirmChangeBranch = $lang->SRCommon . '%s已关联在之前所属分支的计划中,调整分支后,' . $lang->SRCommon . '将从之前所属分支的计划中移除,请确认是否继续修改上述' . $lang->SRCommon . ' 的分支。'; $lang->story->form = new stdclass(); $lang->story->form->area = "该{$lang->SRCommon}所属范围"; diff --git a/module/story/model.php b/module/story/model.php index 186f2642d6..259dac2f26 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -1619,6 +1619,7 @@ class storyModel extends model foreach($storyIdList as $storyID) { $oldStory = $oldStories[$storyID]; + if($oldStory->branch != BRANCH_MAIN and $oldStory->branch != $plan->branch and $plan->branch != BRANCH_MAIN) continue; /* Ignore parent story, closed story and story linked to this plan already. */ if($oldStory->parent < 0) continue; @@ -1674,10 +1675,12 @@ class storyModel extends model * * @param array $storyIdList * @param int $branchID + * @param string $confirm + * @param array $plans * @access public * @return void */ - public function batchChangeBranch($storyIdList, $branchID) + public function batchChangeBranch($storyIdList, $branchID, $confirm = '', $plans = array()) { $now = helper::now(); $allChanges = array(); @@ -1692,7 +1695,38 @@ class storyModel extends model $story->branch = $branchID; $this->dao->update(TABLE_STORY)->data($story)->autoCheck()->where('id')->eq((int)$storyID)->exec(); - if(!dao::isError()) $allChanges[$storyID] = common::createChanges($oldStory, $story); + if(!dao::isError()) + { + if($confirm == 'yes') + { + $planIdList = ''; + $conflictPlanIdList = ''; + /* Determine whether there is a conflict between the branch of the story and the linked plan. */ + if($oldStory->branch != $branchID and $branchID != BRANCH_MAIN and isset($plans[$storyID])) + { + foreach($plans[$storyID] as $planID => $plan) + { + if($plan->branch != BRANCH_MAIN and $plan->branch != $branchID) + { + $conflictPlanIdList .= $planID . ','; + } + else + { + $planIdList .= $planID . ','; + } + } + + /* If there is a conflict in the linked plan when the branch story to be modified, the linked with the conflicting plan will be removed. */ + if($conflictPlanIdList) + { + $story->plan = $planIdList; + $this->dao->delete()->from(TABLE_PLANSTORY)->where('story')->eq($storyID)->andWhere('plan')->in($conflictPlanIdList)->exec(); + $this->dao->update(TABLE_STORY)->set('plan')->eq($planIdList)->where('id')->eq($storyID)->exec(); + } + } + } + $allChanges[$storyID] = common::createChanges($oldStory, $story); + } } return $allChanges; } diff --git a/module/story/view/batchedit.html.php b/module/story/view/batchedit.html.php index 5cc967b16b..c6206af93f 100644 --- a/module/story/view/batchedit.html.php +++ b/module/story/view/batchedit.html.php @@ -100,6 +100,7 @@ foreach(explode(',', $showFields) as $field) module, "class='form-control chosen'");?> '> + session->currentProductType != 'normal') $productPlans = $this->productplan->getPairs($productID, $story->branch, '', true);?> plan, "class='form-control chosen'");?> From 1424fbe8694395e899f113a2c93af2891209697c Mon Sep 17 00:00:00 2001 From: tianshujie Date: Fri, 5 Nov 2021 16:04:39 +0800 Subject: [PATCH 04/55] * Modify the error. --- module/branch/control.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/branch/control.php b/module/branch/control.php index 8b57ddb8eb..f9c9c1716a 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -63,6 +63,7 @@ class branch extends control */ public function ajaxGetDropMenu($productID, $branch = 0, $module, $method, $extra = '') { + $branches = $this->branch->getPairs($productID, 'all'); $this->view->link = $this->loadModel('product')->getProductLink($module, $method, $extra, true); $this->view->productID = $productID; $this->view->projectID = $this->session->project; @@ -70,7 +71,7 @@ class branch extends control $this->view->method = $method; $this->view->extra = $extra; - $this->view->branches = $this->branch->getPairs($productID, 'all'); + $this->view->branches = $branches; $this->view->currentBranchID = $branch; $this->view->branchesPinyin = common::convert2Pinyin($branches); $this->display(); From 0328182a4719c277eb5356fffa4cda6289ea1400 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Fri, 5 Nov 2021 17:19:41 +0800 Subject: [PATCH 05/55] * Modify the logic of the acquisition plan. --- module/productplan/model.php | 23 ++++++++++++++++++++++- module/story/control.php | 13 ++++++------- module/story/lang/en.php | 2 +- module/story/lang/zh-cn.php | 2 +- module/story/model.php | 4 ++-- module/story/view/batchedit.html.php | 16 +++++++++++++++- 6 files changed, 47 insertions(+), 13 deletions(-) diff --git a/module/productplan/model.php b/module/productplan/model.php index d5fae673f5..8fcbd05056 100644 --- a/module/productplan/model.php +++ b/module/productplan/model.php @@ -332,10 +332,31 @@ class productplanModel extends model ->leftJoin(TABLE_PLANSTORY)->alias('t2')->on('t1.id=t2.story') ->leftJoin(TABLE_PRODUCTPLAN)->alias('t3')->on('t2.plan=t3.id') ->where('t1.id')->in($storyIdList) - ->andWhere('t3.deleted')->eq(0) ->fetchGroup('storyID', 'id'); } + /** + * Get branch plan pairs. + * + * @param int $productID + * @access public + * @return array + */ + public function getBranchPlanPairs($productID) + { + $plans = $this->dao->select('branch,id,title,begin,end')->from(TABLE_PRODUCTPLAN) + ->where('deleted')->eq(0) + ->andWhere('product')->eq($productID) + ->fetchAll('id'); + + $planPairs = array(); + foreach($plans as $planID => $plan) + { + $planPairs[$plan->branch][$planID] = $plan->title . ' [' . $plan->begin . '~' . $plan->end . ']'; + } + return $planPairs; + } + /** * Create a plan. * diff --git a/module/story/control.php b/module/story/control.php index 481e2fc666..375395a82e 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -706,15 +706,12 @@ class story extends control $product = $this->product->getByID($productID); $branchProduct = $product->type == 'normal' ? false : true; - /* Set modules and productPlans. */ - $modules = $this->tree->getOptionMenu($productID, $viewType = 'story', 0, $branch); - $modules = array('ditto' => $this->lang->story->ditto) + $modules; - $productPlans = $this->productplan->getPairs($productID, $branch, '', true); - $productPlans = array('' => '', 'ditto' => $this->lang->story->ditto) + $productPlans; + /* Set modules. */ + $modules = array('ditto' => $this->lang->story->ditto) + $this->tree->getOptionMenu($productID, $viewType = 'story', 0, $branch); $this->view->modules = $modules; $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($product->id); - $this->view->productPlans = $productPlans; + $this->view->plans = $this->productplan->getBranchPlanPairs($productID); $this->view->position[] = html::a($this->createLink('product', 'browse', "product=$product->id&branch=$branch"), $product->name); $this->view->title = $product->name . $this->lang->colon . $this->lang->story->batchEdit; } @@ -1393,6 +1390,7 @@ class story extends control $normalStotyIdList = ''; $conflictStoryIdList = ''; $conflictStoryArray = array(); + /* Determine whether there is a conflict between the branch of the story and the linked plan. */ foreach($storyIdList as $storyID) { @@ -1400,10 +1398,11 @@ class story extends control { foreach($plans[$storyID] as $plan) { - if($plan->branch != BRANCH_MAIN and $plan->branch != $branchID and strpos($conflictStoryIdList, '[' . $storyID . ']') === false) + if($plan->branch != BRANCH_MAIN and $plan->branch != $branchID) { $conflictStoryIdList .= '[' . $storyID . ']'; $conflictStoryArray[] = $storyID; + break; } } } diff --git a/module/story/lang/en.php b/module/story/lang/en.php index e8993a551f..75cfdb335c 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -277,7 +277,7 @@ $lang->story->moveChildrenTips = "Its Child {$lang->SRCommon} will be moved $lang->story->changeTips = 'The story associated with the requirements to change, click "Cancel" ignore this change, click "Confirm" to change the story.'; $lang->story->estimateMustBeNumber = 'Estimate value must be number.'; $lang->story->estimateMustBePlus = 'Estimated value cannot be negative'; -$lang->story->confirmChangeBranch = $lang->SRCommon . '%s is linked to the plan of its linked branch. If the branch is edited, ' . $lang->SRCommon . ' will be removed from the plan of its linked branch. Do you want to continue edit ' . $lang->SRCommon . '?'; +$lang->story->confirmChangeBranch = $lang->SRCommon . ' %s is linked to the plan of its linked branch. If the branch is edited, ' . $lang->SRCommon . ' will be removed from the plan of its linked branch. Do you want to continue edit ' . $lang->SRCommon . '?'; $lang->story->form = new stdclass(); $lang->story->form->area = 'Scope'; diff --git a/module/story/lang/zh-cn.php b/module/story/lang/zh-cn.php index 9c2de764dd..6c485b6e94 100644 --- a/module/story/lang/zh-cn.php +++ b/module/story/lang/zh-cn.php @@ -277,7 +277,7 @@ $lang->story->moveChildrenTips = "修改父{$lang->SRCommon}的所属产品 $lang->story->changeTips = '该软件需求关联的用户需求有变更,点击“不变更”忽略此条变更,点击“变更”来进行该软件需求的变更。'; $lang->story->estimateMustBeNumber = '估算值必须是数字'; $lang->story->estimateMustBePlus = '估算值不能是负数'; -$lang->story->confirmChangeBranch = $lang->SRCommon . '%s已关联在之前所属分支的计划中,调整分支后,' . $lang->SRCommon . '将从之前所属分支的计划中移除,请确认是否继续修改上述' . $lang->SRCommon . ' 的分支。'; +$lang->story->confirmChangeBranch = $lang->SRCommon . '%s已关联在之前所属分支的计划中,调整分支后,' . $lang->SRCommon . '将从之前所属分支的计划中移除,请确认是否继续修改上述' . $lang->SRCommon . '的分支。'; $lang->story->form = new stdclass(); $lang->story->form->area = "该{$lang->SRCommon}所属范围"; diff --git a/module/story/model.php b/module/story/model.php index 259dac2f26..e2e03ccf98 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -1678,7 +1678,7 @@ class storyModel extends model * @param string $confirm * @param array $plans * @access public - * @return void + * @return array */ public function batchChangeBranch($storyIdList, $branchID, $confirm = '', $plans = array()) { @@ -1716,7 +1716,7 @@ class storyModel extends model } } - /* If there is a conflict in the linked plan when the branch story to be modified, the linked with the conflicting plan will be removed. */ + /* If there is a conflict in the linked plan when the branch story to be modified, the linked with the conflicting plan will be removed. */ if($conflictPlanIdList) { $story->plan = $planIdList; diff --git a/module/story/view/batchedit.html.php b/module/story/view/batchedit.html.php index c6206af93f..2bc81e2e13 100644 --- a/module/story/view/batchedit.html.php +++ b/module/story/view/batchedit.html.php @@ -100,7 +100,21 @@ foreach(explode(',', $showFields) as $field) module, "class='form-control chosen'");?> '> - session->currentProductType != 'normal') $productPlans = $this->productplan->getPairs($productID, $story->branch, '', true);?> + branch != BRANCH_MAIN) + { + $productPlans = zget($plans, $story->branch) + zget($plans, 0); + } + else + { + foreach($plans as $branchPlan) + { + $productPlans += $branchPlan; + } + } + ?> + session->currentProductType == 'normal') $productPlans = array('' => '', 'ditto' => $this->lang->story->ditto) + $productPlans;?> plan, "class='form-control chosen'");?> From 988bb5c7740de925b2c4fdc7f2bb747de49106d2 Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Fri, 5 Nov 2021 17:25:27 +0800 Subject: [PATCH 06/55] * Code for task#44028. --- module/branch/config.php | 7 ++++++ module/branch/control.php | 17 ++++++++++++++ module/branch/model.php | 23 +++++++++++++++++-- module/branch/view/create.html.php | 36 ++++++++++++++++++++++++++++++ module/branch/view/manage.html.php | 4 ++-- 5 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 module/branch/config.php create mode 100644 module/branch/view/create.html.php diff --git a/module/branch/config.php b/module/branch/config.php new file mode 100644 index 0000000000..2e2bf710e3 --- /dev/null +++ b/module/branch/config.php @@ -0,0 +1,7 @@ +branch = new stdclass(); +$config->branch->create = new stdclass(); +$config->branch->edit = new stdclass(); + +$config->branch->create->requiredFields = 'name'; +$config->branch->edit->requiredFields = 'name'; diff --git a/module/branch/control.php b/module/branch/control.php index e96b1fc105..7e48fcb47e 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -42,6 +42,23 @@ class branch extends control $this->display(); } + /** + * Create a branch. + * + * @param int $productID + * @access public + * @return void + */ + public function create($productID) + { + if($_POST) + { + $this->branch->create($productID); + } + + $this->display(); + } + /** * Sort branch. * diff --git a/module/branch/model.php b/module/branch/model.php index e2a4b000ad..b10d39905b 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -124,11 +124,30 @@ class branchModel extends model } /** - * Manage branch + * Create a branch. * * @param int $productID * @access public - * @return bool + * @return void + */ + public function create($productID) + { + $branch = fixer::input('post') + ->setDefault('product', $productID) + ->setDefault('createdDate', helper::today()) + ->setDefault('status', 'active') + ->get(); + + $this->dao->insert(TABLE_BRANCH)->data($branch)->exec(); + if(dao::isError()) return false; + } + + /** + * Manage branch. + * + * @param int $productID + * @access public + * @return bool|array */ public function manage($productID) { diff --git a/module/branch/view/create.html.php b/module/branch/view/create.html.php new file mode 100644 index 0000000000..f20a620db9 --- /dev/null +++ b/module/branch/view/create.html.php @@ -0,0 +1,36 @@ + + * @package branch + * @version $Id$ + * @link https://www.zentao.net + */ +?> + +
+
+

branch->create;?>

+
+
+ + + + + + + + + + + + +
branch->name;?>
branch->desc;?>
+ +
+
+
+ diff --git a/module/branch/view/manage.html.php b/module/branch/view/manage.html.php index c087c8b364..23b359ee7a 100644 --- a/module/branch/view/manage.html.php +++ b/module/branch/view/manage.html.php @@ -27,7 +27,7 @@
- " . $lang->branch->create, '', "class='btn btn-primary'");?> + " . $lang->branch->create, '', "class='btn btn-primary iframe'", true, true);?>
@@ -35,7 +35,7 @@

branch->noData;?> - createLink('branch', 'create', "productID=$productID"), " " . $lang->branch->create, '', "class='btn btn-info'");?> + createLink('branch', 'create', "productID=$productID", '', true), " " . $lang->branch->create, '', "class='btn btn-info iframe'");?>

From d279c5d7d777136b0025f19eb2cc675a0b3449b1 Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Fri, 5 Nov 2021 18:47:39 +0800 Subject: [PATCH 07/55] * Finish task #43891. --- config/filter.php | 15 +++--- module/branch/view/ajaxgetdropmenu.html.php | 3 +- module/product/config.php | 2 + module/product/control.php | 47 +++++++++++-------- module/product/model.php | 51 +++++++++++---------- module/qa/model.php | 13 ++++-- module/story/control.php | 15 +++--- module/tree/model.php | 2 +- 8 files changed, 84 insertions(+), 64 deletions(-) diff --git a/config/filter.php b/config/filter.php index 73c0b303ce..747b6003af 100644 --- a/config/filter.php +++ b/config/filter.php @@ -164,16 +164,16 @@ $filter->my->contribute->cookie['pagerMyTestcase'] = 'int'; $filter->my->contribute->cookie['pagerMyTesttask'] = 'int'; $filter->my->contribute->cookie['pagerMyDoc'] = 'int'; -$filter->bug->batchcreate->cookie['preBranch'] = 'int'; +$filter->bug->batchcreate->cookie['preBranch'] = 'reg::word'; $filter->bug->browse->cookie['bugModule'] = 'int'; $filter->bug->browse->cookie['bugBranch'] = 'int'; $filter->bug->browse->cookie['treeBranch'] = 'int'; -$filter->bug->browse->cookie['preBranch'] = 'int'; +$filter->bug->browse->cookie['preBranch'] = 'reg::word'; $filter->bug->browse->cookie['qaBugOrder'] = 'reg::orderBy'; $filter->bug->browse->cookie['windowWidth'] = 'int'; $filter->bug->default->cookie['lastProduct'] = 'int'; $filter->bug->default->cookie['preProductID'] = 'int'; -$filter->bug->create->cookie['preBranch'] = 'int'; +$filter->bug->create->cookie['preBranch'] = 'reg::word'; $filter->bug->create->cookie['lastBugModule'] = 'int'; $filter->bug->export->cookie['checkedItem'] = 'reg::checked'; @@ -202,7 +202,7 @@ $filter->file->download->cookie[$config->sessionVar] = 'code'; $filter->mail->ztcloud->cookie['ztCloudLicense'] = 'equal::yes'; -$filter->product->browse->cookie['preBranch'] = 'int'; +$filter->product->browse->cookie['preBranch'] = 'reg::word'; $filter->product->browse->cookie['preProductID'] = 'int'; $filter->product->browse->cookie['productStoryOrder'] = 'reg::orderBy'; $filter->product->browse->cookie['storyModule'] = 'int'; @@ -210,11 +210,13 @@ $filter->product->browse->cookie['storyBranch'] = 'int'; $filter->product->browse->cookie['treeBranch'] = 'int'; $filter->product->default->cookie['lastProduct'] = 'int'; $filter->product->default->cookie['preProductID'] = 'int'; -$filter->product->index->cookie['preBranch'] = 'int'; +$filter->product->index->cookie['preBranch'] = 'reg::word'; $filter->product->export->cookie['checkedItem'] = 'reg::checked'; $filter->product->project->cookie['involved'] = 'code'; +$filter->product->project->cookie['preBranch'] = 'reg::word'; +$filter->product->roadmap->cookie['preBranch'] = 'reg::word'; -$filter->branch->default->cookie['preBranch'] = 'int'; +$filter->branch->default->cookie['preBranch'] = 'reg::word'; $filter->program->default->cookie['lastPGM'] = 'int'; $filter->program->default->cookie['lastPRJ'] = 'int'; @@ -251,6 +253,7 @@ $filter->qa->default->cookie['preProductID'] = 'int'; $filter->story->create->cookie['lastStoryModule'] = 'int'; $filter->story->batchcreate->cookie['preProductID'] = 'int'; $filter->story->export->cookie['checkedItem'] = 'reg::checked'; +$filter->story->track->cookie['preBranch'] = 'reg::word'; $filter->task->create->cookie['lastTaskModule'] = 'int'; $filter->task->export->cookie['checkedItem'] = 'reg::checked'; diff --git a/module/branch/view/ajaxgetdropmenu.html.php b/module/branch/view/ajaxgetdropmenu.html.php index c1bdde63cd..9d6584fa00 100644 --- a/module/branch/view/ajaxgetdropmenu.html.php +++ b/module/branch/view/ajaxgetdropmenu.html.php @@ -4,9 +4,10 @@
$branch) { - $selected = $branchID == $currentBranchID ? 'selected' : ''; + $selected = (string)$branchID == $currentBranchID ? 'selected' : ''; $linkHtml = $this->branch->setParamsForLink($module, $link, $projectID, $productID, $branchID); echo html::a($linkHtml, $branch, '', "class='$selected' data-key='{$branchesPinyin[$branch]}'"); } diff --git a/module/product/config.php b/module/product/config.php index ba9339760b..2e04f57f05 100644 --- a/module/product/config.php +++ b/module/product/config.php @@ -13,6 +13,8 @@ if($config->systemMode == 'new') $config->product->custom->batchEditFields .= ', $config->product->list = new stdclass(); $config->product->list->exportFields = 'id,program,line,name,activeRequirements,changedRequirements,draftRequirements,closedRequirements,requireCompleteRate,activeStories,changedStories,draftStories,closedStories,storyCompleteRate,plans,releases,bugs,unResolvedBugs,assignToNullBugs,closedBugs,bugFixedRate'; +$config->product->showBranchMethod = 'browse,project,roadmap'; + global $lang, $app; $app->loadLang('story'); $config->product->search['module'] = 'story'; diff --git a/module/product/control.php b/module/product/control.php index f4ed36c5cd..eb4021760a 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -69,18 +69,21 @@ class product extends control /** * The projects which linked the product. * - * @param string $status - * @param int $productID - * @param int $branch - * @param int $involved + * @param string $status + * @param int $productID + * @param int|string $branch + * @param int $involved * @access public * @return void */ - public function project($status = 'all', $productID = 0, $branch = 0, $involved = 0) + public function project($status = 'all', $productID = 0, $branch = '', $involved = 0) { $this->app->loadLang('execution'); $this->app->loadLang('project'); + $branch = ($this->cookie->preBranch and $branch === '') ? $this->cookie->preBranch : $branch; + setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true); + $this->product->setMenu($productID, $branch); /* Get PM id list. */ @@ -107,22 +110,23 @@ class product extends control /** * Browse a product. * - * @param int $productID - * @param int $branch - * @param string $browseType - * @param int $param - * @param string $storyType requirement|story - * @param string $orderBy - * @param int $recTotal - * @param int $recPerPage - * @param int $pageID - * @param int $projectID + * @param int $productID + * @param int|stirng $branch + * @param string $browseType + * @param int $param + * @param string $storyType requirement|story + * @param string $orderBy + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID + * @param int $projectID * @access public * @return void */ - public function browse($productID = 0, $branch = 0, $browseType = '', $param = 0, $storyType = 'story', $orderBy = '', $recTotal = 0, $recPerPage = 20, $pageID = 1, $projectID = 0) + public function browse($productID = 0, $branch = '', $browseType = '', $param = 0, $storyType = 'story', $orderBy = '', $recTotal = 0, $recPerPage = 20, $pageID = 1, $projectID = 0) { $productID = $this->app->tab != 'project' ? $this->product->saveState($productID, $this->products) : $productID; + $branch = ($this->cookie->preBranch and $branch === '') ? $this->cookie->preBranch : $branch; if($this->app->tab == 'product') $this->product->setMenu($productID, $branch); if($this->app->tab == 'project') @@ -139,9 +143,8 @@ class product extends control $this->loadModel('execution'); /* Set product, module and query. */ - $branch = ($branch === '') ? (int)$this->cookie->preBranch : (int)$branch; setcookie('preProductID', $productID, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true); - setcookie('preBranch', (int)$branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true); + setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true); if($this->cookie->preProductID != $productID or $this->cookie->preBranch != $branch or $browseType == 'bybranch') { @@ -751,12 +754,16 @@ class product extends control /** * Road map of a product. * - * @param int $productID + * @param int $productID + * @param int|string $branch * @access public * @return void */ - public function roadmap($productID, $branch = 0) + public function roadmap($productID, $branch = '') { + $branch = ($this->cookie->preBranch and $branch === '') ? $this->cookie->preBranch : $branch; + setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true); + $this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', $branch); $this->product->setMenu($productID, $branch); diff --git a/module/product/model.php b/module/product/model.php index 96739eacc5..3ee790018e 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -60,20 +60,20 @@ class productModel extends model /** * Create the select code of products. * - * @param array $products - * @param int $productID - * @param string $currentModule - * @param string $currentMethod - * @param string $extra - * @param int $branch - * @param int $module - * @param string $moduleType - * @param bool $withBranch true|false + * @param array $products + * @param int $productID + * @param string $currentModule + * @param string $currentMethod + * @param string $extra + * @param int|string $branch + * @param int $module + * @param string $moduleType + * @param bool $withBranch true|false * * @access public * @return string */ - public function select($products, $productID, $currentModule, $currentMethod, $extra = '', $branch = 0, $module = 0, $moduleType = '', $withBranch = true) + public function select($products, $productID, $currentModule, $currentMethod, $extra = '', $branch = 'all', $module = 0, $moduleType = '', $withBranch = true) { $isBrowseBug = (strpos(',project,execution,', ",{$this->app->tab},") !== false and strpos(',bug,testcase,testtask,ajaxselectstory,', ",{$this->app->rawMethod},") !== false and isset($products[0])) ? true : false; @@ -114,7 +114,7 @@ class productModel extends model $this->lang->product->branch = sprintf($this->lang->product->branch, $this->lang->product->branchName[$currentProduct->type]); $this->lang->product->menu->settings['subMenu']->branch = str_replace('@branch@', $this->lang->product->branch, $this->lang->product->menu->settings['subMenu']->branch); - $branches = $this->loadModel('branch')->getPairs($productID); + $branches = $this->loadModel('branch')->getPairs($productID, 'all'); $branchName = isset($branches[$branch]) ? $branches[$branch] : $branches[0]; if(!$isMobile) { @@ -441,13 +441,13 @@ class productModel extends model /* * Get product switcher. * - * @param int $productID - * @param string $extra - * @param int $branch + * @param int $productID + * @param string $extra + * @param int|string $branch * @access public * @return void */ - public function getSwitcher($productID = 0, $extra = '', $branch = 0) + public function getSwitcher($productID = 0, $extra = '', $branch = '') { $currentModule = $this->app->moduleName; $currentMethod = $this->app->methodName; @@ -475,16 +475,17 @@ class productModel extends model if($this->app->viewType == 'mhtml' and $productID) return $this->getModuleNav(array($productID => $currentProductName), $productID, $extra, $branch); - $output = "
"; - if(isset($currentProduct->type) and $currentProduct->type != 'normal' and $currentModule != 'testsuite' and $currentModule != 'testreport') + $notNormalProduct = (isset($currentProduct->type) and $currentProduct->type != 'normal'); + $isTrackMethod = $currentModule == 'story' and $currentMethod == 'track'; + $isShowBranchMethod = (strpos($this->config->product->showBranchMethod, $currentMethod) !== false and $currentModule == 'product') || $isTrackMethod; + if($notNormalProduct and strpos(',testsuite,testreport,', ',' . $currentModule . ',') === false and ($this->app->tab == 'qa' or $isShowBranchMethod)) { $this->lang->product->branch = sprintf($this->lang->product->branch, $this->lang->product->branchName[$currentProduct->type]); - $branches = $this->loadModel('branch')->getPairs($productID); - $branch = (int)$branch; + $branches = $this->loadModel('branch')->getPairs($productID, 'all'); $branchName = isset($branches[$branch]) ? $branches[$branch] : $branches[0]; $dropMenuLink = helper::createLink('branch', 'ajaxGetDropMenu', "objectID=$productID&branch=$branch&module=$currentModule&method=$currentMethod&extra=$extra"); @@ -1981,16 +1982,16 @@ class productModel extends model * * Set menu. * - * @param int $productID - * @param int $branch - * @param int $module - * @param string $moduleType - * @param string $extra + * @param int $productID + * @param int|string $branch + * @param int $module + * @param string $moduleType + * @param string $extra * * @access public * @return void */ - public function setMenu($productID, $branch = 0, $module = 0, $moduleType = '', $extra = '') + public function setMenu($productID, $branch = 'all', $module = 0, $moduleType = '', $extra = '') { if(!$this->app->user->admin and strpos(",{$this->app->user->view->products},", ",$productID,") === false and $productID != 0 and !defined('TUTORIAL')) die(js::error($this->lang->product->accessDenied) . js::locate('back')); diff --git a/module/qa/model.php b/module/qa/model.php index 195735848a..a9c8623eb2 100644 --- a/module/qa/model.php +++ b/module/qa/model.php @@ -14,14 +14,14 @@ class qaModel extends model /** * Set menu. * - * @param array $products - * @param int $productID - * @param int $branch - * @param string $extra + * @param array $products + * @param int $productID + * @param int|string $branch + * @param string $extra * @access public * @return void */ - public function setMenu($products, $productID, $branch = 0, $extra = '') + public function setMenu($products, $productID, $branch = '', $extra = '') { if(!$this->app->user->admin and strpos(",{$this->app->user->view->products},", ",$productID,") === false and $productID != 0 and !defined('TUTORIAL')) { @@ -29,6 +29,9 @@ class qaModel extends model die(js::error($this->lang->product->accessDenied) . js::locate('back')); } + $branch = ($this->cookie->preBranch and $branch === '') ? $this->cookie->preBranch : $branch; + setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true); + if(!in_array($this->app->rawModule, $this->config->qa->noDropMenuModule)) $this->lang->switcherMenu = $this->loadModel('product')->getSwitcher($productID, $extra, $branch); if($this->app->rawModule == 'product' and $this->app->rawMethod == 'showerrornone') $this->lang->switcherMenu = ''; common::setMenuVars('qa', $productID); diff --git a/module/story/control.php b/module/story/control.php index 90da967309..bb390365ec 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -1485,16 +1485,19 @@ class story extends control /** * Story track. * - * @param int $productID - * @param int $branch - * @param int $recTotal - * @param int $recPerPage - * @param int $pageID + * @param int $productID + * @param int|string $branch + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID * @access public * @return void */ - public function track($productID, $branch = 0, $projectID = 0, $recTotal = 0, $recPerPage = 20, $pageID = 1) + public function track($productID, $branch = '', $projectID = 0, $recTotal = 0, $recPerPage = 20, $pageID = 1) { + $branch = ($this->cookie->preBranch and $branch === '') ? $this->cookie->preBranch : $branch; + setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true); + /* Set menu. The projectstory module does not execute. */ if(!$projectID) { diff --git a/module/tree/model.php b/module/tree/model.php index a547c4c696..0b16bd6734 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -125,7 +125,7 @@ class treeModel extends model $product = $this->loadModel('product')->getById($rootID); if($product and $product->type != 'normal') { - $branches = array('null' => '') + $this->loadModel('branch')->getPairs($rootID, 'noempty'); + $branches = array('null' => '') + $this->loadModel('branch')->getPairs($rootID, 'all'); if($branch) { $newBranches['null'] = ''; From 8f902ccf2db9cffdaf78aee1ede1e5c8a8879833 Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Sun, 7 Nov 2021 13:44:24 +0800 Subject: [PATCH 08/55] * Code fot task#44028. --- module/action/config.php | 2 +- module/action/lang/en.php | 1 + module/action/lang/zh-cn.php | 1 + module/action/lang/zh-tw.php | 1 + module/action/model.php | 7 ++++++- module/branch/control.php | 6 +++++- module/branch/model.php | 19 +++++++++++++------ module/branch/view/create.html.php | 4 +--- module/group/lang/resource.php | 6 ++++-- 9 files changed, 33 insertions(+), 14 deletions(-) diff --git a/module/action/config.php b/module/action/config.php index 58d0f4a69c..a032f196ab 100755 --- a/module/action/config.php +++ b/module/action/config.php @@ -46,5 +46,5 @@ $config->action->majorList['project'] = array('opened', 'edited'); $config->action->majorList['execution'] = array('opened', 'edited'); $config->action->needGetProjectType = 'build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design,opportunity,trainplan,gapanalysis,researchplan,researchreport,'; -$config->action->needGetRelateField = ',story,productplan,release,task,build,bug,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,gapanalysis,team,whitelist,researchplan,researchreport,meeting,'; +$config->action->needGetRelateField = ',story,productplan,release,task,build,bug,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,gapanalysis,team,whitelist,researchplan,researchreport,meeting,branch,'; $config->action->noLinkModules = ',doclib,module,webhook,gitlab,pipeline,jenkins,'; diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 65c117cd60..8962c2c22d 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -506,6 +506,7 @@ $lang->action->label->issue = 'Issue|issue|view|issueID=%s'; $lang->action->label->design = 'Design|design|view|designID=%s'; $lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s'; $lang->action->label->api = 'Interface|api|index|libID=%s&moduleID=%s&apiID=%s'; +$lang->action->label->branch = 'Branch|branch|manage|prouctID=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index b957726aae..7f8632dd35 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -506,6 +506,7 @@ $lang->action->label->issue = '问题|issue|view|issueID=%s'; $lang->action->label->design = '设计|design|view|designID=%s'; $lang->action->label->stakeholder = '干系人|stakeholder|view|userID=%s'; $lang->action->label->api = '接口|api|index|libID=%s&moduleID=%s&apiID=%s'; +$lang->action->label->branch = '分支|branch|manage|productID=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/zh-tw.php b/module/action/lang/zh-tw.php index 2d10a38721..b7a7bd390e 100755 --- a/module/action/lang/zh-tw.php +++ b/module/action/lang/zh-tw.php @@ -506,6 +506,7 @@ $lang->action->label->issue = '問題|issue|view|issueID=%s'; $lang->action->label->design = '設計|design|view|designID=%s'; $lang->action->label->stakeholder = '干係人|stakeholder|view|userID=%s'; $lang->action->label->api = '介面|api|index|libID=%s&moduleID=%s&apiID=%s'; +$lang->action->label->branch = '分支|branch|manage|productID=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/model.php b/module/action/model.php index 7a18b7d1db..e867ba5d54 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -188,7 +188,7 @@ class actionModel extends model /* Set fields to fetch. */ $fields = '*'; - if(strpos('story, productplan, case', $objectType) !== false) $fields = 'product'; + if(strpos('story, productplan, case, branch', $objectType) !== false) $fields = 'product'; if(strpos('build, bug, testtask, doc', $objectType) !== false) $fields = 'product, project, execution'; if(strpos('case, repo', $objectType) !== false) $fields = 'execution'; if($objectType == 'release') $fields = 'product, build'; @@ -1177,6 +1177,11 @@ class actionModel extends model $api = $this->dao->select('id,lib,module')->from(TABLE_API)->where('id')->eq($action->objectID)->fetch(); $params = sprintf($vars, $api->lib, $api->module, $api->id); } + elseif($action->objectType == 'branch') + { + $productID = $this->dao->select('product')->from(TABLE_BRANCH)->where('id')->eq($action->objectID)->fetch('product'); + $params = sprintf($vars, $productID); + } else { $params = sprintf($vars, $action->objectID); diff --git a/module/branch/control.php b/module/branch/control.php index 7e48fcb47e..9eaf7de5b3 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -53,7 +53,11 @@ class branch extends control { if($_POST) { - $this->branch->create($productID); + $branchID = $this->branch->create($productID); + if(dao::isError()) die(js::error(dao::getError())); + + $this->loadModel('action')->create('branch', $branchID, 'Opened'); + die(js::reload('parent.parent')); } $this->display(); diff --git a/module/branch/model.php b/module/branch/model.php index b10d39905b..603298ea41 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -128,18 +128,25 @@ class branchModel extends model * * @param int $productID * @access public - * @return void + * @return int|bool */ public function create($productID) { $branch = fixer::input('post') - ->setDefault('product', $productID) - ->setDefault('createdDate', helper::today()) - ->setDefault('status', 'active') + ->add('product', $productID) + ->add('createdDate', helper::today()) + ->add('status', 'active') ->get(); - $this->dao->insert(TABLE_BRANCH)->data($branch)->exec(); - if(dao::isError()) return false; + $lastOrder = (int)$this->dao->select('`order`')->from(TABLE_BRANCH)->where('product')->eq($productID)->orderBy('order_desc')->limit(1)->fetch('order'); + $branch->order = empty($lastOrder) ? 1 : $lastOrder + 1; + + $this->dao->insert(TABLE_BRANCH)->data($branch) + ->batchCheck($this->config->branch->create->requiredFields, 'notempty') + ->exec(); + + if(!dao::isError()) return $this->dao->lastInsertID(); + return false; } /** diff --git a/module/branch/view/create.html.php b/module/branch/view/create.html.php index f20a620db9..db3a449ecc 100644 --- a/module/branch/view/create.html.php +++ b/module/branch/view/create.html.php @@ -26,9 +26,7 @@ - - - + diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 28f1996d28..9b2024adc3 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -421,12 +421,14 @@ $lang->product->methodOrder[105] = 'unbindWhitelist'; /* Branch. */ $lang->resource->branch = new stdclass(); $lang->resource->branch->manage = 'manage'; +$lang->resource->branch->create = 'create'; $lang->resource->branch->sort = 'sort'; $lang->resource->branch->delete = 'delete'; $lang->branch->methodOrder[0] = 'manage'; -$lang->branch->methodOrder[5] = 'sort'; -$lang->branch->methodOrder[10] = 'delete'; +$lang->branch->methodOrder[5] = 'create'; +$lang->branch->methodOrder[10] = 'sort'; +$lang->branch->methodOrder[15] = 'delete'; /* Story. */ $lang->resource->story = new stdclass(); From f94e0ecb081a15086c266c1785120ef3ec32f053 Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Sun, 7 Nov 2021 16:05:02 +0800 Subject: [PATCH 09/55] * Code for task#44028. --- module/branch/config.php | 2 +- module/branch/control.php | 22 +++++++++++++++++ module/branch/lang/de.php | 8 +++++-- module/branch/lang/en.php | 11 +++++---- module/branch/lang/fr.php | 8 +++++-- module/branch/lang/vi.php | 8 +++++-- module/branch/lang/zh-cn.php | 11 +++++---- module/branch/lang/zh-tw.php | 8 +++++-- module/branch/model.php | 30 ++++++++++++++++++++++- module/branch/view/edit.html.php | 38 ++++++++++++++++++++++++++++++ module/branch/view/manage.html.php | 2 +- module/group/lang/resource.php | 6 +++-- 12 files changed, 131 insertions(+), 23 deletions(-) create mode 100644 module/branch/view/edit.html.php diff --git a/module/branch/config.php b/module/branch/config.php index 2e2bf710e3..6fe739dea0 100644 --- a/module/branch/config.php +++ b/module/branch/config.php @@ -4,4 +4,4 @@ $config->branch->create = new stdclass(); $config->branch->edit = new stdclass(); $config->branch->create->requiredFields = 'name'; -$config->branch->edit->requiredFields = 'name'; +$config->branch->edit->requiredFields = 'name,status'; diff --git a/module/branch/control.php b/module/branch/control.php index 9eaf7de5b3..d372597381 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -63,6 +63,28 @@ class branch extends control $this->display(); } + /** + * Edit a branch. + * + * @param int $branchID + * @access public + * @return void + */ + public function edit($branchID) + { + if($_POST) + { + $changes = $this->branch->update($branchID); + if(dao::isError()) die(js::error(dao::getError())); + + if($changes) $this->loadModel('action')->create('branch', $branchID, 'Edited'); + die(js::reload('parent.parent')); + } + + $this->view->branch = $this->branch->getById($branchID, 0, true); + $this->display(); + } + /** * Sort branch. * diff --git a/module/branch/lang/de.php b/module/branch/lang/de.php index c6f2b3f294..4aa0b38d52 100644 --- a/module/branch/lang/de.php +++ b/module/branch/lang/de.php @@ -9,8 +9,12 @@ $lang->branch->manageTitle = '%s Management'; $lang->branch->all = 'Alle '; $lang->branch->main = 'Main'; -$lang->branch->create = 'Create Branch'; -$lang->branch->merge = 'Merge'; +$lang->branch->edit = 'Edit'; +$lang->branch->editAction = 'Edit Branch'; +$lang->branch->active = 'Active'; +$lang->branch->close = 'Close'; +$lang->branch->create = 'Create Branch'; +$lang->branch->merge = 'Merge'; $lang->branch->id = 'ID'; $lang->branch->product = 'Produkt'; diff --git a/module/branch/lang/en.php b/module/branch/lang/en.php index 53ee04c8c7..009390678c 100644 --- a/module/branch/lang/en.php +++ b/module/branch/lang/en.php @@ -9,11 +9,12 @@ $lang->branch->manageTitle = '%s Management'; $lang->branch->all = 'All '; $lang->branch->main = 'Main'; -$lang->branch->edit = 'Edit'; -$lang->branch->active = 'Active'; -$lang->branch->close = 'Close'; -$lang->branch->create = 'Create Branch'; -$lang->branch->merge = 'Merge'; +$lang->branch->edit = 'Edit'; +$lang->branch->editAction = 'Edit Branch'; +$lang->branch->active = 'Active'; +$lang->branch->close = 'Close'; +$lang->branch->create = 'Create Branch'; +$lang->branch->merge = 'Merge'; $lang->branch->id = 'ID'; $lang->branch->product = 'Product'; diff --git a/module/branch/lang/fr.php b/module/branch/lang/fr.php index 30f348ca2d..8c241acae3 100644 --- a/module/branch/lang/fr.php +++ b/module/branch/lang/fr.php @@ -9,8 +9,12 @@ $lang->branch->manageTitle = 'Gestion %s'; $lang->branch->all = 'Tous'; $lang->branch->main = 'Main'; -$lang->branch->create = 'Create Branch'; -$lang->branch->merge = 'Merge'; +$lang->branch->edit = 'Edit'; +$lang->branch->editAction = 'Edit Branch'; +$lang->branch->active = 'Active'; +$lang->branch->close = 'Close'; +$lang->branch->create = 'Create Branch'; +$lang->branch->merge = 'Merge'; $lang->branch->id = 'ID'; $lang->branch->product = 'Product'; diff --git a/module/branch/lang/vi.php b/module/branch/lang/vi.php index f387b569ad..2a65268681 100644 --- a/module/branch/lang/vi.php +++ b/module/branch/lang/vi.php @@ -9,8 +9,12 @@ $lang->branch->manageTitle = 'Quản lý %s'; $lang->branch->all = 'Tất cả '; $lang->branch->main = 'Main'; -$lang->branch->create = 'Create Branch'; -$lang->branch->merge = 'Merge'; +$lang->branch->edit = 'Edit'; +$lang->branch->editAction = 'Edit Branch'; +$lang->branch->active = 'Active'; +$lang->branch->close = 'Close'; +$lang->branch->create = 'Create Branch'; +$lang->branch->merge = 'Merge'; $lang->branch->id = 'ID'; $lang->branch->product = 'Sản phẩm'; diff --git a/module/branch/lang/zh-cn.php b/module/branch/lang/zh-cn.php index c0066b6be3..d2f3a544d0 100644 --- a/module/branch/lang/zh-cn.php +++ b/module/branch/lang/zh-cn.php @@ -9,11 +9,12 @@ $lang->branch->manageTitle = '%s管理'; $lang->branch->all = '所有'; $lang->branch->main = '主干'; -$lang->branch->edit = '编辑'; -$lang->branch->active = '激活'; -$lang->branch->close = '关闭'; -$lang->branch->create = '新增分支'; -$lang->branch->merge = '合并'; +$lang->branch->edit = '编辑'; +$lang->branch->editAction = '编辑分支'; +$lang->branch->active = '激活'; +$lang->branch->close = '关闭'; +$lang->branch->create = '新增分支'; +$lang->branch->merge = '合并'; $lang->branch->id = 'ID'; $lang->branch->product = '所属产品'; diff --git a/module/branch/lang/zh-tw.php b/module/branch/lang/zh-tw.php index beac1988dc..4b502fe030 100644 --- a/module/branch/lang/zh-tw.php +++ b/module/branch/lang/zh-tw.php @@ -8,8 +8,12 @@ $lang->branch->add = '添加'; $lang->branch->manageTitle = '%s管理'; $lang->branch->all = '所有'; -$lang->branch->create = '新增分支'; -$lang->branch->merge = '合併'; +$lang->branch->edit = '編輯'; +$lang->branch->editAction = '編輯分支'; +$lang->branch->active = '啟動'; +$lang->branch->close = '關閉'; +$lang->branch->create = '新增分支'; +$lang->branch->merge = '合併'; $lang->branch->id = '編號'; $lang->branch->product = '所屬產品'; diff --git a/module/branch/model.php b/module/branch/model.php index 603298ea41..07a21d8d8b 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -15,10 +15,12 @@ class branchModel extends model * Get name by id. * * @param int $branchID + * @param int $productID + * @param bool $queryAll * @access public * @return string */ - public function getById($branchID, $productID = 0) + public function getById($branchID, $productID = 0, $queryAll = false) { if(empty($branchID)) { @@ -27,6 +29,9 @@ class branchModel extends model if(empty($product) or !isset($this->lang->product->branchName[$product->type])) return false; return $this->lang->branch->main; } + + if($queryAll) return $this->dao->select('*')->from(TABLE_BRANCH)->where('id')->eq($branchID)->fetch(); + return htmlspecialchars_decode($this->dao->select('*')->from(TABLE_BRANCH)->where('id')->eq($branchID)->fetch('name')); } @@ -149,6 +154,29 @@ class branchModel extends model return false; } + /** + * Update branch. + * + * @param int $branchID + * @access public + * @return array|bool + */ + public function update($branchID) + { + $oldBranch = $this->getById($branchID, 0, true); + + $newBranch = fixer::input('post')->get(); + $newBranch->closedDate = $newBranch->status == 'closed' ? helper::today() : ''; + + $this->dao->update(TABLE_BRANCH)->data($newBranch) + ->where('id')->eq($branchID) + ->batchCheck($this->config->branch->edit->requiredFields, 'notempty') + ->exec(); + + if(!dao::isError()) return common::createChanges($oldBranch, $newBranch); + return false; + } + /** * Manage branch. * diff --git a/module/branch/view/edit.html.php b/module/branch/view/edit.html.php new file mode 100644 index 0000000000..751cf45344 --- /dev/null +++ b/module/branch/view/edit.html.php @@ -0,0 +1,38 @@ + + * @package branch + * @version $Id$ + * @link https://www.zentao.net + */ +?> + +
+
+

branch->create;?>

+
+
+ + + + + + + + + + + + + + + + +
branch->name;?>name, "class='form-control'");?>
branch->status;?>branch->statusList, $branch->status, "class='form-control chosen'");?>
branch->desc;?>desc, "class='form-control'");?>
+
+
+ diff --git a/module/branch/view/manage.html.php b/module/branch/view/manage.html.php index 23b359ee7a..843b86c879 100644 --- a/module/branch/view/manage.html.php +++ b/module/branch/view/manage.html.php @@ -75,7 +75,7 @@ id == BRANCH_MAIN ? 'disabled' : ''; - common::printIcon('branch', 'edit', "branchID=$branch->id", $branch, 'list', '', '', $disabled); + common::printIcon('branch', 'edit', "branchID=$branch->id", $branch, 'list', '', '', "$disabled iframe", true); if($branch->status == 'active') { common::printIcon('branch', 'close', "branchID=$branch->id", $branch, 'list', 'off', '', $disabled); diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 9b2024adc3..2a9958d82f 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -422,13 +422,15 @@ $lang->product->methodOrder[105] = 'unbindWhitelist'; $lang->resource->branch = new stdclass(); $lang->resource->branch->manage = 'manage'; $lang->resource->branch->create = 'create'; +$lang->resource->branch->edit = 'editAction'; $lang->resource->branch->sort = 'sort'; $lang->resource->branch->delete = 'delete'; $lang->branch->methodOrder[0] = 'manage'; $lang->branch->methodOrder[5] = 'create'; -$lang->branch->methodOrder[10] = 'sort'; -$lang->branch->methodOrder[15] = 'delete'; +$lang->branch->methodOrder[10] = 'edit'; +$lang->branch->methodOrder[15] = 'sort'; +$lang->branch->methodOrder[20] = 'delete'; /* Story. */ $lang->resource->story = new stdclass(); From f22b3ea149a01d51bbde1a47dc8739b8b582828d Mon Sep 17 00:00:00 2001 From: qiyu-xie Date: Sun, 7 Nov 2021 18:12:57 +0800 Subject: [PATCH 10/55] * Code for task#43902. --- module/action/lang/en.php | 2 +- module/action/lang/zh-cn.php | 2 +- module/action/lang/zh-tw.php | 2 +- module/branch/control.php | 50 ++++++++++++++++++++++++++++++ module/branch/lang/de.php | 22 +++++++------ module/branch/lang/en.php | 22 +++++++------ module/branch/lang/fr.php | 22 +++++++------ module/branch/lang/vi.php | 22 +++++++------ module/branch/lang/zh-cn.php | 22 +++++++------ module/branch/lang/zh-tw.php | 22 +++++++------ module/branch/model.php | 32 +++++++++++++++++++ module/branch/view/manage.html.php | 4 +-- module/group/lang/resource.php | 18 ++++++----- 13 files changed, 176 insertions(+), 66 deletions(-) diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 8962c2c22d..c47966431b 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -506,7 +506,7 @@ $lang->action->label->issue = 'Issue|issue|view|issueID=%s'; $lang->action->label->design = 'Design|design|view|designID=%s'; $lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s'; $lang->action->label->api = 'Interface|api|index|libID=%s&moduleID=%s&apiID=%s'; -$lang->action->label->branch = 'Branch|branch|manage|prouctID=%s'; +$lang->action->label->branch = 'Branch|branch|manage|prouctID=%s&browseType=all'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index 7f8632dd35..57af0a4424 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -506,7 +506,7 @@ $lang->action->label->issue = '问题|issue|view|issueID=%s'; $lang->action->label->design = '设计|design|view|designID=%s'; $lang->action->label->stakeholder = '干系人|stakeholder|view|userID=%s'; $lang->action->label->api = '接口|api|index|libID=%s&moduleID=%s&apiID=%s'; -$lang->action->label->branch = '分支|branch|manage|productID=%s'; +$lang->action->label->branch = '分支|branch|manage|productID=%s&browseType=all'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/zh-tw.php b/module/action/lang/zh-tw.php index b7a7bd390e..93f8d1a424 100755 --- a/module/action/lang/zh-tw.php +++ b/module/action/lang/zh-tw.php @@ -506,7 +506,7 @@ $lang->action->label->issue = '問題|issue|view|issueID=%s'; $lang->action->label->design = '設計|design|view|designID=%s'; $lang->action->label->stakeholder = '干係人|stakeholder|view|userID=%s'; $lang->action->label->api = '介面|api|index|libID=%s&moduleID=%s&apiID=%s'; -$lang->action->label->branch = '分支|branch|manage|productID=%s'; +$lang->action->label->branch = '分支|branch|manage|productID=%s&browseType=all'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/branch/control.php b/module/branch/control.php index d372597381..02c80b9940 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -85,6 +85,56 @@ class branch extends control $this->display(); } + /** + * Close a branch. + * + * @param int $branchID + * @param string $confirm + * @access public + * @return void + */ + public function close($branchID, $confirm = 'no') + { + $this->app->loadLang('product'); + $productType = $this->branch->getProductType($branchID); + + if($confirm == 'no') + { + die(js::confirm(str_replace('@branch@', $this->lang->product->branchName[$productType], $this->lang->branch->confirmClose), inlink('close', "branchID=$branchID&confirm=yes"))); + } + + $this->branch->close($branchID); + if(dao::isError()) die(js::error(dao::getError())); + + $this->loadModel('action')->create('branch', $branchID, 'Closed'); + die(js::reload('parent')); + } + + /** + * Activate a branch. + * + * @param int $branchID + * @param string $confirm + * @access public + * @return void + */ + public function activate($branchID, $confirm = 'no') + { + $this->app->loadLang('product'); + $productType = $this->branch->getProductType($branchID); + + if($confirm == 'no') + { + die(js::confirm(str_replace('@branch@', $this->lang->product->branchName[$productType], $this->lang->branch->confirmActivate), inlink('activate', "branchID=$branchID&confirm=yes"))); + } + + $this->branch->activate($branchID); + if(dao::isError()) die(js::error(dao::getError())); + + $this->loadModel('action')->create('branch', $branchID, 'Activated'); + die(js::reload('parent')); + } + /** * Sort branch. * diff --git a/module/branch/lang/de.php b/module/branch/lang/de.php index 4aa0b38d52..77b32e7b57 100644 --- a/module/branch/lang/de.php +++ b/module/branch/lang/de.php @@ -9,12 +9,14 @@ $lang->branch->manageTitle = '%s Management'; $lang->branch->all = 'Alle '; $lang->branch->main = 'Main'; -$lang->branch->edit = 'Edit'; -$lang->branch->editAction = 'Edit Branch'; -$lang->branch->active = 'Active'; -$lang->branch->close = 'Close'; -$lang->branch->create = 'Create Branch'; -$lang->branch->merge = 'Merge'; +$lang->branch->edit = 'Edit'; +$lang->branch->editAction = 'Edit Branch'; +$lang->branch->activate = 'Activate'; +$lang->branch->activateAction = 'Activate Branch'; +$lang->branch->close = 'Close'; +$lang->branch->closeAction = 'Close Branch'; +$lang->branch->create = 'Create Branch'; +$lang->branch->merge = 'Merge'; $lang->branch->id = 'ID'; $lang->branch->product = 'Produkt'; @@ -26,9 +28,11 @@ $lang->branch->desc = 'Desc'; $lang->branch->order = 'Sortierung'; $lang->branch->deleted = 'Löscht'; -$lang->branch->confirmDelete = 'Möchten Sie diesen @branch@ löschen?'; -$lang->branch->canNotDelete = 'Es sind Daten im @branch@ vorhanden. Löschen nicht möglich.'; -$lang->branch->nameNotEmpty = 'Name must not be empty!'; +$lang->branch->confirmDelete = 'Möchten Sie diesen @branch@ löschen?'; +$lang->branch->canNotDelete = 'Es sind Daten im @branch@ vorhanden. Löschen nicht möglich.'; +$lang->branch->nameNotEmpty = 'Name must not be empty!'; +$lang->branch->confirmClose = 'Do you want to close this @branch@?'; +$lang->branch->confirmActivate = 'Do you want to activate this @branch@?'; $lang->branch->noData = 'No branches.'; $lang->branch->mainBranch = 'The default main branch of the product.'; diff --git a/module/branch/lang/en.php b/module/branch/lang/en.php index 009390678c..c0ff485766 100644 --- a/module/branch/lang/en.php +++ b/module/branch/lang/en.php @@ -9,12 +9,14 @@ $lang->branch->manageTitle = '%s Management'; $lang->branch->all = 'All '; $lang->branch->main = 'Main'; -$lang->branch->edit = 'Edit'; -$lang->branch->editAction = 'Edit Branch'; -$lang->branch->active = 'Active'; -$lang->branch->close = 'Close'; -$lang->branch->create = 'Create Branch'; -$lang->branch->merge = 'Merge'; +$lang->branch->edit = 'Edit'; +$lang->branch->editAction = 'Edit Branch'; +$lang->branch->activate = 'Activate'; +$lang->branch->activateAction = 'Activate Branch'; +$lang->branch->close = 'Close'; +$lang->branch->closeAction = 'Close Branch'; +$lang->branch->create = 'Create Branch'; +$lang->branch->merge = 'Merge'; $lang->branch->id = 'ID'; $lang->branch->product = 'Product'; @@ -26,9 +28,11 @@ $lang->branch->desc = 'Desc'; $lang->branch->order = 'Order'; $lang->branch->deleted = 'Delete'; -$lang->branch->confirmDelete = 'Do you want to delete this @branch@?'; -$lang->branch->canNotDelete = 'There is data in @branch@. It cannot be deleted.'; -$lang->branch->nameNotEmpty = 'Name must not be empty!'; +$lang->branch->confirmDelete = 'Do you want to delete this @branch@?'; +$lang->branch->canNotDelete = 'There is data in @branch@. It cannot be deleted.'; +$lang->branch->nameNotEmpty = 'Name must not be empty!'; +$lang->branch->confirmClose = 'Do you want to close this @branch@?'; +$lang->branch->confirmActivate = 'Do you want to activate this @branch@?'; $lang->branch->noData = 'No branches.'; $lang->branch->mainBranch = 'The default main branch of the product.'; diff --git a/module/branch/lang/fr.php b/module/branch/lang/fr.php index 8c241acae3..49cb669d98 100644 --- a/module/branch/lang/fr.php +++ b/module/branch/lang/fr.php @@ -9,12 +9,14 @@ $lang->branch->manageTitle = 'Gestion %s'; $lang->branch->all = 'Tous'; $lang->branch->main = 'Main'; -$lang->branch->edit = 'Edit'; -$lang->branch->editAction = 'Edit Branch'; -$lang->branch->active = 'Active'; -$lang->branch->close = 'Close'; -$lang->branch->create = 'Create Branch'; -$lang->branch->merge = 'Merge'; +$lang->branch->edit = 'Edit'; +$lang->branch->editAction = 'Edit Branch'; +$lang->branch->activate = 'Activate'; +$lang->branch->activateAction = 'Activate Branch'; +$lang->branch->close = 'Close'; +$lang->branch->closeAction = 'Close Branch'; +$lang->branch->create = 'Create Branch'; +$lang->branch->merge = 'Merge'; $lang->branch->id = 'ID'; $lang->branch->product = 'Product'; @@ -26,9 +28,11 @@ $lang->branch->desc = 'Desc'; $lang->branch->order = 'Ordre'; $lang->branch->deleted = 'Delete'; -$lang->branch->confirmDelete = "Voulez-vous vraiment supprimer l'établissement @branch@ ?"; -$lang->branch->canNotDelete = 'Attention ! Il y a des données dans @branch@. Suppression impossible !'; -$lang->branch->nameNotEmpty = 'Name must not be empty!'; +$lang->branch->confirmDelete = "Voulez-vous vraiment supprimer l'établissement @branch@ ?"; +$lang->branch->canNotDelete = 'Attention ! Il y a des données dans @branch@. Suppression impossible !'; +$lang->branch->nameNotEmpty = 'Name must not be empty!'; +$lang->branch->confirmClose = 'Do you want to close this @branch@?'; +$lang->branch->confirmActivate = 'Do you want to activate this @branch@?'; $lang->branch->noData = 'No branches.'; $lang->branch->mainBranch = 'The default main branch of the product.'; diff --git a/module/branch/lang/vi.php b/module/branch/lang/vi.php index 2a65268681..30d16d179c 100644 --- a/module/branch/lang/vi.php +++ b/module/branch/lang/vi.php @@ -9,12 +9,14 @@ $lang->branch->manageTitle = 'Quản lý %s'; $lang->branch->all = 'Tất cả '; $lang->branch->main = 'Main'; -$lang->branch->edit = 'Edit'; -$lang->branch->editAction = 'Edit Branch'; -$lang->branch->active = 'Active'; -$lang->branch->close = 'Close'; -$lang->branch->create = 'Create Branch'; -$lang->branch->merge = 'Merge'; +$lang->branch->edit = 'Edit'; +$lang->branch->editAction = 'Edit Branch'; +$lang->branch->activate = 'Activate'; +$lang->branch->activateAction = 'Activate Branch'; +$lang->branch->close = 'Close'; +$lang->branch->closeAction = 'Close Branch'; +$lang->branch->create = 'Create Branch'; +$lang->branch->merge = 'Merge'; $lang->branch->id = 'ID'; $lang->branch->product = 'Sản phẩm'; @@ -26,9 +28,11 @@ $lang->branch->desc = 'Desc'; $lang->branch->order = 'Sắp xếp'; $lang->branch->deleted = 'Xóa'; -$lang->branch->confirmDelete = 'Bạn có muốn xóa @branch@ này?'; -$lang->branch->canNotDelete = 'Có dữ liệu trong @branch@. Nó không thể bị xóa.'; -$lang->branch->nameNotEmpty = 'Name must not be empty!'; +$lang->branch->confirmDelete = 'Bạn có muốn xóa @branch@ này?'; +$lang->branch->canNotDelete = 'Có dữ liệu trong @branch@. Nó không thể bị xóa.'; +$lang->branch->nameNotEmpty = 'Name must not be empty!'; +$lang->branch->confirmClose = 'Do you want to close this @branch@?'; +$lang->branch->confirmActivate = 'Do you want to activate this @branch@?'; $lang->branch->noData = 'No branches.'; $lang->branch->mainBranch = 'The default main branch of the product.'; diff --git a/module/branch/lang/zh-cn.php b/module/branch/lang/zh-cn.php index d2f3a544d0..12672f6102 100644 --- a/module/branch/lang/zh-cn.php +++ b/module/branch/lang/zh-cn.php @@ -9,12 +9,14 @@ $lang->branch->manageTitle = '%s管理'; $lang->branch->all = '所有'; $lang->branch->main = '主干'; -$lang->branch->edit = '编辑'; -$lang->branch->editAction = '编辑分支'; -$lang->branch->active = '激活'; -$lang->branch->close = '关闭'; -$lang->branch->create = '新增分支'; -$lang->branch->merge = '合并'; +$lang->branch->edit = '编辑'; +$lang->branch->editAction = '编辑分支'; +$lang->branch->activate = '激活'; +$lang->branch->activateAction = '激活分支'; +$lang->branch->close = '关闭'; +$lang->branch->closeAction = '关闭分支'; +$lang->branch->create = '新增分支'; +$lang->branch->merge = '合并'; $lang->branch->id = 'ID'; $lang->branch->product = '所属产品'; @@ -26,9 +28,11 @@ $lang->branch->desc = '分支描述'; $lang->branch->order = '排序'; $lang->branch->deleted = '已删除'; -$lang->branch->confirmDelete = '是否删除该@branch@?'; -$lang->branch->canNotDelete = '该@branch@下已经有数据,不能删除!'; -$lang->branch->nameNotEmpty = '名称不能为空!'; +$lang->branch->confirmDelete = '是否删除该@branch@?'; +$lang->branch->canNotDelete = '该@branch@下已经有数据,不能删除!'; +$lang->branch->nameNotEmpty = '名称不能为空!'; +$lang->branch->confirmClose = '是否关闭该@branch@?'; +$lang->branch->confirmActivate = '是否激活该@branch@?'; $lang->branch->noData = '暂时没有分支。'; $lang->branch->mainBranch = '产品默认主干分支。'; diff --git a/module/branch/lang/zh-tw.php b/module/branch/lang/zh-tw.php index 4b502fe030..679c34eb1a 100644 --- a/module/branch/lang/zh-tw.php +++ b/module/branch/lang/zh-tw.php @@ -8,12 +8,14 @@ $lang->branch->add = '添加'; $lang->branch->manageTitle = '%s管理'; $lang->branch->all = '所有'; -$lang->branch->edit = '編輯'; -$lang->branch->editAction = '編輯分支'; -$lang->branch->active = '啟動'; -$lang->branch->close = '關閉'; -$lang->branch->create = '新增分支'; -$lang->branch->merge = '合併'; +$lang->branch->edit = '編輯'; +$lang->branch->editAction = '編輯分支'; +$lang->branch->activate = '啟動'; +$lang->branch->activateAction = '啟動分支'; +$lang->branch->close = '關閉'; +$lang->branch->closeAction = '關閉分支'; +$lang->branch->create = '新增分支'; +$lang->branch->merge = '合併'; $lang->branch->id = '編號'; $lang->branch->product = '所屬產品'; @@ -25,9 +27,11 @@ $lang->branch->desc = '分支描述'; $lang->branch->order = '排序'; $lang->branch->deleted = '已刪除'; -$lang->branch->confirmDelete = '是否刪除該@branch@?'; -$lang->branch->canNotDelete = '該@branch@下已經有數據,不能刪除!'; -$lang->branch->nameNotEmpty = '名稱不能為空!'; +$lang->branch->confirmDelete = '是否刪除該@branch@?'; +$lang->branch->canNotDelete = '該@branch@下已經有數據,不能刪除!'; +$lang->branch->nameNotEmpty = '名稱不能為空!'; +$lang->branch->confirmClose = '是否關閉该@branch@?'; +$lang->branch->confirmActivate = '是否啟動该@branch@?'; $lang->branch->noData = '暫時沒有分支。'; $lang->branch->mainBranch = '產品默認主幹分支。'; diff --git a/module/branch/model.php b/module/branch/model.php index 07a21d8d8b..d0c0be2e22 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -177,6 +177,38 @@ class branchModel extends model return false; } + /** + * Close a branch. + * + * @param int $branchID + * @access public + * @return void + */ + public function close($branchID) + { + $this->dao->update(TABLE_BRANCH) + ->set('status')->eq('closed') + ->set('closedDate')->eq(helper::today()) + ->where('id')->eq($branchID) + ->exec(); + } + + /** + * Activate a branch. + * + * @param int $branchID + * @access public + * @return void + */ + public function activate($branchID) + { + $this->dao->update(TABLE_BRANCH) + ->set('status')->eq('active') + ->set('closedDate')->eq('') + ->where('id')->eq($branchID) + ->exec(); + } + /** * Manage branch. * diff --git a/module/branch/view/manage.html.php b/module/branch/view/manage.html.php index 843b86c879..46d6e6c0a8 100644 --- a/module/branch/view/manage.html.php +++ b/module/branch/view/manage.html.php @@ -78,11 +78,11 @@ common::printIcon('branch', 'edit', "branchID=$branch->id", $branch, 'list', '', '', "$disabled iframe", true); if($branch->status == 'active') { - common::printIcon('branch', 'close', "branchID=$branch->id", $branch, 'list', 'off', '', $disabled); + common::printIcon('branch', 'close', "branchID=$branch->id", $branch, 'list', 'off', 'hiddenwin', $disabled); } else { - common::printIcon('branch', 'active', "branchID=$branch->id", $branch, 'list', 'active', '', $disabled); + common::printIcon('branch', 'activate', "branchID=$branch->id", $branch, 'list', 'active', 'hiddenwin', $disabled); } ?> diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 2a9958d82f..26a85ea898 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -420,17 +420,21 @@ $lang->product->methodOrder[105] = 'unbindWhitelist'; /* Branch. */ $lang->resource->branch = new stdclass(); -$lang->resource->branch->manage = 'manage'; -$lang->resource->branch->create = 'create'; -$lang->resource->branch->edit = 'editAction'; -$lang->resource->branch->sort = 'sort'; -$lang->resource->branch->delete = 'delete'; +$lang->resource->branch->manage = 'manage'; +$lang->resource->branch->create = 'create'; +$lang->resource->branch->edit = 'editAction'; +$lang->resource->branch->close = 'closeAction'; +$lang->resource->branch->activate = 'activateAction'; +$lang->resource->branch->sort = 'sort'; +$lang->resource->branch->delete = 'delete'; $lang->branch->methodOrder[0] = 'manage'; $lang->branch->methodOrder[5] = 'create'; $lang->branch->methodOrder[10] = 'edit'; -$lang->branch->methodOrder[15] = 'sort'; -$lang->branch->methodOrder[20] = 'delete'; +$lang->branch->methodOrder[15] = 'close'; +$lang->branch->methodOrder[20] = 'activate'; +$lang->branch->methodOrder[25] = 'sort'; +$lang->branch->methodOrder[30] = 'delete'; /* Story. */ $lang->resource->story = new stdclass(); From acf5b15c06a93f6c746fa239ceedfcdc4310786d Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 09:20:57 +0800 Subject: [PATCH 11/55] * Code for task#43902. --- module/branch/model.php | 3 +++ module/story/control.php | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/module/branch/model.php b/module/branch/model.php index d0c0be2e22..5865a56f07 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -86,6 +86,7 @@ class branchModel extends model $branches = $this->dao->select('*')->from(TABLE_BRANCH) ->where('deleted')->eq(0) ->beginIF($productID)->andWhere('product')->eq($productID)->fi() + ->beginIF(strpos($params, 'active') !== false)->andWhere('status')->eq('active')->fi() ->orderBy('`order`') ->fetchPairs('id', 'name'); foreach($branches as $branchID => $branchName) $branches[$branchID] = htmlspecialchars_decode($branchName); @@ -97,6 +98,8 @@ class branchModel extends model $branches = array('all' => $this->lang->branch->all, '0' => $this->lang->branch->main) + $branches; } + + if(strpos($params, 'noall') !== false) unset($branches['all']); return $branches; } diff --git a/module/story/control.php b/module/story/control.php index 90da967309..ba35b872d5 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -313,7 +313,7 @@ class story extends control $this->view->color = $color; $this->view->pri = $pri; $this->view->branch = $branch; - $this->view->branches = $product->type != 'normal' ? $this->loadModel('branch')->getPairs($productID) : array(); + $this->view->branches = $product->type != 'normal' ? $this->loadModel('branch')->getPairs($productID, 'active|noall') : array(); $this->view->productID = $productID; $this->view->product = $product; $this->view->objectID = $objectID; @@ -627,7 +627,7 @@ class story extends control $this->view->users = $users; $this->view->product = $product; $this->view->products = $myProducts + $othersProducts; - $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($story->product); + $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($story->product, 'noall'); $this->view->reviewers = implode(',', $reviewerList); $this->view->reviewedReviewer = $reviewedReviewer; $this->view->isShowReviewer = $isShowReviewer; From c5779575c1fb99808d1f719474aad250eb3df16c Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 8 Nov 2021 09:29:45 +0800 Subject: [PATCH 12/55] * Modify code logic. --- module/branch/control.php | 12 ++++++------ module/branch/model.php | 5 ++--- module/productplan/control.php | 8 ++++---- module/story/control.php | 4 ++-- module/story/view/batchedit.html.php | 5 +---- 5 files changed, 15 insertions(+), 19 deletions(-) diff --git a/module/branch/control.php b/module/branch/control.php index f9c9c1716a..03221ca3c4 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -64,13 +64,13 @@ class branch extends control public function ajaxGetDropMenu($productID, $branch = 0, $module, $method, $extra = '') { $branches = $this->branch->getPairs($productID, 'all'); - $this->view->link = $this->loadModel('product')->getProductLink($module, $method, $extra, true); - $this->view->productID = $productID; - $this->view->projectID = $this->session->project; - $this->view->module = $module; - $this->view->method = $method; - $this->view->extra = $extra; + $this->view->link = $this->loadModel('product')->getProductLink($module, $method, $extra, true); + $this->view->productID = $productID; + $this->view->projectID = $this->session->project; + $this->view->module = $module; + $this->view->method = $method; + $this->view->extra = $extra; $this->view->branches = $branches; $this->view->currentBranchID = $branch; $this->view->branchesPinyin = common::convert2Pinyin($branches); diff --git a/module/branch/model.php b/module/branch/model.php index c70accb810..6b2edbb45b 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -40,9 +40,6 @@ class branchModel extends model */ public function getPairs($productID, $params = '') { - $product = $this->loadModel('product')->getById($productID); - if(!$product or $product->type == 'normal') return array(); - $branches = $this->dao->select('*')->from(TABLE_BRANCH) ->where('deleted')->eq(0) ->beginIF($productID)->andWhere('product')->eq($productID)->fi() @@ -52,6 +49,8 @@ class branchModel extends model if(strpos($params, 'noempty') === false) { + $product = $this->loadModel('product')->getById($productID); + if(!$product or $product->type == 'normal') return array(); $branches = array('0' => $this->lang->branch->main) + $branches; } diff --git a/module/productplan/control.php b/module/productplan/control.php index 386266f1fe..68ebf9bbad 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -413,8 +413,8 @@ class productplan extends control else { $this->config->product->search['fields']['branch'] = $this->lang->product->branch; - $branches = array('' => '', '0' => $this->lang->branch->main) + $this->loadModel('branch')->getPairs($plan->product, 'noempty'); - if($plan->branch) $branches = array('' => '', '0' => $this->lang->branch->main, $plan->branch => $branches[$plan->branch]); + $branches = array('' => '', $this->loadModel('branch')->getPairs($plan->product); + if($plan->branch) $branches = array('' => '', $plan->branch => $branches[$plan->branch]); $this->config->product->search['params']['branch']['values'] = $branches; } $this->loadModel('search')->setSearchParams($this->config->product->search); @@ -554,8 +554,8 @@ class productplan extends control else { $this->config->bug->search['fields']['branch'] = $this->lang->product->branch; - $branches = array('' => '', '0' => $this->lang->branch->main) + $this->loadModel('branch')->getPairs($productID, 'noempty'); - if($plan->branch) $branches = array('' => '', '0' => $this->lang->branch->main, $plan->branch => $branches[$plan->branch]); + $branches = array('' => '') + $this->loadModel('branch')->getPairs($productID); + if($plan->branch) $branches = array('' => '', $plan->branch => $branches[$plan->branch]); $this->config->bug->search['params']['branch']['values'] = $branches; } $this->loadModel('search')->setSearchParams($this->config->bug->search); diff --git a/module/story/control.php b/module/story/control.php index 375395a82e..3a406dd2b6 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -306,7 +306,7 @@ class story extends control $this->view->users = $users; $this->view->moduleID = $moduleID ? $moduleID : (int)$this->cookie->lastStoryModule; $this->view->moduleOptionMenu = $moduleOptionMenu; - $this->view->plans = $this->loadModel('productplan')->getPairsForStory($productID, $branch); + $this->view->plans = $this->loadModel('productplan')->getPairsForStory($productID, $branch, true); $this->view->planID = $planID; $this->view->source = $source; $this->view->sourceNote = $sourceNote; @@ -626,7 +626,7 @@ class story extends control $this->view->stories = $stories; $this->view->users = $users; $this->view->product = $product; - $this->view->plans = $this->loadModel('productplan')->getPairsForStory($story->product, $story->branch); + $this->view->plans = $this->loadModel('productplan')->getPairsForStory($story->product, $story->branch, true); $this->view->products = $myProducts + $othersProducts; $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($story->product); $this->view->reviewers = implode(',', $reviewerList); diff --git a/module/story/view/batchedit.html.php b/module/story/view/batchedit.html.php index 2bc81e2e13..fee5c7e5bc 100644 --- a/module/story/view/batchedit.html.php +++ b/module/story/view/batchedit.html.php @@ -108,10 +108,7 @@ foreach(explode(',', $showFields) as $field) } else { - foreach($plans as $branchPlan) - { - $productPlans += $branchPlan; - } + foreach($plans as $branchPlan) $productPlans += $branchPlan; } ?> session->currentProductType == 'normal') $productPlans = array('' => '', 'ditto' => $this->lang->story->ditto) + $productPlans;?> From 9732ba073a8c4420ba9edaf738d9f282b49f7051 Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Mon, 8 Nov 2021 10:19:56 +0800 Subject: [PATCH 13/55] * Modify the cookie of preBranch type. --- config/filter.php | 11 +++++++---- module/product/model.php | 4 ++-- module/story/control.php | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/config/filter.php b/config/filter.php index 747b6003af..b678df7326 100644 --- a/config/filter.php +++ b/config/filter.php @@ -92,6 +92,7 @@ $filter->product->default = new stdclass(); $filter->product->index = new stdclass(); $filter->product->export = new stdclass(); $filter->product->project = new stdclass(); +$filter->product->roadmap = new stdclass(); $filter->branch->default = new stdclass(); $filter->program->default = new stdclass(); $filter->program->pgmproject = new stdclass(); @@ -112,6 +113,7 @@ $filter->qa->default = new stdclass(); $filter->story->create = new stdclass(); $filter->story->export = new stdclass(); $filter->story->batchcreate = new stdclass(); +$filter->story->track = new stdclass(); $filter->sso->getbindusers = new stdclass(); $filter->sso->gettodolist = new stdclass(); $filter->sso->getuserpairs = new stdclass(); @@ -247,13 +249,14 @@ $filter->projectstory->story->cookie['storyModuleParam'] = 'int'; $filter->projectstory->story->cookie['pagerProductBrowse'] = 'int'; $filter->qa->default->cookie['lastProduct'] = 'int'; -$filter->qa->default->cookie['preBranch'] = 'int'; +$filter->qa->default->cookie['preBranch'] = 'reg::word'; $filter->qa->default->cookie['preProductID'] = 'int'; $filter->story->create->cookie['lastStoryModule'] = 'int'; $filter->story->batchcreate->cookie['preProductID'] = 'int'; $filter->story->export->cookie['checkedItem'] = 'reg::checked'; $filter->story->track->cookie['preBranch'] = 'reg::word'; +$filter->story->track->cookie['preProductID'] = 'int'; $filter->task->create->cookie['lastTaskModule'] = 'int'; $filter->task->export->cookie['checkedItem'] = 'reg::checked'; @@ -267,12 +270,12 @@ $filter->execution->export->cookie['checkedItem'] = 'reg::checked'; $filter->testcase->browse->cookie['caseModule'] = 'int'; $filter->testcase->browse->cookie['caseSuite'] = 'int'; -$filter->testcase->browse->cookie['preBranch'] = 'int'; +$filter->testcase->browse->cookie['preBranch'] = 'reg::word'; $filter->testcase->create->cookie['lastCaseModule'] = 'int'; $filter->testcase->default->cookie['lastProduct'] = 'int'; $filter->testcase->default->cookie['preProductID'] = 'int'; $filter->testcase->export->cookie['checkedItem'] = 'reg::checked'; -$filter->testcase->groupcase->cookie['preBranch'] = 'int'; +$filter->testcase->groupcase->cookie['preBranch'] = 'reg::word'; $filter->testreport->default->cookie['lastProduct'] = 'int'; $filter->testreport->default->cookie['lastProject'] = 'int'; @@ -285,7 +288,7 @@ $filter->testsuite->default->cookie['preProductID'] = 'int'; $filter->testsuite->library->cookie['libCaseModule'] = 'int'; $filter->testsuite->library->cookie['preCaseLibID'] = 'int'; -$filter->testtask->browse->cookie['preBranch'] = 'int'; +$filter->testtask->browse->cookie['preBranch'] = 'reg::word'; $filter->testtask->cases->cookie['preTaskID'] = 'int'; $filter->testtask->cases->cookie['taskCaseModule'] = 'int'; $filter->testtask->default->cookie['lastProduct'] = 'int'; diff --git a/module/product/model.php b/module/product/model.php index 3ee790018e..ba294ebc38 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -73,7 +73,7 @@ class productModel extends model * @access public * @return string */ - public function select($products, $productID, $currentModule, $currentMethod, $extra = '', $branch = 'all', $module = 0, $moduleType = '', $withBranch = true) + public function select($products, $productID, $currentModule, $currentMethod, $extra = '', $branch = '', $module = 0, $moduleType = '', $withBranch = true) { $isBrowseBug = (strpos(',project,execution,', ",{$this->app->tab},") !== false and strpos(',bug,testcase,testtask,ajaxselectstory,', ",{$this->app->rawMethod},") !== false and isset($products[0])) ? true : false; @@ -480,7 +480,7 @@ class productModel extends model $output .= "
"; $notNormalProduct = (isset($currentProduct->type) and $currentProduct->type != 'normal'); - $isTrackMethod = $currentModule == 'story' and $currentMethod == 'track'; + $isTrackMethod = ($currentModule == 'story' and $currentMethod == 'track'); $isShowBranchMethod = (strpos($this->config->product->showBranchMethod, $currentMethod) !== false and $currentModule == 'product') || $isTrackMethod; if($notNormalProduct and strpos(',testsuite,testreport,', ',' . $currentModule . ',') === false and ($this->app->tab == 'qa' or $isShowBranchMethod)) { diff --git a/module/story/control.php b/module/story/control.php index bb390365ec..1ee7d1e422 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -1487,6 +1487,7 @@ class story extends control * * @param int $productID * @param int|string $branch + * @param int $projectID * @param int $recTotal * @param int $recPerPage * @param int $pageID From b18373c7e3a184459e0082a4414673e454261a9c Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Mon, 8 Nov 2021 10:52:14 +0800 Subject: [PATCH 14/55] *Finish task #43908. --- module/my/view/task.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index 6bcafdb5f2..c2a31728d7 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -89,7 +89,7 @@ pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> ' title='name?>'> team)) echo '' . $this->lang->task->multipleAB . ' ';?> - parent > 0) echo '' . $this->lang->task->childrenAB . ' ';?> + parent > 0) echo '' . $this->lang->task->parentAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent", '', '', $task->project),$task->parentName) .'' . $this->lang->task->childrenAB . ' ';?> createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->name, null, "style='color: $task->color' data-group='execution'");?> children)) echo '';?> From ea6bcb8b5cb867058c9058756141c93ecd100569 Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Mon, 8 Nov 2021 11:08:56 +0800 Subject: [PATCH 15/55] *Finish task #43908. --- module/my/view/task.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index c2a31728d7..ec73646093 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -89,7 +89,7 @@ pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> ' title='name?>'> team)) echo '' . $this->lang->task->multipleAB . ' ';?> - parent > 0) echo '' . $this->lang->task->parentAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent", '', '', $task->project),$task->parentName) .'' . $this->lang->task->childrenAB . ' ';?> + parent > 0) echo '' . $this->lang->task->childrenAB . ' '.html::a($this->createLink('task', 'view', "taskID=$task->parent", '', '', $task->project),$task->parentName) .'/';?> createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->name, null, "style='color: $task->color' data-group='execution'");?> children)) echo '';?> From 26ec2238eec69e290c34ca3fa66246bf38acbf44 Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Mon, 8 Nov 2021 11:31:46 +0800 Subject: [PATCH 16/55] *Finish task #43908. --- module/my/view/task.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index ec73646093..f5220cb44a 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -89,7 +89,7 @@ pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> ' title='name?>'> team)) echo '' . $this->lang->task->multipleAB . ' ';?> - parent > 0) echo '' . $this->lang->task->childrenAB . ' '.html::a($this->createLink('task', 'view', "taskID=$task->parent", '', '', $task->project),$task->parentName) .'/';?> + parent > 0) echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent", '', '', $task->project), $task->parentName) . ' / ';?> createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->name, null, "style='color: $task->color' data-group='execution'");?> children)) echo '';?> From 5d1e3bd65e2eb901447bfb7ac51ebf06fde217f3 Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Mon, 8 Nov 2021 13:14:44 +0800 Subject: [PATCH 17/55] * Finish task #43904. --- module/story/model.php | 48 ++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/module/story/model.php b/module/story/model.php index 186f2642d6..ba6ef4c7ca 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -2170,7 +2170,7 @@ class storyModel extends model $stories = $this->dao->select('*')->from(TABLE_STORY) ->where('product')->in($productID) ->beginIF(!$hasParent)->andWhere("parent")->ge(0)->fi() - ->beginIF($branch)->andWhere("branch")->in($branch)->fi() + ->beginIF($branch !== 'all')->andWhere("branch")->in($branch)->fi() ->beginIF(!empty($moduleIdList))->andWhere('module')->in($moduleIdList)->fi() ->beginIF(!empty($excludeStories))->andWhere('id')->notIN($excludeStories)->fi() ->beginIF($status and $status != 'all')->andWhere('status')->in($status)->fi() @@ -2316,13 +2316,15 @@ class storyModel extends model /** * Get stories by a field. * - * @param int $productID - * @param string $fieldName - * @param mixed $fieldValue - * @param string $type requirement|story - * @param string $orderBy - * @param object $pager - * @param string $operator equal|include + * @param int $productID + * @param int|string $branch + * @param string $modules + * @param string $fieldName + * @param mixed $fieldValue + * @param string $type requirement|story + * @param string $orderBy + * @param object $pager + * @param string $operator equal|include * @access public * @return array */ @@ -2333,7 +2335,7 @@ class storyModel extends model ->where('product')->in($productID) ->andWhere('deleted')->eq(0) ->andWhere('type')->eq($type) - ->beginIF($branch)->andWhere("branch")->eq($branch)->fi() + ->beginIF($branch != 'all')->andWhere("branch")->eq($branch)->fi() ->beginIF($modules)->andWhere("module")->in($modules)->fi() ->beginIF($operator == 'equal')->andWhere($fieldName)->eq($fieldValue)->fi() ->beginIF($operator == 'include')->andWhere($fieldName)->like("%$fieldValue%")->fi() @@ -2373,18 +2375,18 @@ class storyModel extends model * Get stories through search. * * @access public - * @param int $productID - * @param int $branch - * @param int $queryID - * @param string $orderBy - * @param string $executionID - * @param string $type requirement|story - * @param string $excludeStories - * @param object $pager + * @param int $productID + * @param int|string $branch + * @param int $queryID + * @param string $orderBy + * @param string $executionID + * @param string $type requirement|story + * @param string $excludeStories + * @param object $pager * @access public * @return array */ - public function getBySearch($productID, $branch = 0, $queryID, $orderBy, $executionID = '', $type = 'story', $excludeStories = '', $pager = null) + public function getBySearch($productID, $branch = '', $queryID, $orderBy, $executionID = '', $type = 'story', $excludeStories = '', $pager = null) { if(!empty($executionID)) { @@ -2424,21 +2426,21 @@ class storyModel extends model if($branches) $storyQuery .= " AND `branch`" . helper::dbIN("0,$branches"); if($this->app->moduleName == 'release' or $this->app->moduleName == 'build') { - $storyQuery .= " AND `status` NOT IN ('draft')";// Fix bug #990. + $storyQuery .= " AND `status` NOT IN ('draft')"; // Fix bug #990. } else { $storyQuery .= " AND `status` NOT IN ('draft', 'closed')"; } } - elseif($branch) - { - if($branch and strpos($storyQuery, '`branch` =') === false) $storyQuery .= " AND `branch` in('0','$branch')"; - } elseif(strpos($storyQuery, $allBranch) !== false) { $storyQuery = str_replace($allBranch, '1', $storyQuery); } + elseif($branch) + { + if($branch and strpos($storyQuery, '`branch` =') === false) $storyQuery .= " AND `branch` in('$branch')"; + } $storyQuery = preg_replace("/`plan` +LIKE +'%([0-9]+)%'/i", "CONCAT(',', `plan`, ',') LIKE '%,$1,%'", $storyQuery); return $this->getBySQL($queryProductID, $storyQuery, $orderBy, $pager, $type); From aa116136d03fc4b247bf31e758a7e753934fff88 Mon Sep 17 00:00:00 2001 From: mayue Date: Mon, 8 Nov 2021 13:24:23 +0800 Subject: [PATCH 18/55] * Fix bug #15688. --- module/story/control.php | 11 +++++++++-- module/testcase/control.php | 8 +++++--- module/testcase/js/common.js | 9 +-------- module/testcase/view/create.html.php | 1 - 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/module/story/control.php b/module/story/control.php index d1c890e4ec..a651655914 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -1767,7 +1767,7 @@ class story extends control * @access public * @return void */ - public function ajaxGetProductStories($productID, $branch = 0, $moduleID = 0, $storyID = 0, $onlyOption = 'false', $status = '', $limit = 0, $type = 'full', $hasParent = 1) + public function ajaxGetProductStories($productID, $branch = 0, $moduleID = 0, $storyID = 0, $onlyOption = 'false', $status = '', $limit = 0, $type = 'full', $hasParent = 1, $executionID = 0) { if($moduleID) { @@ -1783,7 +1783,14 @@ class story extends control $storyStatus = array_keys($storyStatus); } - $stories = $this->story->getProductStoryPairs($productID, $branch ? "0,$branch" : $branch, $moduleID, $storyStatus, 'id_desc', $limit, $type, 'story', $hasParent); + if($executionID) + { + $stories = $this->story->getExecutionStoryPairs($executionID, $productID, $branch, $moduleID, $type); + } + else + { + $stories = $this->story->getProductStoryPairs($productID, $branch ? "0,$branch" : $branch, $moduleID, $storyStatus, 'id_desc', $limit, $type, 'story', $hasParent); + } $storyID = isset($stories[$storyID]) ? $storyID : 0; $select = html::select('story', empty($stories) ? array('' => '') : $stories, $storyID, "class='form-control'"); diff --git a/module/testcase/control.php b/module/testcase/control.php index 44f2d07337..0ab81b72c0 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -428,13 +428,15 @@ class testcase extends control if(empty($moduleID)) $moduleID = $story->module; } - $currentModuleID = (int)$moduleID ? (int)$moduleID : (int)$this->cookie->lastCaseModule; + $currentModuleID = $moduleID ? (int)$moduleID : (int)$this->cookie->lastCaseModule; /* Get the status of stories are not closed. */ $storyStatus = $this->lang->story->statusList; unset($storyStatus['closed']); $modules = array(); if($currentModuleID) { + $productModules = $this->tree->getOptionMenu($productID, 'story'); + $currentModuleID = array_key_exists($currentModuleID,$productModules) ? $currentModuleID : 0; $modules = $this->loadModel('tree')->getStoryModule($currentModuleID); $modules = $this->tree->getAllChildID($modules); } @@ -453,11 +455,11 @@ class testcase extends control $this->view->title = $title; $this->view->position = $position; - $this->view->projectID = isset($projectID) ? $projectID : ''; + $this->view->projectID = isset($projectID) ? $projectID : 0; $this->view->productID = $productID; $this->view->productName = $this->products[$productID]; $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, $branch); - $this->view->currentModuleID = $currentModuleID ? $currentModuleID : (int)$this->cookie->lastCaseModule; + $this->view->currentModuleID = $currentModuleID; $this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('testcase', 'browse', "productID=$productID") : ''; $this->view->stories = $stories; $this->view->caseTitle = $caseTitle; diff --git a/module/testcase/js/common.js b/module/testcase/js/common.js index 2e3d87bf53..9a0f1ac946 100644 --- a/module/testcase/js/common.js +++ b/module/testcase/js/common.js @@ -124,14 +124,7 @@ function setStories() productID = $('#product').val(); branch = $('#branch').val(); if(typeof(branch) == 'undefined') branch = 0; - if(tab == 'execution') - { - link = createLink('story', 'ajaxGetExecutionStories', 'executionID=' + executionID + '&productID=' + productID + '&branch' + branch + '&moduleID=' + moduleID + '&storyID=0'); - } - else - { - link = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=50'); - } + link = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=50' + '&executionID' + executionID); $.get(link, function(stories) { diff --git a/module/testcase/view/create.html.php b/module/testcase/view/create.html.php index 632373f46c..1e1a6c5df2 100644 --- a/module/testcase/view/create.html.php +++ b/module/testcase/view/create.html.php @@ -17,7 +17,6 @@ testcase->insertAfter);?> -app->tab);?>
From c15b6e7e6195dc02cf0d528c917712a28ced81cd Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 13:36:00 +0800 Subject: [PATCH 19/55] * Code for task#43902. --- module/branch/control.php | 3 ++ module/branch/lang/zh-cn.php | 1 + module/branch/model.php | 2 +- module/branch/view/ajaxgetdropmenu.html.php | 50 ++++++++++++++++----- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/module/branch/control.php b/module/branch/control.php index e96b1fc105..8366c18ad4 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -73,10 +73,13 @@ class branch extends control $this->view->method = $method; $this->view->extra = $extra; + $statusList = $this->dao->select('id,status')->from(TABLE_BRANCH)->where('product')->eq($productID)->fetchPairs(); + $branches = $this->branch->getPairs($productID); $this->view->branches = $branches; $this->view->currentBranchID = $branch; $this->view->branchesPinyin = common::convert2Pinyin($branches); + $this->view->statusList = $statusList; $this->display(); } diff --git a/module/branch/lang/zh-cn.php b/module/branch/lang/zh-cn.php index c0066b6be3..3aa5c39b69 100644 --- a/module/branch/lang/zh-cn.php +++ b/module/branch/lang/zh-cn.php @@ -24,6 +24,7 @@ $lang->branch->closedDate = '关闭时间'; $lang->branch->desc = '分支描述'; $lang->branch->order = '排序'; $lang->branch->deleted = '已删除'; +$lang->branch->closed = '已关闭'; $lang->branch->confirmDelete = '是否删除该@branch@?'; $lang->branch->canNotDelete = '该@branch@下已经有数据,不能删除!'; diff --git a/module/branch/model.php b/module/branch/model.php index e2a4b000ad..d732321054 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -64,7 +64,7 @@ class branchModel extends model $mainBranch->desc = $this->lang->branch->mainBranch; $mainBranch->order = 0; - $pager->recTotal = $pager->recTotal + 1; + if($pager) $pager->recTotal = $pager->recTotal + 1; return array($mainBranch) + $branchList; } diff --git a/module/branch/view/ajaxgetdropmenu.html.php b/module/branch/view/ajaxgetdropmenu.html.php index 9d6584fa00..e31ed3807b 100644 --- a/module/branch/view/ajaxgetdropmenu.html.php +++ b/module/branch/view/ajaxgetdropmenu.html.php @@ -2,14 +2,44 @@ -
- $branch) - { - $selected = (string)$branchID == $currentBranchID ? 'selected' : ''; - $linkHtml = $this->branch->setParamsForLink($module, $link, $projectID, $productID, $branchID); - echo html::a($linkHtml, $branch, '', "class='$selected' data-key='{$branchesPinyin[$branch]}'"); - } - ?> + $branch) +{ + $selected = (string)$branchID == $currentBranchID ? 'selected' : ''; + $linkHtml = $this->branch->setParamsForLink($module, $link, $projectID, $productID, $branchID); + + if($branchID == 'all' or empty($branchID) or $statusList[$branchID] == 'active') + { + $activeBranchesHtml .= html::a($linkHtml, $branch, '', "class='$selected' data-key='{$branchesPinyin[$branch]}'"); + } + else + { + $closedBranchesHtml .= html::a($linkHtml, $branch, '', "class='$selected' data-key='{$branchesPinyin[$branch]}'"); + } +} +?> +
+
+
+ +
+ +
+
+
+
+ From acd66decf464ea80dbc10649edfaff096b5614c2 Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 13:40:03 +0800 Subject: [PATCH 20/55] * Add lang. --- module/branch/lang/en.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/branch/lang/en.php b/module/branch/lang/en.php index 53ee04c8c7..092a549a0e 100644 --- a/module/branch/lang/en.php +++ b/module/branch/lang/en.php @@ -24,6 +24,7 @@ $lang->branch->closedDate = 'Closed Date'; $lang->branch->desc = 'Desc'; $lang->branch->order = 'Order'; $lang->branch->deleted = 'Delete'; +$lang->branch->closed = 'Closed'; $lang->branch->confirmDelete = 'Do you want to delete this @branch@?'; $lang->branch->canNotDelete = 'There is data in @branch@. It cannot be deleted.'; From 866c7adc7526a657ca2a731ecf57faa178c43e65 Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 13:53:16 +0800 Subject: [PATCH 21/55] * Code for task#43902. --- module/branch/model.php | 2 -- module/story/control.php | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/module/branch/model.php b/module/branch/model.php index 5865a56f07..5bdf3d6d17 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -98,8 +98,6 @@ class branchModel extends model $branches = array('all' => $this->lang->branch->all, '0' => $this->lang->branch->main) + $branches; } - - if(strpos($params, 'noall') !== false) unset($branches['all']); return $branches; } diff --git a/module/story/control.php b/module/story/control.php index ba35b872d5..d6053a3823 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -313,7 +313,7 @@ class story extends control $this->view->color = $color; $this->view->pri = $pri; $this->view->branch = $branch; - $this->view->branches = $product->type != 'normal' ? $this->loadModel('branch')->getPairs($productID, 'active|noall') : array(); + $this->view->branches = $product->type != 'normal' ? $this->loadModel('branch')->getPairs($productID, 'active') : array(); $this->view->productID = $productID; $this->view->product = $product; $this->view->objectID = $objectID; @@ -627,7 +627,7 @@ class story extends control $this->view->users = $users; $this->view->product = $product; $this->view->products = $myProducts + $othersProducts; - $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($story->product, 'noall'); + $this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($story->product); $this->view->reviewers = implode(',', $reviewerList); $this->view->reviewedReviewer = $reviewedReviewer; $this->view->isShowReviewer = $isShowReviewer; From b483b28d80060b8aa8e2b374f6c30ca6bc6e0689 Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 14:18:57 +0800 Subject: [PATCH 22/55] * Conflict resolution. --- module/branch/control.php | 5 +++-- module/branch/model.php | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/module/branch/control.php b/module/branch/control.php index aceb6a3352..4c5d1ce618 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -81,7 +81,7 @@ class branch extends control die(js::reload('parent.parent')); } - $this->view->branch = $this->branch->getById($branchID, 0, true); + $this->view->branch = $this->branch->getById($branchID, 0, ''); $this->display(); } @@ -159,7 +159,8 @@ class branch extends control */ public function ajaxGetDropMenu($productID, $branch = 0, $module, $method, $extra = '') { - $branches = $this->branch->getPairs($productID, 'all'); + $branches = $this->branch->getPairs($productID, 'all'); + $statusList = $this->dao->select('id,status')->from(TABLE_BRANCH)->where('product')->eq($productID)->fetchPairs(); $this->view->link = $this->loadModel('product')->getProductLink($module, $method, $extra, true); $this->view->productID = $productID; diff --git a/module/branch/model.php b/module/branch/model.php index d923e6dbc7..568bb4c475 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -16,11 +16,11 @@ class branchModel extends model * * @param int $branchID * @param int $productID - * @param bool $queryAll + * @param string $field * @access public - * @return string + * @return string|array */ - public function getById($branchID, $productID = 0, $queryAll = false) + public function getById($branchID, $productID = 0, $field = 'name') { if(empty($branchID)) { @@ -30,9 +30,9 @@ class branchModel extends model return $this->lang->branch->main; } - if($queryAll) return $this->dao->select('*')->from(TABLE_BRANCH)->where('id')->eq($branchID)->fetch(); + if(empty($field)) return $this->dao->select('*')->from(TABLE_BRANCH)->where('id')->eq($branchID)->fetch(); - return htmlspecialchars_decode($this->dao->select('*')->from(TABLE_BRANCH)->where('id')->eq($branchID)->fetch('name')); + return htmlspecialchars_decode($this->dao->select('*')->from(TABLE_BRANCH)->where('id')->eq($branchID)->fetch($field)); } /** @@ -168,7 +168,7 @@ class branchModel extends model */ public function update($branchID) { - $oldBranch = $this->getById($branchID, 0, true); + $oldBranch = $this->getById($branchID, 0, ''); $newBranch = fixer::input('post')->get(); $newBranch->closedDate = $newBranch->status == 'closed' ? helper::today() : ''; From 35b6e284b7a921347472e7bcca11f28019170963 Mon Sep 17 00:00:00 2001 From: mayue Date: Mon, 8 Nov 2021 14:28:42 +0800 Subject: [PATCH 23/55] * Fix bug #15688. --- module/testcase/js/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/testcase/js/common.js b/module/testcase/js/common.js index 9a0f1ac946..5da8863fb8 100644 --- a/module/testcase/js/common.js +++ b/module/testcase/js/common.js @@ -124,7 +124,7 @@ function setStories() productID = $('#product').val(); branch = $('#branch').val(); if(typeof(branch) == 'undefined') branch = 0; - link = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=50' + '&executionID' + executionID); + link = createLink('story', 'ajaxGetProductStories', 'productID=' + productID + '&branch=' + branch + '&moduleID=' + moduleID + '&storyID=0&onlyOption=false&status=noclosed&limit=50&type=full&hasParent=1&executionID=' + executionID); $.get(link, function(stories) { From 92fb767ff96ba2d57c69760abfc5dbb179490cdf Mon Sep 17 00:00:00 2001 From: zhouxin Date: Mon, 8 Nov 2021 14:34:44 +0800 Subject: [PATCH 24/55] Finish task #43916. --- module/execution/model.php | 3 ++- module/product/model.php | 4 ++-- module/program/model.php | 2 +- module/project/model.php | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/module/execution/model.php b/module/execution/model.php index 3edf38de83..d56e5f1113 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -365,10 +365,11 @@ class executionModel extends model $this->dao->insert(TABLE_EXECUTION)->data($sprint) ->autoCheck($skipFields = 'begin,end') ->batchcheck($this->config->execution->create->requiredFields, 'notempty') + ->checkIF(!empty($sprint->name), 'name', 'unique', "`type` in ('sprint','stage') and `parent` = $sprint->parent") + ->checkIF(!empty($sprint->code), 'code', 'unique', "`type` in ('sprint','stage') and `parent` = $sprint->parent") ->checkIF($sprint->begin != '', 'begin', 'date') ->checkIF($sprint->end != '', 'end', 'date') ->checkIF($sprint->end != '', 'end', 'ge', $sprint->begin) - ->checkIF(!empty($sprint->code), 'code', 'unique', "type in ('sprint','stage')") ->exec(); /* Add the creater to the team. */ diff --git a/module/product/model.php b/module/product/model.php index c711eac417..15e2ecf2f1 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -542,8 +542,8 @@ class productModel extends model $product = $this->loadModel('file')->processImgURL($product, $this->config->product->editor->create['id'], $this->post->uid); $this->dao->insert(TABLE_PRODUCT)->data($product)->autoCheck() ->batchCheck($this->config->product->create->requiredFields, 'notempty') - ->checkIF(!empty($product->name), 'name', 'unique') - ->checkIF(!empty($product->code), 'code', 'unique') + ->checkIF(!empty($product->name), 'name', 'unique', "`program` = $product->program") + ->checkIF(!empty($product->code), 'code', 'unique', "`program` = $product->program") ->exec(); if(!dao::isError()) diff --git a/module/program/model.php b/module/program/model.php index c7b7a0f6be..1017bd313a 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -624,7 +624,7 @@ class programModel extends model ->checkIF($program->begin != '', 'begin', 'date') ->checkIF($program->end != '', 'end', 'date') ->checkIF($program->end != '', 'end', 'gt', $program->begin) - ->checkIF(!empty($program->name), 'name', 'unique', "`type`='program'") + ->checkIF(!empty($program->name), 'name', 'unique', "`type`='program' and `parent` = $program->parent") ->exec(); if(!dao::isError()) diff --git a/module/project/model.php b/module/project/model.php index 17d4d589d7..e6a8b6a8f0 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -811,9 +811,9 @@ class projectModel extends model $this->dao->insert(TABLE_PROJECT)->data($project) ->autoCheck() ->batchcheck($requiredFields, 'notempty') - ->checkIF(!empty($project->code), 'code', 'unique', "type='project'") + ->checkIF(!empty($project->name), 'name', 'unique', "`type`='project' and `parent` = $project->parent") + ->checkIF(!empty($project->code), 'code', 'unique', "`type`='project' and `parent` = $project->parent") ->checkIF($project->end != '', 'end', 'gt', $project->begin) - ->check('name', 'unique', "type='project' AND deleted='0'") ->exec(); /* Add the creater to the team. */ From b305831daf9817749f7c7939ed00cbf8581d8093 Mon Sep 17 00:00:00 2001 From: mayue Date: Mon, 8 Nov 2021 15:04:55 +0800 Subject: [PATCH 25/55] * Fix bug #15688. --- module/testcase/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/testcase/control.php b/module/testcase/control.php index 0ab81b72c0..2bc231f972 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -444,7 +444,7 @@ class testcase extends control if($this->app->tab != 'qa') { $projectID = $this->app->tab == 'project' ? $this->session->project : $this->session->execution; - $stories = $this->story->getExecutionStoryPairs($projectID, $productID, $branch); + $stories = $this->story->getExecutionStoryPairs($projectID, $productID, $branch, $modules); } if($storyID and !isset($stories[$storyID])) $stories = $this->story->formatStories(array($storyID => $story)) + $stories;//Fix bug #2406. From eb8300049fa86e47c8708b647b8f9c86c84a71dd Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 15:07:05 +0800 Subject: [PATCH 26/55] * Fix bug. --- module/productplan/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/productplan/control.php b/module/productplan/control.php index 68ebf9bbad..85d7dc1c2f 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -413,7 +413,7 @@ class productplan extends control else { $this->config->product->search['fields']['branch'] = $this->lang->product->branch; - $branches = array('' => '', $this->loadModel('branch')->getPairs($plan->product); + $branches = array('' => '') + $this->loadModel('branch')->getPairs($plan->product); if($plan->branch) $branches = array('' => '', $plan->branch => $branches[$plan->branch]); $this->config->product->search['params']['branch']['values'] = $branches; } From 9f27d5918b2fe63a73b7a9c85b9adc0660e3b3ea Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Mon, 8 Nov 2021 16:29:22 +0800 Subject: [PATCH 27/55] * Fix bug #16062. --- module/productplan/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/productplan/control.php b/module/productplan/control.php index 85d7dc1c2f..545e355655 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -192,7 +192,7 @@ class productplan extends control } if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess)); - die(js::locate(inlink('browse', "productID=$plan->product&branch=$plan->branch"), 'parent')); + die(js::locate(inlink('browse', "productID=$plan->product"), 'parent')); } } From 74c1b31476665ed6e2b296ccef40dc85ff7c34b0 Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 16:37:19 +0800 Subject: [PATCH 28/55] * Fix bug#16051. --- module/branch/control.php | 6 +++++- module/branch/model.php | 1 - module/branch/view/edit.html.php | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/module/branch/control.php b/module/branch/control.php index 4c5d1ce618..1256f801d6 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -27,13 +27,17 @@ class branch extends control { $this->loadModel('product')->setMenu($productID); + $branchList = $this->branch->getList($productID, $browseType, $orderBy, $pager = null); + /* Load pager. */ + $recTotal = count($branchList); $this->app->loadClass('pager', $static = true); if($this->app->getViewType() == 'mhtml') $recPerPage = 10; $pager = new pager($recTotal, $recPerPage, $pageID); + $branchList = array_chunk($branchList, $pager->recPerPage); $this->view->title = $this->lang->branch->manage; - $this->view->branchList = $this->branch->getList($productID, $browseType, $orderBy, $pager); + $this->view->branchList = empty($branchList) ? $branchList : $branchList[$pageID - 1]; $this->view->productID = $productID; $this->view->browseType = $browseType; $this->view->orderBy = $orderBy; diff --git a/module/branch/model.php b/module/branch/model.php index 568bb4c475..32e4e36d1a 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -69,7 +69,6 @@ class branchModel extends model $mainBranch->desc = $this->lang->branch->mainBranch; $mainBranch->order = 0; - if($pager) $pager->recTotal = $pager->recTotal + 1; return array($mainBranch) + $branchList; } diff --git a/module/branch/view/edit.html.php b/module/branch/view/edit.html.php index 751cf45344..ce23a1d75d 100644 --- a/module/branch/view/edit.html.php +++ b/module/branch/view/edit.html.php @@ -13,7 +13,7 @@
-

branch->create;?>

+

branch->editAction;?>

From c027028759df6fb0d39b597752e698582f59409a Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Mon, 8 Nov 2021 16:44:42 +0800 Subject: [PATCH 29/55] * Finish task #43899. --- module/productplan/control.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/productplan/control.php b/module/productplan/control.php index 545e355655..472f7c8229 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -25,6 +25,8 @@ class productplan extends control $product = $this->loadModel('product')->getById($productID); if(empty($product)) $this->locate($this->createLink('product', 'create')); + $this->lang->product->branch = sprintf($this->lang->product->branch, $this->lang->product->branchName[$product->type]); + $this->app->loadConfig('execution'); $this->product->setMenu($productID, $branch); $this->session->set('currentProductType', $product->type); From 1d7c3b30c548a8f0ca160d77adb7e8a32d566eb8 Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Mon, 8 Nov 2021 17:14:35 +0800 Subject: [PATCH 30/55] * Fix bug #16065. --- module/productplan/js/create.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/productplan/js/create.js b/module/productplan/js/create.js index 2506f35515..09617fe5d4 100644 --- a/module/productplan/js/create.js +++ b/module/productplan/js/create.js @@ -71,6 +71,7 @@ $('#branch').change(function() $.post(link, function(data) { data = JSON.parse(data); - if(data) $('#title').parent().next('td').html('(' + lastLang + ': ' + data.title + ')'); + var planTitle = data ? '(' + lastLang + ': ' + data.title + ')' : ''; + $('#title').parent().next('td').html(planTitle); }) }) From 8f2deab1467fe27e31eafe1e742f530ffdc06ff7 Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 17:22:29 +0800 Subject: [PATCH 31/55] * Adjust code style. --- module/branch/control.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/branch/control.php b/module/branch/control.php index 1256f801d6..302d7ca67f 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -27,14 +27,14 @@ class branch extends control { $this->loadModel('product')->setMenu($productID); - $branchList = $this->branch->getList($productID, $browseType, $orderBy, $pager = null); + $branchList = $this->branch->getList($productID, $browseType, $orderBy); /* Load pager. */ - $recTotal = count($branchList); $this->app->loadClass('pager', $static = true); if($this->app->getViewType() == 'mhtml') $recPerPage = 10; - $pager = new pager($recTotal, $recPerPage, $pageID); - $branchList = array_chunk($branchList, $pager->recPerPage); + $recTotal = count($branchList); + $pager = new pager($recTotal, $recPerPage, $pageID); + $branchList = array_chunk($branchList, $recPerPage); $this->view->title = $this->lang->branch->manage; $this->view->branchList = empty($branchList) ? $branchList : $branchList[$pageID - 1]; From d10834ab9f6b2ebed4c3765f1daacb4ba169564e Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Mon, 8 Nov 2021 18:02:15 +0800 Subject: [PATCH 32/55] * Code for task #43904. --- config/filter.php | 4 ++-- module/product/control.php | 6 +++--- module/story/control.php | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/filter.php b/config/filter.php index b678df7326..1476bd9f18 100644 --- a/config/filter.php +++ b/config/filter.php @@ -169,7 +169,7 @@ $filter->my->contribute->cookie['pagerMyDoc'] = 'int'; $filter->bug->batchcreate->cookie['preBranch'] = 'reg::word'; $filter->bug->browse->cookie['bugModule'] = 'int'; $filter->bug->browse->cookie['bugBranch'] = 'int'; -$filter->bug->browse->cookie['treeBranch'] = 'int'; +$filter->bug->browse->cookie['treeBranch'] = 'reg::word'; $filter->bug->browse->cookie['preBranch'] = 'reg::word'; $filter->bug->browse->cookie['qaBugOrder'] = 'reg::orderBy'; $filter->bug->browse->cookie['windowWidth'] = 'int'; @@ -209,7 +209,7 @@ $filter->product->browse->cookie['preProductID'] = 'int'; $filter->product->browse->cookie['productStoryOrder'] = 'reg::orderBy'; $filter->product->browse->cookie['storyModule'] = 'int'; $filter->product->browse->cookie['storyBranch'] = 'int'; -$filter->product->browse->cookie['treeBranch'] = 'int'; +$filter->product->browse->cookie['treeBranch'] = 'reg::word'; $filter->product->default->cookie['lastProduct'] = 'int'; $filter->product->default->cookie['preProductID'] = 'int'; $filter->product->index->cookie['preBranch'] = 'reg::word'; diff --git a/module/product/control.php b/module/product/control.php index eb4021760a..aa6a60210a 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -158,7 +158,7 @@ class product extends control if($this->app->tab == 'project') setcookie('storyModuleParam', (int)$param, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); $_COOKIE['storyBranch'] = 0; setcookie('storyBranch', 0, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); - if($browseType == '') setcookie('treeBranch', (int)$branch, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); + if($browseType == '') setcookie('treeBranch', $branch, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); } if($browseType == 'bybranch') setcookie('storyBranch', (int)$branch, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); @@ -180,12 +180,12 @@ class product extends control $createModuleLink = $storyType == 'story' ? 'createStoryLink' : 'createRequirementLink'; if($browseType == '') { - setcookie('treeBranch', (int)$branch, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); + setcookie('treeBranch', $branch, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); $browseType = 'unclosed'; } else { - $branch = (int)$this->cookie->treeBranch; + $branch = $this->cookie->treeBranch; } /* If in project story and not chose product, get project story mdoules. */ diff --git a/module/story/control.php b/module/story/control.php index 53037f7eb2..6aebfcb8ec 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -165,7 +165,7 @@ class story extends control { setcookie('storyModule', 0, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); $branchID = $this->post->branch ? $this->post->branch : $branch; - $response['locate'] = $this->createLink('product', 'browse', "productID=$productID&branch=$branchID&browseType=unclosed¶m=0&type=$type&orderBy=id_desc"); + $response['locate'] = $this->createLink('product', 'browse', "productID=$productID&branch=$branchID&browseType=¶m=0&type=$type&orderBy=id_desc"); if($this->session->storyList and $this->app->tab != 'product') $response['locate'] = $this->session->storyList; } else From e53d6441693a3ea2fef819ef6e2fbb8396ffb50d Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Mon, 8 Nov 2021 19:13:09 +0800 Subject: [PATCH 33/55] * Fix bug#16058. --- module/action/lang/en.php | 5 +++++ module/action/lang/zh-cn.php | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/module/action/lang/en.php b/module/action/lang/en.php index c47966431b..2db333a59d 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -312,6 +312,11 @@ $lang->action->dynamicAction->product['closed'] = 'Close ' . $lang->productCo $lang->action->dynamicAction->product['undeleted'] = 'Restore ' . $lang->productCommon; $lang->action->dynamicAction->product['hidden'] = 'Hide ' . $lang->productCommon; +$lang->action->dynamicAction->branch['opened'] = 'Create Branch'; +$lang->action->dynamicAction->branch['edited'] = 'Edit Branch'; +$lang->action->dynamicAction->branch['closed'] = 'Close Branch'; +$lang->action->dynamicAction->branch['activated'] = 'Activate Branch'; + $lang->action->dynamicAction->productplan['opened'] = 'Create Plan'; $lang->action->dynamicAction->productplan['edited'] = 'Edit Plan'; diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index 57af0a4424..37b4303416 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -312,6 +312,11 @@ $lang->action->dynamicAction->product['closed'] = '关闭' . $lang->productCo $lang->action->dynamicAction->product['undeleted'] = '还原' . $lang->productCommon; $lang->action->dynamicAction->product['hidden'] = '隐藏' . $lang->productCommon; +$lang->action->dynamicAction->branch['opened'] = '创建分支'; +$lang->action->dynamicAction->branch['edited'] = '编辑分支'; +$lang->action->dynamicAction->branch['closed'] = '关闭分支'; +$lang->action->dynamicAction->branch['activated'] = '激活分支'; + $lang->action->dynamicAction->productplan['opened'] = "创建计划"; $lang->action->dynamicAction->productplan['edited'] = "编辑计划"; From b9dc220fd92b1d485d65a86e774d2ee956644b86 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 08:35:27 +0800 Subject: [PATCH 34/55] * Finish task #43918 --- module/program/model.php | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/module/program/model.php b/module/program/model.php index c7b7a0f6be..eaeb947bd8 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -447,15 +447,55 @@ class programModel extends model ->beginIF($path)->andWhere('path')->like($path . '%')->fi() ->beginIF(!$queryAll and !$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('id')->in($this->app->user->view->projects)->fi() ->beginIF(!$queryAll and !$this->app->user->admin and $this->config->systemMode == 'classic')->andWhere('id')->in($this->app->user->view->sprints)->fi() + /* ->beginIF($this->cookie->involved or $involved) ->andWhere('openedBy', true)->eq($this->app->user->account) ->orWhere('PM')->eq($this->app->user->account) ->markRight(1) ->fi() + */ ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); + a($projectList); + if($this->cookie->involved or $involved) + { + $stakeholder = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER) + ->where('deleted')->eq('0') + ->andWhere('objectID')->in(array_keys($projectList)) + ->fetchGroup('objectID', 'user'); + a($stakeholder); + foreach($projectList as $id => $project) + { + $whitelist = explode(",", $project->whitelist); + a($whitelist); + $executionList = $this->dao->select('id,PO,PM,QD,RD')->from(TABLE_EXECUTION) + ->where('deleted')->eq('0') + ->andWhere('project')->eq($project->id) + ->fetchAll(); + a($executionList); + $members = array(); + foreach($executionList as $execution) + { + array_push($members, $execution->PO, $execution->PM, $execution->QD, $execution->RD); + } + $members = array_unique($members); + $members = array_values($members); + a($members); + if($project->openedBy == $this->app->user->account || $project->PM == $this->app->user->account || in_array($this->app->user->account, $whitelist) || in_array($this->app->user->account, $members) || isset($stakeholder[$project->id][$this->app->user->account])) + { + ; + } + else + { + unset($projectList[$id]); + $pager->recTotal -= 1; + } + } + + } + /* Determine how to display the name of the program. */ if($programTitle and $this->config->systemMode == 'new') { From 1c4840c2c0a9e569a7d5cfa93a4c08810bd12eba Mon Sep 17 00:00:00 2001 From: xieqiyu Date: Tue, 9 Nov 2021 09:11:16 +0800 Subject: [PATCH 35/55] * Fix a bug. --- module/branch/control.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/branch/control.php b/module/branch/control.php index 302d7ca67f..219179f244 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -34,7 +34,7 @@ class branch extends control if($this->app->getViewType() == 'mhtml') $recPerPage = 10; $recTotal = count($branchList); $pager = new pager($recTotal, $recPerPage, $pageID); - $branchList = array_chunk($branchList, $recPerPage); + $branchList = array_chunk($branchList, $pager->recPerPage); $this->view->title = $this->lang->branch->manage; $this->view->branchList = empty($branchList) ? $branchList : $branchList[$pageID - 1]; From 6c23d4a336e7a7aba7d2fc640b5dfa5101e3f108 Mon Sep 17 00:00:00 2001 From: mayue Date: Tue, 9 Nov 2021 09:37:33 +0800 Subject: [PATCH 36/55] * Fix bug #15688. --- module/testcase/control.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/testcase/control.php b/module/testcase/control.php index 2bc231f972..7ce733bc65 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -436,8 +436,8 @@ class testcase extends control if($currentModuleID) { $productModules = $this->tree->getOptionMenu($productID, 'story'); - $currentModuleID = array_key_exists($currentModuleID,$productModules) ? $currentModuleID : 0; - $modules = $this->loadModel('tree')->getStoryModule($currentModuleID); + $storyModuleID = array_key_exists($currentModuleID, $productModules) ? $currentModuleID : 0; + $modules = $this->loadModel('tree')->getStoryModule($storyModuleID); $modules = $this->tree->getAllChildID($modules); } $stories = $this->story->getProductStoryPairs($productID, $branch, $modules, array_keys($storyStatus), 'id_desc', 50, 'null', 'story', false); From cafb5d08a83026b822817afbf71f0ecb5d23cc7e Mon Sep 17 00:00:00 2001 From: mayue Date: Tue, 9 Nov 2021 09:47:10 +0800 Subject: [PATCH 37/55] * Fix bug #15688. --- module/testcase/control.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/testcase/control.php b/module/testcase/control.php index 7ce733bc65..84c200a39f 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -435,10 +435,10 @@ class testcase extends control $modules = array(); if($currentModuleID) { - $productModules = $this->tree->getOptionMenu($productID, 'story'); - $storyModuleID = array_key_exists($currentModuleID, $productModules) ? $currentModuleID : 0; - $modules = $this->loadModel('tree')->getStoryModule($storyModuleID); - $modules = $this->tree->getAllChildID($modules); + $productModules = $this->tree->getOptionMenu($productID, 'story'); + $storyModuleID = array_key_exists($currentModuleID, $productModules) ? $currentModuleID : 0; + $modules = $this->loadModel('tree')->getStoryModule($storyModuleID); + $modules = $this->tree->getAllChildID($modules); } $stories = $this->story->getProductStoryPairs($productID, $branch, $modules, array_keys($storyStatus), 'id_desc', 50, 'null', 'story', false); if($this->app->tab != 'qa') From 33539633d7127b3af32143dfd880d42adf21f33a Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 10:35:17 +0800 Subject: [PATCH 38/55] * Finish task #43918. --- module/program/model.php | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index eaeb947bd8..69cc187e92 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -447,43 +447,30 @@ class programModel extends model ->beginIF($path)->andWhere('path')->like($path . '%')->fi() ->beginIF(!$queryAll and !$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('id')->in($this->app->user->view->projects)->fi() ->beginIF(!$queryAll and !$this->app->user->admin and $this->config->systemMode == 'classic')->andWhere('id')->in($this->app->user->view->sprints)->fi() - /* + /* ->beginIF($this->cookie->involved or $involved) ->andWhere('openedBy', true)->eq($this->app->user->account) ->orWhere('PM')->eq($this->app->user->account) ->markRight(1) ->fi() - */ + */ ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); - - a($projectList); + // *Finish task #43918. if($this->cookie->involved or $involved) { $stakeholder = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER) ->where('deleted')->eq('0') ->andWhere('objectID')->in(array_keys($projectList)) ->fetchGroup('objectID', 'user'); - a($stakeholder); foreach($projectList as $id => $project) { - $whitelist = explode(",", $project->whitelist); - a($whitelist); - $executionList = $this->dao->select('id,PO,PM,QD,RD')->from(TABLE_EXECUTION) - ->where('deleted')->eq('0') - ->andWhere('project')->eq($project->id) - ->fetchAll(); - a($executionList); - $members = array(); - foreach($executionList as $execution) - { - array_push($members, $execution->PO, $execution->PM, $execution->QD, $execution->RD); - } - $members = array_unique($members); - $members = array_values($members); - a($members); - if($project->openedBy == $this->app->user->account || $project->PM == $this->app->user->account || in_array($this->app->user->account, $whitelist) || in_array($this->app->user->account, $members) || isset($stakeholder[$project->id][$this->app->user->account])) + $whitelist = explode(",", $project->whitelist); + $teamMembers = $this->dao->select('root,account')->from(TABLE_TEAM) + ->where('root')->eq($project->id) + ->fetchGroup('root','account'); + if($project->openedBy == $this->app->user->account || $project->PM == $this->app->user->account || in_array($this->app->user->account, $whitelist) || isset($teamMembers[$project->id][$this->app->user->account]) || isset($stakeholder[$project->id][$this->app->user->account])) { ; } From c55a455a16f73835506ab108feb209ddd1cba202 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 10:37:48 +0800 Subject: [PATCH 39/55] * Finish task #43918. --- module/execution/model.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/module/execution/model.php b/module/execution/model.php index 3edf38de83..cc4ed8183a 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -390,7 +390,6 @@ class executionModel extends model $members = isset($_POST['teamMembers']) ? $_POST['teamMembers'] : array(); array_push($members, $sprint->PO, $sprint->QD, $sprint->PM, $sprint->RD); $members = array_unique($members); - $member = array_values($members); $roles = $this->loadModel('user')->getUserRoles(array_values($members)); foreach($members as $account) @@ -525,6 +524,7 @@ class executionModel extends model ->exec(); $changedAccounts = array(); + $teamMembers = array(); foreach($this->config->execution->ownerFields as $ownerField) { $owner = zget($execution, $ownerField, ''); @@ -540,8 +540,10 @@ class executionModel extends model $member->hours = $this->config->execution->defaultWorkhours; $this->dao->replace(TABLE_TEAM)->data($member)->exec(); - $changedAccounts[$owner] = $owner; + $changedAccounts[$owner] = $owner; + $teamMembers[$ownerField] = $member; } + if($execution->project) $this->addProjectMembers($execution->project, $teamMembers); $whitelist = explode(',', $execution->whitelist); $this->loadModel('personnel')->updateWhitelist($whitelist, 'sprint', $executionID); From 67635b0317f8ac463f1be892fd0da71ff44e98f0 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 10:39:02 +0800 Subject: [PATCH 40/55] * Finish task #43918. --- module/execution/model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/module/execution/model.php b/module/execution/model.php index cc4ed8183a..fca988cd84 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -539,7 +539,6 @@ class executionModel extends model $member->type = 'execution'; $member->hours = $this->config->execution->defaultWorkhours; $this->dao->replace(TABLE_TEAM)->data($member)->exec(); - $changedAccounts[$owner] = $owner; $teamMembers[$ownerField] = $member; } From 9c7884d9058fe44e6df7b70efac1031b6e61faf5 Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Tue, 9 Nov 2021 11:09:48 +0800 Subject: [PATCH 41/55] * Code for task #43891. --- config/filter.php | 12 ++++++++++++ module/product/model.php | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/config/filter.php b/config/filter.php index 1476bd9f18..7d1f8fcd60 100644 --- a/config/filter.php +++ b/config/filter.php @@ -63,6 +63,7 @@ $filter->search = new stdclass(); $filter->gitlab = new stdclass(); $filter->mr = new stdclass(); $filter->ci = new stdclass(); +$filter->tree = new stdclass(); $filter->block->default = new stdclass(); $filter->block->main = new stdclass(); @@ -78,6 +79,7 @@ $filter->doc->create = new stdclass(); $filter->doc->browse = new stdclass(); $filter->doc->alllibs = new stdclass(); $filter->doc->objectlibs = new stdclass(); +$filter->doc->tablecontents = new stdclass(); $filter->doc->showfiles = new stdclass(); $filter->doc->default = new stdclass(); $filter->api->index = new stdClass(); @@ -93,6 +95,7 @@ $filter->product->index = new stdclass(); $filter->product->export = new stdclass(); $filter->product->project = new stdclass(); $filter->product->roadmap = new stdclass(); +$filter->product->dynamic = new stdclass(); $filter->branch->default = new stdclass(); $filter->program->default = new stdclass(); $filter->program->pgmproject = new stdclass(); @@ -150,6 +153,7 @@ $filter->gitlab->importissue = new stdclass(); $filter->mr->diff = new stdclass(); $filter->ci->checkCompileStatus = new stdclass(); $filter->execution->export = new stdclass(); +$filter->tree->browse = new stdclass(); $filter->my->work->cookie['pagerMyTask'] = 'int'; $filter->my->work->cookie['pagerMyRequirement'] = 'int'; @@ -185,9 +189,13 @@ $filter->doc->create->cookie['lastDocModule'] = 'int'; $filter->doc->browse->cookie['browseType'] = 'reg::browseType'; $filter->doc->alllibs->cookie['browseType'] = 'reg::browseType'; $filter->doc->objectlibs->cookie['browseType'] = 'reg::browseType'; +$filter->doc->objectlibs->cookie['preProductID'] = 'int'; +$filter->doc->objectlibs->cookie['preBranch'] = 'reg::word'; $filter->doc->default->cookie['from'] = 'code'; $filter->doc->default->cookie['product'] = 'int'; $filter->doc->showfiles->cookie['docFilesViewType'] = 'code'; +$filter->doc->tablecontents->cookie['preProductID'] = 'int'; +$filter->doc->tablecontents->cookie['preBranch'] = 'reg::word'; $filter->api->index->get['libID'] = 'int'; $filter->api->index->get['module'] = 'int'; $filter->api->index->get['apiID'] = 'int'; @@ -217,6 +225,7 @@ $filter->product->export->cookie['checkedItem'] = 'reg::checked'; $filter->product->project->cookie['involved'] = 'code'; $filter->product->project->cookie['preBranch'] = 'reg::word'; $filter->product->roadmap->cookie['preBranch'] = 'reg::word'; +$filter->product->dynamic->cookie['preBranch'] = 'reg::word'; $filter->branch->default->cookie['preBranch'] = 'reg::word'; @@ -382,3 +391,6 @@ $filter->gitlab->importissue->get['repo'] = 'int'; $filter->mr->diff->cookie['arrange'] = 'reg::word'; $filter->ci->checkCompileStatus->get['gitlabOnly'] = 'string'; + +$filter->tree->browse->cookie['preProductID'] = 'int'; +$filter->tree->browse->cookie['preBranch'] = 'reg::word'; diff --git a/module/product/model.php b/module/product/model.php index 3efb07929c..0c5900b864 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -1991,7 +1991,7 @@ class productModel extends model * @access public * @return void */ - public function setMenu($productID, $branch = 'all', $module = 0, $moduleType = '', $extra = '') + public function setMenu($productID, $branch = '', $module = 0, $moduleType = '', $extra = '') { if(!$this->app->user->admin and strpos(",{$this->app->user->view->products},", ",$productID,") === false and $productID != 0 and !defined('TUTORIAL')) die(js::error($this->lang->product->accessDenied) . js::locate('back')); From ab5ee93bc38c7a96a7e679cccb02ab4f6c56b4df Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 11:26:25 +0800 Subject: [PATCH 42/55] * Finish task #43918. --- module/program/model.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index 69cc187e92..f6f078b5e2 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -464,12 +464,13 @@ class programModel extends model ->where('deleted')->eq('0') ->andWhere('objectID')->in(array_keys($projectList)) ->fetchGroup('objectID', 'user'); + $teamMembers = $this->dao->select('root,account')->from(TABLE_TEAM) + ->where('root')->in(array_keys($projectList)) + ->fetchGroup('root','account'); + a($teamMembers); foreach($projectList as $id => $project) { $whitelist = explode(",", $project->whitelist); - $teamMembers = $this->dao->select('root,account')->from(TABLE_TEAM) - ->where('root')->eq($project->id) - ->fetchGroup('root','account'); if($project->openedBy == $this->app->user->account || $project->PM == $this->app->user->account || in_array($this->app->user->account, $whitelist) || isset($teamMembers[$project->id][$this->app->user->account]) || isset($stakeholder[$project->id][$this->app->user->account])) { ; From c0169fd82378baa079719359e754848eaaec5b38 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 11:27:30 +0800 Subject: [PATCH 43/55] * Finish task #43918. --- module/execution/.model.php.swp | Bin 0 -> 184320 bytes module/execution/model.php | 1 + 2 files changed, 1 insertion(+) create mode 100644 module/execution/.model.php.swp diff --git a/module/execution/.model.php.swp b/module/execution/.model.php.swp new file mode 100644 index 0000000000000000000000000000000000000000..86d8952036d7dba7517309abede078f3136745bf GIT binary patch literal 184320 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 T^k|M4Vu4j66=0IEC$|1SA!=5x literal 0 HcmV?d00001 diff --git a/module/execution/model.php b/module/execution/model.php index fca988cd84..cc4ed8183a 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -539,6 +539,7 @@ class executionModel extends model $member->type = 'execution'; $member->hours = $this->config->execution->defaultWorkhours; $this->dao->replace(TABLE_TEAM)->data($member)->exec(); + $changedAccounts[$owner] = $owner; $teamMembers[$ownerField] = $member; } From fdc54380eeb56b1f395c560164a4b9dd59a99fd4 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 13:08:58 +0800 Subject: [PATCH 44/55] * Finish task #43918. --- module/program/model.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index f6f078b5e2..e03fbdb526 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -457,7 +457,7 @@ class programModel extends model ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); - // *Finish task #43918. + /* Finish task #43918, Optimize the projects i worked on*/ if($this->cookie->involved or $involved) { $stakeholder = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER) @@ -467,15 +467,10 @@ class programModel extends model $teamMembers = $this->dao->select('root,account')->from(TABLE_TEAM) ->where('root')->in(array_keys($projectList)) ->fetchGroup('root','account'); - a($teamMembers); foreach($projectList as $id => $project) { $whitelist = explode(",", $project->whitelist); - if($project->openedBy == $this->app->user->account || $project->PM == $this->app->user->account || in_array($this->app->user->account, $whitelist) || isset($teamMembers[$project->id][$this->app->user->account]) || isset($stakeholder[$project->id][$this->app->user->account])) - { - ; - } - else + if($project->openedBy != $this->app->user->account and $project->PM != $this->app->user->account and !in_array($this->app->user->account, $whitelist) and !isset($teamMembers[$project->id][$this->app->user->account]) and !isset($stakeholder[$project->id][$this->app->user->account])) { unset($projectList[$id]); $pager->recTotal -= 1; From 8c731d67fe67954327225af16e6e2d37af23ad1a Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 13:14:05 +0800 Subject: [PATCH 45/55] Finish task #43918. --- module/execution/.model.php.swp | Bin 184320 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 module/execution/.model.php.swp diff --git a/module/execution/.model.php.swp b/module/execution/.model.php.swp deleted file mode 100644 index 86d8952036d7dba7517309abede078f3136745bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184320 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 T^k|M4Vu4j66=0IEC$|1SA!=5x From 627ba8e4936983d9f7f43839b180ec506a96bec1 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 13:18:44 +0800 Subject: [PATCH 46/55] Finish task #43918. --- module/program/model.php | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index e03fbdb526..19363fbf52 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -447,36 +447,28 @@ class programModel extends model ->beginIF($path)->andWhere('path')->like($path . '%')->fi() ->beginIF(!$queryAll and !$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('id')->in($this->app->user->view->projects)->fi() ->beginIF(!$queryAll and !$this->app->user->admin and $this->config->systemMode == 'classic')->andWhere('id')->in($this->app->user->view->sprints)->fi() - /* - ->beginIF($this->cookie->involved or $involved) - ->andWhere('openedBy', true)->eq($this->app->user->account) - ->orWhere('PM')->eq($this->app->user->account) - ->markRight(1) - ->fi() - */ ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); - /* Finish task #43918, Optimize the projects i worked on*/ + if($this->cookie->involved or $involved) { $stakeholder = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER) - ->where('deleted')->eq('0') - ->andWhere('objectID')->in(array_keys($projectList)) - ->fetchGroup('objectID', 'user'); + ->where('deleted')->eq('0') + ->andWhere('objectID')->in(array_keys($projectList)) + ->fetchGroup('objectID', 'user'); $teamMembers = $this->dao->select('root,account')->from(TABLE_TEAM) - ->where('root')->in(array_keys($projectList)) - ->fetchGroup('root','account'); + ->where('root')->in(array_keys($projectList)) + ->fetchGroup('root','account'); foreach($projectList as $id => $project) { - $whitelist = explode(",", $project->whitelist); - if($project->openedBy != $this->app->user->account and $project->PM != $this->app->user->account and !in_array($this->app->user->account, $whitelist) and !isset($teamMembers[$project->id][$this->app->user->account]) and !isset($stakeholder[$project->id][$this->app->user->account])) - { - unset($projectList[$id]); - $pager->recTotal -= 1; - } + $whitelist = explode(",", $project->whitelist); + if($project->openedBy != $this->app->user->account and $project->PM != $this->app->user->account and !in_array($this->app->user->account, $whitelist) and !isset($teamMembers[$project->id][$this->app->user->account]) and !isset($stakeholder[$project->id][$this->app->user->account])) + { + unset($projectList[$id]); + $pager->recTotal -= 1; + } } - } /* Determine how to display the name of the program. */ From f23ff798b9a18f4b03093da11b4bd8fb754e5a93 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 13:23:37 +0800 Subject: [PATCH 47/55] Finish task #43918. --- module/program/model.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index 19363fbf52..2186d0b8bd 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -453,22 +453,22 @@ class programModel extends model if($this->cookie->involved or $involved) { - $stakeholder = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER) - ->where('deleted')->eq('0') - ->andWhere('objectID')->in(array_keys($projectList)) - ->fetchGroup('objectID', 'user'); - $teamMembers = $this->dao->select('root,account')->from(TABLE_TEAM) - ->where('root')->in(array_keys($projectList)) - ->fetchGroup('root','account'); - foreach($projectList as $id => $project) + $stakeholder = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER) + ->where('deleted')->eq('0') + ->andWhere('objectID')->in(array_keys($projectList)) + ->fetchGroup('objectID', 'user'); + $teamMembers = $this->dao->select('root,account')->from(TABLE_TEAM) + ->where('root')->in(array_keys($projectList)) + ->fetchGroup('root','account'); + foreach($projectList as $id => $project) + { + $whitelist = explode(",", $project->whitelist); + if($project->openedBy != $this->app->user->account and $project->PM != $this->app->user->account and !in_array($this->app->user->account, $whitelist) and !isset($teamMembers[$project->id][$this->app->user->account]) and !isset($stakeholder[$project->id][$this->app->user->account])) { - $whitelist = explode(",", $project->whitelist); - if($project->openedBy != $this->app->user->account and $project->PM != $this->app->user->account and !in_array($this->app->user->account, $whitelist) and !isset($teamMembers[$project->id][$this->app->user->account]) and !isset($stakeholder[$project->id][$this->app->user->account])) - { - unset($projectList[$id]); - $pager->recTotal -= 1; - } + unset($projectList[$id]); + $pager->recTotal -= 1; } + } } /* Determine how to display the name of the program. */ From 44c44f11d1b6c1bf4d774c98fa9453fdfb2346e4 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 13:25:52 +0800 Subject: [PATCH 48/55] Finish task #43918. --- module/program/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/program/model.php b/module/program/model.php index 2186d0b8bd..ad178baecb 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -462,7 +462,7 @@ class programModel extends model ->fetchGroup('root','account'); foreach($projectList as $id => $project) { - $whitelist = explode(",", $project->whitelist); + $whitelist = explode(",", $project->whitelist); if($project->openedBy != $this->app->user->account and $project->PM != $this->app->user->account and !in_array($this->app->user->account, $whitelist) and !isset($teamMembers[$project->id][$this->app->user->account]) and !isset($stakeholder[$project->id][$this->app->user->account])) { unset($projectList[$id]); From 57bc70b75ba85ce154dd29b80a6e97fcdbfabbdf Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Tue, 9 Nov 2021 13:31:05 +0800 Subject: [PATCH 49/55] *Finish task #44157. --- module/project/model.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/project/model.php b/module/project/model.php index e6a8b6a8f0..d76467522a 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1436,6 +1436,8 @@ class projectModel extends model $class = "c-$id" . (in_array($id, array('budget', 'teamCount', 'estimate', 'consume')) ? ' c-number' : ''); if($id == 'id') $class .= ' cell-id'; + + if($id=='code') $title = "title='{$project->code}'"; if($id == 'name') { From 782d1114bf172003badd1e7bedef68e239cea087 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 13:47:30 +0800 Subject: [PATCH 50/55] Finish task #43918. --- module/program/model.php | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index ad178baecb..e210fa58b7 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -453,21 +453,26 @@ class programModel extends model if($this->cookie->involved or $involved) { - $stakeholder = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER) + $stakeholderGroup = $this->dao->select('objectID,user')->from(TABLE_STAKEHOLDER) ->where('deleted')->eq('0') ->andWhere('objectID')->in(array_keys($projectList)) ->fetchGroup('objectID', 'user'); - $teamMembers = $this->dao->select('root,account')->from(TABLE_TEAM) + + $teamMembersGroup = $this->dao->select('root,account')->from(TABLE_TEAM) ->where('root')->in(array_keys($projectList)) ->fetchGroup('root','account'); + foreach($projectList as $id => $project) { $whitelist = explode(",", $project->whitelist); - if($project->openedBy != $this->app->user->account and $project->PM != $this->app->user->account and !in_array($this->app->user->account, $whitelist) and !isset($teamMembers[$project->id][$this->app->user->account]) and !isset($stakeholder[$project->id][$this->app->user->account])) - { - unset($projectList[$id]); - $pager->recTotal -= 1; - } + if($project->openedBy == $this->app->user->account) continue; + if($project->PM == $this->app->user->account) continue; + if(!in_array($this->app->user->account, $whitelist)) continue; + if(!isset($teamMembers[$project->id][$this->app->user->account])) continue; + if(!isset($stakeholder[$project->id][$this->app->user->account])) continue; + + unset($projectList[$id]); + $pager->recTotal -= 1; } } From 0f975ee3c46e8a74f2649fbb397464a9b8e8f01b Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Tue, 9 Nov 2021 13:48:06 +0800 Subject: [PATCH 51/55] *Finish task #44157. --- module/my/view/task.html.php | 2 +- module/project/model.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index f5220cb44a..bc4a1369b7 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -89,7 +89,7 @@ diff --git a/module/project/model.php b/module/project/model.php index d76467522a..7687266dfd 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1437,7 +1437,7 @@ class projectModel extends model if($id == 'id') $class .= ' cell-id'; - if($id=='code') $title = "title='{$project->code}'"; + if($id == 'code') $title = "title={$project->code}"; if($id == 'name') { From 928784c9a93e47c66a83336a2dfb8c8ae505a675 Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Tue, 9 Nov 2021 13:52:13 +0800 Subject: [PATCH 52/55] Finish task #44157. --- module/my/view/task.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index bc4a1369b7..a85d89c2ea 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -89,7 +89,7 @@ From 411d2429ee8dc961e7ecb0fe7ef888fb3bde33ef Mon Sep 17 00:00:00 2001 From: zhengrunyu Date: Tue, 9 Nov 2021 13:55:56 +0800 Subject: [PATCH 53/55] Finish task #44157. --- module/my/view/task.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/my/view/task.html.php b/module/my/view/task.html.php index a85d89c2ea..24aed096b0 100644 --- a/module/my/view/task.html.php +++ b/module/my/view/task.html.php @@ -89,7 +89,7 @@ From 397fb3e15233924c58a1f251fd4fa358f4153a7a Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 13:58:39 +0800 Subject: [PATCH 54/55] Finish task #43918. --- module/program/model.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index e210fa58b7..a1b4a008e8 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -467,9 +467,9 @@ class programModel extends model $whitelist = explode(",", $project->whitelist); if($project->openedBy == $this->app->user->account) continue; if($project->PM == $this->app->user->account) continue; - if(!in_array($this->app->user->account, $whitelist)) continue; - if(!isset($teamMembers[$project->id][$this->app->user->account])) continue; - if(!isset($stakeholder[$project->id][$this->app->user->account])) continue; + if(in_array($this->app->user->account, $whitelist)) continue; + if(isset($teamMembersGroup[$project->id][$this->app->user->account])) continue; + if(isset($stakeholderGroup[$project->id][$this->app->user->account])) continue; unset($projectList[$id]); $pager->recTotal -= 1; From f49cbba01d2705a3eb2349b1b1186bd21218c063 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 9 Nov 2021 14:38:14 +0800 Subject: [PATCH 55/55] * Fix bug #15665 --- module/api/view/index.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/api/view/index.html.php b/module/api/view/index.html.php index eb62823e06..ba0656c6c2 100644 --- a/module/api/view/index.html.php +++ b/module/api/view/index.html.php @@ -32,7 +32,7 @@ echo html::a('javascript:;', "", '', "data-toggle='dropdown' class='btn btn-link'"); echo "
pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> ' title='name?>'> team)) echo '' . $this->lang->task->multipleAB . ' ';?> - parent > 0) echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent", '', '', $task->project), $task->parentName) . ' / ';?> + parent > 0) echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent" , '' , '', $task->project) , $task->parentName,'',"title='{$task->parentName}'") . ' / ' ;?> createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->name, null, "style='color: $task->color' data-group='execution'");?> children)) echo '';?> pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> ' title='name?>'> team)) echo '' . $this->lang->task->multipleAB . ' ';?> - parent > 0) echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent" , '' , '', $task->project) , $task->parentName,'',"title='{$task->parentName}'") . ' / ' ;?> + parent > 0) echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent" , '' , '', $task->project) , $task->parentName, '', "title={$task->parentName}") . ' / ' ;?> createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->name, null, "style='color: $task->color' data-group='execution'");?> children)) echo '';?> pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> ' title='name?>'> team)) echo '' . $this->lang->task->multipleAB . ' ';?> - parent > 0) echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent" , '' , '', $task->project) , $task->parentName, '', "title={$task->parentName}") . ' / ' ;?> + parent > 0) echo '' . $this->lang->task->childrenAB . ' ' . html::a($this->createLink('task', 'view', "taskID=$task->parent", '', '', $task->project), $task->parentName, '', "title={$task->parentName}") . ' / ';?> createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->name, null, "style='color: $task->color' data-group='execution'");?> children)) echo '';?>