diff --git a/VERSION b/VERSION index 9dc4015447..da1c69f02e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -18.1 \ No newline at end of file +18.2 \ No newline at end of file diff --git a/api/v1/entries/executions.php b/api/v1/entries/executions.php index 03aac1de48..3fd6949a6b 100644 --- a/api/v1/entries/executions.php +++ b/api/v1/entries/executions.php @@ -80,7 +80,7 @@ class executionsEntry extends entry */ public function post($projectID = 0) { - $fields = 'project,code,name,begin,end,lifetime,desc,days'; + $fields = 'project,code,name,begin,end,lifetime,desc,days,percent,parent'; $this->batchSetPost($fields); $projectID = $this->param('project', $projectID); diff --git a/api/v1/entries/hostheartbeat.php b/api/v1/entries/hostheartbeat.php index 48feb62d14..1d54b4c9c2 100644 --- a/api/v1/entries/hostheartbeat.php +++ b/api/v1/entries/hostheartbeat.php @@ -84,6 +84,19 @@ class hostHeartbeatEntry extends baseEntry if($heartbeat > 0) $vmData['heartbeat'] = date("Y-m-d H:i:s", $heartbeat); $this->dao->update(TABLE_ZAHOST)->data($vmData)->where('mac')->eq($vm->macAddress)->exec(); + + if($vm->status == 'running') + { + $node = $this->loadModel('zanode')->getNodeByMac($vm->macAddress); + if(!empty($node)) + { + $snaps = $this->loadModel('zanode')->getSnapshotList($node->id); + if(empty($snaps)) + { + if($vm->status == 'running') $this->loadModel('zanode')->createDefaultSnapshot($node->id); + } + } + } } } diff --git a/api/v1/entries/hostsubmit.php b/api/v1/entries/hostsubmit.php index 0dd5a83f05..9aea53faf2 100644 --- a/api/v1/entries/hostsubmit.php +++ b/api/v1/entries/hostsubmit.php @@ -40,13 +40,21 @@ class hostSubmitEntry extends baseEntry if(!$id) return $this->sendError(400, 'Secret error.'); - $imageInfo = $this->dao->select('`status`,`from`')->from(TABLE_IMAGE) + $imageInfo = $this->dao->select('`status`,`from`', 'name')->from(TABLE_IMAGE) ->where('id')->eq($task) ->fetch(); if(empty($imageInfo)) return $this->sendSuccess(200, 'success'); if($imageInfo->from == 'snapshot' && $imageInfo->status == 'restoring') { - $image->status = $image->status == 'completed' ? 'restore_completed' : 'restore_failed'; + if(in_array($image->status, array('failed', 'completed'))) $image->status = $image->status == 'completed' ? 'restore_completed' : 'restore_failed'; + } + else if($imageInfo->from == 'snapshot' && $imageInfo->status == 'creating') + { + if($image->status == 'failed') + { + $this->dao->delete()->from(TABLE_IMAGE)->where("id")->eq($task)->exec(); + return $this->sendSuccess(200, 'success'); + } } $this->dao->update(TABLE_IMAGE)->data($image)->where("id")->eq($task)->exec(); diff --git a/api/v1/entries/storychange.php b/api/v1/entries/storychange.php index c5e1a52835..a4a87ba5d3 100644 --- a/api/v1/entries/storychange.php +++ b/api/v1/entries/storychange.php @@ -28,7 +28,7 @@ class storyChangeEntry extends entry $this->batchSetPost($fields, $oldStory); /* If reviewer is not post, set needNotReview. */ - if(empty($this->request('reviewer'))) + if(!$this->request('reviewer')) { $this->setPost('reviewer', array()); $this->setPost('needNotReview', 1); diff --git a/config/config.php b/config/config.php index 818e72dde7..7cf341e405 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '18.1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '18.2'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->liteVersion = '1.2'; // 迅捷版版本。 The version of Lite. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. diff --git a/config/zentaopms.php b/config/zentaopms.php index 28d0609725..e03a6e2cde 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -227,7 +227,7 @@ $config->openMethods[] = 'doc.createbasicinfo'; $config->openMethods[] = 'project.createguide'; $config->openMethods[] = 'task.editteam'; $config->openMethods[] = 'feedback.mergeproductmodule'; -$config->openMethods[] = 'zanode.nodeList'; +$config->openMethods[] = 'zanode.nodelist'; $config->openMethods[] = 'action.restoreStages'; $config->openModules = array(); @@ -407,6 +407,7 @@ $config->objectTables['apistruct'] = TABLE_APISTRUCT; $config->objectTables['repo'] = TABLE_REPO; $config->objectTables['dataview'] = TABLE_DATAVIEW; $config->objectTables['zahost'] = TABLE_ZAHOST; +$config->objectTables['zanode'] = TABLE_ZAHOST; $config->objectTables['automation'] = TABLE_AUTOMATION; $config->objectTables['stepResult'] = TABLE_TESTRUN; @@ -418,9 +419,11 @@ $config->pipelineTypeList = array('gitlab', 'gogs', 'gitea', 'jenkins', 'sonarqu /* Program privs.*/ $config->programPriv = new stdclass(); -$config->programPriv->noSprint = array('task', 'story', 'tree', 'project', 'execution', 'build', 'bug', 'testcase', 'testreport', 'doc', 'repo', 'stakeholder', 'projectrelease', 'requirement'); -$config->programPriv->scrum = array('story', 'requirement', 'productplan', 'tree', 'projectplan', 'projectstory', 'projectrelease', 'project', 'execution', 'build', 'bug', 'testcase', 'testreport', 'doc', 'repo', 'meeting', 'stakeholder', 'testtask'); -$config->programPriv->waterfall = array_merge($config->programPriv->scrum, array('workestimation', 'durationestimation', 'budget', 'programplan', 'review', 'reviewissue', 'weekly', 'cm', 'milestone', 'design', 'issue', 'risk', 'opportunity', 'measrecord', 'auditplan', 'trainplan', 'gapanalysis', 'pssp', 'researchplan', 'researchreport')); +$config->programPriv->noSprint = array('task', 'story', 'tree', 'project', 'execution', 'build', 'bug', 'testcase', 'testreport', 'doc', 'repo', 'stakeholder', 'projectrelease', 'requirement'); +$config->programPriv->scrum = array('story', 'requirement', 'productplan', 'tree', 'projectplan', 'projectstory', 'projectrelease', 'project', 'execution', 'build', 'bug', 'testcase', 'testreport', 'doc', 'repo', 'meeting', 'stakeholder', 'testtask'); +$config->programPriv->waterfall = array_merge($config->programPriv->scrum, array('workestimation', 'durationestimation', 'budget', 'programplan', 'review', 'reviewissue', 'weekly', 'cm', 'milestone', 'design', 'issue', 'risk', 'opportunity', 'measrecord', 'auditplan', 'trainplan', 'gapanalysis', 'pssp', 'researchplan', 'researchreport')); +$config->programPriv->agileplus = $config->programPriv->scrum; +$config->programPriv->waterfallplus = $config->programPriv->waterfall; $config->waterfallModules = array('workestimation', 'durationestimation', 'budget', 'programplan', 'review', 'reviewissue', 'weekly', 'cm', 'milestone', 'design', 'opportunity', 'auditplan', 'trainplan', 'gapanalysis', 'pssp', 'researchplan', 'researchreport'); @@ -430,9 +433,11 @@ $config->maxPriValue = '256'; $config->importWhiteList = array('user', 'task', 'story', 'bug', 'testcase', 'feedback', 'ticket'); $config->featureGroup = new stdclass(); -$config->featureGroup->my = array('score'); -$config->featureGroup->product = array('roadmap', 'track', 'UR'); -$config->featureGroup->scrum = array(); -$config->featureGroup->waterfall = array(); -$config->featureGroup->assetlib = array(); -$config->featureGroup->other = array('devops', 'kanban'); +$config->featureGroup->my = array('score'); +$config->featureGroup->product = array('roadmap', 'track', 'UR'); +$config->featureGroup->scrum = array(); +$config->featureGroup->waterfall = array(); +$config->featureGroup->agileplus = array(); +$config->featureGroup->waterfallplus = array(); +$config->featureGroup->assetlib = array(); +$config->featureGroup->other = array('devops', 'kanban'); diff --git a/db/standard/zentao18.2.sql b/db/standard/zentao18.2.sql new file mode 100644 index 0000000000..20609e75eb --- /dev/null +++ b/db/standard/zentao18.2.sql @@ -0,0 +1,3648 @@ +CREATE TABLE `zt_account` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `provider` varchar(255) NOT NULL, + `adminURI` varchar(255) NOT NULL, + `account` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `mobile` varchar(255) NOT NULL, + `extra` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `status` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `name` (`name`), + KEY `provider` (`provider`), + KEY `status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_acl` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL DEFAULT '0', + `type` char(40) NOT NULL DEFAULT 'whitelist', + `source` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_action` ( + `id` int(9) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` text NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `actor` varchar(100) NOT NULL DEFAULT '', + `action` varchar(80) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text, + `read` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `efforted` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `action` (`action`), + KEY `objectID` (`objectID`) +) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_activity` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `process` mediumint(9) NOT NULL, + `name` varchar(255) NOT NULL, + `optional` varchar(255) NOT NULL, + `tailorNorm` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `order` mediumint(8) DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_api` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `product` varchar(255) NOT NULL DEFAULT '', + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `module` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(100) NOT NULL DEFAULT '', + `path` varchar(255) NOT NULL DEFAULT '', + `protocol` varchar(10) NOT NULL DEFAULT '', + `method` varchar(10) NOT NULL DEFAULT '', + `requestType` varchar(100) NOT NULL DEFAULT '', + `responseType` varchar(100) NOT NULL DEFAULT '', + `status` varchar(20) NOT NULL DEFAULT '', + `owner` varchar(30) NOT NULL DEFAULT '0', + `desc` mediumtext, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `params` text, + `paramsExample` text, + `responseExample` text, + `response` text, + `commonParams` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '0', + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_api_lib_release` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `desc` varchar(255) NOT NULL DEFAULT '', + `version` varchar(255) NOT NULL DEFAULT '', + `snap` mediumtext NOT NULL, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apispec` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `doc` int(10) unsigned NOT NULL DEFAULT '0', + `module` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(100) NOT NULL DEFAULT '', + `path` varchar(255) NOT NULL DEFAULT '', + `protocol` varchar(10) NOT NULL DEFAULT '', + `method` varchar(10) NOT NULL DEFAULT '', + `requestType` varchar(100) NOT NULL DEFAULT '', + `responseType` varchar(100) NOT NULL DEFAULT '', + `status` varchar(20) NOT NULL DEFAULT '', + `owner` varchar(255) NOT NULL DEFAULT '0', + `desc` mediumtext, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `params` text, + `paramsExample` text, + `responseExample` text, + `response` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=176 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apistruct` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(30) NOT NULL DEFAULT '', + `type` varchar(50) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `attribute` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '0', + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apistruct_spec` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `type` varchar(50) NOT NULL DEFAULT '', + `desc` varchar(255) NOT NULL DEFAULT '', + `attribute` text, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approval` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `flow` mediumint(8) NOT NULL, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `nodes` mediumtext NOT NULL, + `version` mediumint(9) NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'doing', + `result` varchar(20) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflow` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `code` varchar(100) NOT NULL, + `desc` mediumtext NOT NULL, + `version` mediumint(8) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `type` varchar(30) NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflowobject` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `root` int(8) NOT NULL, + `flow` int(8) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `extra` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflowspec` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `flow` mediumint(8) NOT NULL, + `version` mediumint(8) NOT NULL, + `nodes` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalnode` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `approval` mediumint(8) NOT NULL, + `type` enum('review','cc') NOT NULL, + `title` varchar(255) NOT NULL, + `account` char(30) NOT NULL, + `node` varchar(100) NOT NULL, + `reviewType` varchar(100) NOT NULL DEFAULT 'manual', + `multipleType` enum('and','or') NOT NULL DEFAULT 'and', + `prev` mediumtext NOT NULL, + `next` mediumtext NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'wait', + `result` varchar(10) NOT NULL, + `date` date NOT NULL, + `opinion` mediumtext NOT NULL, + `extra` mediumtext NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_reviewed_date` (`reviewedDate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalobject` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `approval` int(8) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(8) NOT NULL, + `extra` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalrole` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `code` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `users` longtext NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_assetlib` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_attend` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `signIn` time NOT NULL, + `signOut` time NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `ip` varchar(15) NOT NULL, + `device` varchar(30) NOT NULL, + `client` varchar(20) NOT NULL, + `manualIn` time NOT NULL, + `manualOut` time NOT NULL, + `reason` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `reviewStatus` varchar(30) NOT NULL DEFAULT '', + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `attend` (`date`,`account`), + KEY `account` (`account`), + KEY `date` (`date`), + KEY `status` (`status`), + KEY `reason` (`reason`), + KEY `reviewStatus` (`reviewStatus`), + KEY `reviewedBy` (`reviewedBy`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_attendstat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `month` char(10) NOT NULL DEFAULT '', + `normal` decimal(12,2) NOT NULL DEFAULT '0.00', + `late` decimal(12,2) NOT NULL DEFAULT '0.00', + `early` decimal(12,2) NOT NULL DEFAULT '0.00', + `absent` decimal(12,2) NOT NULL DEFAULT '0.00', + `trip` decimal(12,2) NOT NULL DEFAULT '0.00', + `egress` decimal(12,2) NOT NULL DEFAULT '0.00', + `lieu` decimal(12,2) NOT NULL DEFAULT '0.00', + `paidLeave` decimal(12,2) NOT NULL DEFAULT '0.00', + `unpaidLeave` decimal(12,2) NOT NULL DEFAULT '0.00', + `timeOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `restOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `holidayOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `deserve` decimal(12,2) NOT NULL DEFAULT '0.00', + `actual` decimal(12,2) NOT NULL DEFAULT '0.00', + `status` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `attend` (`month`,`account`), + KEY `account` (`account`), + KEY `month` (`month`), + KEY `status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL DEFAULT 'waterfall', + `practiceArea` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(255) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` int(10) DEFAULT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dateType` char(30) DEFAULT NULL, + `config` text, + `objectID` mediumint(9) NOT NULL, + `objectType` char(30) NOT NULL, + `process` mediumint(9) NOT NULL, + `processType` char(30) NOT NULL, + `checkDate` date NOT NULL, + `checkedBy` varchar(30) NOT NULL, + `realCheckDate` date NOT NULL, + `result` char(30) NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `checkBy` varchar(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `auditplan` mediumint(8) NOT NULL, + `listID` mediumint(8) NOT NULL, + `result` char(30) NOT NULL, + `checkedBy` varchar(30) NOT NULL, + `checkedDate` date NOT NULL, + `comment` text NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_automation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `node` int(11) unsigned NOT NULL DEFAULT '0', + `product` int(11) unsigned NOT NULL DEFAULT '0', + `scriptPath` varchar(255) NOT NULL DEFAULT '', + `shell` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_basicmeas` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `purpose` varchar(50) NOT NULL, + `scope` char(30) NOT NULL, + `object` char(30) NOT NULL, + `name` varchar(90) NOT NULL, + `code` char(30) NOT NULL, + `unit` varchar(10) NOT NULL, + `configure` text, + `params` text, + `definition` text, + `source` varchar(255) DEFAULT NULL, + `collectType` varchar(30) NOT NULL, + `collectConf` text NOT NULL, + `execTime` varchar(30) NOT NULL, + `collectedBy` varchar(10) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `order` mediumint(8) unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `module` varchar(20) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(30) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account_vision_module_type_order` (`account`,`vision`,`module`,`type`,`order`), + KEY `account` (`account`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `default` enum('0','1') NOT NULL DEFAULT '0', + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `desc` varchar(255) NOT NULL, + `createdDate` date NOT NULL, + `closedDate` date NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_budget` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `stage` char(30) NOT NULL, + `subject` mediumint(8) NOT NULL, + `amount` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `injection` mediumint(8) unsigned NOT NULL, + `identify` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(255) NOT NULL DEFAULT '', + `browser` varchar(255) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` mediumtext NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `feedbackBy` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `feedback` mediumint(8) unsigned NOT NULL DEFAULT '0', + `result` mediumint(8) unsigned NOT NULL, + `repo` mediumint(8) unsigned NOT NULL, + `mr` mediumint(8) unsigned NOT NULL, + `entry` text NOT NULL, + `lines` varchar(10) NOT NULL, + `v1` varchar(40) NOT NULL, + `v2` varchar(40) NOT NULL, + `repoType` varchar(30) NOT NULL DEFAULT '', + `issueKey` varchar(50) NOT NULL DEFAULT '', + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `toStory` (`toStory`), + KEY `result` (`result`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` varchar(255) NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `builds` varchar(255) NOT NULL, + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `execution` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + `storyPoint` float NOT NULL, + PRIMARY KEY (`execution`,`date`,`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `auto` varchar(10) NOT NULL DEFAULT 'no', + `frame` varchar(10) NOT NULL, + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `script` longtext NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `fromCaseVersion` mediumint(8) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `fromBug` (`fromBug`), + KEY `module` (`module`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cfd` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `execution` int(8) NOT NULL, + `type` char(30) NOT NULL, + `name` char(30) NOT NULL, + `count` smallint(6) NOT NULL, + `date` date NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `execution_type_name_date` (`execution`,`type`,`name`,`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_chart` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `dimension` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` varchar(30) NOT NULL, + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `dataset` varchar(30) NOT NULL, + `desc` text NOT NULL, + `settings` mediumtext NOT NULL, + `filters` mediumtext NOT NULL, + `fields` mediumtext, + `sql` mediumtext, + `builtin` tinyint(1) unsigned NOT NULL, + `objects` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cmcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `projectType` varchar(255) NOT NULL DEFAULT '', + `title` int(11) NOT NULL, + `contents` text NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `order` int(11) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_compile` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `job` mediumint(8) unsigned NOT NULL, + `queue` mediumint(8) NOT NULL, + `status` varchar(255) NOT NULL, + `logs` text, + `atTime` varchar(10) NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `tag` varchar(255) NOT NULL, + `times` tinyint(3) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `updateDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` longtext NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`vision`,`owner`,`module`,`section`,`key`) +) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dashboard` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `dimension` int(8) NOT NULL DEFAULT '0', + `module` mediumint(9) NOT NULL, + `desc` mediumtext NOT NULL, + `layout` mediumtext NOT NULL, + `filters` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dataset` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(155) NOT NULL, + `sql` text NOT NULL, + `fields` mediumtext NOT NULL, + `objects` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dataview` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `group` mediumint(8) unsigned NOT NULL, + `name` varchar(155) NOT NULL, + `code` varchar(50) NOT NULL, + `view` varchar(57) NOT NULL, + `sql` text NOT NULL, + `fields` mediumtext NOT NULL, + `objects` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deploy` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `notify` text NOT NULL, + `cases` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `result` varchar(20) NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deployproduct` ( + `deploy` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `release` mediumint(8) unsigned NOT NULL, + `package` varchar(255) NOT NULL, + UNIQUE KEY `deploy_product_release` (`deploy`,`product`,`release`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deployscope` ( + `deploy` mediumint(8) unsigned NOT NULL, + `service` mediumint(8) unsigned NOT NULL, + `hosts` text NOT NULL, + `remove` text NOT NULL, + `add` text NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deploystep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `deploy` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `stage` varchar(30) NOT NULL, + `content` text NOT NULL, + `status` varchar(30) NOT NULL, + `assignedTo` char(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `finishedBy` char(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(4) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_design` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` varchar(255) NOT NULL, + `product` varchar(255) NOT NULL, + `commit` text NOT NULL, + `commitedBy` varchar(30) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `story` char(30) NOT NULL, + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `type` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_designspec` ( + `design` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `files` varchar(255) NOT NULL, + UNIQUE KEY `design` (`design`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dimension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `code` (`code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `template` varchar(30) NOT NULL, + `templateType` varchar(30) NOT NULL, + `chapterType` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `parent` smallint(5) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `views` smallint(5) unsigned NOT NULL, + `assetLib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `assetLibType` varchar(30) NOT NULL DEFAULT '', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromVersion` smallint(6) NOT NULL DEFAULT '1', + `draft` longtext NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `mailto` text, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`), + KEY `lib` (`lib`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` longtext NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `baseUrl` varchar(255) NOT NULL DEFAULT '', + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `desc` mediumtext NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_domain` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `domain` varchar(255) NOT NULL, + `adminURI` varchar(255) NOT NULL, + `resolverURI` varchar(255) NOT NULL, + `register` varchar(255) NOT NULL, + `expiredDate` datetime NOT NULL, + `renew` varchar(255) NOT NULL, + `account` varchar(255) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `domain` (`domain`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_durationestimation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `stage` mediumint(9) NOT NULL, + `workload` varchar(255) NOT NULL, + `worktimeRate` varchar(255) NOT NULL, + `people` varchar(255) NOT NULL, + `startDate` date NOT NULL, + `endDate` date NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `product` text NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `work` text, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `date` date NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `extra` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `execution` (`execution`), + KEY `objectID` (`objectID`), + KEY `date` (`date`), + KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `freePasswd` enum('0','1') NOT NULL DEFAULT '0', + `ip` varchar(100) NOT NULL, + `desc` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `calledTime` int(10) unsigned NOT NULL DEFAULT '0', + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_expect` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `userID` mediumint(8) NOT NULL, + `project` mediumint(8) NOT NULL DEFAULT '0', + `expect` text NOT NULL, + `progress` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` mediumtext NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_faq` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `module` mediumint(9) NOT NULL, + `product` mediumint(9) NOT NULL, + `question` varchar(255) NOT NULL, + `answer` text NOT NULL, + `addedtime` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_feedback` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `module` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `solution` char(30) NOT NULL, + `desc` text NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '2', + `status` varchar(30) NOT NULL, + `subStatus` varchar(30) NOT NULL DEFAULT '', + `public` enum('0','1') NOT NULL DEFAULT '0', + `notify` enum('0','1') NOT NULL DEFAULT '0', + `notifyEmail` varchar(100) NOT NULL, + `source` varchar(255) NOT NULL, + `likes` text NOT NULL, + `result` mediumint(8) unsigned NOT NULL, + `faq` mediumint(8) unsigned NOT NULL, + `openedBy` char(30) NOT NULL, + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` datetime NOT NULL, + `processedBy` char(30) NOT NULL, + `processedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(255) NOT NULL, + `assignedDate` datetime NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `feedbackBy` varchar(100) NOT NULL, + `repeatFeedback` mediumint(8) NOT NULL DEFAULT '0', + `mailto` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_feedbackview` ( + `account` char(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + UNIQUE KEY `account_product` (`account`,`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` varchar(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_gapanalysis` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `role` varchar(20) NOT NULL, + `analysis` mediumtext NOT NULL, + `needTrain` enum('no','yes') NOT NULL DEFAULT 'no', + `createdBy` char(30) DEFAULT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `project_account` (`project`,`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + `developer` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` int(9) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_holiday` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL DEFAULT '', + `type` enum('holiday','working') NOT NULL DEFAULT 'holiday', + `desc` mediumtext NOT NULL, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_host` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `type` varchar(30) NOT NULL DEFAULT 'normal', + `hostType` varchar(30) NOT NULL DEFAULT '', + `mac` varchar(128) NOT NULL, + `memory` varchar(30) NOT NULL, + `diskSize` varchar(30) NOT NULL, + `status` varchar(50) NOT NULL, + `secret` varchar(50) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `tokenSN` varchar(50) NOT NULL DEFAULT '', + `tokenTime` datetime NOT NULL, + `oldTokenSN` varchar(50) NOT NULL DEFAULT '', + `vsoft` varchar(30) NOT NULL DEFAULT '', + `heartbeat` datetime NOT NULL, + `zap` varchar(10) NOT NULL, + `provider` varchar(255) NOT NULL DEFAULT '', + `vnc` int(11) NOT NULL, + `ztf` int(11) NOT NULL, + `zd` int(11) NOT NULL, + `ssh` int(11) NOT NULL, + `parent` int(11) unsigned NOT NULL DEFAULT '0', + `image` int(11) unsigned NOT NULL DEFAULT '0', + `admin` smallint(5) unsigned NOT NULL DEFAULT '0', + `serverRoom` mediumint(8) unsigned NOT NULL, + `serverModel` varchar(256) NOT NULL, + `hardwareType` varchar(64) NOT NULL, + `cpuBrand` varchar(128) NOT NULL, + `cpuModel` varchar(128) NOT NULL, + `cpuNumber` varchar(16) NOT NULL, + `cpuCores` varchar(30) NOT NULL, + `intranet` varchar(128) NOT NULL, + `extranet` varchar(128) NOT NULL, + `osName` varchar(64) NOT NULL, + `osVersion` varchar(64) NOT NULL, + `group` varchar(128) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `name` varchar(60) NOT NULL DEFAULT '', + `type` varchar(20) NOT NULL DEFAULT 'group', + `admins` varchar(255) NOT NULL DEFAULT '', + `committers` varchar(255) NOT NULL DEFAULT '', + `subject` mediumint(8) unsigned NOT NULL DEFAULT '0', + `public` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL DEFAULT '', + `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ownedBy` varchar(30) NOT NULL DEFAULT '', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `mergedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastMessage` int(11) unsigned NOT NULL DEFAULT '0', + `lastMessageIndex` int(11) unsigned NOT NULL DEFAULT '0', + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `pinnedMessages` text NOT NULL, + `mergedChats` text NOT NULL, + `adminInvite` enum('0','1') NOT NULL DEFAULT '0', + `avatar` text NOT NULL, + `archiveDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat_message_index` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL, + `tableName` char(64) NOT NULL, + `start` int(11) unsigned NOT NULL, + `end` int(11) unsigned NOT NULL, + `startIndex` int(11) unsigned NOT NULL, + `endIndex` int(11) unsigned NOT NULL, + `startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `count` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `chattable` (`gid`,`tableName`), + KEY `start` (`start`), + KEY `end` (`end`), + KEY `startDate` (`startDate`), + KEY `endDate` (`endDate`), + KEY `chatstartindex` (`gid`,`startIndex`), + KEY `chatendindex` (`gid`,`endIndex`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chatuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `cgid` char(40) NOT NULL DEFAULT '', + `user` mediumint(8) NOT NULL DEFAULT '0', + `order` smallint(5) NOT NULL DEFAULT '0', + `star` enum('0','1') NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + `mute` enum('0','1') NOT NULL DEFAULT '0', + `freeze` enum('0','1') NOT NULL DEFAULT '0', + `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `category` varchar(40) NOT NULL DEFAULT '', + `lastReadMessage` int(11) unsigned NOT NULL DEFAULT '0', + `lastReadMessageIndex` int(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_client` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `version` char(30) NOT NULL DEFAULT '', + `desc` varchar(100) NOT NULL DEFAULT '', + `changeLog` text NOT NULL, + `strategy` varchar(10) NOT NULL DEFAULT '', + `downloads` text NOT NULL, + `createdDate` datetime NOT NULL, + `createdBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '', + `status` enum('released','wait') NOT NULL DEFAULT 'wait', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_conference` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `rid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `status` enum('closed','open') NOT NULL DEFAULT 'closed', + `participants` text NOT NULL, + `invitee` text NOT NULL, + `openedBy` mediumint(8) NOT NULL DEFAULT '0', + `openedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_conferenceaction` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `rid` char(40) NOT NULL DEFAULT '', + `type` enum('create','invite','join','leave','close','publish') NOT NULL DEFAULT 'create', + `data` text NOT NULL, + `user` mediumint(8) NOT NULL DEFAULT '0', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `device` char(40) NOT NULL DEFAULT 'default', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `index` int(11) unsigned NOT NULL DEFAULT '0', + `type` enum('normal','broadcast','notify','bulletin','botcommand') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message_backup` ( + `id` int(11) unsigned NOT NULL, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `index` int(11) unsigned NOT NULL DEFAULT '0', + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message_index` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `tableName` char(64) NOT NULL, + `start` int(11) unsigned NOT NULL, + `end` int(11) unsigned NOT NULL, + `startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `chats` text NOT NULL, + PRIMARY KEY (`id`), + KEY `tableName` (`tableName`), + KEY `start` (`start`), + KEY `end` (`end`), + KEY `startDate` (`startDate`), + KEY `endDate` (`endDate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `message` int(11) unsigned NOT NULL, + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`message`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_queue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `content` text NOT NULL, + `addDate` datetime NOT NULL, + `processDate` datetime NOT NULL, + `result` text NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_userdevice` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` mediumint(8) NOT NULL DEFAULT '0', + `device` char(40) NOT NULL DEFAULT 'default', + `deviceID` char(40) NOT NULL DEFAULT '', + `token` char(64) NOT NULL DEFAULT '', + `validUntil` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastLogin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastLogout` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + UNIQUE KEY `userdevice` (`user`,`device`), + KEY `user` (`user`), + KEY `lastLogin` (`lastLogin`), + KEY `lastLogout` (`lastLogout`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_image` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `host` int(11) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) NOT NULL DEFAULT '', + `localName` varchar(64) NOT NULL, + `address` varchar(64) NOT NULL DEFAULT '', + `path` varchar(64) NOT NULL DEFAULT '', + `status` varchar(20) NOT NULL DEFAULT '', + `osName` varchar(32) NOT NULL DEFAULT '', + `from` varchar(10) NOT NULL DEFAULT 'zentao', + `memory` float unsigned NOT NULL, + `disk` float unsigned NOT NULL, + `fileSize` float unsigned NOT NULL, + `md5` varchar(64) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `restoreDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_intervention` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `activity` mediumint(8) NOT NULL, + `status` char(30) NOT NULL, + `partake` text NOT NULL, + `begin` date NOT NULL, + `realBegin` date NOT NULL, + `situation` varchar(255) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `project` (`project`,`activity`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_issue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `resolvedBy` varchar(30) NOT NULL, + `project` varchar(255) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `pri` char(30) NOT NULL, + `severity` char(30) NOT NULL, + `type` char(30) NOT NULL, + `activity` varchar(255) NOT NULL, + `deadline` date NOT NULL, + `resolution` char(30) NOT NULL, + `resolutionComment` text NOT NULL, + `objectID` varchar(255) NOT NULL, + `resolvedDate` date NOT NULL, + `status` varchar(30) NOT NULL, + `owner` varchar(255) NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `activateBy` varchar(30) NOT NULL, + `activateDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_job` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `repo` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `frame` varchar(20) NOT NULL, + `engine` varchar(20) NOT NULL, + `server` mediumint(8) unsigned NOT NULL, + `pipeline` varchar(500) NOT NULL, + `triggerType` varchar(255) NOT NULL, + `sonarqubeServer` mediumint(8) unsigned NOT NULL, + `projectKey` varchar(255) NOT NULL, + `svnDir` varchar(255) NOT NULL, + `atDay` varchar(255) DEFAULT NULL, + `atTime` varchar(10) DEFAULT NULL, + `customParam` text NOT NULL, + `comment` varchar(255) DEFAULT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `lastExec` datetime DEFAULT NULL, + `lastStatus` varchar(255) DEFAULT NULL, + `lastTag` varchar(255) DEFAULT NULL, + `lastSyncDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanban` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `space` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `owner` varchar(30) NOT NULL, + `team` text NOT NULL, + `desc` mediumtext NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `archived` enum('0','1') NOT NULL DEFAULT '1', + `performable` enum('0','1') NOT NULL DEFAULT '0', + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `order` mediumint(8) NOT NULL DEFAULT '0', + `displayCards` smallint(6) NOT NULL DEFAULT '0', + `showWIP` enum('0','1') NOT NULL DEFAULT '1', + `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', + `colWidth` smallint(4) NOT NULL DEFAULT '264', + `minColWidth` smallint(4) NOT NULL DEFAULT '200', + `maxColWidth` smallint(4) NOT NULL DEFAULT '384', + `object` varchar(255) NOT NULL, + `alignment` varchar(10) NOT NULL DEFAULT 'center', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `activatedBy` char(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancard` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) unsigned NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) unsigned NOT NULL, + `fromID` mediumint(8) unsigned NOT NULL, + `fromType` varchar(30) NOT NULL, + `name` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'doing', + `pri` mediumint(8) unsigned NOT NULL, + `assignedTo` text NOT NULL, + `desc` mediumtext NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `estimate` float unsigned NOT NULL, + `progress` float unsigned NOT NULL DEFAULT '0', + `color` char(7) NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', + `archived` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `archivedBy` char(30) NOT NULL, + `archivedDate` datetime NOT NULL, + `assignedBy` char(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancell` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) NOT NULL, + `lane` mediumint(8) NOT NULL, + `column` mediumint(8) NOT NULL, + `type` char(30) NOT NULL, + `cards` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `card_group` (`kanban`,`type`,`lane`,`column`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancolumn` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `color` char(30) NOT NULL, + `limit` smallint(6) NOT NULL DEFAULT '-1', + `order` mediumint(8) NOT NULL DEFAULT '0', + `archived` enum('0','1') NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbangroup` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) unsigned NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanlane` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `execution` mediumint(8) NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) unsigned NOT NULL, + `groupby` char(30) NOT NULL, + `extra` char(30) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `color` char(30) NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', + `lastEditedTime` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanregion` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `space` mediumint(8) unsigned NOT NULL, + `kanban` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanspace` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(50) NOT NULL, + `owner` varchar(30) NOT NULL, + `team` text NOT NULL, + `desc` mediumtext NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `order` mediumint(8) NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `activatedBy` char(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`,`vision`) +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_leave` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `backDate` datetime NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + `backReviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `type` (`type`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lieu` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `overtime` char(255) NOT NULL, + `trip` char(255) NOT NULL, + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_measqueue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `mid` mediumint(8) unsigned NOT NULL, + `status` varchar(255) NOT NULL, + `logs` text, + `execTime` varchar(10) NOT NULL, + `params` text, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `updateDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_measrecords` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `mid` mediumint(8) NOT NULL, + `measCode` char(50) NOT NULL DEFAULT '', + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `params` text NOT NULL, + `year` char(4) NOT NULL, + `month` char(6) NOT NULL, + `week` char(8) NOT NULL, + `day` char(8) NOT NULL, + `value` varchar(255) NOT NULL, + `date` date NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `time` (`year`,`month`,`day`,`week`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meastemplate` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meeting` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL, + `execution` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `begin` time NOT NULL, + `end` time NOT NULL, + `dept` mediumint(8) NOT NULL, + `mode` varchar(255) NOT NULL, + `host` varchar(30) NOT NULL, + `participant` text NOT NULL, + `date` date NOT NULL, + `room` int(11) NOT NULL, + `minutes` text NOT NULL, + `minutedBy` varchar(30) NOT NULL, + `minutedDate` datetime NOT NULL, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meetingroom` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `position` varchar(30) NOT NULL, + `seats` int(11) NOT NULL, + `equipment` varchar(255) NOT NULL, + `openTime` varchar(255) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_mr` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `hostID` mediumint(8) unsigned NOT NULL, + `sourceProject` varchar(50) NOT NULL, + `sourceBranch` varchar(100) NOT NULL, + `targetProject` varchar(50) NOT NULL, + `targetBranch` varchar(100) NOT NULL, + `mriid` int(10) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `description` text NOT NULL, + `assignee` varchar(255) NOT NULL, + `reviewer` varchar(255) NOT NULL, + `approver` varchar(255) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `status` char(30) NOT NULL, + `mergeStatus` char(30) NOT NULL, + `approvalStatus` char(30) NOT NULL, + `needApproved` enum('0','1') NOT NULL DEFAULT '0', + `needCI` enum('0','1') NOT NULL DEFAULT '0', + `repoID` mediumint(8) unsigned NOT NULL, + `jobID` mediumint(8) unsigned NOT NULL, + `compileID` mediumint(8) unsigned NOT NULL, + `compileStatus` char(30) NOT NULL, + `removeSourceBranch` enum('0','1') NOT NULL DEFAULT '0', + `synced` enum('0','1') NOT NULL DEFAULT '1', + `syncError` varchar(255) NOT NULL, + `hasNoConflict` enum('0','1') NOT NULL DEFAULT '0', + `diffs` longtext, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_mrapproval` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `mrID` mediumint(8) unsigned NOT NULL, + `account` varchar(255) NOT NULL, + `date` datetime NOT NULL, + `action` char(30) NOT NULL, + `comment` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_nc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `auditplan` mediumint(8) NOT NULL, + `listID` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `type` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `severity` char(30) NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolution` char(30) NOT NULL, + `resolvedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `parent` mediumint(8) unsigned NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` date NOT NULL, + `activateDate` date NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType_toList_status` (`objectType`,`toList`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_oauth` ( + `account` varchar(30) NOT NULL, + `openID` varchar(255) NOT NULL, + `providerType` varchar(30) NOT NULL, + `providerID` mediumint(8) unsigned NOT NULL, + KEY `account` (`account`), + KEY `providerType` (`providerType`), + KEY `providerID` (`providerID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_object` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) NOT NULL, + `from` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `category` char(30) NOT NULL, + `version` varchar(255) NOT NULL, + `type` enum('reviewed','taged') NOT NULL, + `range` text NOT NULL, + `data` text NOT NULL, + `storyEst` char(30) NOT NULL, + `taskEst` char(30) NOT NULL, + `requestEst` char(30) NOT NULL, + `testEst` char(30) NOT NULL, + `devEst` char(30) NOT NULL, + `designEst` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_opportunity` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `source` char(30) NOT NULL, + `type` char(30) NOT NULL, + `strategy` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `impact` mediumint(8) NOT NULL, + `chance` mediumint(8) NOT NULL, + `ratio` mediumint(8) NOT NULL, + `pri` char(30) NOT NULL, + `identifiedDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` date NOT NULL, + `approvedDate` date NOT NULL, + `prevention` mediumtext NOT NULL, + `plannedClosedDate` date NOT NULL, + `actualClosedDate` date NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `cancelReason` char(30) NOT NULL, + `hangupedBy` varchar(30) NOT NULL, + `hangupedDate` datetime NOT NULL, + `resolution` mediumtext NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolvedDate` datetime NOT NULL, + `lastCheckedBy` varchar(30) NOT NULL, + `lastCheckedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_overtime` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `leave` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `rejectReason` varchar(100) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `type` (`type`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_pipeline` ( + `id` smallint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `name` varchar(50) NOT NULL, + `url` varchar(255) DEFAULT NULL, + `account` varchar(30) DEFAULT NULL, + `password` varchar(255) NOT NULL, + `token` varchar(255) DEFAULT NULL, + `private` char(32) DEFAULT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_planstory` ( + `plan` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL, + `order` mediumint(9) NOT NULL, + UNIQUE KEY `plan_story` (`plan`,`story`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_process` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL DEFAULT 'waterfall', + `name` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `abbr` char(30) NOT NULL, + `desc` mediumtext NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `order` mediumint(9) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `program` mediumint(8) unsigned NOT NULL, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `shadow` tinyint(1) unsigned NOT NULL, + `bind` enum('0','1') NOT NULL DEFAULT '0', + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `feedback` varchar(30) NOT NULL, + `ticket` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `reviewer` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `acl` (`acl`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` varchar(255) NOT NULL DEFAULT '0', + `parent` mediumint(9) NOT NULL DEFAULT '0', + `title` varchar(90) NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `desc` mediumtext NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `closedReason` varchar(20) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programactivity` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `activity` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `content` text NOT NULL, + `reason` varchar(255) NOT NULL, + `result` char(30) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programoutput` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `activity` mediumint(8) NOT NULL, + `output` mediumint(8) NOT NULL, + `content` text NOT NULL, + `name` varchar(255) NOT NULL, + `reason` varchar(255) NOT NULL, + `result` char(30) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programprocess` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `abbr` char(30) NOT NULL, + `desc` text NOT NULL, + `reason` varchar(255) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programreport` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `template` mediumint(8) NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `params` text NOT NULL, + `content` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL DEFAULT '0', + `model` char(30) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'sprint', + `lifetime` char(30) NOT NULL DEFAULT '', + `budget` varchar(30) NOT NULL DEFAULT '0', + `budgetUnit` char(30) NOT NULL DEFAULT 'CNY', + `attribute` varchar(30) NOT NULL DEFAULT '', + `percent` float unsigned NOT NULL DEFAULT '0', + `milestone` enum('0','1') NOT NULL DEFAULT '0', + `output` text NOT NULL, + `auth` char(30) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` varchar(255) NOT NULL, + `grade` tinyint(3) unsigned NOT NULL, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT '1', + `begin` date NOT NULL, + `end` date NOT NULL, + `realBegan` date NOT NULL, + `realEnd` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `subStatus` varchar(30) NOT NULL DEFAULT '', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `parentVersion` smallint(6) NOT NULL, + `planDuration` int(11) NOT NULL, + `realDuration` int(11) NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `suspendedDate` date NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `division` enum('0','1') NOT NULL DEFAULT '1', + `displayCards` smallint(6) NOT NULL DEFAULT '0', + `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', + `multiple` enum('0','1') NOT NULL DEFAULT '1', + `colWidth` smallint(4) NOT NULL DEFAULT '264', + `minColWidth` smallint(4) NOT NULL DEFAULT '200', + `maxColWidth` smallint(4) NOT NULL DEFAULT '384', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `acl` (`acl`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectadmin` ( + `group` smallint(6) NOT NULL, + `account` char(30) NOT NULL, + `programs` text NOT NULL, + `projects` text NOT NULL, + `products` text NOT NULL, + `executions` text NOT NULL, + UNIQUE KEY `group_account` (`group`,`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectcase` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `count` mediumint(8) unsigned NOT NULL DEFAULT '1', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`case`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` varchar(255) NOT NULL, + PRIMARY KEY (`project`,`product`,`branch`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectspec` ( + `project` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `milestone` enum('0','1') NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + UNIQUE KEY `project` (`project`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`), + KEY `story` (`story`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_relation` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL, + `product` mediumint(8) NOT NULL, + `execution` mediumint(8) NOT NULL, + `AType` char(30) NOT NULL, + `AID` mediumint(8) NOT NULL, + `AVersion` char(30) NOT NULL, + `relation` char(30) NOT NULL, + `BType` char(30) NOT NULL, + `BID` mediumint(8) NOT NULL, + `BVersion` char(30) NOT NULL, + `extra` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `relation` (`product`,`relation`,`AType`,`BType`,`AID`,`BID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_relationoftasks` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `execution` mediumint(8) unsigned NOT NULL, + `pretask` mediumint(8) unsigned NOT NULL, + `condition` enum('begin','end') NOT NULL, + `task` mediumint(8) unsigned NOT NULL, + `action` enum('begin','end') NOT NULL, + PRIMARY KEY (`id`), + KEY `relationoftasks` (`execution`,`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` varchar(255) NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` varchar(255) NOT NULL, + `shadow` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` varchar(255) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` mediumtext NOT NULL, + `mailto` text, + `notify` varchar(255) DEFAULT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repo` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `product` varchar(255) NOT NULL, + `projects` varchar(255) NOT NULL, + `name` varchar(255) NOT NULL, + `path` varchar(255) NOT NULL, + `prefix` varchar(100) NOT NULL, + `encoding` varchar(20) NOT NULL, + `SCM` varchar(10) NOT NULL, + `client` varchar(100) NOT NULL, + `serviceHost` varchar(50) NOT NULL, + `serviceProject` varchar(100) NOT NULL, + `commits` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `password` varchar(30) NOT NULL, + `encrypt` varchar(30) NOT NULL DEFAULT 'plain', + `acl` text NOT NULL, + `synced` tinyint(1) NOT NULL DEFAULT '0', + `lastSync` datetime NOT NULL, + `desc` text NOT NULL, + `extra` char(30) NOT NULL, + `preMerge` enum('0','1') NOT NULL DEFAULT '0', + `job` mediumint(8) unsigned NOT NULL, + `fileServerUrl` text, + `fileServerAccount` varchar(40) NOT NULL DEFAULT '', + `fileServerPassword` varchar(100) NOT NULL DEFAULT '', + `deleted` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repobranch` ( + `repo` mediumint(8) unsigned NOT NULL, + `revision` mediumint(8) unsigned NOT NULL, + `branch` varchar(255) NOT NULL, + UNIQUE KEY `repo_revision_branch` (`repo`,`revision`,`branch`), + KEY `branch` (`branch`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repofiles` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repo` mediumint(8) unsigned NOT NULL, + `revision` mediumint(8) unsigned NOT NULL, + `path` varchar(255) NOT NULL, + `oldPath` varchar(255) DEFAULT '', + `parent` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `action` char(1) NOT NULL, + PRIMARY KEY (`id`), + KEY `path` (`path`), + KEY `parent` (`parent`), + KEY `repo` (`repo`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repohistory` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `repo` mediumint(9) NOT NULL, + `revision` varchar(40) NOT NULL, + `commit` mediumint(8) unsigned NOT NULL, + `comment` text NOT NULL, + `committer` varchar(100) NOT NULL, + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `repo` (`repo`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_report` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `code` varchar(100) NOT NULL, + `name` text NOT NULL, + `dimension` int(8) NOT NULL DEFAULT '0', + `module` varchar(100) NOT NULL, + `sql` text NOT NULL, + `vars` text NOT NULL, + `langs` text NOT NULL, + `params` text NOT NULL, + `step` tinyint(1) NOT NULL DEFAULT '2', + `desc` text NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_researchplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `customer` varchar(255) NOT NULL, + `stakeholder` varchar(255) NOT NULL, + `objective` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `location` varchar(255) NOT NULL, + `team` varchar(255) NOT NULL, + `method` enum('','videoConference','interview','questionnaire','telephoneInterview') NOT NULL, + `outline` mediumtext NOT NULL, + `schedule` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_researchreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `relatedPlan` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `author` varchar(30) NOT NULL, + `content` mediumtext NOT NULL, + `customer` varchar(255) NOT NULL, + `researchObjects` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `location` varchar(255) NOT NULL, + `method` enum('','videoConference','interview','questionnaire','telephoneInterview') NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_review` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `object` mediumint(8) NOT NULL, + `template` mediumint(8) NOT NULL, + `doc` mediumint(8) DEFAULT NULL, + `docVersion` smallint(6) NOT NULL, + `status` char(30) NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `auditedBy` varchar(255) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deadline` date NOT NULL, + `lastReviewedBy` varchar(255) DEFAULT NULL, + `lastReviewedDate` date NOT NULL, + `lastAuditedBy` varchar(255) NOT NULL, + `lastAuditedDate` date NOT NULL, + `lastEditedBy` varchar(255) NOT NULL, + `lastEditedDate` date NOT NULL, + `result` char(30) NOT NULL, + `auditResult` char(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `object` char(30) NOT NULL, + `category` char(30) NOT NULL, + `type` varchar(255) NOT NULL DEFAULT '', + `assignedTo` varchar(30) NOT NULL, + `order` mediumint(8) DEFAULT '0', + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewissue` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `review` mediumint(8) NOT NULL, + `approval` mediumint(8) NOT NULL, + `injection` mediumint(8) NOT NULL, + `identify` mediumint(8) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'review', + `listID` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `opinion` varchar(255) NOT NULL, + `opinionDate` date NOT NULL, + `status` char(30) NOT NULL, + `resolution` char(30) NOT NULL, + `resolutionBy` char(30) NOT NULL, + `resolutionDate` date NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewlist` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `object` char(30) NOT NULL, + `category` char(30) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewresult` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `review` mediumint(8) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'review', + `result` char(30) NOT NULL, + `opinion` text NOT NULL, + `reviewer` char(30) NOT NULL, + `remainIssue` char(30) NOT NULL, + `createdDate` date NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `reviewer` (`review`,`reviewer`,`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_risk` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` varchar(255) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `source` char(30) NOT NULL, + `category` char(30) NOT NULL, + `strategy` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `impact` char(30) NOT NULL, + `probability` char(30) NOT NULL, + `rate` char(30) NOT NULL, + `pri` char(30) NOT NULL, + `identifiedDate` date NOT NULL, + `prevention` mediumtext NOT NULL, + `remedy` mediumtext NOT NULL, + `plannedClosedDate` date NOT NULL, + `actualClosedDate` date NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `resolution` mediumtext NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `activateBy` varchar(30) NOT NULL, + `activateDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `cancelBy` varchar(30) NOT NULL, + `cancelDate` date NOT NULL, + `cancelReason` char(30) NOT NULL, + `hangupBy` varchar(30) NOT NULL, + `hangupDate` date NOT NULL, + `trackedBy` varchar(30) NOT NULL, + `trackedDate` date NOT NULL, + `assignedDate` date NOT NULL, + `approvedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_riskissue` ( + `risk` mediumint(8) unsigned NOT NULL, + `issue` mediumint(8) unsigned NOT NULL, + UNIQUE KEY `risk_issue` (`risk`,`issue`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_searchdict` ( + `key` smallint(5) unsigned NOT NULL, + `value` char(3) NOT NULL, + PRIMARY KEY (`key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_searchindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `objectType` char(20) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `title` text NOT NULL, + `content` text NOT NULL, + `addedDate` datetime NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `object` (`objectType`,`objectID`), + KEY `addedDate` (`addedDate`), + FULLTEXT KEY `content` (`content`), + FULLTEXT KEY `title` (`title`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_serverroom` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) NOT NULL, + `city` varchar(128) NOT NULL, + `line` varchar(20) NOT NULL, + `bandwidth` varchar(128) NOT NULL, + `provider` varchar(128) NOT NULL, + `owner` varchar(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_service` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `external` enum('0','1') NOT NULL DEFAULT '0', + `port` smallint(5) unsigned NOT NULL, + `entry` varchar(255) NOT NULL, + `deploy` varchar(255) NOT NULL, + `version` varchar(64) NOT NULL, + `color` char(7) NOT NULL, + `desc` mediumtext, + `dept` varchar(128) NOT NULL, + `devel` varchar(30) NOT NULL, + `qa` varchar(30) NOT NULL, + `ops` varchar(30) NOT NULL, + `hosts` text, + `softName` varchar(128) NOT NULL, + `softVersion` varchar(128) NOT NULL, + `type` varchar(20) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_solutions` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `contents` text NOT NULL COMMENT '问题描述', + `support` text NOT NULL COMMENT '是否需要高层支持', + `measures` text NOT NULL COMMENT '解决建议', + `type` char(30) NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` date NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_sqlview` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `sql` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_stage` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `percent` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `projectType` varchar(255) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_stakeholder` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `objectID` mediumint(8) NOT NULL, + `objectType` char(30) NOT NULL, + `user` char(30) NOT NULL, + `type` char(30) NOT NULL, + `key` enum('0','1') NOT NULL, + `from` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `objectID` (`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `parent` mediumint(9) NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `feedback` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'story', + `category` varchar(30) NOT NULL DEFAULT 'feature', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changing','active','draft','closed','reviewing') NOT NULL DEFAULT '', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `stagedBy` char(30) NOT NULL, + `mailto` text, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromStory` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromVersion` smallint(6) NOT NULL DEFAULT '1', + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `changedBy` varchar(30) NOT NULL, + `changedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `toBug` mediumint(8) unsigned NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `linkRequirements` varchar(255) NOT NULL, + `twins` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `storyChanged` enum('0','1') NOT NULL DEFAULT '0', + `feedbackBy` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `URChanged` enum('0','1') NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyestimate` ( + `story` mediumint(9) NOT NULL, + `round` smallint(6) NOT NULL, + `estimate` text NOT NULL, + `average` float NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + UNIQUE KEY `story` (`story`,`round`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyreview` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `reviewer` varchar(30) NOT NULL, + `result` varchar(30) NOT NULL, + `reviewDate` datetime NOT NULL, + UNIQUE KEY `story` (`story`,`version`,`reviewer`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` mediumtext NOT NULL, + `verify` mediumtext NOT NULL, + `files` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + `stagedBy` char(30) NOT NULL, + UNIQUE KEY `story_branch` (`story`,`branch`), + KEY `story` (`story`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `design` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `designVersion` smallint(6) unsigned NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromIssue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `feedback` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `mode` varchar(10) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `mailto` text, + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `planDuration` int(11) NOT NULL, + `realDuration` int(11) NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `activatedDate` datetime NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', + `repo` mediumint(8) unsigned NOT NULL, + `mr` mediumint(8) unsigned NOT NULL, + `entry` varchar(255) NOT NULL, + `lines` varchar(10) NOT NULL, + `v1` varchar(40) NOT NULL, + `v2` varchar(40) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + KEY `execution` (`execution`), + KEY `story` (`story`), + KEY `parent` (`parent`), + KEY `assignedTo` (`assignedTo`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskspec` ( + `task` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `estStarted` date NOT NULL, + `deadline` date NOT NULL, + UNIQUE KEY `task` (`task`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskteam` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL, + `account` char(30) NOT NULL, + `estimate` decimal(12,2) NOT NULL, + `consumed` decimal(12,2) NOT NULL, + `left` decimal(12,2) NOT NULL, + `transfer` char(30) NOT NULL, + `status` enum('wait','doing','done') NOT NULL DEFAULT 'wait', + `order` tinyint(3) NOT NULL, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task','execution') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `position` varchar(30) NOT NULL, + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(3,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `job` mediumint(8) unsigned NOT NULL, + `compile` mediumint(8) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `ZTFResult` text NOT NULL, + `node` int(8) unsigned NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + `duration` float NOT NULL, + `xml` text NOT NULL, + `deploy` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `type` varchar(20) NOT NULL, + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `name` char(90) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `type` varchar(255) NOT NULL DEFAULT '', + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `realFinishedDate` datetime NOT NULL, + `mailto` text, + `desc` mediumtext NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `testreport` mediumint(8) unsigned NOT NULL, + `auto` varchar(10) NOT NULL DEFAULT 'no', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_ticket` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `module` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `desc` text NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `feedback` mediumint(8) NOT NULL, + `assignedTo` varchar(255) NOT NULL, + `assignedDate` datetime NOT NULL, + `realStarted` datetime NOT NULL, + `startedBy` varchar(255) NOT NULL, + `startedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `status` varchar(30) NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `activatedCount` int(10) NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolvedDate` datetime NOT NULL, + `resolution` text NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `keywords` varchar(255) NOT NULL, + `repeatTicket` mediumint(8) NOT NULL DEFAULT '0', + `mailto` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_ticketrelation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint(8) unsigned NOT NULL, + `objectId` mediumint(9) NOT NULL, + `objectType` varchar(100) NOT NULL, + PRIMARY KEY (`id`), + KEY `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_ticketsource` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint(8) unsigned NOT NULL, + `customer` varchar(100) NOT NULL, + `contact` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `feedback` mediumint(8) unsigned NOT NULL, + `type` char(15) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` mediumtext NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincategory` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) NOT NULL, + `order` mediumint(8) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincontents` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `code` varchar(50) NOT NULL, + `course` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `order` mediumint(8) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincourse` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `code` varchar(50) NOT NULL, + `category` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `status` varchar(10) NOT NULL, + `teacher` varchar(30) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `createdBy` varchar(255) NOT NULL, + `createdDate` date NOT NULL, + `editedBy` varchar(255) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trainplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `place` varchar(255) NOT NULL, + `trainee` text NOT NULL, + `lecturer` varchar(20) NOT NULL, + `type` enum('inside','outside') NOT NULL DEFAULT 'inside', + `status` varchar(20) NOT NULL, + `summary` mediumtext NOT NULL, + `createdBy` char(30) DEFAULT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trainrecords` ( + `user` char(30) NOT NULL, + `objectId` mediumint(8) unsigned NOT NULL, + `objectType` varchar(10) NOT NULL, + `status` varchar(10) NOT NULL, + PRIMARY KEY (`user`,`objectId`,`objectType`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trip` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('trip','egress') NOT NULL DEFAULT 'trip', + `customers` varchar(20) NOT NULL, + `name` char(30) NOT NULL, + `desc` text NOT NULL, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `from` char(50) NOT NULL, + `to` char(50) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `company` mediumint(8) unsigned NOT NULL, + `type` char(30) NOT NULL DEFAULT 'inside', + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `pinyin` varchar(255) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` text NOT NULL, + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `weixin` varchar(90) NOT NULL DEFAULT '', + `dingding` varchar(90) NOT NULL DEFAULT '', + `slack` varchar(90) NOT NULL DEFAULT '', + `whatsapp` varchar(90) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `nature` text NOT NULL, + `analysis` text NOT NULL, + `strategy` text NOT NULL, + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `visions` varchar(20) NOT NULL DEFAULT 'rnd,lite', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `feedback` enum('0','1') NOT NULL DEFAULT '0', + `ranzhi` char(30) NOT NULL DEFAULT '', + `ldap` char(30) NOT NULL, + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `resetToken` varchar(50) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `clientStatus` enum('online','away','busy','offline','meeting') NOT NULL DEFAULT 'offline', + `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`), + KEY `deleted` (`deleted`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` text NOT NULL, + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + `common` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `programs` mediumtext NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + `sprints` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(15) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `secret` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `executions` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_weeklyreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `weekStart` date NOT NULL, + `pv` float(9,2) NOT NULL, + `ev` float(9,2) NOT NULL, + `ac` float(9,2) NOT NULL, + `sv` float(9,2) NOT NULL, + `cv` float(9,2) NOT NULL, + `staff` smallint(5) unsigned NOT NULL, + `progress` varchar(255) NOT NULL, + `workload` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `week` (`project`,`weekStart`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workestimation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `scale` decimal(10,2) unsigned NOT NULL, + `productivity` decimal(10,2) unsigned NOT NULL, + `duration` decimal(10,2) unsigned NOT NULL, + `unitLaborCost` decimal(10,2) unsigned NOT NULL, + `totalLaborCost` decimal(10,2) unsigned NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `dayHour` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflow` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` varchar(30) NOT NULL, + `child` varchar(30) NOT NULL, + `type` varchar(10) NOT NULL DEFAULT 'flow', + `navigator` varchar(10) NOT NULL, + `app` varchar(20) NOT NULL, + `position` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `table` varchar(50) NOT NULL, + `name` varchar(30) NOT NULL, + `titleField` varchar(30) NOT NULL, + `contentField` text NOT NULL, + `flowchart` text NOT NULL, + `js` text NOT NULL, + `css` text NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `administrator` text NOT NULL, + `desc` text NOT NULL, + `version` varchar(10) NOT NULL DEFAULT '1.0', + `status` varchar(10) NOT NULL DEFAULT 'wait', + `approval` enum('enabled','disabled') NOT NULL DEFAULT 'disabled', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`app`,`module`,`vision`), + KEY `type` (`type`), + KEY `app` (`app`), + KEY `module` (`module`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowaction` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `method` varchar(50) NOT NULL, + `name` varchar(50) NOT NULL, + `type` enum('single','batch') NOT NULL DEFAULT 'single', + `batchMode` enum('same','different') NOT NULL DEFAULT 'different', + `extensionType` varchar(10) NOT NULL DEFAULT 'override' COMMENT 'none | extend | override', + `open` varchar(20) NOT NULL, + `position` enum('menu','browseandview','browse','view') NOT NULL DEFAULT 'browseandview', + `layout` char(20) NOT NULL, + `show` enum('dropdownlist','direct') NOT NULL DEFAULT 'dropdownlist', + `order` smallint(5) unsigned NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `virtual` tinyint(1) unsigned NOT NULL, + `conditions` text NOT NULL, + `verifications` text NOT NULL, + `hooks` text NOT NULL, + `linkages` text NOT NULL, + `js` text NOT NULL, + `css` text NOT NULL, + `toList` char(255) NOT NULL, + `blocks` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'enable', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`action`,`vision`), + KEY `module` (`module`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=190 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowdatasource` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('system','sql','func','option','lang','category') NOT NULL DEFAULT 'option', + `name` varchar(30) NOT NULL, + `code` varchar(30) NOT NULL, + `datasource` text NOT NULL, + `view` varchar(20) NOT NULL, + `keyField` varchar(50) NOT NULL, + `valueField` varchar(50) NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `type` (`type`) +) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowfield` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'varchar', + `length` varchar(10) NOT NULL, + `name` varchar(50) NOT NULL, + `control` varchar(20) NOT NULL, + `expression` text NOT NULL, + `options` text NOT NULL, + `default` varchar(100) NOT NULL, + `rules` varchar(255) NOT NULL, + `placeholder` varchar(100) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `searchOrder` smallint(5) unsigned NOT NULL DEFAULT '0', + `exportOrder` smallint(5) unsigned NOT NULL DEFAULT '0', + `canExport` enum('0','1') NOT NULL DEFAULT '0', + `canSearch` enum('0','1') NOT NULL DEFAULT '0', + `isValue` enum('0','1') NOT NULL DEFAULT '0', + `readonly` enum('0','1') NOT NULL DEFAULT '0', + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`field`), + KEY `module` (`module`), + KEY `field` (`field`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=360 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlabel` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(30) NOT NULL DEFAULT 'browse', + `code` varchar(30) NOT NULL, + `label` varchar(255) NOT NULL, + `params` text NOT NULL, + `orderBy` text NOT NULL, + `order` tinyint(3) NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `module` (`module`) +) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlayout` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `field` varchar(50) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `width` smallint(5) NOT NULL, + `position` text NOT NULL, + `readonly` enum('0','1') NOT NULL DEFAULT '0', + `mobileShow` enum('0','1') NOT NULL DEFAULT '1', + `summary` varchar(20) NOT NULL, + `defaultValue` text NOT NULL, + `layoutRules` varchar(255) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`action`,`field`,`vision`), + KEY `module` (`module`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=138 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlinkdata` ( + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `linkedType` varchar(30) NOT NULL, + `linkedID` mediumint(8) unsigned NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + UNIQUE KEY `unique` (`objectType`,`objectID`,`linkedType`,`linkedID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrelation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `prev` varchar(30) NOT NULL, + `next` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `actions` varchar(20) NOT NULL, + `actionCodes` text NOT NULL, + `buildin` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrelationlayout` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `prev` varchar(30) NOT NULL, + `next` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `field` varchar(50) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`prev`,`next`,`action`,`field`), + KEY `prev` (`prev`), + KEY `next` (`next`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL COMMENT 'module name', + `name` varchar(100) NOT NULL COMMENT 'report name', + `type` enum('pie','line','bar') NOT NULL DEFAULT 'pie' COMMENT 'report type', + `countType` enum('sum','count') NOT NULL DEFAULT 'sum' COMMENT 'report count method', + `displayType` enum('value','percent') NOT NULL DEFAULT 'value' COMMENT 'report display method', + `dimension` varchar(130) NOT NULL COMMENT 'dimension field code of zt_workflowfield', + `fields` text NOT NULL COMMENT 'count fileds code of zt_workflowfield,use comma split', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrule` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('system','regex','func') NOT NULL DEFAULT 'regex', + `name` varchar(30) NOT NULL, + `rule` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `type` (`type`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowsql` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `action` varchar(50) NOT NULL, + `sql` text NOT NULL, + `vars` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `module` (`module`), + KEY `field` (`field`), + KEY `action` (`action`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowversion` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `version` varchar(10) NOT NULL, + `fields` text NOT NULL, + `actions` text NOT NULL, + `layouts` text NOT NULL, + `sqls` text NOT NULL, + `labels` text NOT NULL, + `table` text NOT NULL, + `datas` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `moduleversion` (`module`,`version`), + KEY `module` (`module`), + KEY `version` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_zoutput` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `activity` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `optional` char(20) NOT NULL, + `tailorNorm` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `order` mediumint(8) DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8; diff --git a/db/update17.5.sql b/db/update17.5.sql index 925889dfce..928a92e551 100644 --- a/db/update17.5.sql +++ b/db/update17.5.sql @@ -260,5 +260,7 @@ INSERT IGNORE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `syst UPDATE `zt_grouppriv` SET `module` = 'testcase' WHERE `module` = 'story' and `method` = 'zeroCase'; UPDATE `zt_grouppriv` SET `module` = 'product' WHERE `module` = 'story' and `method` = 'track'; +REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) SELECT `group`, 'product', 'requirement' FROM `zt_grouppriv` WHERE `module` = 'product' AND `method` = 'browse'; + ALTER TABLE `zt_job` ADD `lastSyncDate` datetime DEFAULT NULL AFTER `lastTag`; INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('*/5', '*', '*', '*', '*', 'moduleName=compile&methodName=syncCompile', '定时同步构建记录', 'zentao', 1, 'normal', '0000-00-00 00:00:00'); diff --git a/db/update18.1.sql b/db/update18.1.sql index 58c3759859..15ea153c8f 100644 --- a/db/update18.1.sql +++ b/db/update18.1.sql @@ -1 +1,69 @@ DELETE FROM `zt_config` WHERE module = 'datatable' AND section = 'executionAll'; + +UPDATE `zt_task` SET `assignedTo` = '' WHERE `mode` = 'multi' AND `status` != 'done' AND `status` != 'closed'; + +REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`, `vision`) SELECT `lang`, `module`, 'scrumClassify', `key`, `value`, `system`, `vision` FROM `zt_lang` WHERE `module` = 'process' and `section` = 'classify' and `system` = '1' ORDER BY id ASC; +REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`, `vision`) SELECT `lang`, `module`, 'agileplusClassify', `key`, `value`, `system`, `vision` FROM `zt_lang` WHERE `module` = 'process' and `section` = 'classify' and `system` = '1' ORDER BY id ASC; +REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`, `vision`) SELECT `lang`, `module`, 'waterfallplusClassify', `key`, `value`, `system`, `vision` FROM `zt_lang` WHERE `module` = 'process' and `section` = 'classify' and `system` = '1' ORDER BY id ASC; + +UPDATE `zt_project` AS parent INNER JOIN (select `id`,`parent`,`attribute` from `zt_project` where `parent` != 0 and `type` = 'stage') AS child ON parent.`id` = child.`parent` SET parent.`attribute`='mix' where parent.`grade`=1 and parent.`type`='stage' and parent.`attribute` != child.`attribute`; + +REPLACE INTO `zt_grouppriv` (SELECT `group`,`module`,'batchChangeStatus' FROM `zt_grouppriv` WHERE `module` = 'execution' AND `method` = 'batchEdit'); + +ALTER table `zt_stage` ADD `projectType` varchar(255) NOT NULL DEFAULT '' AFTER `type`; +UPDATE `zt_stage` SET `projectType` = 'waterfall' WHERE `projectType` = ''; + +REPLACE INTO `zt_stage` (`name`,`percent`,`type`, `projectType`, `createdBy`,`createdDate`,`editedBy`,`editedDate`,`deleted`) VALUES +('需求','10','request','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('设计','10','design','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('开发','50','dev','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('测试','15','qa','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('发布','10','release','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('总结评审','5','review','waterfallplus','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0'); + +ALTER table `zt_reviewcl` ADD `type` varchar(255) NOT NULL DEFAULT '' AFTER `category`; +UPDATE `zt_reviewcl` SET `type` = 'waterfall' WHERE `type` = ''; + +UPDATE `zt_activity` SET `order` = `id` * 5 WHERE `order` = '0'; + +ALTER table `zt_cmcl` ADD `projectType` varchar(255) NOT NULL DEFAULT '' AFTER `type`; +UPDATE `zt_cmcl` SET `projectType` = 'waterfall' WHERE `projectType` = ''; + +REPLACE INTO `zt_process` (`model`, `name`, `type`, `abbr`, `desc`, `assignedTo`, `status`, `order`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `assignedBy`, `assignedDate`, `deleted`) VALUES +('waterfallplus', '立项管理', 'project', 'PIM', '', '', '', 55, 'admin', '2020-01-09 10:29:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '项目规划', 'project', 'PP', '', '', '', 60, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '项目监控', 'project', 'PMC', '', '', '', 65, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '风险管理', 'project', 'RSKM', '', '', '', 70, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '结项管理', 'project', 'PCM', '', '', '', 75, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '量化项目管理', 'project', 'QPM', '', '', '', 80, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '需求开发', 'engineering', 'RDM', '', '', '', 85, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '设计开发', 'engineering', '', '', '', '', 90, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '实现与测试', 'engineering', 'EMBEDDED', '', '', '', 95, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '系统测试', 'engineering', 'ST', '', '', '', 100, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '客户验收', 'engineering', 'CA', '', '', '', 105, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '质量保证', 'support', 'QA', '', '', '', 110, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '配置管理', 'support', 'CM', '', '', '', 115, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '度量分析', 'support', 'MA', '', '', '', 120, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '原因分析与解决', 'support', 'CAR', '', '', '', 125, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('waterfallplus', '决策分析', 'support', 'DAR', '', '', '', 130, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '立项管理', 'project', 'PIM', '', '', '', 55, 'admin', '2020-01-09 10:29:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '项目规划', 'project', 'PP', '', '', '', 60, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '项目监控', 'project', 'PMC', '', '', '', 65, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '风险管理', 'project', 'RSKM', '', '', '', 70, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '结项管理', 'project', 'PCM', '', '', '', 75, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '量化项目管理', 'project', 'QPM', '', '', '', 80, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '需求开发', 'engineering', 'RDM', '', '', '', 85, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '设计开发', 'engineering', '', '', '', '', 90, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '实现与测试', 'engineering', 'EMBEDDED', '', '', '', 95, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '系统测试', 'engineering', 'ST', '', '', '', 100, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '客户验收', 'engineering', 'CA', '', '', '', 105, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '质量保证', 'support', 'QA', '', '', '', 110, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '配置管理', 'support', 'CM', '', '', '', 115, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '度量分析', 'support', 'MA', '', '', '', 120, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '原因分析与解决', 'support', 'CAR', '', '', '', 125, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +('agileplus', '决策分析', 'support', 'DAR', '', '', '', 130, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'); + +UPDATE `zt_chart` SET `sql` = 'SELECT tt.join as `year`, count(1) as number, tt.name from (\r\nselect \r\nt2.name, YEAR(t1.join) as `join`\r\nfrom zt_team t1 \r\nRIGHT JOIN zt_project t2 on t2.id = t1.root\r\nRIGHT JOIN zt_user t3 on t3.account = t1.account\r\nWHERE t1.type = \'project\'\r\nAND t2.deleted = \'0\'\r\n) tt\r\nGROUP BY tt.`name`, tt.join\r\nORDER BY tt.join, number desc, tt.name' WHERE `id` = '1097'; +UPDATE `zt_chart` SET `sql` = 'SELECT tt.join as `year`, count(1) as number, tt.setName from (\r\nselect \r\nYEAR(t1.join) as `join`, t4.name as setName \r\nfrom zt_team t1 \r\nRIGHT JOIN zt_project t2 on t2.id = t1.root\r\nLEFT JOIN zt_project t4 on FIND_IN_SET(t4.id,t2.path) and t4.grade = 1\r\nRIGHT JOIN zt_user t3 on t3.account = t1.account\r\nWHERE t1.type = \'project\'\r\nAND t2.deleted = \'0\'\r\nAND t3.deleted = \'0\'\r\n) tt\r\nGROUP BY tt.setName, tt.join\r\nORDER BY tt.join, number desc, tt.setName' WHERE `id` = '1086'; + +INSERT IGNORE INTO `zt_config` (`vision`, `owner`, `module`, `key`, `value`) VALUES ('', 'system', 'common', 'setCode', '1'); diff --git a/db/update18.2.sql b/db/update18.2.sql new file mode 100644 index 0000000000..1d3adf53f9 --- /dev/null +++ b/db/update18.2.sql @@ -0,0 +1 @@ +REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system','common','','setPercent','1'); diff --git a/db/zentao.sql b/db/zentao.sql index f88a8d7856..005941af3c 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1490,6 +1490,7 @@ CREATE TABLE IF NOT EXISTS `zt_stage` ( `name` varchar(255) NOT NULL, `percent` varchar(255) NOT NULL, `type` varchar(255) NOT NULL, + `projectType` varchar(255) NOT NULL, `createdBy` varchar(30) NOT NULL, `createdDate` datetime NOT NULL, `editedBy` varchar(30) NOT NULL, @@ -2162,6 +2163,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1,'custom','project'), (1,'custom','restore'), (1,'custom','set'), +(1,'custom','hours'), (1,'custom','setDefaultConcept'), (1,'custom','setPublic'), (1,'custom','setStoryConcept'), @@ -2754,6 +2756,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (2,'custom','product'), (2,'custom','restore'), (2,'custom','set'), +(2,'custom','hours'), (2,'custom','setPublic'), (2,'datatable','setGlobal'), (2,'dept','browse'), @@ -6384,22 +6387,21 @@ REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) V ('zh-cn', 'custom', 'URSRList', '3', '{\"SRName\":\"\\u8f6f\\u9700\",\"URName\":\"\\u7528\\u9700\"}', '1'),('zh-cn', 'custom', 'URSRList', '4', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u53f2\\u8bd7\"}', '1'), ('zh-cn', 'custom', 'URSRList', '5', '{\"SRName\":\"\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'), ('en', 'custom', 'URSRList', '1', '{\"SRName\":\"Story\",\"URName\":\"Epic\"}', '0'), -('en', 'custom', 'URSRList', '2', '{\"SRName\":\"Software Requirement\",\"URName\":\"User Requirement\"}', '0'), -('all','stage','typeList','request','需求', '1'), -('all','stage','typeList','design','设计', '1'), -('all','stage','typeList','dev','开发', '1'), -('all','stage','typeList','qa','测试', '1'), -('all','stage','typeList','release','发布', '1'), -('all','stage','typeList','review','总结评审','1'), -('all','stage','typeList','other','其他','1'); +('en', 'custom', 'URSRList', '2', '{\"SRName\":\"Software Requirement\",\"URName\":\"User Requirement\"}', '0'); -REPLACE INTO `zt_stage` (`name`,`percent`,`type`,`createdBy`,`createdDate`,`editedBy`,`editedDate`,`deleted`) VALUES -('需求','10','request','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), -('设计','10','design','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), -('开发','50','dev','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), -('测试','15','qa','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), -('发布','10','release','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), -('总结评审','5','review','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0'); +REPLACE INTO `zt_stage` (`name`,`percent`,`type`,`projectType`,`createdBy`,`createdDate`,`editedBy`,`editedDate`,`deleted`) VALUES +('需求','10','request','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('设计','10','design','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('开发','50','dev','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('测试','15','qa','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('发布','10','release','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('总结评审','5','review','waterfall','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0'), +('需求','10','request','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('设计','10','design','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('开发','50','dev','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('测试','15','qa','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('发布','10','release','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'), +('总结评审','5','review','waterfallplus','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'hourPoint', '0'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1'); @@ -9703,6 +9705,7 @@ CREATE TABLE IF NOT EXISTS `zt_reviewcl` ( `title` varchar(255) NOT NULL, `object` char(30) NOT NULL, `category` char(30) NOT NULL, + `type` varchar(255) NOT NULL, `assignedTo` varchar(30) NOT NULL, `order` mediumint(8) DEFAULT '0', `status` varchar(30) NOT NULL, @@ -9774,6 +9777,7 @@ CREATE TABLE IF NOT EXISTS `zt_reviewlist` ( CREATE TABLE IF NOT EXISTS `zt_cmcl` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `type` char(30) NOT NULL, + `projectType` varchar(255) NOT NULL, `title` int(11) NOT NULL, `contents` text NOT NULL, `assignedTo` varchar(30) NOT NULL, @@ -13298,7 +13302,39 @@ REPLACE INTO `zt_process` (`id`, `model`, `name`, `type`, `abbr`, `desc`, `assig (29, 'scrum', '项目监控', 'project', 'PMC', '', '', '', 65, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), (28, 'scrum', '项目规划', 'project', 'PP', '', '', '', 60, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), (27, 'scrum', '立项管理', 'project', 'PIM', '', '', '', 55, 'admin', '2020-01-09 10:29:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), -(42, 'scrum', '决策分析', 'support', 'DAR', '', '', '', 130, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'); +(42, 'scrum', '决策分析', 'support', 'DAR', '', '', '', 130, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(43, 'waterfallplus', '立项管理', 'project', 'PIM', '', '', '', 55, 'admin', '2020-01-09 10:29:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(44, 'waterfallplus', '项目规划', 'project', 'PP', '', '', '', 60, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(45, 'waterfallplus', '项目监控', 'project', 'PMC', '', '', '', 65, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(46, 'waterfallplus', '风险管理', 'project', 'RSKM', '', '', '', 70, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(47, 'waterfallplus', '结项管理', 'project', 'PCM', '', '', '', 75, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(48, 'waterfallplus', '量化项目管理', 'project', 'QPM', '', '', '', 80, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(49, 'waterfallplus', '需求开发', 'engineering', 'RDM', '', '', '', 85, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(50, 'waterfallplus', '设计开发', 'engineering', '', '', '', '', 90, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(51, 'waterfallplus', '实现与测试', 'engineering', 'EMBEDDED', '', '', '', 95, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(52, 'waterfallplus', '系统测试', 'engineering', 'ST', '', '', '', 100, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(53, 'waterfallplus', '客户验收', 'engineering', 'CA', '', '', '', 105, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(54, 'waterfallplus', '质量保证', 'support', 'QA', '', '', '', 110, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(55, 'waterfallplus', '配置管理', 'support', 'CM', '', '', '', 115, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(56, 'waterfallplus', '度量分析', 'support', 'MA', '', '', '', 120, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(57, 'waterfallplus', '原因分析与解决', 'support', 'CAR', '', '', '', 125, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(58, 'waterfallplus', '决策分析', 'support', 'DAR', '', '', '', 130, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(59, 'agileplus', '立项管理', 'project', 'PIM', '', '', '', 55, 'admin', '2020-01-09 10:29:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(60, 'agileplus', '项目规划', 'project', 'PP', '', '', '', 60, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(61, 'agileplus', '项目监控', 'project', 'PMC', '', '', '', 65, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(62, 'agileplus', '风险管理', 'project', 'RSKM', '', '', '', 70, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(63, 'agileplus', '结项管理', 'project', 'PCM', '', '', '', 75, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(64, 'agileplus', '量化项目管理', 'project', 'QPM', '', '', '', 80, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(65, 'agileplus', '需求开发', 'engineering', 'RDM', '', '', '', 85, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(66, 'agileplus', '设计开发', 'engineering', '', '', '', '', 90, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(67, 'agileplus', '实现与测试', 'engineering', 'EMBEDDED', '', '', '', 95, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(68, 'agileplus', '系统测试', 'engineering', 'ST', '', '', '', 100, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(69, 'agileplus', '客户验收', 'engineering', 'CA', '', '', '', 105, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(70, 'agileplus', '质量保证', 'support', 'QA', '', '', '', 110, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(71, 'agileplus', '配置管理', 'support', 'CM', '', '', '', 115, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(72, 'agileplus', '度量分析', 'support', 'MA', '', '', '', 120, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(73, 'agileplus', '原因分析与解决', 'support', 'CAR', '', '', '', 125, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'), +(74, 'agileplus', '决策分析', 'support', 'DAR', '', '', '', 130, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'); REPLACE INTO `zt_activity` (`id`, `process`, `name`, `optional`, `tailorNorm`, `content`, `assignedTo`, `status`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `assignedBy`, `assignedDate`, `order`, `deleted`) VALUES @@ -13840,7 +13876,7 @@ REPLACE INTO `zt_chart` (`id`, `name`, `dimension`, `type`, `group`, `dataset`, (1082,'年度新增-产品发布次数年度趋势图',1,'line',0,'','','{\r\n \"xaxis\":[{\"field\":\"month\",\"name\":\"月份\",\"group\":\"value\"}],\r\n \"yaxis\":[{\"type\":\"value\",\"field\":\"release\",\"agg\":\"value\",\"name\":\"发布次数\",\"valOrAgg\":\"value\"}\r\n]}','',NULL,'SELECT t1.year, CONCAT(t1.month, \'月\') AS `month`, IFNULL(t2.release, 0) AS `release`\r\nFROM (SELECT DISTINCT Year(date) AS `year`, MONTH(date) AS `month` FROM zt_action) AS t1\r\nLEFT JOIN (SELECT YEAR(createdDate) AS `year`, MONTH(createdDate) AS `month`, COUNT(1) AS `release` FROM zt_release WHERE deleted = \'0\' GROUP BY `year`, `month`) AS t2 ON t1.year = t2.year AND t1.month = t2.month\r\nORDER BY `year`, t1.month',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1083,'年度新增-年度投入产出比',1,'line',0,'','','{\r\n \"xaxis\":[{\"field\":\"month\",\"name\":\"月份\",\"group\":\"value\"}],\r\n \"yaxis\":[{\"type\":\"value\",\"field\":\"ratio\",\"agg\":\"value\",\"name\":\"投入产出比\",\"valOrAgg\":\"value\"},\r\n{\"type\":\"value\",\"field\":\"story\",\"agg\":\"value\",\"name\":\"需求交付\",\"valOrAgg\":\"value\"},\r\n{\"type\":\"value\",\"field\":\"consumed\",\"agg\":\"value\",\"name\":\"工时消耗\",\"valOrAgg\":\"value\"}\r\n]}','',NULL,'SELECT t1.`year`, CONCAT(t1.`month`, \'月\') AS `month`, IFNULL(t2.story, 0) AS story, IFNULL(t3.consumed, 0) AS consumed, ROUND(IF(IFNULL(t3.consumed, 0) = 0, 0, IFNULL(t2.story, 0) / IFNULL(t3.consumed, 0)), 2) AS ratio\r\nFROM (SELECT YEAR(`date`) AS \'year\', MONTH(`date`) AS \'month\' FROM zt_action GROUP BY `year`,`month`) AS t1\r\nLEFT JOIN (SELECT ROUND(SUM(estimate)) AS story, YEAR(`closedDate`) AS \'year\', MONTH(`closedDate`) AS \'month\' FROM zt_story WHERE deleted = \'0\' AND closedReason = \'done\' AND status = \'closed\' GROUP BY `year`,`month`) AS t2 ON t1.`year` = t2.`year` AND t1.`month` = t2.`month`\r\nLEFT JOIN (SELECT ROUND(SUM(consumed)) as consumed, YEAR(`date`) as \'year\', MONTH(`date`) AS \'month\' FROM zt_effort WHERE deleted = \'0\' GROUP BY `year`,`month`) AS t3 ON t1.`year` = t3.`year` AND t1.`month` = t3.`month`',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1085,'年度排行-项目集-预算投入榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"program\",\"name\":\"项目集\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"budget\",\"agg\":\"value\",\"name\":\"预算\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT \r\n YEAR(t2.openedDate) AS `year`, \r\n t1.id,\r\n t1.name AS program, \r\n ROUND(\r\n SUM(\r\n IFNULL(t2.budget, 0)\r\n ) / 10000, \r\n 2\r\n ) AS budget \r\nFROM \r\n zt_project AS t1 \r\n LEFT JOIN zt_project AS t2 ON FIND_IN_SET(t1.id, t2.path) \r\n AND t2.deleted = \'0\' \r\n AND t2.type = \'project\' \r\nWHERE \r\n t1.deleted = \'0\' \r\n AND t1.type = \'program\' \r\n AND t1.grade = 1 \r\nGROUP BY \r\n `year`, \r\n id,\r\n program \r\nORDER BY \r\n `year`, \r\n budget DESC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), -(1086,'年度排行-项目集-人员投入榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"setName\",\"name\":\"项目集\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"number\",\"agg\":\"value\",\"name\":\"人数\",\"valOrAgg\":\"value\"}]}','','','SELECT tt.join as `year`, count(1) as number, tt.setName from (\r\nselect \r\nYEAR(t1.join) as `join`, t4.name as setName \r\nfrom zt_team t1 \r\nRIGHT JOIN zt_project t2 on t2.id = t1.root\r\nLEFT JOIN zt_project t4 on FIND_IN_SET(t4.id,t2.path) and t4.grade = 1\r\nRIGHT JOIN zt_user t3 on t3.account = t1.account\r\nWHERE t1.type = \'project\'\r\n) tt\r\nGROUP BY tt.setName, tt.join\r\nORDER BY tt.join, number desc, tt.setName',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), +(1086,'年度排行-项目集-人员投入榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"setName\",\"name\":\"项目集\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"number\",\"agg\":\"value\",\"name\":\"人数\",\"valOrAgg\":\"value\"}]}','','','SELECT tt.join as `year`, count(1) as number, tt.setName from (\r\nselect \r\nYEAR(t1.join) as `join`, t4.name as setName \r\nfrom zt_team t1 \r\nRIGHT JOIN zt_project t2 on t2.id = t1.root\r\nLEFT JOIN zt_project t4 on FIND_IN_SET(t4.id,t2.path) and t4.grade = 1\r\nRIGHT JOIN zt_user t3 on t3.account = t1.account\r\nWHERE t1.type = \'project\'\r\nAND t2.deleted = \'0\'\r\nAND t3.deleted = \'0\'\r\n) tt\r\nGROUP BY tt.setName, tt.join\r\nORDER BY tt.join, number desc, tt.setName',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1087,'年度排行-项目集-工时消耗榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"program\",\"name\":\"项目集\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"consumed\",\"agg\":\"value\",\"name\":\"消耗工时\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT \r\n YEAR(t5.date) AS `year`, \r\n t1.id,\r\n t1.name AS program, \r\n ROUND(\r\n SUM(t5.consumed), \r\n 2\r\n ) AS consumed \r\nFROM \r\n zt_project AS t1 \r\n LEFT JOIN zt_project AS t2 ON FIND_IN_SET(t1.id, t2.path) \r\n AND t2.deleted = \'0\' \r\n AND t2.type = \'project\' \r\n LEFT JOIN zt_project AS t3 ON t2.id = t3.parent \r\n AND t3.deleted = \'0\' \r\n AND t3.type IN (\'sprint\', \'stage\', \'kanban\') \r\n LEFT JOIN zt_task AS t4 ON t3.id = t4.execution \r\n AND t4.deleted = \'0\' \r\n AND t4.status != \'cancel\' \r\n LEFT JOIN zt_effort AS t5 ON t4.id = t5.objectID \r\n AND t5.deleted = \'0\' \r\n AND t5.objectType = \'task\' \r\nWHERE \r\n t1.deleted = \'0\' \r\n AND t1.type = \'program\' \r\n AND t1.grade = 1 \r\n AND t5.id IS NOT NULL \r\nGROUP BY \r\n `year`, \r\n id,\r\n program \r\nORDER BY \r\n `year`, \r\n consumed DESC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1088,'年度排行-项目集-新增需求条目榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"program\",\"name\":\"项目集\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"story\",\"agg\":\"value\",\"name\":\"新增需求条数\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT \r\n YEAR(t3.openedDate) AS `year`,\r\n t1.id, \r\n t1.name AS program, \r\n COUNT(1) AS story \r\nFROM \r\n zt_project AS t1 \r\n LEFT JOIN zt_product AS t2 ON t1.id = t2.program \r\n AND t2.deleted = \'0\' \r\n LEFT JOIN zt_story AS t3 ON t2.id = t3.product \r\n AND t3.deleted = \'0\' \r\nWHERE \r\n t1.deleted = \'0\' \r\n AND t1.type = \'program\' \r\n AND t1.grade = 1 \r\n AND t3.id IS NOT NULL \r\nGROUP BY \r\n `year`, \r\n id,\r\n program \r\nORDER BY \r\n `year`, \r\n story DESC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1089,'年度排行-项目集-新增需求规模榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"program\",\"name\":\"项目集\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"story\",\"agg\":\"value\",\"name\":\"新增需求规模\",\"valOrAgg\":\"value\"}]}','','','SELECT \r\n YEAR(t3.openedDate) AS `year`, \r\n t1.id,\r\n t1.name AS program, \r\n ROUND(\r\n SUM(t3.estimate), \r\n 2\r\n ) AS story \r\nFROM \r\n zt_project AS t1 \r\n LEFT JOIN zt_product AS t2 ON t1.id = t2.program \r\n AND t2.deleted = \'0\' \r\n LEFT JOIN zt_story AS t3 ON t2.id = t3.product \r\n AND t3.deleted = \'0\' \r\nWHERE \r\n t1.deleted = \'0\' \r\n AND t1.type = \'program\' \r\n AND t1.grade = 1 \r\n AND t3.id IS NOT NULL \r\nGROUP BY \r\n `year`,\r\n id, \r\n program \r\nORDER BY \r\n `year`, \r\n story DESC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), @@ -13850,7 +13886,7 @@ REPLACE INTO `zt_chart` (`id`, `name`, `dimension`, `type`, `group`, `dataset`, (1093,'年度排行-项目集-修复Bug条目榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"program\",\"name\":\"项目集\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"bug\",\"agg\":\"value\",\"name\":\"修复Bug条目\",\"valOrAgg\":\"value\"}]}','','','SELECT \r\n YEAR(t3.closedDate) AS `year`,\r\n t1.id, \r\n t1.name AS program, \r\n COUNT(1) AS bug \r\nFROM \r\n zt_project AS t1 \r\n LEFT JOIN zt_product AS t2 ON t1.id = t2.program \r\n AND t2.deleted = \'0\' \r\n LEFT JOIN zt_bug AS t3 ON t2.id = t3.product \r\n AND t3.deleted = \'0\' \r\n AND t3.resolution = \'fixed\' \r\n AND t3.status = \'closed\' \r\nWHERE \r\n t1.deleted = \'0\' \r\n AND t1.type = \'program\' \r\n AND t1.grade = 1 \r\n AND t3.id IS NOT NULL \r\nGROUP BY \r\n `year`, \r\n id,\r\n program \r\nORDER BY \r\n `year`, \r\n bug DESC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1094,'年度排行-项目-工期榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"name\",\"name\":\"项目\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"duration\",\"agg\":\"value\",\"name\":\"工期\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT `year`, id,name,status,realBegan,realEnd,IF(status = \'closed\', DATEDIFF(realEnd, realBegan), DATEDIFF(NOW(),realBegan)) as duration\r\nFROM (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) AS t1\r\nLEFT JOIN zt_project AS t2 ON 1 = 1 WHERE deleted = \'0\' AND type = \'project\' AND YEAR(realBegan) <= `year` AND LEFT(realBegan, 4) != \'0000\' AND (status =\'doing\' OR (status = \'suspended\' AND YEAR(suspendedDate) >= `year`) OR (status = \'closed\' AND YEAR(realEnd) >= `year`)) HAVING 1=1 ORDER BY `year`, duration desc',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1096,'年度排行-项目-工期偏差榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"name\",\"name\":\"项目\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"duration\",\"agg\":\"value\",\"name\":\"工期\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT `year`, id,name,status,`begin`,`end`,realBegan,realEnd,\nROUND((IF(LEFT(realEnd,4) != \'0000\', DATEDIFF(realEnd, realBegan), DATEDIFF(NOW(),realBegan)) - DATEDIFF(`end`, `begin`)) / DATEDIFF(`end`,`begin`) * 100) as duration\nFROM (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) AS t1\nLEFT JOIN zt_project AS t2 ON 1 = 1 \nWHERE deleted = \'0\' AND type = \'project\'\nAND YEAR(realBegan) <= `year` AND LEFT(realBegan, 4) != \'0000\'\nAND (YEAR(realEnd) >= `year` OR LEFT(realEnd, 4) = \'0000\') AND YEAR(`end`) != \'2059\'\nHAVING 1=1\nORDER BY duration ASC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), -(1097,'年度排行-项目-人员投入榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"name\",\"name\":\"项目\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"number\",\"agg\":\"value\",\"name\":\"人数\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT tt.join as `year`, count(1) as number, tt.name from (\r\nselect \r\nt2.name, YEAR(t1.join) as `join`\r\nfrom zt_team t1 \r\nRIGHT JOIN zt_project t2 on t2.id = t1.root\r\nRIGHT JOIN zt_user t3 on t3.account = t1.account\r\nWHERE t1.type = \'project\'\r\n) tt\r\nGROUP BY tt.`name`, tt.join\r\nORDER BY tt.join, number desc, tt.name',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), +(1097,'年度排行-项目-人员投入榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"name\",\"name\":\"项目\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"number\",\"agg\":\"value\",\"name\":\"人数\",\"valOrAgg\":\"value\"}]}','','','SELECT tt.join as `year`, count(1) as number, tt.name from (\r\nselect \r\nt2.name, YEAR(t1.join) as `join`\r\nfrom zt_team t1 \r\nRIGHT JOIN zt_project t2 on t2.id = t1.root\r\nRIGHT JOIN zt_user t3 on t3.account = t1.account\r\nWHERE t1.type = \'project\'\r\nAND t2.deleted = \'0\'\r\n) tt\r\nGROUP BY tt.`name`, tt.join\r\nORDER BY tt.join, number desc, tt.name',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1098,'年度排行-项目-工时消耗榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"project\",\"name\":\"项目\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"consumed\",\"agg\":\"value\",\"name\":\"消耗工时\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT \r\n YEAR(t4.date) AS `year`,\r\n t1.id, \r\n t1.name AS project, \r\n ROUND(\r\n SUM(t4.consumed), \r\n 2\r\n ) AS consumed \r\nFROM \r\n zt_project AS t1 \r\n LEFT JOIN zt_project AS t2 ON t1.id = t2.parent \r\n AND t2.deleted = \'0\' \r\n AND t2.type IN (\'sprint\', \'stage\', \'kanban\') \r\n LEFT JOIN zt_task AS t3 ON t2.id = t3.execution \r\n AND t3.deleted = \'0\' \r\n AND t3.status != \'cancel\' \r\n LEFT JOIN zt_effort AS t4 ON t3.id = t4.objectID \r\n AND t4.deleted = \'0\' \r\n AND t4.objectType = \'task\' \r\nWHERE \r\n t1.deleted = \'0\' \r\n AND t1.type = \'project\' \r\n AND t4.id IS NOT NULL \r\nGROUP BY \r\n `year`, \r\n id,\r\n project \r\nORDER BY \r\n `year`, \r\n consumed DESC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1099,'年度排行-项目-完成需求条目榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"project\",\"name\":\"项目\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"story\",\"agg\":\"value\",\"name\":\"完成需求条目\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT \r\n YEAR(t1.closedDate) AS `year`, \r\n t1.id, \r\n t1.project, \r\n COUNT(1) AS story \r\nFROM \r\n (\r\n SELECT \r\n DISTINCT t1.id, \r\n t1.name AS project, \r\n t4.id AS story, \r\n t4.closedDate \r\n FROM \r\n zt_project AS t1 \r\n LEFT JOIN zt_project AS t2 ON t1.id = t2.parent \r\n AND t2.deleted = \'0\' \r\n AND t2.type IN (\'sprint\', \'stage\', \'kanban\') \r\n LEFT JOIN zt_projectstory AS t3 ON t2.id = t3.project \r\n LEFT JOIN zt_story AS t4 ON t3.story = t4.id \r\n AND t4.deleted = \'0\' \r\n AND t4.closedReason = \'done\' \r\n WHERE \r\n t1.deleted = \'0\' \r\n AND t1.type = \'project\' \r\n AND t4.id IS NOT NULL\r\n ) AS t1 \r\nGROUP BY \r\n `year`, \r\n id, \r\n project \r\nORDER BY \r\n `year`, \r\n story DESC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), (1100,'年度排行-项目-完成需求规模榜',1,'bar',0,'','','{\"xaxis\":[{\"field\":\"project\",\"name\":\"项目\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"story\",\"agg\":\"value\",\"name\":\"完成需求规模\",\"valOrAgg\":\"value\"}]}','',NULL,'SELECT \r\n YEAR(t1.closedDate) AS `year`, \r\n t1.id, \r\n t1.project, \r\n ROUND(\r\n SUM(t1.estimate), \r\n 2\r\n ) AS story \r\nFROM \r\n (\r\n SELECT \r\n DISTINCT t1.id, \r\n t1.name AS project, \r\n t4.id AS story, \r\n t4.estimate, \r\n t4.closedDate \r\n FROM \r\n zt_project AS t1 \r\n LEFT JOIN zt_project AS t2 ON t1.id = t2.parent \r\n AND t2.deleted = \'0\' \r\n AND t2.type IN (\'sprint\', \'stage\', \'kanban\') \r\n LEFT JOIN zt_projectstory AS t3 ON t2.id = t3.project \r\n LEFT JOIN zt_story AS t4 ON t3.story = t4.id \r\n AND t4.deleted = \'0\' \r\n AND t4.closedReason = \'done\' \r\n WHERE \r\n t1.deleted = \'0\' \r\n AND t1.type = \'project\' \r\n AND t4.id IS NOT NULL\r\n ) AS t1 \r\nGROUP BY \r\n `year`, \r\n id, \r\n project \r\nORDER BY \r\n `year`, \r\n story DESC',1,'','','0000-00-00 00:00:00','','0000-00-00 00:00:00',0), diff --git a/db/zentaopms284.sql b/db/zentaopms284.sql deleted file mode 100644 index 91fe06b398..0000000000 --- a/db/zentaopms284.sql +++ /dev/null @@ -1,6 +0,0 @@ -update `zt_task` set `assignedTo` = '' where `mode` = 'multi' and `status` != 'done' and `status` != 'closed'; - -REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`, `vision`) SELECT `lang`, `module`, 'scrumClassify', `key`, `value`, `system`, `vision` FROM `zt_lang` WHERE `module` = 'process' and `section` = 'classify' ORDER BY id ASC; -REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`, `vision`) SELECT `lang`, `module`, 'agileplusClassify', `key`, `value`, `system`, `vision` FROM `zt_lang` WHERE `module` = 'process' and `section` = 'classify' ORDER BY id ASC; - -UPDATE `zt_project` AS parent INNER JOIN (select `id`,`parent`,`attribute` from `zt_project` where `parent` != 0 and `type` = 'stage') AS child ON parent.`id` = child.`parent` SET parent.`attribute`='mix' where parent.`grade`=1 and parent.`type`='stage' and parent.`attribute` != child.`attribute`; diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 9b69fd079c..851e60430e 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,232 @@ +2023-02-27 18.2 +完成的需求 +开源版: +41729 按指派人搜索时,支持搜索多人并行任务 +41730 待处理中过滤掉我已经完成的多人并行任务 +41731 多人并行任务全部完成后指派给创建人 +41732 编辑任务时,父/子任务不能修改为多人任务 +41817 创建项目弹窗增加融合敏捷项目 +41821 融合敏捷项目的迭代菜单下可以创建看板 +41824 创建融合敏捷项目时,能复制融合敏捷项目的信息 +41825 创建执行时,能复制融合敏捷项目的执行的信息 +41829 融合敏捷项目的创建执行页面,增加方法字段 +41830 批量编辑迭代信息页面,增加方法字段 +41832 迭代列表导出增加方法字段 +41833 后台全局设置增加融合敏捷设置 +41834 后台融合敏捷设置下增加QA设置 +41835 后台融合敏捷设置下增加过程设置 +41940 后台过程设置的分类项设置,不同模型管理自己的分类项 +41952 轻量级模式增加融合敏捷项目入口 +41826 创建Bug时执行只能选择叶子执行 +41831 创建问题、风险、机会时只能选择叶子执行 +41839 瀑布项目阶段列表支持无限层级 +41865 创建版本时只能选择叶子执行 +41867 提交测试单时只能选择叶子执行 +41870 瀑布项目的甘特图列表支持无限层级 +41872 执行列表支持无限层级 +41877 瀑布模型的里程碑报告统计该阶段下所有数据 +41878 瀑布项目支持创建无限级阶段 +41889 阶段编辑页面支持修改父阶段 +41891 阶段类型增加“综合” +41907 瀑布项目创建任务时所属执行只能选择叶子执行 +41911 通用看板导入执行时可以选择父执行或子执行 +41912 创建执行文档库时支持选择父执行或子执行 +41913 执行文档库中2.5级菜单支持选择父执行或子执行 +41915 新增日志时只能选择叶子执行 +41957 代码模块中维护所属执行时只能选择叶子执行 +41961 代码的评审模块中维护所属执行时只能选择叶子执行 +41968 回收站内父阶段未删除时才能恢复子阶段 +42011 子阶段增加阶段类型字段 +42017 父阶段阶段类型修改后,子阶段类型同步变更 +42019 无限级阶段的阶段进度计算规则 +42212 宿主机重装服务后可正常操作执行节点 +42213 初始化中的执行节点只能进行远程操作 +42214 快照状态显示优化 +42215 创建执行节点的初始快照 +42216 加载或刷新宿主机详情页时清空服务状态文本 +42217 加载或刷新执行节点详情页时清空服务状态文本 +41743 后台首页内容定义 +41755 功能配置页的二级导航定义 +41756 后台首页设置区块调整 +41759 后台首页插件区块内容 +41760 后台首页公开课区块的内容 +41761 后台首页官方公众号区块的内容 +41768 后台配置页增加1.5级导航切换功能 +41774 私有部署时后台首页内容调整 +41777 后台模型配置页面结构调整 +41791 后台通知页面结构调整 +41793 后台数据导入页面定义 +41794 后台系统设置页面的结构调整 +41797 后台二次开发页面的结构调整 +41837 非中文版本后台首页内容调整 +41745 功能配置下的地盘中新增待办和区块的Tab项 +41746 功能配置下的产品中新增Tab项 +41747 功能配置下的执行中新增Tab项 +41748 功能配置下的测试中新增Tab项 +41749 新增功能配置下的看板模块 +41750 功能配置下的文档中新增必填项设置的字段及内容 +41751 新增功能配置下的反馈模块 +41752 将后台的审批移至功能配置下做为审批模块导航 +41753 将后台全局设置中的度量移至功能配置中做为度量模块的设置入口 +41754 新增功能配置下的会议室模块 +41758 后台首页禅道信息区块内容 +41766 调整二级页面配置项详情页面的布局和结构 +41773 新增功能配置下的用户模块 +41775 后台人员配置页面结构调整 +41776 后台功能开关页面结构调整 +41790 后台模型配置中瀑布模型的配置项定义 +41795 后台系统中聊天页面的排版调整 +41812 后台文档模板页面内容补充并调整结构 +41942 运营界面的后台功能配置中,新增的项目导航内容定义 +41955 调整后台基线模块的权限配置 +41965 将后台自定义的语言项改为配置 +42006 禅道补丁、新闻动态、公开课和禅道升级信息的接口 +41869 创建融合瀑布项目时,能复制瀑布项目和融合瀑布项目的信息 +41871 创建执行时,能复制融合瀑布项目的执行的信息 +41895 后台全局设置增加融合瀑布设置 +41896 后台融合瀑布设置下增加阶段设置 +41897 后台融合瀑布设置下增加设计设置 +41898 后台融合瀑布设置下增加QA设置 +41899 后台融合瀑布设置下增加配置设置 +41900 后台融合瀑布设置下增加过程设置 +41901 后台融合瀑布设置下增加评审设置 +41902 更新API接口 +41906 后台系统模式下,增加融合敏捷和融合瀑布 +41941 后台系统功能设置,增加融合敏捷和融合瀑布 +42100 瀑布项目的甘特图列表支持迭代和看板的展示 +42194 融合敏捷项目复制时,可以复制敏捷项目信息 +42196 融合敏捷项目创建执行时,能复制敏捷项目的执行的信息 +42360 阶段的所属计划可以编辑修改 +42501 融合敏捷项目创建执行页面增加提示语 +42502 融合瀑布项目创建子阶段页面增加提示语 +42517 多层级阶段的瀑布项目。在项目看板中,展示了第一层级阶段 +42542 融合敏捷项目下,迭代和看板支持互相转入任务 +42543 融合瀑布项目下,叶子节点的执行支持互相转入任务 +39290 瀑布项目的阶段支持排序 +41769 执行统计区块仅展示叶子层级的执行数据 +41803 执行总览区块统计父子层级汇总的数据 +41804 执行列表区块展示父子层级汇总的数据 +41815 项目集看板中的执行只展示叶子节点的执行 +41816 产品看板中的执行只展示叶子节点的执行 +41828 瀑布项目的项目计划区块仅统计一级阶段的数据 +41868 创建项目弹窗增加融合瀑布项目 +41875 修改阶段状态时,同步调整父子阶段的状态 +41892 融合瀑布项目阶段细分时,可以细分为迭代和看板 +41893 批量编辑阶段信息页面,增加方法字段 +41894 阶段列表导出增加方法字段 +41917 复制瀑布项目时支持复制无限级阶段 +42037 组织的日志中的执行只展示叶子节点的执行 +42038 组织的动态中的执行展示父执行和子执行 +42052 批量编辑无限级阶段信息时需要增加校验信息 +42088 融合瀑布项目迭代和看板的编辑页面增加父阶段 +42089 融合瀑布项目迭代和看板的的产品不允许编辑 +42182 剩余类型的迭代/看板的功能与阶段保持一致 +42193 执行1.5级菜单根据层级展示 +42195 设计类型的阶段增加研发需求菜单及功能 +42197 测试类型的阶段增加代码的菜单及功能 +42231 阶段进行操作时,同步调整父子阶段的状态 +42176 设计类型的迭代/看板的功能与阶段保持一致 +42175 需求/总结评审类型的迭代/看板的功能与阶段保持一致 +修复的Bug +开源版: +32397 地盘待处理任务搜索界面报错 +企业版: +18695 bug重新步骤有图片,导出mht没有图片 +22568 特殊情况下,上线中不显示添加的计划 +23227 导出xls格式模板部门字段点击下拉控件无反应 +23588 反馈列表批量编辑时,所属产品作为必填项为空时可以保存 +24026 导出的word中显示多余的空行 +24733 反馈转待办页面,提示关联编号不能为空 +24881 没有详情权限时,历史记录中不应展示链接 +24897 切换左侧筛选标签,上方标签统计数字消失 +24932 自定义切换语言未选中“适用当前语言” +24935 只有默认反馈关闭原因,切换到法语,语言项有问题 +24944 没有详情页权限,点击历史记录提示没权限 +24997 追问时提示回复内容不能为空 +25008 需求详情页弹窗,撤销评审后变空白页了 +25010 任务列表详情页弹窗,返回按钮点击没反应 +25017 导出用例时<>会被转义为<> +25082 用例导入是带有<>符号时显示异常 +25104 反馈指派后,指派人在反馈列表看不到指派的反馈 +25183 测试用例下从用例库导入的用例未同步到项目测试用例下 +25251 代码评审详情页转任务时提示信息不合理 +25442 账号页面搜索条件选择由谁添加/编辑时未列出系统用户 +25468 反馈列表,创建人字段鼠标悬浮不能显示title +25475 法语下创建FAQ按钮语言项错误 +25853 用例详情页显示了导入用例库按钮 +25883 地盘-日志,点击任意日期添加日志遮罩无反应 +26140 wiki文档搜索结果错误 +26147 法语下切换研发综合界面和迅捷界面报错 +26227 一个Bug有多个附件时,导出后多个附件显示在多列了 +26341 用户需求列表导出显示了“所属计划”字段 +26422 数据富文本字段中带有表格时,导出xlsx表格中列宽太宽 +26427 导出项目下研发需求模块和计划显示不正确 +26432 导入需求评审人可以选择所有产品成员 +26435 导出的用例库模板中显示了产品的所属模块 +26436 测试用例库导出模板没有包含模块的系统数据 +26439 项目测试下导入的用例只显示了测试视图下的用例列表中 +26440 导出任务,来源Bug字段只显示了Bug的id +26444 工作流导出模板后导入后,提示没有有效数据 +26446 新增工作流下载模板,里面的字段不对 +26552 文档的上一篇按钮显示缺失 +26568 用例导出特殊字符会异常 +26680 执行甘特图中按钮无图标 +26855 导入时,关掉错误提示弹框,导入按钮置灰 +27039 批量编辑反馈时指派给显示了closed +27113 英文下反馈标签栏换行显示 +27119 反馈转待办,完成待办后动态中缺少语言项 +27127 编辑执行和创建执行可用工作日逻辑不一致 +27207 创建反馈时产品的下拉列表显示顺序和反馈权限列表顺序不一致 +27322 导出反馈数据,数据中字段没有进行重新排序 +27571 执行视图分组视图导出的任务列表相关研发需求丢失 +28630 反馈列表选择产品后,创建反馈时没有显示已选产品 +28680 创建反馈页面选择产品下拉菜单中产品顺序不正确 +28722 编辑反馈时没有显示来源公司字段 +28773 产品模块下的反馈转研发需求/用户需求时,模块没有自动带出来 +28780 新增日志时工作内容输入空格可以保存成功 +28804 工单详情页来源字段处,反馈编号前建议增加“#” +28869 导入用例相关研发需求换行显示 +28890 反馈列表操作按钮换行 +32093 影响版本下拉单选多选不固定 +32098 反馈同步产品模块,反馈模块太长不能完全显示 +旗舰版: +24152 新增自定义严重程度时,QA执行检查时严重程度显示被遮挡 +24499 添加一个风险区块按照状态倒叙排序,默认排序与手动状态倒叙排序不一致 +24525 审批流中选择多个审批人,发起审批时只显示第一个 +24577 审批流中审批类型为角色,发起审批时不显示 +24723 会议生成的日程没有创建日程的历史记录 +24816 德语法语下资产库操作栏菜单显示不全 +24872 资产库预览文档时切换BIG5格式不成功 +25127 评审的问题列表选择评审项后,评审项显示不完整 +25477 过程名称很长时在左侧检查对象区块中显示问题 +25654 QA质量保证计划再次编辑时,不能看到上次填写的备注 +25966 点击上一步回到基础信息页面后,部分信息显示不正确 +25976 阶段的访问控制改为私有后,当前用户也看不到该阶段了 +26041 会议记录页面只显示了在该页面上传的附件 +26288 待处理/贡献、组织团队下的风险列表中风险系数和优先级样式未调整 +26474 升级禅道15系列介绍页面视频下方的空白建议调小点 +26577 基线评审,概要设计名称中含有“-”,获取系统数据会有问题 +26615 工期估算页面展示的界面错误导致无法保存 +27355 质量保证计划检查结果为否,未校验严重程度是否为空 +29011 问题详情页未指派样式建议优化 +29169 费用估算列表的阶段字段换行显示 +29222 分页查看执行附件库时,跳转到文档执行库下 +29413 费用估算列表页中阶段名称换行了 +30351 工作流增加富文本字段,导出后带有html标签,可读性差 +30843 旗舰版瀑布项目阶段排序后,甘特图不会同步 +30912 设置阶段时,输出选择多项后整个页面样式不友好 +31059 火狐浏览器设计审批流页面添加审批节点后页面显示不全不能滑动显示 +31414 审批流浏览器通知,有多条重复标题 +31425 浏览器通知中未显示名称 +31443 任务删除时,同时删除依赖关系 +31941 正在审批的流程显示了上一次审批节点的结果 +31943 项目型项目发起研发需求评审,评审页面无结构化评审内容 +31957 回收站中点击评审问题,详情页中有解决按钮 +31962 删除的文档/活动没有标记已删除 +31964 复制项目型项目提示关联产品或创建产品 +31996 后台过程列表执行搜索后,模型的二级导航下拉菜单高亮了两个 +32117 配置项删除按钮与系统的不一致 + 2023-02-08 18.1 完成的需求 开源版: diff --git a/doc/LICENSE.EN b/doc/LICENSE.EN index e6c758402d..090132df9b 100644 --- a/doc/LICENSE.EN +++ b/doc/LICENSE.EN @@ -11,13 +11,13 @@ Z PUBLIC LICENSE(ZPL) 1.2 Authorization -Z PUBLIC LICENSE, also known as ZPL Agreement, is drafted by EasyCorp(www.easycorp.ltd). +Z PUBLIC LICENSE, also known as ZPL Agreement, is drafted by ZenTao Software(www.easycorp.ltd). Anyone can use the agreement to publish open source software, and modify the blank in the following text of the agreement accordingly. -No other text of the agreement shall be changed. EasyCorp has the final interpretation of the terms in the agreement. +No other text of the agreement shall be changed. ZenTao Software has the final interpretation of the terms in the agreement. Preface -ZenTao ALM (Hereinafter referred to as "the software") developed by EasyCorp (www.easycorp.ltd) (hereinafter referred to I). I'm entitled to all copyright of the software. +ZenTao ALM (Hereinafter referred to as "the software") developed by ZenTao Software (www.easycorp.ltd) (hereinafter referred to I). I'm entitled to all copyright of the software. The software is released as open source software. You are authorized to use the software as long as you are in compliance with this agreement. By installation of the software, you agree that a contractual relationship between you and me is automatically established. You are obliged to fully comply with all the terms of this agreement unless you choose to stop using the software or you have signed additional agreement with me. diff --git a/doc/LICENSE.LITE.EN b/doc/LICENSE.LITE.EN index 0f5d8d8e26..d49da3944d 100644 --- a/doc/LICENSE.LITE.EN +++ b/doc/LICENSE.LITE.EN @@ -2,13 +2,13 @@ Z PUBLIC LICENSE 1.2 Authorization -Z PUBLIC LICENSE, also known as ZPL Agreement, is drafted by EasyCorp(www.easycorp.ltd). +Z PUBLIC LICENSE, also known as ZPL Agreement, is drafted by ZenTao Software(www.easycorp.ltd). Anyone can use the agreement to publish open source software, and modify the blank in the following text of the agreement accordingly. -No other text of the agreement shall be changed. EasyCorp has the final interpretation of the terms in the agreement. +No other text of the agreement shall be changed. ZenTao Software has the final interpretation of the terms in the agreement. Preface -ZenTao LITE (Hereinafter referred to as "the software") developed by EasyCorp (www.easycorp.ltd) (hereinafter referred to I). I'm entitled to all copyright of the software. +ZenTao LITE (Hereinafter referred to as "the software") developed by ZenTao Software (www.easycorp.ltd) (hereinafter referred to I). I'm entitled to all copyright of the software. The software is released as open source software. You are authorized to use the software as long as you are in compliance with this agreement. By installation of the software, you agree that a contractual relationship between you and me is automatically established. You are obliged to fully comply with all the terms of this agreement unless you choose to stop using the software or you have signed additional agreement with me. diff --git a/extension/lite/group/ext/lang/resource.php b/extension/lite/group/ext/lang/resource.php index 3ba031f0f2..7cb8bd18cf 100644 --- a/extension/lite/group/ext/lang/resource.php +++ b/extension/lite/group/ext/lang/resource.php @@ -649,7 +649,7 @@ $lang->resource->custom = new stdclass(); $lang->resource->custom->index = 'index'; $lang->resource->custom->set = 'set'; $lang->resource->custom->product = 'productName'; -$lang->resource->custom->execution = 'execution'; +$lang->resource->custom->execution = 'executionCommon'; $lang->resource->custom->required = 'required'; $lang->resource->custom->restore = 'restore'; $lang->resource->custom->flow = 'flow'; diff --git a/extension/lite/install/ext/lang/de/lite.php b/extension/lite/install/ext/lang/de/lite.php index c190378e52..217460939d 100644 --- a/extension/lite/install/ext/lang/de/lite.php +++ b/extension/lite/install/ext/lang/de/lite.php @@ -11,11 +11,11 @@ enterprises. It enables every department and every employee in the company to ma EOT; $lang->install->links = <<EasyCorp. +ZenTao Lite is developed by ZenTao Software. Official Website: https://www.zentao.pm Technical Support: https://www.zentao.pm/forum/ -LinkedIn: EasyCorp -Facebook: EasyCorp +LinkedIn: ZenTao Software +Facebook: ZenTao Software Twitter: ZenTao Lite diff --git a/extension/lite/install/ext/lang/en/lite.php b/extension/lite/install/ext/lang/en/lite.php index c190378e52..217460939d 100644 --- a/extension/lite/install/ext/lang/en/lite.php +++ b/extension/lite/install/ext/lang/en/lite.php @@ -11,11 +11,11 @@ enterprises. It enables every department and every employee in the company to ma EOT; $lang->install->links = <<EasyCorp. +ZenTao Lite is developed by ZenTao Software. Official Website: https://www.zentao.pm Technical Support: https://www.zentao.pm/forum/ -LinkedIn: EasyCorp -Facebook: EasyCorp +LinkedIn: ZenTao Software +Facebook: ZenTao Software Twitter: ZenTao Lite diff --git a/extension/lite/install/ext/lang/fr/lite.php b/extension/lite/install/ext/lang/fr/lite.php index c190378e52..217460939d 100644 --- a/extension/lite/install/ext/lang/fr/lite.php +++ b/extension/lite/install/ext/lang/fr/lite.php @@ -11,11 +11,11 @@ enterprises. It enables every department and every employee in the company to ma EOT; $lang->install->links = <<EasyCorp. +ZenTao Lite is developed by ZenTao Software. Official Website: https://www.zentao.pm Technical Support: https://www.zentao.pm/forum/ -LinkedIn: EasyCorp -Facebook: EasyCorp +LinkedIn: ZenTao Software +Facebook: ZenTao Software Twitter: ZenTao Lite diff --git a/extension/lite/project/ext/view/create.html.php b/extension/lite/project/ext/view/create.html.php index ce3e1f1454..0308b9d310 100644 --- a/extension/lite/project/ext/view/create.html.php +++ b/extension/lite/project/ext/view/create.html.php @@ -40,7 +40,7 @@ project->name;?> - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> project->code;?> diff --git a/extension/lite/story/ext/view/batchcreate.html.php b/extension/lite/story/ext/view/batchcreate.html.php index 0dd9d87f52..17effdc417 100644 --- a/extension/lite/story/ext/view/batchcreate.html.php +++ b/extension/lite/story/ext/view/batchcreate.html.php @@ -36,7 +36,7 @@ } unset($visibleFields['module']); ?> -
+
diff --git a/framework/helper.class.php b/framework/helper.class.php index a69af8d858..cb474da2c8 100644 --- a/framework/helper.class.php +++ b/framework/helper.class.php @@ -96,7 +96,7 @@ class helper extends baseHelper } else { - if($feature == 'scrum' or $feature == 'waterfall') return strpos(",$config->disabledFeatures,", ",{$feature},") === false; + if(in_array($feature, array('scrum', 'waterfall', 'agileplus', 'waterfallplus'))) return strpos(",$config->disabledFeatures,", ",{$feature},") === false; $hasFeature = false; $canConfigFeature = false; @@ -107,7 +107,7 @@ class helper extends baseHelper if($feature == $group or $feature == $module) { $canConfigFeature = true; - if($group == 'scrum' or $group == 'waterfall') + if(in_array($group, array('scrum', 'waterfall', 'agileplus', 'waterfallplus'))) { if(helper::hasFeature("{$group}") and helper::hasFeature("{$group}_{$module}")) $hasFeature = true; } @@ -339,12 +339,12 @@ class helper extends baseHelper $dateInterval->hour = $interval->format('%H'); $dateInterval->minute = $interval->format('%i'); $dateInterval->secound = $interval->format('%s'); - $dateInterval->year = trim($dateInterval->year, '0'); - $dateInterval->month = trim($dateInterval->month, '0'); - $dateInterval->day = trim($dateInterval->day, '0'); - $dateInterval->hour = trim($dateInterval->hour, '0'); - $dateInterval->minute = trim($dateInterval->minute, '0'); - $dateInterval->secound = trim($dateInterval->secound, '0'); + $dateInterval->year = $dateInterval->year == '00' ? 0 : ltrim($dateInterval->year, '0'); + $dateInterval->month = $dateInterval->month == '00' ? 0 : ltrim($dateInterval->month, '0'); + $dateInterval->day = $dateInterval->day == '00' ? 0 : ltrim($dateInterval->day, '0'); + $dateInterval->hour = $dateInterval->hour == '00' ? 0 : ltrim($dateInterval->hour, '0'); + $dateInterval->minute = $dateInterval->minute == '00' ? 0 : ltrim($dateInterval->minute, '0'); + $dateInterval->secound = $dateInterval->secound == '00' ? 0 : ltrim($dateInterval->secound, '0'); } return $dateInterval; } diff --git a/lib/cache/cache.class.php b/lib/cache/cache.class.php new file mode 100644 index 0000000000..7d17873b08 --- /dev/null +++ b/lib/cache/cache.class.php @@ -0,0 +1,53 @@ + + * @package cache + * @link http://www.zentao.net + */ + +helper::import(dirname(__FILE__) . DS . 'simple-cache' . DS . 'CacheInterface.php'); +helper::import(dirname(__FILE__) . DS . 'simple-cache' . DS . 'CacheException.php'); +helper::import(dirname(__FILE__) . DS . 'simple-cache' . DS . 'InvalidArgumentException.php'); +helper::import(dirname(__FILE__) . DS . 'driver' . DS . 'ApcuDriver.php'); +helper::import(dirname(__FILE__) . DS . 'driver' . DS . 'YacDriver.php'); + +use ZenTao\Cache\SimpleCache\InvalidArgumentException; + +class cache +{ + /** + * @var ZenTao\Cache\SimpleCache\CacheInterface + */ + protected $client; + + public function __construct($driver = 'Apcu', $namespace = '', $defaultLifetime = 0) + { + $driver = ucfirst(strtolower($driver)); + switch($driver) + { + case 'Apcu': + $className = 'ZenTao\Cache\Driver\ApcuDriver'; + break; + case 'Yac': + $className = 'ZenTao\Cache\Driver\YacDriver'; + break; + default: + throw new InvalidArgumentException("Driver {$driver} is not supported."); + } + + if(!extension_loaded($driver)) throw new InvalidArgumentException("Driver ext-{$driver} is not loaded."); + + $this->client = new $className($namespace, $defaultLifetime); + } + + public function __call($name, $arguments) + { + if(!method_exists($this->client, $name)) throw new InvalidArgumentException("Method {$name} does not exist."); + + return call_user_func_array(array($this->client, $name), $arguments); + } +} diff --git a/lib/cache/driver/ApcuDriver.php b/lib/cache/driver/ApcuDriver.php new file mode 100644 index 0000000000..7c2def717a --- /dev/null +++ b/lib/cache/driver/ApcuDriver.php @@ -0,0 +1,173 @@ + + * @package cache + * @link http://www.zentao.net + */ + +namespace ZenTao\Cache\Driver; + +use ZenTao\Cache\SimpleCache\CacheInterface; +use ZenTao\Cache\SimpleCache\InvalidArgumentException; + +class ApcuDriver implements CacheInterface +{ + /** + * @var string + */ + private $namespace; + + /** + * @var int + */ + private $defaultLifetime; + + public function __construct($namespace = '', $defaultLifetime = 0) + { + $this->namespace = $namespace; + $this->defaultLifetime = $defaultLifetime; + } + + public function get($key, $default = null) + { + $this->assertKeyName($key); + $key = $this->buildKeyName($key); + + $value = apcu_fetch($key, $success); + + return $success === false ? $default : $value; + } + + public function set($key, $value, $ttl = null) + { + $this->assertKeyName($key); + $key = $this->buildKeyName($key); + + $ttl = is_null($ttl) ? $this->defaultLifetime : $ttl; + + return apcu_store($key, $value, (int) $ttl); + } + + public function delete($key) + { + $this->assertKeyName($key); + $key = $this->buildKeyName($key); + + return apcu_delete($key); + } + + public function clear() + { + return apcu_clear_cache(); + } + + public function getMultiple($keys, $default = null) + { + $this->assertKeyNames($keys); + $keys = $this->buildKeyNames($keys); + + $result = apcu_fetch($keys); + + if(!is_null($default) && is_array($result) && count($keys) > count($result)) + { + $notFoundKeys = array_diff($keys, array_keys($result)); + $result = array_merge($result, array_fill_keys($notFoundKeys, $default)); + } + + $mappedResult = array(); + + foreach($result as $key => $value) + { + $key = preg_replace("/^$this->namespace/", '', $key); + + $mappedResult[$key] = $value; + } + + return $mappedResult; + } + + public function setMultiple($values, $ttl = null) + { + $this->assertKeyNames(array_keys($values)); + + $mappedByNamespaceValues = array(); + + foreach($values as $key => $value) + { + $mappedByNamespaceValues[$this->buildKeyName($key)] = $value; + } + + $ttl = is_null($ttl) ? $this->defaultLifetime : $ttl; + + $result = apcu_store($mappedByNamespaceValues, (int) $ttl); + + return $result === true ? true : (is_array($result) && count($result) == 0 ? true : false); + } + + public function deleteMultiple($keys) + { + $this->assertKeyNames($keys); + $keys = $this->buildKeyNames($keys); + + $result = apcu_delete($keys); + + return count($result) === count($keys) ? false : true; + } + + public function has($key) + { + $this->assertKeyName($key); + $key = $this->buildKeyName($key); + + return (bool) apcu_exists($key); + } + + /** + * @param string $key + * + * @return string + */ + private function buildKeyName($key) + { + return $this->namespace . $key; + } + + /** + * @param string[] $keys + * + * @return string[] + */ + private function buildKeyNames(array $keys) + { + return array_map(function($key) { + return $this->buildKeyName($key); + }, $keys); + + } + + /** + * @param mixed $key + * + * @throws InvalidArgumentException + */ + private function assertKeyName($key) + { + if(!is_scalar($key) || is_bool($key)) throw new InvalidArgumentException(); + } + + /** + * @param string[] $keys + * + * @throws InvalidArgumentException + */ + private function assertKeyNames(array $keys) + { + array_map(function ($value) { + $this->assertKeyName($value); + }, $keys); + } +} diff --git a/lib/cache/driver/YacDriver.php b/lib/cache/driver/YacDriver.php new file mode 100644 index 0000000000..739582c2fa --- /dev/null +++ b/lib/cache/driver/YacDriver.php @@ -0,0 +1,197 @@ + + * @package cache + * @link http://www.zentao.net + */ + +namespace ZenTao\Cache\Driver; + +use ZenTao\Cache\SimpleCache\CacheInterface; +use ZenTao\Cache\SimpleCache\InvalidArgumentException; + +class YacDriver implements CacheInterface +{ + /** + * @var string + */ + private $namespace; + + /** + * @var int + */ + private $defaultLifetime; + + /** + * yac client + * + * @var \Yac + */ + protected $yac; + + /** + * if your key is longer than this, maybe you can use md5 result as the key + */ + const KEY_MAX_LEN = 48; + + public function __construct($namespace = '', $defaultLifetime = 0) + { + $this->namespace = $namespace; + $this->defaultLifetime = $defaultLifetime; + $this->yac = new \Yac($namespace); + } + + public function get($key, $default = null) + { + $this->assertKeyName($key); + $key = $this->buildKeyName($key); + + return $this->yac->get($key) ?: $default; + } + + public function set($key, $value, $ttl = null) + { + $this->assertKeyName($key); + $key = $this->buildKeyName($key); + + $ttl = is_null($ttl) ? $this->defaultLifetime : $ttl; + + return $this->yac->set($key, $value, (int)$ttl); + } + + public function delete($key) + { + $this->assertKeyName($key); + $key = $this->buildKeyName($key); + + return $this->yac->delete($key); + } + + public function clear() + { + return $this->yac->flush(); + } + + public function getMultiple($keys, $default = null) + { + if(!is_array($keys)) { + return array(); + } + + $hashKeyMap = array(); + foreach($keys as $index => $key) + { + $this->assertKeyName($key); + if(strlen($key) > self::KEY_MAX_LEN) + { + $keys[$index] = $this->buildKeyName($key); + $hashKeyMap[$keys[$index]] = $key; + } + } + + $results = $this->yac->get($keys); + if($results !== false) + { + foreach($results as $key => $value) + { + if(isset($hashKeyMap[$key])) + { + $results[$hashKeyMap[$key]] = $value; + unset($results[$key]); + } + } + return $results; + } + + $results = array(); + foreach($keys as $key) + { + $results[$key] = $default; + } + return $results; + } + + public function setMultiple($values, $ttl = null) + { + if(!is_array($values)) return false; + + foreach($values as $key => $value) + { + if(strlen($key) > self::KEY_MAX_LEN) + { + $values[$this->buildKeyName($key)] = $value; + unset($values[$key]); + } + } + + $ttl = is_null($ttl) ? $this->defaultLifetime : $ttl; + + return $this->yac->set($values, $ttl); + } + + public function deleteMultiple($keys) + { + foreach($keys as $index => $key) + { + $keys[$index] = $this->buildKeyName($key); + } + return $this->yac->delete($keys); + } + + public function has($key) + { + return $this->get($key) !== null; + } + + /** + * @param string $key + * + * @return string + */ + private function buildKeyName($key) + { + if(strlen($key) > self::KEY_MAX_LEN) + { + $key = md5($key); + } + return $key; + } + + /** + * @param string[] $keys + * + * @return string[] + */ + private function buildKeyNames(array $keys) + { + return array_map(function ($key) { + return $this->buildKeyName($key); + }, $keys); + } + + /** + * @param mixed $key + * + * @throws InvalidArgumentException + */ + private function assertKeyName($key) + { + if(!is_scalar($key) || is_bool($key)) throw new InvalidArgumentException(); + } + + /** + * @param string[] $keys + * + * @throws InvalidArgumentException + */ + private function assertKeyNames(array $keys) + { + array_map(function ($value) { + $this->assertKeyName($value); + }, $keys); + } +} diff --git a/lib/cache/simple-cache/CacheException.php b/lib/cache/simple-cache/CacheException.php new file mode 100644 index 0000000000..330b06084b --- /dev/null +++ b/lib/cache/simple-cache/CacheException.php @@ -0,0 +1,7 @@ + $keys A list of keys that can be obtained in a single operation. + * @param mixed $default Default value to return for keys that do not exist. + * + * @return iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value. + * + * @throws InvalidArgumentException + * MUST be thrown if $keys is neither an array nor a Traversable, + * or if any of the $keys are not a legal value. + */ + public function getMultiple($keys, $default = null); + + /** + * Persists a set of key => value pairs in the cache, with an optional TTL. + * + * @param iterable $values A list of key => value pairs for a multiple-set operation. + * @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and + * the driver supports TTL then the library may set a default value + * for it or let the driver take care of that. + * + * @return bool True on success and false on failure. + * + * @throws InvalidArgumentException + * MUST be thrown if $values is neither an array nor a Traversable, + * or if any of the $values are not a legal value. + */ + public function setMultiple($values, $ttl = null); + + /** + * Deletes multiple cache items in a single operation. + * + * @param iterable $keys A list of string-based keys to be deleted. + * + * @return bool True if the items were successfully removed. False if there was an error. + * + * @throws InvalidArgumentException + * MUST be thrown if $keys is neither an array nor a Traversable, + * or if any of the $keys are not a legal value. + */ + public function deleteMultiple($keys); + + /** + * Determines whether an item is present in the cache. + * + * NOTE: It is recommended that has() is only to be used for cache warming type purposes + * and not to be used within your live applications operations for get/set, as this method + * is subject to a race condition where your has() will return true and immediately after, + * another script can remove it making the state of your app out of date. + * + * @param string $key The cache item key. + * + * @return bool + * + * @throws InvalidArgumentException + * MUST be thrown if the $key string is not a legal value. + */ + public function has($key); +} diff --git a/lib/cache/simple-cache/InvalidArgumentException.php b/lib/cache/simple-cache/InvalidArgumentException.php new file mode 100644 index 0000000000..825bcdf380 --- /dev/null +++ b/lib/cache/simple-cache/InvalidArgumentException.php @@ -0,0 +1,7 @@ +branch) $fromRevision = $this->branch; - if($toRevision == 'HEAD' and $this->branch) $toRevision = $this->branch; + if($fromRevision === 'HEAD' and $this->branch) $fromRevision = $this->branch; + if($toRevision === 'HEAD' and $this->branch) $toRevision = $this->branch; if($fromRevision === $toRevision) { $logs = array(); @@ -748,14 +748,12 @@ class Gitea $list = execCmd($cmd . ' 2>&1', 'array', $result); if($result) return array(); - $infos = array(); foreach($list as $entry) { list($mod, $kind, $revision, $size, $name) = preg_split('/[\t ]+/', $entry); /* Get commit info. */ $pathName = ltrim($path . DIRECTORY_SEPARATOR . $name, DIRECTORY_SEPARATOR); - $info->kind = $kind == 'tree' ? 'dir' : 'file'; if($kind == 'tree') { $this->getAllFiles($pathName, $revision, $lists); diff --git a/lib/scm/gitrepo.class.php b/lib/scm/gitrepo.class.php index 0f43da095d..6bcdce6673 100644 --- a/lib/scm/gitrepo.class.php +++ b/lib/scm/gitrepo.class.php @@ -745,14 +745,12 @@ class GitRepo $list = execCmd($cmd . ' 2>&1', 'array', $result); if($result) return array(); - $infos = array(); foreach($list as $entry) { list($mod, $kind, $revision, $size, $name) = preg_split('/[\t ]+/', $entry); /* Get commit info. */ $pathName = ltrim($path . DIRECTORY_SEPARATOR . $name, DIRECTORY_SEPARATOR); - $info->kind = $kind == 'tree' ? 'dir' : 'file'; if($kind == 'tree') { $this->getAllFiles($pathName, $revision, $lists); diff --git a/lib/scm/gogs.class.php b/lib/scm/gogs.class.php index 3ecd938acb..95c9173b21 100644 --- a/lib/scm/gogs.class.php +++ b/lib/scm/gogs.class.php @@ -783,14 +783,12 @@ class Gogs $list = execCmd($cmd . ' 2>&1', 'array', $result); if($result) return array(); - $infos = array(); foreach($list as $entry) { list($mod, $kind, $revision, $size, $name) = preg_split('/[\t ]+/', $entry); /* Get commit info. */ $pathName = ltrim($path . DIRECTORY_SEPARATOR . $name, DIRECTORY_SEPARATOR); - $info->kind = $kind == 'tree' ? 'dir' : 'file'; if($kind == 'tree') { $this->getAllFiles($pathName, $revision, $lists); diff --git a/module/action/control.php b/module/action/control.php index 92284c76e4..971a251e50 100755 --- a/module/action/control.php +++ b/module/action/control.php @@ -376,7 +376,7 @@ class action extends control /* Check type of siblings. */ $siblings = $this->dao->select('DISTINCT type')->from(TABLE_EXECUTION)->where('deleted')->eq(0)->andWhere('parent')->eq($execution->parent)->fetchPairs('type'); - if($execution->type == 'stage' and (isset($bsiblings['sprint']) or isset($siblings['kanban']))) die(js::alert($this->lang->action->hasOtherType[$execution->type])); + if($execution->type == 'stage' and (isset($siblings['sprint']) or isset($siblings['kanban']))) die(js::alert($this->lang->action->hasOtherType[$execution->type])); if(($execution->type == 'sprint' or $execution->type == 'kanban') and isset($siblings['stage'])) die(js::alert($this->lang->action->hasOtherType[$execution->type])); /* If parent stage is not exists, you should recover its parent stages, refresh status. */ diff --git a/module/action/model.php b/module/action/model.php index 0dfdf4a832..6a346ac118 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -489,7 +489,7 @@ class actionModel extends model elseif($actionName == 'importedcard') { $title = $this->dao->select('name')->from(TABLE_KANBAN)->where('id')->eq($action->extra)->fetch('name'); - if($title) $action->extra = common::hasPriv('kanban', 'view') ? html::a(helper::createLink('kanban', 'view', "kanbanID=$action->extra"), "#$action->extra " . $title) : "#$action->extra " . $title; + if($title) $action->extra = (common::hasPriv('kanban', 'view') and !isonlybody()) ? html::a(helper::createLink('kanban', 'view', "kanbanID=$action->extra"), "#$action->extra " . $title) : "#$action->extra " . $title; } elseif($actionName == 'createchildren') { @@ -938,6 +938,8 @@ class actionModel extends model } else { + if($actionType == 'restoredsnapshot' && in_array($action->objectType, array('vm', 'zanode')) && $value == 'defaultSnap') $value = $this->lang->$objectType->snapshot->defaultSnapName; + $desc = str_replace('$' . $key, $value, $desc); } } diff --git a/module/admin/config.php b/module/admin/config.php index 6739ff17f1..f569c10192 100755 --- a/module/admin/config.php +++ b/module/admin/config.php @@ -8,9 +8,9 @@ if(!isset($config->safe)) $config->safe = new stdclass(); if(!isset($config->safe->weak)) $config->safe->weak = '123456,password,12345,12345678,qwerty,123456789,1234,1234567,abc123,111111,123123'; $config->admin->menuGroup['system'] = array('custom|mode', 'backup', 'cron', 'action|trash', 'admin|xuanxuan', 'setting|xuanxuan', 'admin|license', 'admin|checkweak', 'admin|resetpwdsetting', 'admin|safe', 'custom|timezone', 'search|buildindex', 'admin|tableengine', 'ldap', 'custom|libreoffice', 'conference', 'client'); -$config->admin->menuGroup['user'] = array('dept', 'company', 'user', 'group'); +$config->admin->menuGroup['company'] = array('dept', 'company', 'user', 'group', 'tutorial'); $config->admin->menuGroup['switch'] = array('admin|setmodule'); -$config->admin->menuGroup['model'] = array('auditcl', 'stage', 'design', 'cmcl', 'reviewcl', 'custom|required', 'custom|set', 'custom|flow', 'custom|code', 'custom|estimate', 'custom|hours', 'subject', 'process', 'activity', 'zoutput', 'classify', 'holiday', 'reviewsetting'); +$config->admin->menuGroup['model'] = array('auditcl', 'stage', 'design', 'cmcl', 'reviewcl', 'custom|required', 'custom|set', 'custom|flow', 'custom|code', 'custom|percent','custom|estimate', 'custom|hours', 'subject', 'process', 'activity', 'zoutput', 'classify', 'holiday', 'reviewsetting'); $config->admin->menuGroup['feature'] = array('custom|set', 'custom|product', 'custom|execution', 'custom|required', 'custom|kanban', 'approvalflow', 'measurement', 'meetingroom', 'custom|browsestoryconcept', 'custom|kanban', 'sqlbuilder', 'report'); $config->admin->menuGroup['template'] = array('custom|set', 'baseline'); $config->admin->menuGroup['message'] = array('mail', 'webhook', 'sms', 'message'); @@ -72,14 +72,14 @@ $config->admin->extAPIURL = $config->admin->apiSite . 'extension-apiGetExte $config->admin->patchAPIURL = $config->admin->apiSite . 'extension-apiGetExtensions-bymodule-MTIxOA==-0-100-1.json'; $config->admin->downloadAPIURL = $config->admin->apiSite . 'download.json'; $config->admin->videoAPIURL = $config->admin->apiSite . 'publicclass.json'; -$config->admin->liteMenuList = array('system', 'user', 'feature', 'message', 'extension', 'dev'); +$config->admin->liteMenuList = array('system', 'company', 'feature', 'message', 'extension', 'dev'); $config->admin->helpURL['system'] = 'https://www.zentao.net/book/zentaopms/538.html'; -$config->admin->helpURL['user'] = 'https://www.zentao.net/book/zentaopms/538.html'; -$config->admin->helpURL['switch'] = 'https://www.zentao.net/book/zentaopms/538.html'; +$config->admin->helpURL['company'] = 'https://www.zentao.net/book/zentaopms/38.html'; +$config->admin->helpURL['switch'] = 'https://www.zentao.net/book/zentaopms/38.html'; $config->admin->helpURL['model'] = 'https://www.zentao.net/book/zentaopms/533.html'; -$config->admin->helpURL['feature'] = 'https://www.zentao.net/book/zentaopms/538.html'; -$config->admin->helpURL['template'] = 'https://www.zentao.net/book/zentaopms/538.html'; +$config->admin->helpURL['feature'] = 'https://www.zentao.net/book/zentaopms/38.html'; +$config->admin->helpURL['template'] = 'https://www.zentao.net/book/zentaopms/38.html'; $config->admin->helpURL['message'] = 'https://www.zentao.net/book/zentaopms/email-notification-541.html'; $config->admin->helpURL['extension'] = 'https://www.zentao.net/book/zentaopms/536.html'; $config->admin->helpURL['dev'] = 'https://www.zentao.net/book/zentaopms/537.html'; diff --git a/module/admin/control.php b/module/admin/control.php index dba531df46..97238f0cfe 100755 --- a/module/admin/control.php +++ b/module/admin/control.php @@ -11,6 +11,25 @@ */ class admin extends control { + /** + * The gogs constructor. + * @param string $moduleName + * @param string $methodName + */ + public function __construct($moduleName = '', $methodName = '') + { + parent::__construct($moduleName, $methodName); + + if(!isset($this->config->global->sn)) + { + $this->loadModel('setting'); + $this->setting->setItem('system.common.global.sn', $this->setting->computeSN()); + + if(!isset($this->config->global)) $this->config->global = new stdclass(); + $this->config->global->sn = $this->setting->getItem('owner=system&module=common§ion=global&key=sn'); + } + } + /** * Index page. * @access public @@ -34,23 +53,52 @@ class admin extends control $this->loadModel('misc'); - $hasInternet = $this->admin->checkInternet(); - $clientLang = $this->app->getClientLang(); - $langNotCN = common::checkNotCN(); - $dateUsed = $this->admin->genDateUsed(); + $clientLang = $this->app->getClientLang(); + $langNotCN = common::checkNotCN(); + $dateUsed = $this->admin->genDateUsed(); + + $zentaoData = $this->admin->getZentaoData(); + $hasInternet = $zentaoData->hasData; $this->view->title = $this->lang->admin->common; $this->view->position[] = $this->lang->admin->index; - $this->view->plugins = $this->admin->getExtensionsByAPI('plugin', $langNotCN ? 5 : 6, $hasInternet); - $this->view->patches = $this->admin->getExtensionsByAPI('patch', 5, $hasInternet); + $this->view->plugins = $zentaoData->plugins; + $this->view->patches = $zentaoData->patches; $this->view->dateUsed = $dateUsed; $this->view->hasInternet = $hasInternet; - $this->view->dynamics = ($hasInternet and !$langNotCN) ? $this->admin->getDynamicsByAPI(3) : array(); - $this->view->publicClass = ($hasInternet and !$langNotCN) ? $this->admin->getPublicClassByAPI(3) : array(); + $this->view->dynamics = $zentaoData->news; + $this->view->publicClass = $zentaoData->publicclass; $this->view->langNotCN = $langNotCN; $this->display(); } + /** + * Get zentao.net data by api. + * + * @access public + * @return void + */ + public function ajaxSetZentaoData() + { + $hasInternet = $this->admin->checkInternet(); + + if($hasInternet) + { + $nextWeek = date('Y-m-d', strtotime('-7 days')); + $zentaoData = $this->loadModel('block')->getZentaoData($nextWeek); + + if(empty($zentaoData)) + { + $this->admin->setExtensionsByAPI('plugin', 6); + $this->admin->setExtensionsByAPI('patch', 5); + $this->admin->setDynamicsByAPI(3); + $this->admin->setPublicClassByAPI(3); + } + } + + return $this->send(array('result' => 'success')); + } + /** * Ignore notice of register and bind. * diff --git a/module/admin/css/index.css b/module/admin/css/index.css index fd06878df7..d457164dbc 100755 --- a/module/admin/css/index.css +++ b/module/admin/css/index.css @@ -20,6 +20,8 @@ .font-20 {font-size: 20px;} .font-24 {font-size: 24px;} .radius-4 {border-radius: 4px;} +.white-nowrap {white-space: nowrap;} +.w-full {width: 100%;} #notice {margin: -20px -20px 20px; padding: 20px;} #zentaoLinks {margin-top: 20px;} @@ -39,9 +41,13 @@ .settings-list > .setting-box > button.btn {padding: 5px 10px; height: 100%; width: 100%; display: flex; flex-direction: column; justify-content: space-between; cursor: pointer; white-space: unset; text-align: unset; border: 1px solid rgba(227, 228, 233, 0.6)} .settings-list > .setting-box > .btn:hover {background: unset;} .settings-list > .setting-box > .btn[disabled] {cursor: not-allowed; pointer-events: unset;} -.settings-list > .setting-box > .btn[disabled] > a {pointer-events: none;} +.settings-list > .setting-box > .btn[disabled] > a, +.settings-list > .setting-box > .btn[disabled] a.setting-help, +.settings-list > .setting-box > .btn[disabled] p.setting-desc {pointer-events: none;} +.settings-list > .setting-box > .btn > h4 {padding-right: 5px;} +.settings-list > .setting-box > .btn > h4 > div {gap: 3px;} .settings-list > .setting-box > .btn > h4 > img {padding-right: 8px; padding-bottom: 3px; width: 32px; height: 27px;} -.settings-list > .setting-box > .btn > .setting-desc {padding-bottom: 16px; color: #5E626D; line-height: 25px; height: 50px;} +.settings-list > .setting-box > .btn > .setting-desc {padding-bottom: 16px; line-height: 25px; height: 50px; overflow: hidden;} .settings-list.lite-setting > .setting-box {flex: 1 1 30%;} .plugin-list {display: flex; flex-wrap: wrap; padding: 12px 4px 4px 4px;} @@ -56,10 +62,12 @@ .official {justify-content: center;} .official > .panel-title {position: absolute; top: 0px;} -.official-img {background-image: url('/static/images/wechat.jpg'); background-repeat: no-repeat; background-size: contain; flex: 1 1 30%; aspect-ratio: 1 / 1; background-position: center;} -.official-content {flex: 0 0 60%; display: flex; flex-direction: column; justify-content: center; padding-left: 10px;} +.official-img {background-image: url('static/images/wechat.jpg'); background-repeat: no-repeat; background-size: contain; flex: 1 1 30%; aspect-ratio: 1 / 1; background-position: center;} +.official-content {flex: 0 0 60%; display: flex; flex-direction: column; padding-left: 10px; padding-top: 15px;} .official-content > .content {color: #838A9D; font-size: 12px; line-height: 22px; padding-top: 6px;} .official-content > .title {color: #313C52; font-size: 13px; line-height: 14px;} +.panel-link {color: #313c52; padding-left: 10px; font-size: 13px;} +.panel-link > a {border-bottom: 1px solid;} .classList > .classItem {flex: 1 1 30%; margin: 5px 5px 16px 5px; border: 1px solid rgba(227, 228, 233, 0.6); border-radius: 4px; padding-bottom: 5px; align-items: center;} .classItem > .imgBack {flex: 1 1 50%;} @@ -69,13 +77,15 @@ .panel.publicClass {padding: 0 10px;} .icon.follow-us {font-size: 20px; padding-left: 10px;} -.setting-help {width: 45px; color: #9EA3B0; padding-top: 15px;} +.setting-help {color: #9EA3B0; padding-left: 5px;} +.setting-help > a {font-size: 15px;} [lang^='zh'] .setting-help {padding-top: 0;} .pointer-none {pointer-events: none;} /* css for without internet */ .main.without-internet {display: flex; flex-wrap: wrap;} .main.without-internet > .plug.panel {flex: 1 1 60%; margin-bottom: unset; margin-right: 16px;} +.main.without-internet > .bottom {flex: 1 1 30%;} .main.without-internet > .bottom > .official.panel {margin-right: unset;} .main.without-internet > .bottom > .official.panel > .main-panel {flex-direction: row-reverse;} @@ -84,7 +94,7 @@ .time-block {background: #EDEEF2; padding:2px 4px; border-radius: 4px; color: #0B0F18; font-size: 15px; margin: 0 4px;} .dynamic-block {height: 74px; padding: 12px 16px; display: flex; justify-content: space-between; position: relative; line-height: 20px; border-top: 1px solid #E3E4E9;} .dynamic-content {height: 50px; line-height: 25px; overflow: hidden;} -.dynamic-time {white-space: nowrap; position: absolute; right: 12px; bottom: 10px; padding-right: 12px; background: white; color: #5E626D;} +.dynamic-time {white-space: nowrap; position: absolute; right: 12px; bottom: 12px; padding-left: 10px; padding-right: 12px; background: white; color: #5E626D;} .time-count {letter-spacing: 1px;} .patch-block {padding: 10px 16px 12px; line-height: 20px; border-top: 1px solid #E3E4E9;} diff --git a/module/admin/js/index.js b/module/admin/js/index.js index f97411945c..fed2be7c68 100644 --- a/module/admin/js/index.js +++ b/module/admin/js/index.js @@ -10,4 +10,6 @@ $(function() { window.open($(this).data('link')); }); + + if(!hasInternet) $.get(createLink('admin', 'ajaxSetZentaoData')); }); diff --git a/module/admin/lang/de.php b/module/admin/lang/de.php index 115ee795ec..9829c02c0e 100755 --- a/module/admin/lang/de.php +++ b/module/admin/lang/de.php @@ -66,12 +66,13 @@ $lang->admin->notice->ignore = "Ignorieren"; $lang->admin->notice->int = "『%s』sollte eine positive Zahl sein."; $lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = 'Verbinde neues Konto'; +$lang->admin->registerNotice->common = 'Register Account'; $lang->admin->registerNotice->caption = 'In der Zentao Community registieren'; $lang->admin->registerNotice->click = 'Bitte registieren Sie sich hier'; $lang->admin->registerNotice->lblAccount = 'mindestens 3 Zeichen bitte; mit Buchsten und Ziffern.'; $lang->admin->registerNotice->lblPasswd = 'mindestens 6 Zeichen bitte; mit Buchsten und Ziffern.'; $lang->admin->registerNotice->submit = 'Registieren'; +$lang->admin->registerNotice->submitHere = 'RegistierenHere'; $lang->admin->registerNotice->bind = "Verbinde bestehendes Konto"; $lang->admin->registerNotice->success = "Sie haben sich erfolgreich registriert!"; @@ -86,9 +87,11 @@ $lang->admin->setModule->opened = 'Opened'; $lang->admin->setModule->closed = 'Closed'; $lang->admin->setModule->my = 'My'; -$lang->admin->setModule->product = 'Product'; -$lang->admin->setModule->scrum = 'Scrum Project'; -$lang->admin->setModule->waterfall = 'Waterfall Project'; +$lang->admin->setModule->product = $lang->productCommon; +$lang->admin->setModule->scrum = 'Scrum ' . $lang->projectCommon; +$lang->admin->setModule->waterfall = 'Waterfall ' . $lang->projectCommon; +$lang->admin->setModule->agileplus = 'Agile + ' . $lang->projectCommon; +$lang->admin->setModule->waterfallplus = 'Waterfall + ' . $lang->projectCommon; $lang->admin->setModule->assetlib = 'Assetlib'; $lang->admin->setModule->other = 'Other'; @@ -183,6 +186,7 @@ $lang->admin->updateDynamics = 'Dynamics'; $lang->admin->updatePatch = 'Patch'; $lang->admin->upgradeRecommend = 'Recommend Upgrade'; $lang->admin->zentaoUsed = 'You have used ZenTao'; +$lang->admin->noPriv = 'You have no permission to visit this block.'; $lang->admin->openTag = 'ZenTao Opensource '; $lang->admin->bizTag = 'ZenTao Biz '; diff --git a/module/admin/lang/en.php b/module/admin/lang/en.php index f377b35bad..989d926c26 100755 --- a/module/admin/lang/en.php +++ b/module/admin/lang/en.php @@ -66,12 +66,13 @@ $lang->admin->notice->ignore = "Ignore"; $lang->admin->notice->int = "『%s』should be a positive integer."; $lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = 'Bind Account'; +$lang->admin->registerNotice->common = 'Register Account'; $lang->admin->registerNotice->caption = 'ZenTao Community Signup'; $lang->admin->registerNotice->click = 'Sign Up'; $lang->admin->registerNotice->lblAccount = '>= 3 letters and numbers'; $lang->admin->registerNotice->lblPasswd = '>= 6 letters and numbers'; $lang->admin->registerNotice->submit = 'Submit'; +$lang->admin->registerNotice->submitHere = 'RegistierenHere'; $lang->admin->registerNotice->bind = "Bind Exsiting Account"; $lang->admin->registerNotice->success = "You have signed up!"; @@ -86,9 +87,11 @@ $lang->admin->setModule->opened = 'Opened'; $lang->admin->setModule->closed = 'Closed'; $lang->admin->setModule->my = 'My'; -$lang->admin->setModule->product = 'Product'; -$lang->admin->setModule->scrum = 'Scrum Project'; -$lang->admin->setModule->waterfall = 'Waterfall Project'; +$lang->admin->setModule->product = $lang->productCommon; +$lang->admin->setModule->scrum = 'Scrum ' . $lang->projectCommon; +$lang->admin->setModule->waterfall = 'Waterfall ' . $lang->projectCommon; +$lang->admin->setModule->agileplus = 'Agile + ' . $lang->projectCommon; +$lang->admin->setModule->waterfallplus = 'Waterfall + ' . $lang->projectCommon; $lang->admin->setModule->assetlib = 'Assetlib'; $lang->admin->setModule->other = 'Other'; @@ -183,6 +186,7 @@ $lang->admin->updateDynamics = 'Dynamics'; $lang->admin->updatePatch = 'Patch'; $lang->admin->upgradeRecommend = 'Recommend Upgrade'; $lang->admin->zentaoUsed = 'You have used ZenTao'; +$lang->admin->noPriv = 'You have no permission to visit this block.'; $lang->admin->openTag = 'ZenTao Opensource '; $lang->admin->bizTag = 'ZenTao Biz '; diff --git a/module/admin/lang/fr.php b/module/admin/lang/fr.php index 416bdc6965..3c6b0b8179 100755 --- a/module/admin/lang/fr.php +++ b/module/admin/lang/fr.php @@ -66,12 +66,13 @@ $lang->admin->notice->ignore = "Ignorer"; $lang->admin->notice->int = "『 %s 』 devrait être un entier positif."; $lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = 'Connectez-vous avec votre nouveau compte'; +$lang->admin->registerNotice->common = 'Register Account'; $lang->admin->registerNotice->caption = "S'enregistrer sur la communauté Zentao"; $lang->admin->registerNotice->click = "S'enregistrer ici"; $lang->admin->registerNotice->lblAccount = '>= 3 lettres et chiffres'; $lang->admin->registerNotice->lblPasswd = '>= 6 lettres et chiffres'; $lang->admin->registerNotice->submit = "S'enregistrer"; +$lang->admin->registerNotice->submitHere = "S'enregistrer here"; $lang->admin->registerNotice->bind = "S'associer à un compte existant"; $lang->admin->registerNotice->success = "Vous êtes enregistré !"; @@ -86,9 +87,11 @@ $lang->admin->setModule->opened = 'Opened'; $lang->admin->setModule->closed = 'Closed'; $lang->admin->setModule->my = 'My'; -$lang->admin->setModule->product = 'Product'; -$lang->admin->setModule->scrum = 'Scrum Project'; -$lang->admin->setModule->waterfall = 'Waterfall Project'; +$lang->admin->setModule->product = $lang->productCommon; +$lang->admin->setModule->scrum = 'Scrum ' . $lang->projectCommon; +$lang->admin->setModule->waterfall = 'Waterfall ' . $lang->projectCommon; +$lang->admin->setModule->agileplus = 'Agile + ' . $lang->projectCommon; +$lang->admin->setModule->waterfallplus = 'Waterfall + ' . $lang->projectCommon; $lang->admin->setModule->assetlib = 'Assetlib'; $lang->admin->setModule->other = 'Other'; @@ -183,6 +186,7 @@ $lang->admin->updateDynamics = 'Dynamics'; $lang->admin->updatePatch = 'Patch'; $lang->admin->upgradeRecommend = 'Recommend Upgrade'; $lang->admin->zentaoUsed = 'You have used ZenTao'; +$lang->admin->noPriv = 'You have no permission to visit this block.'; $lang->admin->openTag = 'ZenTao Opensource '; $lang->admin->bizTag = 'ZenTao Biz '; diff --git a/module/admin/lang/menu.php b/module/admin/lang/menu.php index 28890757f0..4f0b3f1d03 100644 --- a/module/admin/lang/menu.php +++ b/module/admin/lang/menu.php @@ -3,45 +3,46 @@ global $config; $lang->admin->menuList = new stdclass(); $lang->admin->menuList->system['name'] = $lang->admin->menuSetting['system']['name']; $lang->admin->menuList->system['desc'] = $lang->admin->menuSetting['system']['desc']; -$lang->admin->menuList->system['order'] = 1; - -$lang->admin->menuList->user['name'] = $lang->admin->menuSetting['user']['name']; -$lang->admin->menuList->user['desc'] = $lang->admin->menuSetting['user']['desc']; -$lang->admin->menuList->user['order'] = 2; +$lang->admin->menuList->system['order'] = 5; $lang->admin->menuList->switch['name'] = $lang->admin->menuSetting['switch']['name']; $lang->admin->menuList->switch['desc'] = $lang->admin->menuSetting['switch']['desc']; -$lang->admin->menuList->switch['order'] = 3; +$lang->admin->menuList->switch['link'] = 'admin|setmodule'; +$lang->admin->menuList->switch['order'] = 10; + +$lang->admin->menuList->company['name'] = $lang->admin->menuSetting['user']['name']; +$lang->admin->menuList->company['desc'] = $lang->admin->menuSetting['user']['desc']; +$lang->admin->menuList->company['order'] = 15; $lang->admin->menuList->model['name'] = $lang->admin->menuSetting['model']['name']; $lang->admin->menuList->model['desc'] = $lang->admin->menuSetting['model']['desc']; -$lang->admin->menuList->model['order'] = 4; +$lang->admin->menuList->model['order'] = 20; $lang->admin->menuList->feature['name'] = $lang->admin->menuSetting['feature']['name']; $lang->admin->menuList->feature['desc'] = $lang->admin->menuSetting['feature']['desc']; -$lang->admin->menuList->feature['order'] = 5; +$lang->admin->menuList->feature['order'] = 25; $lang->admin->menuList->template['name'] = $lang->admin->menuSetting['template']['name']; $lang->admin->menuList->template['desc'] = $lang->admin->menuSetting['template']['desc']; -$lang->admin->menuList->template['order'] = 6; +$lang->admin->menuList->template['order'] = 30; $lang->admin->menuList->message['name'] = $lang->admin->menuSetting['message']['name']; $lang->admin->menuList->message['desc'] = $lang->admin->menuSetting['message']['desc']; -$lang->admin->menuList->message['order'] = 7; +$lang->admin->menuList->message['order'] = 35; $lang->admin->menuList->extension['name'] = $lang->admin->menuSetting['extension']['name']; $lang->admin->menuList->extension['desc'] = $lang->admin->menuSetting['extension']['desc']; $lang->admin->menuList->extension['link'] = 'extension|browse'; -$lang->admin->menuList->extension['order'] = 8; +$lang->admin->menuList->extension['order'] = 40; $lang->admin->menuList->dev['name'] = $lang->admin->menuSetting['dev']['name']; $lang->admin->menuList->dev['desc'] = $lang->admin->menuSetting['dev']['desc']; -$lang->admin->menuList->dev['order'] = 9; +$lang->admin->menuList->dev['order'] = 45; $lang->admin->menuList->convert['name'] = $lang->admin->menuSetting['convert']['name']; $lang->admin->menuList->convert['desc'] = $lang->admin->menuSetting['convert']['desc']; $lang->admin->menuList->convert['link'] = 'convert|convertjira'; -$lang->admin->menuList->convert['order'] = 10; +$lang->admin->menuList->convert['order'] = 50; $lang->admin->menuList->system['subMenu']['mode'] = array('link' => "{$lang->custom->mode}|custom|mode|"); $lang->admin->menuList->system['subMenu']['backup'] = array('link' => "{$lang->backup->common}|backup|index|"); @@ -63,38 +64,45 @@ $lang->admin->menuList->system['menuOrder']['50'] = 'tableengine'; $lang->admin->menuList->system['dividerMenu'] = ',safe,'; -$lang->admin->menuList->user['subMenu']['dept'] = array('link' => "{$lang->dept->common}|dept|browse|", 'subModule' => 'dept'); -$lang->admin->menuList->user['subMenu']['user'] = array('link' => "{$lang->user->common}|company|browse|", 'subModule' => 'user'); -$lang->admin->menuList->user['subMenu']['group'] = array('link' => "{$lang->priv}|group|browse|", 'subModule' => 'group'); +$lang->admin->menuList->company['subMenu']['dept'] = array('link' => "{$lang->dept->common}|dept|browse|", 'subModule' => 'dept'); +$lang->admin->menuList->company['subMenu']['browseUser'] = array('link' => "{$lang->user->common}|company|browse|", 'subModule' => 'user,tutorial'); +$lang->admin->menuList->company['subMenu']['group'] = array('link' => "{$lang->priv}|group|browse|", 'subModule' => 'group'); -$lang->admin->menuList->user['menuOrder']['5'] = 'dept'; -$lang->admin->menuList->user['menuOrder']['10'] = 'user'; -$lang->admin->menuList->user['menuOrder']['15'] = 'group'; +$lang->admin->menuList->company['menuOrder']['5'] = 'dept'; +$lang->admin->menuList->company['menuOrder']['10'] = 'browseUser'; +$lang->admin->menuList->company['menuOrder']['15'] = 'group'; -$lang->admin->menuList->switch['subMenu']['setmodule'] = array('link' => "{$lang->admin->module}|admin|setmodule|"); - -$lang->admin->menuList->switch['menuOrder']['5'] = 'setmodule'; - -$lang->admin->menuList->model['subMenu']['common'] = array('link' => "{$lang->globalSetting}|custom|required|module=project", 'subModule' => 'custom,subject,holiday'); -$lang->admin->menuList->model['subMenu']['scrum'] = array('link' => "{$lang->scrumModel}|auditcl|scrumbrowse|", 'subModule' => 'auditcl'); -$lang->admin->menuList->model['subMenu']['waterfall'] = array('link' => "{$lang->waterfallModel}|stage|settype|", 'subModule' => 'stage'); +$lang->admin->menuList->model['subMenu']['common'] = array('link' => "{$lang->globalSetting}|custom|required|module=project", 'subModule' => 'custom,subject,holiday,stage', 'exclude' => 'stage-browse,stage-plusbrowse,stage-create,stage-edit,stage-batchcreate'); +$lang->admin->menuList->model['subMenu']['scrum'] = array('link' => "{$lang->scrumModel}|auditcl|scrumbrowse|", 'subModule' => 'auditcl'); +$lang->admin->menuList->model['subMenu']['waterfall'] = array('link' => "{$lang->waterfallModel}|stage|browse|", 'subModule' => 'stage', 'exclude' => 'stage-settype,stage-plusbrowse'); +$lang->admin->menuList->model['subMenu']['agileplus'] = array('link' => "{$lang->agilePlusModel}|auditcl|agileplusbrowse|", 'subModule' => 'auditcl'); +$lang->admin->menuList->model['subMenu']['waterfallplus'] = array('link' => "{$lang->waterfallPlusModel}|stage|plusbrowse|", 'subModule' => 'stage', 'exclude' => 'stage-settype,stage-browse'); $lang->admin->menuList->model['menuOrder']['5'] = 'common'; $lang->admin->menuList->model['menuOrder']['10'] = 'scrum'; $lang->admin->menuList->model['menuOrder']['15'] = 'waterfall'; +$lang->admin->menuList->model['menuOrder']['20'] = 'agileplus'; +$lang->admin->menuList->model['menuOrder']['25'] = 'waterfallplus'; -$lang->admin->menuList->model['tabMenu']['common']['project'] = array('link' => "{$lang->project->common}|custom|required|module=project", 'alias' => 'set', 'exclude' => 'custom', 'links' => array('custom|set|')); -$lang->admin->menuList->model['tabMenu']['common']['build'] = array('link' => "{$lang->build->common}|custom|required|module=build", 'alias' => 'set', 'exclude' => 'custom'); -$lang->admin->menuList->model['tabMenu']['common']['flow'] = array('link' => "{$lang->custom->flow}|custom|flow|", 'divider' => true); -$lang->admin->menuList->model['tabMenu']['common']['code'] = array('link' => "{$lang->code}|custom|code|"); -$lang->admin->menuList->model['tabMenu']['common']['hours'] = array('link' => "{$lang->workingHour}|custom|hours|", 'subModule' => 'holiday', 'links' => array('holiday|browse|')); -$lang->admin->menuList->model['tabMenu']['waterfall']['stage'] = array('link' => "{$lang->stage->common}|stage|settype|", 'subModule' => 'stage', 'links' => array('stage|browse|')); -$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['5'] = 'project'; -$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['10'] = 'build'; -$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['35'] = 'flow'; -$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['40'] = 'code'; -$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['45'] = 'hours'; -$lang->admin->menuList->model['tabMenu']['menuOrder']['waterfall']['5'] = 'stage'; +$lang->admin->menuList->model['tabMenu']['common']['project'] = array('link' => "{$lang->project->common}|custom|required|module=project", 'alias' => 'set', 'exclude' => 'custom', 'links' => array('custom|set|module=project&field=unitList')); +if(helper::hasFeature('waterfall') or helper::hasFeature('waterfallplus')) $lang->admin->menuList->model['tabMenu']['common']['stage'] = array('link' => "{$lang->stage->type}|stage|settype|", 'subModule' => 'stage'); +$lang->admin->menuList->model['tabMenu']['common']['build'] = array('link' => "{$lang->build->common}|custom|required|module=build", 'alias' => 'set', 'exclude' => 'custom'); +$lang->admin->menuList->model['tabMenu']['common']['flow'] = array('link' => "{$lang->custom->flow}|custom|flow|", 'divider' => true); +$lang->admin->menuList->model['tabMenu']['common']['code'] = array('link' => "{$lang->code}|custom|code|"); + +$lang->admin->menuList->model['tabMenu']['common']['percent'] = array('link' => "{$lang->stage->percent}|custom|percent|"); +$lang->admin->menuList->model['tabMenu']['common']['hours'] = array('link' => "{$lang->workingHour}|custom|hours|", 'subModule' => 'holiday', 'links' => array('holiday|browse|', 'custom|hours|')); +if(helper::hasFeature('waterfall')) $lang->admin->menuList->model['tabMenu']['waterfall']['stage'] = array('link' => "{$lang->stage->list}|stage|browse|", 'subModule' => 'stage', 'exclude' => 'stage-plusbrowse'); +if(helper::hasFeature('waterfallplus')) $lang->admin->menuList->model['tabMenu']['waterfallplus']['stage'] = array('link' => "{$lang->stage->list}|stage|plusbrowse|", 'subModule' => 'stage', 'exclude' => 'stage-browse'); +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['5'] = 'project'; +if(helper::hasFeature('waterfall') or helper::hasFeature('waterfallplus')) $lang->admin->menuList->model['tabMenu']['menuOrder']['common']['7'] = 'stage'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['10'] = 'build'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['35'] = 'flow'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['40'] = 'code'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['43'] = 'percent'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['45'] = 'hours'; +if(helper::hasFeature('waterfall')) $lang->admin->menuList->model['tabMenu']['menuOrder']['waterfall']['5'] = 'stage'; +if(helper::hasFeature('waterfallplus')) $lang->admin->menuList->model['tabMenu']['menuOrder']['waterfallplus']['5'] = 'stage'; $lang->admin->menuList->feature['subMenu']['my'] = array('link' => "{$lang->my->common}|custom|set|module=todo&field=priList", 'exclude' => 'set,required'); $lang->admin->menuList->feature['subMenu']['product'] = array('link' => "{$lang->productCommon}|custom|required|module=product", 'exclude' => 'set,required', 'alias' => 'browsestoryconcept,product'); @@ -157,7 +165,7 @@ $lang->admin->menuList->message['menuOrder']['10'] = 'webhook'; $lang->admin->menuList->message['menuOrder']['20'] = 'browser'; $lang->admin->menuList->message['menuOrder']['25'] = 'setting'; -$lang->admin->menuList->dev['subMenu']['api'] = array('link' => "API|dev|api|module=index"); +$lang->admin->menuList->dev['subMenu']['api'] = array('link' => "{$lang->api->doc}|dev|api|module=index"); $lang->admin->menuList->dev['subMenu']['db'] = array('link' => "{$lang->database}|dev|db|table=" . trim(TABLE_EFFORT, '`')); $lang->admin->menuList->dev['subMenu']['editor'] = array('link' => "{$lang->editor}|dev|editor|"); $lang->admin->menuList->dev['subMenu']['entry'] = array('link' => "{$lang->admin->entry}|entry|browse|", 'subModule' => 'entry'); @@ -167,15 +175,28 @@ $lang->admin->menuList->dev['menuOrder']['10'] = 'db'; $lang->admin->menuList->dev['menuOrder']['15'] = 'editor'; $lang->admin->menuList->dev['menuOrder']['20'] = 'entry'; -if($config->edition != 'max') unset($lang->admin->menuList->model['subMenu']['scrum'], $lang->admin->menuList->model['menuOrder']['10'], $lang->admin->menuList->template); +if($config->edition != 'max') +{ + unset($lang->admin->menuList->model['subMenu']['scrum']); + unset($lang->admin->menuList->model['subMenu']['agileplus']); + unset($lang->admin->menuList->model['menuOrder']['10']); + unset($lang->admin->menuList->model['menuOrder']['20']); + unset($lang->admin->menuList->template); +} if(!helper::hasFeature('waterfall')) { unset($lang->admin->menuList->model['subMenu']['waterfall']); unset($lang->admin->menuList->model['menuOrder']['15']); } -if($config->edition == 'max' and !helper::hasFeature('scrum_auditplan')) +if(!helper::hasFeature('waterfallplus')) { - if(!helper::hasFeature('scrum_process')) unset($lang->admin->menuList->model['subMenu']['scrum'], $lang->admin->menuList->model['menuOrder']['10']); + unset($lang->admin->menuList->model['subMenu']['waterfallplus']); + unset($lang->admin->menuList->model['menuOrder']['25']); +} +if($config->edition == 'max') +{ + if(!helper::hasFeature('scrum_auditplan') and !helper::hasFeature('scrum_process')) unset($lang->admin->menuList->model['subMenu']['scrum'], $lang->admin->menuList->model['menuOrder']['10']); + if(!helper::hasFeature('agileplus_auditplan') and !helper::hasFeature('agileplus_process')) unset($lang->admin->menuList->model['subMenu']['agileplus'], $lang->admin->menuList->model['menuOrder']['20']); } if($config->vision == 'lite') @@ -189,8 +210,12 @@ if($config->vision == 'lite') unset($lang->admin->menuList->model['subMenu']['scrum']); unset($lang->admin->menuList->model['subMenu']['waterfall']); + unset($lang->admin->menuList->model['subMenu']['agileplus']); + unset($lang->admin->menuList->model['subMenu']['waterfallplus']); unset($lang->admin->menuList->model['menuOrder']['10']); unset($lang->admin->menuList->model['menuOrder']['15']); + unset($lang->admin->menuList->model['menuOrder']['20']); + unset($lang->admin->menuList->model['menuOrder']['25']); unset($lang->admin->menuList->feature['subMenu']['product']); unset($lang->admin->menuList->feature['subMenu']['execution']); diff --git a/module/admin/lang/vi.php b/module/admin/lang/vi.php index feff21edda..aafc0994bd 100755 --- a/module/admin/lang/vi.php +++ b/module/admin/lang/vi.php @@ -52,6 +52,7 @@ $lang->admin->registerNotice->click = 'Đăng ký'; $lang->admin->registerNotice->lblAccount = '>= 3 chữ và số'; $lang->admin->registerNotice->lblPasswd = '>= 6 chữ và số'; $lang->admin->registerNotice->submit = 'Gửi'; +$lang->admin->registerNotice->submitHere = 'submitHere'; $lang->admin->registerNotice->bind = "Kết nối với tài khoản đang tồn tại"; $lang->admin->registerNotice->success = "Bạn đã đăng ký!"; diff --git a/module/admin/lang/zh-cn.php b/module/admin/lang/zh-cn.php index 926dede079..bc4a35220a 100755 --- a/module/admin/lang/zh-cn.php +++ b/module/admin/lang/zh-cn.php @@ -61,17 +61,18 @@ $lang->admin->info->account = "您的禅道社区账户为%s。"; $lang->admin->info->log = '超出存天数的日志会被删除,需要开启计划任务。'; $lang->admin->notice = new stdclass(); -$lang->admin->notice->register = "友情提示:您还未在禅道社区(www.zentao.net)登记,%s进行登记,以及时获得禅道最新信息。"; +$lang->admin->notice->register = "可%s禅道社区 www.zentao.net,及时获得禅道最新信息。"; $lang->admin->notice->ignore = "不再提示"; $lang->admin->notice->int = "『%s』应当是正整数。"; $lang->admin->registerNotice = new stdclass(); -$lang->admin->registerNotice->common = '注册新帐号绑定'; +$lang->admin->registerNotice->common = '注册新帐号'; $lang->admin->registerNotice->caption = '禅道社区登记'; $lang->admin->registerNotice->click = '点击此处'; $lang->admin->registerNotice->lblAccount = '请设置您的用户名,英文字母和数字的组合,三位以上。'; $lang->admin->registerNotice->lblPasswd = '请设置您的密码。数字和字母的组合,六位以上。'; $lang->admin->registerNotice->submit = '登记'; +$lang->admin->registerNotice->submitHere = '在此登记'; $lang->admin->registerNotice->bind = "绑定已有帐号"; $lang->admin->registerNotice->success = "登记账户成功"; @@ -86,9 +87,11 @@ $lang->admin->setModule->opened = '已开启'; $lang->admin->setModule->closed = '已关闭'; $lang->admin->setModule->my = '地盘'; -$lang->admin->setModule->product = '产品'; -$lang->admin->setModule->scrum = '敏捷项目'; -$lang->admin->setModule->waterfall = '瀑布项目'; +$lang->admin->setModule->product = $lang->productCommon; +$lang->admin->setModule->scrum = '敏捷' . $lang->projectCommon; +$lang->admin->setModule->waterfall = '瀑布' . $lang->projectCommon; +$lang->admin->setModule->agileplus = '融合敏捷' . $lang->projectCommon; +$lang->admin->setModule->waterfallplus = '融合瀑布' . $lang->projectCommon; $lang->admin->setModule->assetlib = '资产库'; $lang->admin->setModule->other = '通用功能'; @@ -183,6 +186,7 @@ $lang->admin->updateDynamics = '更新动态'; $lang->admin->updatePatch = '补丁更新'; $lang->admin->upgradeRecommend = '推荐升级'; $lang->admin->zentaoUsed = '您已使用禅道'; +$lang->admin->noPriv = '您没有访问该区块的权限。'; $lang->admin->openTag = '禅道'; $lang->admin->bizTag = '禅道企业版'; diff --git a/module/admin/model.php b/module/admin/model.php index b06e55e5ce..faa37c44d4 100755 --- a/module/admin/model.php +++ b/module/admin/model.php @@ -269,13 +269,13 @@ class adminModel extends model $this->setSwitcher($menuKey); if(isset($this->lang->admin->menuList->$menuKey)) { - if(isset($this->lang->admin->menuList->$menuKey['subMenu'])) + if(isset($this->lang->admin->menuList->{$menuKey}['subMenu'])) { $moduleName = $this->app->rawModule; $methodName = $this->app->rawMethod; $firstParam = $this->app->rawParams ? reset($this->app->rawParams) : ''; - foreach($this->lang->admin->menuList->$menuKey['subMenu'] as $subMenuKey => $subMenu) + foreach($this->lang->admin->menuList->{$menuKey}['subMenu'] as $subMenuKey => $subMenu) { $subModule = ''; if($moduleName == 'custom' and strpos(',required,set,', $methodName) !== false) @@ -285,25 +285,25 @@ class adminModel extends model } if(!empty($subModule)) $subMenu['subModule'] = $subModule; - if(isset($this->lang->admin->menuList->$menuKey['tabMenu'][$subMenuKey])) + if(isset($this->lang->admin->menuList->{$menuKey}['tabMenu'][$subMenuKey])) { if(!empty($subModule)) { - $this->lang->admin->menuList->$menuKey['tabMenu'][$subMenuKey][$firstParam]['subModule'] = $subModule; - unset($this->lang->admin->menuList->$menuKey['tabMenu'][$subMenuKey][$firstParam]['exclude']); + $this->lang->admin->menuList->{$menuKey}['tabMenu'][$subMenuKey][$firstParam]['subModule'] = $subModule; + unset($this->lang->admin->menuList->{$menuKey}['tabMenu'][$subMenuKey][$firstParam]['exclude']); } - $subMenu['subMenu'] = $this->lang->admin->menuList->$menuKey['tabMenu'][$subMenuKey]; + $subMenu['subMenu'] = $this->lang->admin->menuList->{$menuKey}['tabMenu'][$subMenuKey]; } - if(isset($this->lang->admin->menuList->$menuKey['tabMenu']['menuOrder'][$subMenuKey])) $subMenu['menuOrder'] = $this->lang->admin->menuList->$menuKey['tabMenu']['menuOrder'][$subMenuKey]; - if(isset($this->lang->admin->menuList->$menuKey['tabMenu']['dividerMenu'][$subMenuKey])) $subMenu['dividerMenu'] = $this->lang->admin->menuList->$menuKey['tabMenu']['dividerMenu'][$subMenuKey]; + if(isset($this->lang->admin->menuList->{$menuKey}['tabMenu']['menuOrder'][$subMenuKey])) $subMenu['menuOrder'] = $this->lang->admin->menuList->{$menuKey}['tabMenu']['menuOrder'][$subMenuKey]; + if(isset($this->lang->admin->menuList->{$menuKey}['tabMenu']['dividerMenu'][$subMenuKey])) $subMenu['dividerMenu'] = $this->lang->admin->menuList->{$menuKey}['tabMenu']['dividerMenu'][$subMenuKey]; $this->lang->admin->menu->$subMenuKey = $subMenu; } } - if(isset($this->lang->admin->menuList->$menuKey['menuOrder'])) $this->lang->admin->menuOrder = $this->lang->admin->menuList->$menuKey['menuOrder']; - if(isset($this->lang->admin->menuList->$menuKey['dividerMenu'])) $this->lang->admin->dividerMenu = $this->lang->admin->menuList->$menuKey['dividerMenu']; - if(isset($this->lang->admin->menuList->$menuKey['tabMenu'])) $this->lang->admin->tabMenu = $this->lang->admin->menuList->$menuKey['tabMenu']; + if(isset($this->lang->admin->menuList->{$menuKey}['menuOrder'])) $this->lang->admin->menuOrder = $this->lang->admin->menuList->{$menuKey}['menuOrder']; + if(isset($this->lang->admin->menuList->{$menuKey}['dividerMenu'])) $this->lang->admin->dividerMenu = $this->lang->admin->menuList->{$menuKey}['dividerMenu']; + if(isset($this->lang->admin->menuList->{$menuKey}['tabMenu'])) $this->lang->admin->tabMenu = $this->lang->admin->menuList->{$menuKey}['tabMenu']; } } @@ -506,7 +506,7 @@ class adminModel extends model } /** - * Get extensions from zentao.net. + * Set extensions from zentao.net. * * @param string $type plugin|patch * @param int $limit @@ -514,41 +514,22 @@ class adminModel extends model * @access public * @return array */ - public function getExtensionsByAPI($type = 'plugin', $limit = 6, $hasInternet = true) + public function setExtensionsByAPI($type = 'plugin', $limit = 5) { - if($hasInternet) + $searchType = $type == 'plugin' ? 'byModule,offcial' : 'byModule'; + $param = $type == 'plugin' ? '' : 'MTIxOA=='; + $extensions = $this->loadModel('extension')->getExtensionsByAPI($searchType, $param, 0, $limit); + $extensions = isset($extensions->extensions) ? (array)$extensions->extensions : array(); + $plugins = array(); + foreach($extensions as $extension) { - $searchType = $type == 'plugin' ? 'byUpdatedTime,offcial' : 'byModule'; - $param = $type == 'plugin' ? '' : 'MTIxOA=='; - $extensions = $this->loadModel('extension')->getExtensionsByAPI($searchType, $param, 0, $limit); - $plugins = isset($extensions->extensions) ? (array)$extensions->extensions : array(); - foreach($plugins as $id => $plugin) - { - $plugin->viewLink = str_replace(array('info', 'client'), '', $plugin->viewLink); - if($type == 'patch' and !isset($plugin->compatibleRelease)) unset($plugins[$id]); - } - } - else - { - if($this->config->edition == 'open') - { - $plugins = array( - $this->config->admin->plugins[27], - $this->config->admin->plugins[26], - $this->config->admin->plugins[30] - ); - } - else - { - $plugins = array( - $this->config->admin->plugins[198], - $this->config->admin->plugins[194], - $this->config->admin->plugins[203] - ); - } + if($type == 'patch' and !isset($extension->compatibleRelease)) continue; + + $extension->viewLink = str_replace(array('info', 'client'), '', $extension->viewLink); + $plugins[] = $extension; } - return $plugins; + return $this->loadModel('block')->setZentaoData($type, $plugins); } /** @@ -572,13 +553,13 @@ class adminModel extends model } /** - * Get public class from zentao.net. + * Set public class from zentao.net. * * @param int $limit * @access public - * @return array + * @return void */ - public function getPublicClassByAPI($limit = 2) + public function setPublicClassByAPI($limit = 3) { $apiURL = $this->config->admin->videoAPIURL; $data = $this->fetchAPI($apiURL); @@ -596,24 +577,25 @@ class adminModel extends model $publicClass[$index]->viewLink = $this->config->admin->apiRoot . '/publicclass/' . ($course->alias ? "{$course->alias}-" : '') . "{$course->id}.html"; $index ++; } - return $publicClass; + + return $this->loadModel('block')->setZentaoData('publicclass', $publicClass); } /** - * Get dynamics by API. + * Set dynamics by API. * * @param int $limit * @access public - * @return array + * @return void */ - public function getDynamicsByAPI($limit = 2) + public function setDynamicsByAPI($limit = 2) { $apiURL = $this->config->admin->downloadAPIURL; $data = $this->fetchAPI($apiURL); $articles = $data->articles; - $index = 1; - $downloads = array(); + $index = 1; + $news = array(); foreach($articles as $article) { if($index > $limit) break; @@ -622,14 +604,15 @@ class adminModel extends model if(!isset($this->lang->admin->$tagKey)) break; if(!preg_match("/{$this->lang->admin->$tagKey}\d/", $article->title)) continue; - $downloads[$index] = new stdClass(); - $downloads[$index]->id = $article->id; - $downloads[$index]->title = $article->title; - $downloads[$index]->addedDate = $article->addedDate; - $downloads[$index]->link = $this->config->admin->apiRoot . "/download/{$article->alias}-{$article->id}.html"; + $news[$index] = new stdClass(); + $news[$index]->id = $article->id; + $news[$index]->title = $article->title; + $news[$index]->addedDate = $article->addedDate; + $news[$index]->link = $this->config->admin->apiRoot . "/download/{$article->alias}-{$article->id}.html"; $index ++; } - return $downloads; + + return $this->loadModel('block')->setZentaoData('news', $news); } /** @@ -640,10 +623,11 @@ class adminModel extends model */ public function checkInternet() { - $curl = curl_init(); + $timeout = 3; + $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $this->config->admin->apiSite); - curl_setopt($curl, CURLOPT_TIMEOUT_MS, 1000); - curl_setopt($curl, CURLOPT_CONNECTTIMEOUT_MS, 1000); + curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); + curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); @@ -670,4 +654,58 @@ class adminModel extends model return helper::getDateInterval($firstUseDate); } + + /** + * Get zentao.net data. + * + * @access public + * @return object + */ + public function getZentaoData() + { + $zentaoData = $this->loadModel('block')->getZentaoData(); + + $data = new stdclass(); + $data->hasData = true; + + $news = array(); + $publicclass = array(); + $plugins = array(); + $patches = array(); + if(empty($zentaoData)) + { + $data->hasData = false; + if($this->config->edition == 'open') + { + $plugins = array( + $this->config->admin->plugins[27], + $this->config->admin->plugins[26], + $this->config->admin->plugins[30] + ); + } + else + { + $plugins = array( + $this->config->admin->plugins[198], + $this->config->admin->plugins[194], + $this->config->admin->plugins[203] + ); + } + } + else + { + $news = json_decode($zentaoData['news']); + $publicclass = json_decode($zentaoData['publicclass']); + $plugins = json_decode($zentaoData['plugin']); + $patches = json_decode($zentaoData['patch']); + if(common::checkNotCN()) array_pop($plugins); + } + + $data->news = $news; + $data->publicclass = $publicclass; + $data->plugins = $plugins; + $data->patches = $patches; + + return $data; + } } diff --git a/module/admin/view/index.html.php b/module/admin/view/index.html.php index 40a03cf45d..cc7e7ec861 100755 --- a/module/admin/view/index.html.php +++ b/module/admin/view/index.html.php @@ -19,11 +19,16 @@
admin->menuList as $menuKey => $menu):?> vision == 'lite' and !in_array($menuKey, $config->admin->liteMenuList)) continue;?> -
+
admin->noPriv}";?> data-id="">
@@ -40,9 +45,9 @@ abstract));?>
- +

name;?>

-

+

@@ -53,19 +58,22 @@
admin->officialAccount?>
-
-
-
-
- admin->followUs?> - - - +
+
+
+
+ admin->followUs?> + + +
-
admin->followUsContent?>
-
+
admin->followUsContent?>
+
+
+ + +
-
-
+
>
admin->registerNotice->common?>
@@ -94,6 +94,7 @@
+
admin->registerNotice->bind?>
@@ -118,6 +119,7 @@
+
\ No newline at end of file + + diff --git a/module/block/view/projectstatisticblock.html.php b/module/block/view/projectstatisticblock.html.php old mode 100644 new mode 100755 index e34409e652..b19671ee3c --- a/module/block/view/projectstatisticblock.html.php +++ b/module/block/view/projectstatisticblock.html.php @@ -134,7 +134,7 @@ $(function()
- model == 'scrum' or $project->model == 'kanban'):?> + model, array('scrum', 'kanban', 'agileplus'))):?>

block->storyCount;?>

@@ -205,7 +205,7 @@ $(function()
- executions[0]->hours->progress . '%';?> + executions[0]->hours->progress) ? $project->executions[0]->hours->progress . '%' : '0%';?>
diff --git a/module/bug/config.php b/module/bug/config.php old mode 100644 new mode 100755 index 060992e9ab..d9c707e2f2 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -223,7 +223,7 @@ $config->bug->datatable->fieldList['execution']['title'] = 'execution'; $config->bug->datatable->fieldList['execution']['fixed'] = 'no'; $config->bug->datatable->fieldList['execution']['width'] = '120'; $config->bug->datatable->fieldList['execution']['required'] = 'no'; -$config->bug->datatable->fieldList['execution']['dataSource'] = array('module' => 'product', 'method' =>'getAllExecutionPairsByProduct', 'params' => '$productID&$branch'); +$config->bug->datatable->fieldList['execution']['dataSource'] = array('module' => 'product', 'method' =>'getAllExecutionPairsByProduct', 'params' => '$productID&$branch&0&stagefilter'); $config->bug->datatable->fieldList['plan']['title'] = 'plan'; $config->bug->datatable->fieldList['plan']['fixed'] = 'no'; diff --git a/module/bug/control.php b/module/bug/control.php index 5981d7067e..00574f77cf 100755 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -636,7 +636,7 @@ class bug extends control /* Get executions. */ $executions = array(0 => ''); - if(isset($projects[$projectID])) $executions += $this->product->getExecutionPairsByProduct($productID, $branch ? "0,$branch" : 0, 'id_desc', $projectID, !$projectID ? 'multiple' : ''); + if(isset($projects[$projectID])) $executions += $this->product->getExecutionPairsByProduct($productID, $branch ? "0,$branch" : 0, 'id_desc', $projectID, !$projectID ? 'multiple|stagefilter' : 'stagefilter'); $execution = $executionID ? $this->loadModel('execution')->getByID($executionID) : ''; $executions = isset($executions[$executionID]) ? $executions : $executions + array($executionID => $execution->name); @@ -859,7 +859,7 @@ class bug extends control $this->view->users = $this->user->getPairs('devfirst|noclosed'); $this->view->projects = array('' => '') + $this->product->getProjectPairsByProduct($productID, $branch ? "0,$branch" : 0, 'id_desc', $projectID); $this->view->projectID = $projectID; - $this->view->executions = array('' => '') + $this->product->getExecutionPairsByProduct($productID, $branch ? "0,$branch" : 0, 'id_desc', $projectID, 'multiple'); + $this->view->executions = array('' => '') + $this->product->getExecutionPairsByProduct($productID, $branch ? "0,$branch" : 0, 'id_desc', $projectID, 'multiple,stagefilter'); $this->view->executionID = $executionID; $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'bug', $startModuleID = 0, $branch === 'all' ? 0 : $branch); $this->view->moduleID = $moduleID; @@ -1165,6 +1165,9 @@ class bug extends control $productBugs = $this->bug->getProductBugPairs($productID, $branch); unset($productBugs[$bugID]); + $executions = array(0 => '') + $this->product->getExecutionPairsByProduct($bug->product, $bug->branch, 'id_desc', $bug->project); + if(!empty($bug->execution) and empty($executions[$bug->execution])) $executions[$execution->id] = $execution->name; + if($product->shadow) $this->view->project = $this->loadModel('project')->getByShadowProduct($bug->product); $this->view->bug = $bug; @@ -1177,7 +1180,7 @@ class bug extends control $this->view->projectExecutionPairs = $this->loadModel('project')->getProjectExecutionPairs(); $this->view->moduleOptionMenu = $moduleOptionMenu; $this->view->currentModuleID = $currentModuleID; - $this->view->executions = array(0 => '') + $this->product->getExecutionPairsByProduct($bug->product, $bug->branch, 'id_desc', $bug->project); + $this->view->executions = $executions; $this->view->stories = $bug->execution ? $this->story->getExecutionStoryPairs($bug->execution) : $this->story->getProductStoryPairs($bug->product, $bug->branch, 0, 'all', 'id_desc', 0, 'full', 'story', false); $this->view->branchOption = $branchOption; $this->view->branchTagOption = $branchTagOption; @@ -1398,7 +1401,7 @@ class bug extends control } /* Set users. */ - $users = $this->user->getPairs('devfirst', '', $this->config->maxCount); + $users = $this->user->getPairs('devfirst'); $users = array('' => '', 'ditto' => $this->lang->bug->ditto) + $users; /* Assign. */ diff --git a/module/bug/js/common.js b/module/bug/js/common.js index 8c1fb0a745..e50f5bf3ed 100644 --- a/module/bug/js/common.js +++ b/module/bug/js/common.js @@ -369,7 +369,7 @@ function loadProductExecutions(productID, projectID = 0) var execution = $('#execution').val(); } - link = createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=' + projectID + '&branch=' + branch + '&number=&executionID=' + execution); + link = createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=' + projectID + '&branch=' + branch + '&number=&executionID=' + execution + '&from=&mode=stagefilter'); $('#executionIdBox').load(link, function() { $(this).find('select').chosen(); diff --git a/module/bug/model.php b/module/bug/model.php index 936ac36e97..119d5e1bb7 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -3704,6 +3704,11 @@ class bugModel extends model if($type == 'view' && $this->app->tab != 'product') { $tab = $this->app->tab == 'qa' ? 'product' : $this->app->tab; + if($tab == 'product') + { + $product = $this->loadModel('product')->getByID($bug->product); + if(!empty($product->shadow)) $tab = 'project'; + } $menu .= $this->buildMenu('bug', 'toStory', $toStoryParams, $bug, $type, $this->lang->icons['story'], '', '', '', "data-app='$tab' id='tostory'", $this->lang->bug->toStory); if(common::hasPriv('task', 'create') and !isonlybody()) $menu .= html::a('#toTask', "{$this->lang->bug->toTask}", '', "data-app='qa' data-toggle='modal' class='btn btn-link'"); $menu .= $this->buildMenu('bug', 'createCase', $convertParams, $bug, $type, 'sitemap'); diff --git a/module/bug/view/batchedit.html.php b/module/bug/view/batchedit.html.php index c3ed89d702..95cf0ba72d 100644 --- a/module/bug/view/batchedit.html.php +++ b/module/bug/view/batchedit.html.php @@ -74,9 +74,6 @@
$bug):?> - config->user->moreLink)) $this->config->moreLinks["assignedTos[$bugID]"] = $this->config->user->moreLink; - ?> diff --git a/module/bug/view/edit.html.php b/module/bug/view/edit.html.php index 168617381d..2a0e86dc51 100644 --- a/module/bug/view/edit.html.php +++ b/module/bug/view/edit.html.php @@ -125,7 +125,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project); - multiple)) echo 'hide'?>'> + '> - multiple)) echo 'hide'?>'> + '> diff --git a/module/build/control.php b/module/build/control.php index cea5526559..0acef7732c 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -66,24 +66,25 @@ class build extends control return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('build', 'view', "buildID=$buildID") . "#app={$this->app->tab}")); } + $status = empty($this->config->CRProduct) ? 'noclosed' : ''; $this->loadModel('product'); $this->loadModel('project'); /* Set menu. */ if($this->app->tab == 'project') { $this->project->setMenu($projectID); - $executions = $this->execution->getPairs($projectID, 'all', 'stagefilter|leaf'); + $executions = $this->execution->getPairs($projectID, 'all', 'stagefilter|leaf|order_asc'); $executionID = empty($executionID) ? key($executions) : $executionID; - $productGroups = $executionID ? $this->product->getProducts($executionID) : array(); + $productGroups = $executionID ? $this->product->getProducts($executionID, $status) : array(); $branchGroups = $executionID ? $this->project->getBranchesByProject($executionID) : array(); $this->session->set('project', $projectID); } elseif($this->app->tab == 'execution') { $execution = $this->execution->getByID($executionID); - $executions = $this->execution->getPairs($execution->project, 'all', 'stagefilter|leaf'); + $executions = $this->execution->getPairs($execution->project, 'all', 'stagefilter|leaf|order_asc'); $projectID = $execution->project; - $productGroups = $this->product->getProducts($executionID); + $productGroups = $this->product->getProducts($executionID, $status); $branchGroups = $this->project->getBranchesByProject($executionID); $this->execution->setMenu($executionID); $this->session->set('project', $execution->project); @@ -93,7 +94,7 @@ class build extends control $execution = $this->execution->getByID($executionID); $projectID = $execution ? $execution->project : 0; $executions = $this->execution->getPairs($projectID, 'all', 'stagefilter|leaf'); - $productGroups = $this->product->getProducts($executionID); + $productGroups = $this->product->getProducts($executionID, $status); $branchGroups = $this->project->getBranchesByProject($executionID); } @@ -171,14 +172,15 @@ class build extends control if($this->app->tab == 'execution') $this->execution->setMenu($build->execution); $builds = array(); + $status = empty($this->config->CRProduct) ? 'noclosed' : ''; if($build->execution) { - $productGroups = $this->product->getProducts($build->execution); + $productGroups = $this->product->getProducts($build->execution, $status); $branches = $this->loadModel('branch')->getList($build->product, $build->execution, 'all'); } else { - $productGroups = $this->product->getProducts($build->project); + $productGroups = $this->product->getProducts($build->project, $status); $branches = $this->loadModel('branch')->getList($build->product, $build->project, 'all'); $builds = $this->build->getBuildPairs($build->product, 'all', 'noempty,notrunk,singled,separate', $build->project, 'project', $build->builds, false); } diff --git a/module/build/js/view.js b/module/build/js/view.js index 6ed6c1032d..b5fad596d4 100644 --- a/module/build/js/view.js +++ b/module/build/js/view.js @@ -69,3 +69,36 @@ $(function() } }); }) + +/** + * Delete item use ajax. + * + * @param string url + * @param string replaceID + * @param string notice + * @access public + * @return void + */ +function ajaxDelete(url, replaceID, notice) +{ + if(confirm(notice)) + { + $.ajax( + { + type: 'GET', + url: url, + dataType: 'json', + success: function(data) + { + if(data.result == 'success') + { + location.reload(); + } + else if(data.result == 'fail' && typeof(data.message) == 'string') + { + bootbox.alert(data.message); + } + } + }); + } +} diff --git a/module/build/model.php b/module/build/model.php index 7422b98a30..7dae5e405b 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -112,6 +112,7 @@ class buildModel extends model $buildQuery = str_replace($field, "t1." . $field, $buildQuery); } } + if(strpos($this->session->projectBuildQuery, 'execution') !== false) $buildQuery = str_replace('`execution`', 't2.`id`', $buildQuery); return $this->getProjectBuilds($projectID, 'bysearch', $buildQuery); } @@ -478,11 +479,13 @@ class buildModel extends model */ public function update($buildID) { - $buildID = (int)$buildID; - $oldBuild = $this->dao->select('*')->from(TABLE_BUILD)->where('id')->eq($buildID)->fetch(); - $build = fixer::input('post')->stripTags($this->config->build->editor->edit['id'], $this->config->allowedTags) + $buildID = (int)$buildID; + $oldBuild = $this->dao->select('*')->from(TABLE_BUILD)->where('id')->eq($buildID)->fetch(); + $newProduct = $this->dao->select('id,type')->from(TABLE_PRODUCT)->where('id')->eq($_POST['product'])->fetchPairs(); + $branch = (!isset($_POST['branch']) or $newProduct == 'normal') ? 0 : $oldBuild->branch; + $build = fixer::input('post')->stripTags($this->config->build->editor->edit['id'], $this->config->allowedTags) ->add('id', $buildID) - ->setIF(!isset($_POST['branch']), 'branch', $oldBuild->branch) + ->setDefault('branch', $branch) ->setDefault('product', $oldBuild->product) ->setDefault('builds', '') ->cleanInt('product,execution') diff --git a/module/build/view/edit.html.php b/module/build/view/edit.html.php index dc3b4f78eb..726696ad77 100644 --- a/module/build/view/edit.html.php +++ b/module/build/view/edit.html.php @@ -36,7 +36,6 @@ - execution)) echo 'hidden'?>'> execution):?> - + diff --git a/module/common/lang/de.php b/module/common/lang/de.php index 139d0df14d..22effe8c14 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -49,43 +49,44 @@ $lang->runInfo = "
Z PUBLIC LICENSE 1.2 . Without authorization, I should not remove, hide or cover any logos/links of ZenTao."; $lang->designedByAIUX = " AIUX"; -$lang->reset = 'Zurücksetzen'; -$lang->cancel = 'Abbrechen'; -$lang->refresh = 'Aktualisieren'; -$lang->refreshIcon = ""; -$lang->create = 'Create'; -$lang->edit = 'Bearbeiten'; -$lang->delete = 'Löschen'; -$lang->activate = 'Activate'; -$lang->close = 'Schließen'; -$lang->unlink = 'Entfernen'; -$lang->import = 'Importieren'; -$lang->export = 'Exportieren'; -$lang->setFileName = 'Dateiame'; -$lang->submitting = 'Speichern...'; -$lang->save = 'Speichern'; -$lang->confirm = 'Bestätigen'; -$lang->preview = 'Ansehen'; -$lang->goback = 'Zurück'; -$lang->goPC = 'PC'; -$lang->more = 'Mehr'; -$lang->moreLink = 'MORE'; -$lang->day = 'Tag'; -$lang->customConfig = 'Custom Config'; -$lang->public = 'Öffentlich'; -$lang->trunk = 'Trunk'; -$lang->sort = 'Sortieren'; -$lang->required = 'Pflicht'; -$lang->noData = 'Kein Datensatz'; -$lang->fullscreen = 'Fullscreen'; -$lang->retrack = 'Retrack'; -$lang->whitelist = 'Weiße Liste'; -$lang->globalSetting = 'Common'; -$lang->waterfallModel = 'Waterfall'; -$lang->scrumModel = 'Scrum'; -$lang->agilePlusModel = 'Agile Plus'; -$lang->all = 'All'; -$lang->viewDetails = 'View Details'; +$lang->reset = 'Zurücksetzen'; +$lang->cancel = 'Abbrechen'; +$lang->refresh = 'Aktualisieren'; +$lang->refreshIcon = ""; +$lang->create = 'Create'; +$lang->edit = 'Bearbeiten'; +$lang->delete = 'Löschen'; +$lang->activate = 'Activate'; +$lang->close = 'Schließen'; +$lang->unlink = 'Entfernen'; +$lang->import = 'Importieren'; +$lang->export = 'Exportieren'; +$lang->setFileName = 'Dateiame'; +$lang->submitting = 'Speichern...'; +$lang->save = 'Speichern'; +$lang->confirm = 'Bestätigen'; +$lang->preview = 'Ansehen'; +$lang->goback = 'Zurück'; +$lang->goPC = 'PC'; +$lang->more = 'Mehr'; +$lang->moreLink = 'MORE'; +$lang->day = 'Tag'; +$lang->customConfig = 'Custom Config'; +$lang->public = 'Öffentlich'; +$lang->trunk = 'Trunk'; +$lang->sort = 'Sortieren'; +$lang->required = 'Pflicht'; +$lang->noData = 'Kein Datensatz'; +$lang->fullscreen = 'Fullscreen'; +$lang->retrack = 'Retrack'; +$lang->whitelist = 'Weiße Liste'; +$lang->globalSetting = 'Common'; +$lang->waterfallModel = 'Waterfall'; +$lang->scrumModel = 'Scrum'; +$lang->agilePlusModel = 'Agile Plus'; +$lang->waterfallPlusModel = 'Waterfall Plus'; +$lang->all = 'All'; +$lang->viewDetails = 'View Details'; $lang->actions = 'Aktionen'; $lang->restore = 'Wiederherstellen'; @@ -188,6 +189,7 @@ $lang->team->common = 'Team'; $lang->user->common = 'User'; $lang->custom->common = 'Custom'; $lang->custom->mode = 'Mode'; +$lang->custom->flow = 'Concept'; $lang->extension->common = 'Extension'; $lang->company->common = 'Company'; $lang->dept->common = 'Dept'; @@ -200,7 +202,9 @@ $lang->design->DDS = 'DDS'; $lang->design->DBDS = 'DBDS'; $lang->design->ADS = 'ADS'; $lang->stage->common = 'Stage'; +$lang->stage->type = 'Stage Type'; $lang->stage->list = 'Stage List'; +$lang->stage->percent = 'Workload Ratio'; $lang->execution->list = "{$lang->executionCommon} List"; $lang->kanban->common = 'Kanban'; $lang->backup->common = 'Backup'; @@ -251,7 +255,8 @@ $lang->indexPage = 'Index'; $lang->model = 'Model'; $lang->redev = 'Develop'; $lang->browser = 'Browser'; -$lang->database = 'Database'; +$lang->api->doc = 'API Document'; +$lang->database = 'Data Dictionary'; $lang->editor = 'Editor'; $lang->timezone = 'Timezone'; $lang->security = 'Security'; @@ -301,7 +306,7 @@ $lang->devops->set = 'Set'; $lang->admin->module = 'Module'; $lang->admin->system = 'System'; -$lang->admin->entry = 'Application'; +$lang->admin->entry = 'Access ZenTao'; $lang->admin->data = 'Data'; $lang->admin->cron = 'Cron'; $lang->admin->buildIndex = 'Full Text Search'; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 1eedb95f60..324a063bc4 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -49,43 +49,44 @@ $lang->runInfo = "
Without authorization, I should not remove, hide or cover any logos/links of ZenTao."; $lang->designedByAIUX = " AIUX"; -$lang->reset = 'Reset'; -$lang->cancel = 'Cancel'; -$lang->refresh = 'Refresh'; -$lang->refreshIcon = ""; -$lang->create = 'Create'; -$lang->edit = 'Edit'; -$lang->delete = 'Delete'; -$lang->activate = 'Activate'; -$lang->close = 'Close'; -$lang->unlink = 'Unlink'; -$lang->import = 'Import'; -$lang->export = 'Export'; -$lang->setFileName = 'File Name'; -$lang->submitting = 'Saving...'; -$lang->save = 'Save'; -$lang->confirm = 'Confirm'; -$lang->preview = 'View'; -$lang->goback = 'Back'; -$lang->goPC = 'PC'; -$lang->more = 'More'; -$lang->moreLink = 'MORE'; -$lang->day = ' Day'; -$lang->customConfig = 'Custom Config'; -$lang->public = 'Public'; -$lang->trunk = 'Trunk'; -$lang->sort = 'Order'; -$lang->required = 'Required'; -$lang->noData = 'No data.'; -$lang->fullscreen = 'Fullscreen'; -$lang->retrack = 'Retrack'; -$lang->whitelist = 'Access whitelist'; -$lang->globalSetting = 'Common'; -$lang->waterfallModel = 'Waterfall'; -$lang->scrumModel = 'Scrum'; -$lang->agilePlusModel = 'Agile Plus'; -$lang->all = 'All'; -$lang->viewDetails = 'View Details'; +$lang->reset = 'Reset'; +$lang->cancel = 'Cancel'; +$lang->refresh = 'Refresh'; +$lang->refreshIcon = ""; +$lang->create = 'Create'; +$lang->edit = 'Edit'; +$lang->delete = 'Delete'; +$lang->activate = 'Activate'; +$lang->close = 'Close'; +$lang->unlink = 'Unlink'; +$lang->import = 'Import'; +$lang->export = 'Export'; +$lang->setFileName = 'File Name'; +$lang->submitting = 'Saving...'; +$lang->save = 'Save'; +$lang->confirm = 'Confirm'; +$lang->preview = 'View'; +$lang->goback = 'Back'; +$lang->goPC = 'PC'; +$lang->more = 'More'; +$lang->moreLink = 'MORE'; +$lang->day = ' Day'; +$lang->customConfig = 'Custom Config'; +$lang->public = 'Public'; +$lang->trunk = 'Trunk'; +$lang->sort = 'Order'; +$lang->required = 'Required'; +$lang->noData = 'No data.'; +$lang->fullscreen = 'Fullscreen'; +$lang->retrack = 'Retrack'; +$lang->whitelist = 'Access whitelist'; +$lang->globalSetting = 'Common'; +$lang->waterfallModel = 'Waterfall'; +$lang->scrumModel = 'Scrum'; +$lang->agilePlusModel = 'Agile Plus'; +$lang->waterfallPlusModel = 'Waterfall Plus'; +$lang->all = 'All'; +$lang->viewDetails = 'View Details'; $lang->actions = 'Action'; $lang->restore = 'Reset'; @@ -188,6 +189,7 @@ $lang->team->common = 'Team'; $lang->user->common = 'User'; $lang->custom->common = 'Custom'; $lang->custom->mode = 'Mode'; +$lang->custom->flow = 'Concept'; $lang->extension->common = 'Extension'; $lang->company->common = 'Company'; $lang->dept->common = 'Dept'; @@ -200,7 +202,9 @@ $lang->design->DDS = 'Detailed Design'; $lang->design->DBDS = 'Database Design'; $lang->design->ADS = 'Interface Design'; $lang->stage->common = 'Stage'; +$lang->stage->type = 'Stage Type'; $lang->stage->list = 'Stage List'; +$lang->stage->percent = 'Workload Ratio'; $lang->execution->list = "{$lang->executionCommon} List"; $lang->kanban->common = 'Kanban'; $lang->backup->common = 'Backup'; @@ -251,7 +255,8 @@ $lang->indexPage = 'Index'; $lang->model = 'Model'; $lang->redev = 'Develop'; $lang->browser = 'Browser'; -$lang->database = 'Database'; +$lang->api->doc = 'API Document'; +$lang->database = 'Data Dictionary'; $lang->editor = 'Editor'; $lang->timezone = 'Timezone'; $lang->security = 'Security'; @@ -301,7 +306,7 @@ $lang->devops->set = 'Set'; $lang->admin->module = 'Module'; $lang->admin->system = 'System'; -$lang->admin->entry = 'Application'; +$lang->admin->entry = 'Access ZenTao'; $lang->admin->data = 'Data'; $lang->admin->cron = 'Cron'; $lang->admin->buildIndex = 'Full Text Search'; diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index 985b8b6d92..15556b5a22 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -49,43 +49,44 @@ $lang->runInfo = "
Z PUBLIC LICENSE 1.2 . Sans autorisation, je ne dois pas supprimer, masquer ou couvrir les logos / liens de ZenTao."; $lang->designedByAIUX = " AIUX"; -$lang->reset = 'Réinitialiser'; -$lang->cancel = 'Annuler'; -$lang->refresh = 'Rafraichir'; -$lang->refreshIcon = ""; -$lang->create = 'Create'; -$lang->edit = 'Editer'; -$lang->delete = 'Supprimer'; -$lang->activate = 'Activate'; -$lang->close = 'Fermer'; -$lang->unlink = 'Dissocier'; -$lang->import = 'Importer'; -$lang->export = 'Exporter'; -$lang->setFileName = 'Nom du Fichier'; -$lang->submitting = 'Enregistrement...'; -$lang->save = 'Sauvegarde'; -$lang->confirm = 'Confirmer'; -$lang->preview = 'Consulter'; -$lang->goback = 'Retour'; -$lang->goPC = 'PC'; -$lang->more = 'Plus'; -$lang->moreLink = 'MORE'; -$lang->day = 'Jour'; -$lang->customConfig = 'Personnalisation'; -$lang->public = 'Public'; -$lang->trunk = 'Tronc'; -$lang->sort = 'Ordre'; -$lang->required = 'Obligatoire'; -$lang->noData = 'No data.'; -$lang->fullscreen = 'Plein Ecran'; -$lang->retrack = 'Réduire'; -$lang->whitelist = 'Liste blanche'; -$lang->globalSetting = 'Common'; -$lang->waterfallModel = 'Waterfall'; -$lang->scrumModel = 'Scrum'; -$lang->agilePlusModel = 'Agile Plus'; -$lang->all = 'All'; -$lang->viewDetails = 'View Details'; +$lang->reset = 'Réinitialiser'; +$lang->cancel = 'Annuler'; +$lang->refresh = 'Rafraichir'; +$lang->refreshIcon = ""; +$lang->create = 'Create'; +$lang->edit = 'Editer'; +$lang->delete = 'Supprimer'; +$lang->activate = 'Activate'; +$lang->close = 'Fermer'; +$lang->unlink = 'Dissocier'; +$lang->import = 'Importer'; +$lang->export = 'Exporter'; +$lang->setFileName = 'Nom du Fichier'; +$lang->submitting = 'Enregistrement...'; +$lang->save = 'Sauvegarde'; +$lang->confirm = 'Confirmer'; +$lang->preview = 'Consulter'; +$lang->goback = 'Retour'; +$lang->goPC = 'PC'; +$lang->more = 'Plus'; +$lang->moreLink = 'MORE'; +$lang->day = 'Jour'; +$lang->customConfig = 'Personnalisation'; +$lang->public = 'Public'; +$lang->trunk = 'Tronc'; +$lang->sort = 'Ordre'; +$lang->required = 'Obligatoire'; +$lang->noData = 'No data.'; +$lang->fullscreen = 'Plein Ecran'; +$lang->retrack = 'Réduire'; +$lang->whitelist = 'Liste blanche'; +$lang->globalSetting = 'Common'; +$lang->waterfallModel = 'Waterfall'; +$lang->scrumModel = 'Scrum'; +$lang->agilePlusModel = 'Agile Plus'; +$lang->waterfallPlusModel = 'Waterfall Plus'; +$lang->all = 'All'; +$lang->viewDetails = 'View Details'; $lang->actions = 'Action'; $lang->restore = 'Réinitialiser'; @@ -188,6 +189,7 @@ $lang->team->common = 'Team'; $lang->user->common = 'User'; $lang->custom->common = 'Custom'; $lang->custom->mode = 'Mode'; +$lang->custom->flow = 'Concept'; $lang->extension->common = 'Extension'; $lang->company->common = 'Company'; $lang->dept->common = 'Dept'; @@ -200,7 +202,9 @@ $lang->design->DDS = 'DDS'; $lang->design->DBDS = 'DBDS'; $lang->design->ADS = 'ADS'; $lang->stage->common = 'Stage'; +$lang->stage->type = 'Stage Type'; $lang->stage->list = 'Stage List'; +$lang->stage->percent = 'Workload Ratio'; $lang->execution->list = "{$lang->executionCommon} List"; $lang->kanban->common = 'Kanban'; $lang->backup->common = 'Backup'; @@ -251,7 +255,8 @@ $lang->indexPage = 'Index'; $lang->model = 'Model'; $lang->redev = 'Develop'; $lang->browser = 'Browser'; -$lang->database = 'Database'; +$lang->api->doc = 'API Document'; +$lang->database = 'Data Dictionary'; $lang->editor = 'Editor'; $lang->timezone = 'Timezone'; $lang->security = 'Security'; @@ -301,7 +306,7 @@ $lang->devops->set = 'Set'; $lang->admin->module = 'Module'; $lang->admin->system = 'System'; -$lang->admin->entry = 'Application'; +$lang->admin->entry = 'Access ZenTao'; $lang->admin->data = 'Data'; $lang->admin->cron = 'Cron'; $lang->admin->buildIndex = 'Full Text Search'; diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index f82b321750..c94070c954 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -539,7 +539,7 @@ $lang->doc->menu->api['subMenu']->struct = array('link' => "{$lang->doc->apiStru /* Report menu.*/ $lang->report->menu = new stdclass(); $lang->report->menu->screen = array('link' => "{$lang->screen->common}|screen|browse"); -$lang->report->menu->pivotTable = array('link' => "{$lang->report->pivotTable}|report|preview"); +$lang->report->menu->pivotTable = array('link' => "{$lang->report->pivotTable}|report|productsummary", 'alias' => 'projectdeviation,bugcreate,workload,bugassign'); /* Report menu order. */ $lang->report->menuOrder[5] = 'screen'; @@ -547,10 +547,10 @@ $lang->report->menuOrder[10] = 'pivotTable'; /* $lang->report->menu->pivotTable['subMenu'] = new stdclass(); -$lang->report->menu->pivotTable['subMenu']->product = array('link' => "{$lang->product->common}|report|preview|dimension=&group=product"); -$lang->report->menu->pivotTable['subMenu']->project = array('link' => "{$lang->project->common}|report|preview|dimension=&group=project"); -$lang->report->menu->pivotTable['subMenu']->test = array('link' => "{$lang->qa->common}|report|preview|dimension=&group=test"); -$lang->report->menu->pivotTable['subMenu']->staff = array('link' => "{$lang->system->common}|report|preview|dimension=&group=staff"); +$lang->report->menu->pivotTable['subMenu']->product = array('link' => "{$lang->product->common}|report|productsummary"); +$lang->report->menu->pivotTable['subMenu']->project = array('link' => "{$lang->project->common}|report|projectdeviation"); +$lang->report->menu->pivotTable['subMenu']->test = array('link' => "{$lang->qa->common}|report|bugcreate", 'alias' => 'bugassign'); +$lang->report->menu->pivotTable['subMenu']->staff = array('link' => "{$lang->system->common}|report|workload"); $lang->report->menu->pivotTable['menuOrder'][5] = 'product'; $lang->report->menu->pivotTable['menuOrder'][10] = 'project'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index e6a1814f28..a49d60713a 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -49,43 +49,44 @@ $lang->runInfo = "
未经许可,不得去除、隐藏或遮掩禅道软件的任何标志及链接。"; $lang->designedByAIUX = " 艾体验设计"; -$lang->reset = '重填'; -$lang->cancel = '取消'; -$lang->refresh = '刷新'; -$lang->refreshIcon = ""; -$lang->create = '新建'; -$lang->edit = '编辑'; -$lang->delete = '删除'; -$lang->activate = '激活'; -$lang->close = '关闭'; -$lang->unlink = '移除'; -$lang->import = '导入'; -$lang->export = '导出'; -$lang->setFileName = '文件名:'; -$lang->submitting = '稍候...'; -$lang->save = '保存'; -$lang->confirm = '确认'; -$lang->preview = '查看'; -$lang->goback = '返回'; -$lang->goPC = 'PC版'; -$lang->more = '更多'; -$lang->moreLink = 'More'; -$lang->day = '天'; -$lang->customConfig = '自定义'; -$lang->public = '公共'; -$lang->trunk = '主干'; -$lang->sort = '排序'; -$lang->required = '必填'; -$lang->noData = '暂无'; -$lang->fullscreen = '全屏'; -$lang->retrack = '收起'; -$lang->whitelist = '访问白名单'; -$lang->globalSetting = '通用'; -$lang->waterfallModel = '瀑布模型'; -$lang->scrumModel = '敏捷模型'; -$lang->agilePlusModel = '融合敏捷模型'; -$lang->all = '所有'; -$lang->viewDetails = '查看详情'; +$lang->reset = '重填'; +$lang->cancel = '取消'; +$lang->refresh = '刷新'; +$lang->refreshIcon = ""; +$lang->create = '新建'; +$lang->edit = '编辑'; +$lang->delete = '删除'; +$lang->activate = '激活'; +$lang->close = '关闭'; +$lang->unlink = '移除'; +$lang->import = '导入'; +$lang->export = '导出'; +$lang->setFileName = '文件名:'; +$lang->submitting = '稍候...'; +$lang->save = '保存'; +$lang->confirm = '确认'; +$lang->preview = '查看'; +$lang->goback = '返回'; +$lang->goPC = 'PC版'; +$lang->more = '更多'; +$lang->moreLink = 'More'; +$lang->day = '天'; +$lang->customConfig = '自定义'; +$lang->public = '公共'; +$lang->trunk = '主干'; +$lang->sort = '排序'; +$lang->required = '必填'; +$lang->noData = '暂无'; +$lang->fullscreen = '全屏'; +$lang->retrack = '收起'; +$lang->whitelist = '访问白名单'; +$lang->globalSetting = '通用'; +$lang->waterfallModel = '瀑布模型'; +$lang->scrumModel = '敏捷模型'; +$lang->agilePlusModel = '融合敏捷模型'; +$lang->waterfallPlusModel = '融合瀑布模型'; +$lang->all = '所有'; +$lang->viewDetails = '查看详情'; $lang->actions = '操作'; $lang->restore = '恢复默认'; @@ -188,6 +189,7 @@ $lang->team->common = '团队'; $lang->user->common = '用户'; $lang->custom->common = '自定义'; $lang->custom->mode = '模式'; +$lang->custom->flow = '流程设置'; $lang->extension->common = '插件'; $lang->company->common = '公司'; $lang->dept->common = '部门'; @@ -200,7 +202,9 @@ $lang->design->DDS = '详细设计'; $lang->design->DBDS = '数据库设计'; $lang->design->ADS = '接口设计'; $lang->stage->common = '阶段'; +$lang->stage->type = '阶段类型'; $lang->stage->list = '阶段列表'; +$lang->stage->percent = '工作量占比'; $lang->execution->list = "{$lang->executionCommon}列表"; $lang->kanban->common = '看板'; $lang->backup->common = '备份'; @@ -251,7 +255,8 @@ $lang->indexPage = '首页'; $lang->model = '模型'; $lang->redev = '二次开发'; $lang->browser = '浏览器'; -$lang->database = '数据库'; +$lang->api->doc = '接口文档'; +$lang->database = '数据字典'; $lang->editor = '编辑器'; $lang->timezone = '时区'; $lang->security = '安全'; @@ -301,7 +306,7 @@ $lang->devops->set = '设置'; $lang->admin->module = '功能配置'; $lang->admin->system = '系统'; -$lang->admin->entry = '应用'; +$lang->admin->entry = '接入禅道'; $lang->admin->data = '数据'; $lang->admin->cron = '定时'; $lang->admin->buildIndex = '重建索引'; diff --git a/module/common/model.php b/module/common/model.php index 4cdc0b0394..ed45177d33 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -156,10 +156,8 @@ class commonModel extends model $this->loadModel('action')->create('execution', $parentExecutionID, 'syncexecutionbychild'); } - if($execution->type == 'stage') - { - $this->loadModel('programplan')->computeProgress($execution->id); - } + $project = $this->loadModel('project')->getByID($execution->project); + if($project->model == 'waterfall' or $project->model == 'waterfallplus') $this->loadModel('programplan')->computeProgress($execution->id); return $parentExecution; } @@ -1791,7 +1789,12 @@ EOD; $executionPairs = array(); $userCondition = !$app->user->admin ? " AND `id` " . helper::dbIN($app->user->view->sprints) : ''; $orderBy = $object->type == 'stage' ? 'ORDER BY `id` ASC' : 'ORDER BY `id` DESC'; - $executionList = $app->dbh->query("SELECT id,name,parent FROM " . TABLE_EXECUTION . " WHERE `project` = '{$object->project}' AND `deleted` = '0' $userCondition $orderBy")->fetchAll(); + + $executionList = $app->dbh->query("SELECT id,name,parent,project FROM " . TABLE_EXECUTION . " WHERE `project` = '{$object->project}' AND `deleted` = '0' $userCondition $orderBy")->fetchAll(); + $executions = array(); + foreach($executionList as $execution) $executions[$execution->id] = $execution; + + $executionList = $app->control->loadModel('execution')->resetExecutionSorts($executions); foreach($executionList as $execution) { if(isset($executionPairs[$execution->parent])) unset($executionPairs[$execution->parent]); diff --git a/module/common/view/kanban.html.php b/module/common/view/kanban.html.php index 02e883aa1f..04818b6019 100644 --- a/module/common/view/kanban.html.php +++ b/module/common/view/kanban.html.php @@ -222,7 +222,7 @@ function renderExecutionItem(item, $item) if(!$title.length) { - if((item.type == 'kanban' && window.userPrivs.kanban) || (item.type != 'kanban' && window.userPrivs.execution)) + if(!item.hasOwnProperty('children') && ((item.type == 'kanban' && window.userPrivs.kanban) || (item.type != 'kanban' && window.userPrivs.execution))) { var method = item.type == 'kanban' ? 'kanban' : 'task'; diff --git a/module/company/control.php b/module/company/control.php index b978bff34f..6a84f863e0 100755 --- a/module/company/control.php +++ b/module/company/control.php @@ -224,9 +224,9 @@ class company extends control /* Get executions' list.*/ $executions = $this->loadModel('execution')->getPairs(0, 'all', 'nocode|multiple'); $executionList = $this->execution->getByIdList(array_keys($executions)); - foreach($executionList as $executionID => $execution) + foreach($executionList as $id => $execution) { - if(isset($projects[$execution->project])) $executions[$execution->id] = $projects[$execution->project] . $executions[$execution->id]; + if(isset($projects[$execution->project])) $executions[$execution->id] = $projects[$execution->project] . $executions[$execution->id]; } $executions = array($this->lang->execution->common) + $executions; diff --git a/module/company/css/dynamic.en.css b/module/company/css/dynamic.en.css new file mode 100644 index 0000000000..55276305b4 --- /dev/null +++ b/module/company/css/dynamic.en.css @@ -0,0 +1 @@ +.picker-drop-menu{max-width:300px !important;} diff --git a/module/convert/model.php b/module/convert/model.php index e6c2e3ce9f..02843425aa 100644 --- a/module/convert/model.php +++ b/module/convert/model.php @@ -46,7 +46,7 @@ class convertModel extends model public function dbExists($dbName = '') { $statement = $this->dbh->prepare('SHOW DATABASES like ?'); - $statement->execute([$dbName]); + $statement->execute(array($dbName)); return $statement->fetch(); } diff --git a/module/convert/view/importnotice.html.php b/module/convert/view/importnotice.html.php index 7b27abe2cf..110a3d1679 100644 --- a/module/convert/view/importnotice.html.php +++ b/module/convert/view/importnotice.html.php @@ -41,8 +41,8 @@ li .form-control {margin-top: 10px}

- diff --git a/module/cron/control.php b/module/cron/control.php index 3e89130253..485334be88 100644 --- a/module/cron/control.php +++ b/module/cron/control.php @@ -197,7 +197,7 @@ class cron extends control if($now > $cron['time']) { - if(!$this->cron->changeStatusRunning($id, $cronInfo->lastTime)) continue; + if(!$this->cron->changeStatusRunning($id)) continue; $parsedCrons[$id]['time'] = $cron['cron']->getNextRunDate(); /* Execution command. */ diff --git a/module/custom/config.php b/module/custom/config.php index d13809c919..6d1b7729cf 100644 --- a/module/custom/config.php +++ b/module/custom/config.php @@ -22,8 +22,8 @@ $config->custom->requiredModules[35] = 'execution'; $config->custom->requiredModules[40] = 'task'; $config->custom->requiredModules[45] = 'build'; -$config->custom->allFeatures = array('program', 'productRR', 'productUR', 'productLine', 'projectScrum', 'projectWaterfall', 'projectKanban', 'execution', 'qa', 'devops', 'kanban', 'doc', 'report', 'system', 'admin', 'vision'); -$config->custom->dataFeatures = array('productUR', 'waterfall'); +$config->custom->allFeatures = array('program', 'productRR', 'productUR', 'productLine', 'projectScrum', 'projectWaterfall', 'projectKanban', 'projectAgileplus', 'projectWaterfallplus', 'execution', 'qa', 'devops', 'kanban', 'doc', 'report', 'system', 'admin', 'vision'); +$config->custom->dataFeatures = array('productUR', 'waterfall', 'waterfallplus'); $config->custom->scrumFeatures = array(); $config->custom->requiredModules[50] = 'bug'; @@ -43,8 +43,8 @@ $config->custom->fieldList['project']['create'] = 'budget,PM,desc'; $config->custom->fieldList['project']['edit'] = 'budget,PM,desc'; $config->custom->fieldList['product']['create'] = 'PO,QD,RD,type,desc'; $config->custom->fieldList['product']['edit'] = 'PO,QD,RD,type,desc,status'; -$config->custom->fieldList['story']['create'] = 'module,plan,source,pri,estimate,keywords,spec'; -$config->custom->fieldList['story']['change'] = 'comment,spec'; +$config->custom->fieldList['story']['create'] = 'module,plan,source,pri,estimate,keywords,spec,verify'; +$config->custom->fieldList['story']['change'] = 'comment,spec,verify'; $config->custom->fieldList['story']['close'] = 'comment'; $config->custom->fieldList['story']['review'] = 'reviewedDate,comment'; $config->custom->fieldList['productplan'] = 'begin,end,desc'; diff --git a/module/custom/control.php b/module/custom/control.php index 1a1f8e835b..8ef684b846 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -862,6 +862,25 @@ class custom extends control $this->display(); } + /** + * Set stage percent. + * + * @access public + * @return void + */ + public function percent() + { + if($_POST) + { + $this->loadModel('setting')->setItem('system.common.setPercent', $this->post->percent); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'reload')); + } + + $this->view->title = $this->lang->stage->percent; + + $this->display(); + } + /** * Set hours and weekend * diff --git a/module/custom/css/percent.css b/module/custom/css/percent.css new file mode 100644 index 0000000000..f29730761e --- /dev/null +++ b/module/custom/css/percent.css @@ -0,0 +1,3 @@ +.table-form>tbody>tr>th.c-setPercent {width: 135px;} +#readOnlyOfPercent {font-size: 13px; color: #5e626d; display: flex; width: 200%;} +#readOnlyOfPercent i {font-size: 14px; color: #0075ff; margin-right: 3px;} diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php index a60abfa439..205db35f80 100644 --- a/module/custom/lang/de.php +++ b/module/custom/lang/de.php @@ -8,9 +8,9 @@ $lang->custom->set = 'Customize'; $lang->custom->restore = 'Reset to Default'; $lang->custom->key = 'Key'; $lang->custom->value = 'Value'; -$lang->custom->flow = 'Concept'; $lang->custom->working = 'WorkStyle'; $lang->custom->select = 'Select Concept'; +$lang->custom->hours = 'Hours'; $lang->custom->branch = 'Multi Branch'; $lang->custom->owner = 'Owner'; $lang->custom->module = 'Module'; @@ -59,6 +59,8 @@ $lang->custom->executionCommon = 'Execution'; $lang->custom->selectDefaultProgram = 'Please select default program'; $lang->custom->defaultProgram = 'Default program'; $lang->custom->modeManagement = 'Mode Management'; +$lang->custom->percent = $lang->stage->percent; +$lang->custom->setPercent = "Enable or Disable {$lang->stage->percent}"; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -188,7 +190,7 @@ $lang->custom->notice->noClosedBlock = 'You have no blocks that are closed $lang->custom->notice->required = 'The selected field is required.'; $lang->custom->notice->conceptResult = 'According to your preference, %s-%s is set for you. Use %s + %s。'; $lang->custom->notice->conceptPath = 'Go to Admin -> Custom -> Concept to set it.'; -$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; +$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases, plans and builds of the closed product is also forbidden.'; $lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed {$lang->executionCommon} is also forbidden."; $lang->custom->notice->readOnlyOfKanban = "If Change Forbidden, any change on kanban card and related operations of {$lang->custom->kanban} is also forbidden."; $lang->custom->notice->URSREmpty = 'Custom requirement name can not be empty!'; @@ -199,6 +201,7 @@ $lang->custom->notice->storyReviewTip = 'After selecting by individual, pos $lang->custom->notice->selectAllTip = 'After selecting all people, the reviewers will be emptied and grayed out while hiding their positions and departments.'; $lang->custom->notice->repeatKey = 'Repeat Key %s'; $lang->custom->notice->readOnlyOfCode = 'A code is a management term that exists for secrecy or as an antonym. When code management is enabled, the code information of product, project, and execution in the system will be displayed in the creation, editing, detail, and list pages.'; +$lang->custom->notice->readOnlyOfPercent = 'The "Workload Ratio" is used to divide the workload of a project into different stages. The sum of the percentages of the same level stages cannot exceed 100%. After enabling the "Workload Ratio", users have to fill in the ratio fields when setting up the stages in the Waterfall project and Waterfall Plus project management models.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Homepage. Do you want to go to Product Homepage?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Homepage. Do you want to go to Project Homepage?"; @@ -252,31 +255,34 @@ $lang->custom->modeList['ALM'] = 'ALM Mode'; $lang->custom->modeIntroductionList['light'] = 'Provides the core function of project management, suitable for small R&D teams'; $lang->custom->modeIntroductionList['ALM'] = 'The concept is more complete and rigorous, and the function is more abundant. It is suitable for medium and large R&D teams'; -$lang->custom->features['program'] = 'Program'; -$lang->custom->features['productRR'] = 'Product - R&D Requirements'; -$lang->custom->features['productUR'] = 'Product - User Requirements'; -$lang->custom->features['productLine'] = 'Product - Product Line'; -$lang->custom->features['projectScrum'] = 'Project - Scrum Model'; -$lang->custom->features['projectWaterfall'] = 'Project - Waterfall Model'; -$lang->custom->features['projectKanban'] = 'Project - Kanban Model'; -$lang->custom->features['execution'] = 'Execution'; -$lang->custom->features['qa'] = 'QA'; -$lang->custom->features['devops'] = 'DevOps'; -$lang->custom->features['kanban'] = 'Kanban'; -$lang->custom->features['doc'] = 'Doc'; -$lang->custom->features['report'] = 'Statistics'; -$lang->custom->features['system'] = 'System'; -$lang->custom->features['assetlib'] = 'Asset Lib'; -$lang->custom->features['oa'] = 'Attend'; -$lang->custom->features['ops'] = 'Deploy'; -$lang->custom->features['feedback'] = 'Feedback'; -$lang->custom->features['traincourse'] = 'Academy'; -$lang->custom->features['workflow'] = 'Workflow'; -$lang->custom->features['admin'] = 'Admin'; -$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface'; +$lang->custom->features['program'] = 'Program'; +$lang->custom->features['productRR'] = $lang->productCommon . ' - R&D Requirements'; +$lang->custom->features['productUR'] = $lang->productCommon . ' - User Requirements'; +$lang->custom->features['productLine'] = $lang->productCommon . ' - Product Line'; +$lang->custom->features['projectScrum'] = $lang->projectCommon . ' - Scrum Model'; +$lang->custom->features['projectWaterfall'] = $lang->projectCommon . ' - Waterfall Model'; +$lang->custom->features['projectKanban'] = $lang->projectCommon . ' - Kanban Model'; +$lang->custom->features['projectAgileplus'] = $lang->projectCommon . ' - Agile + Model'; +$lang->custom->features['projectWaterfallplus'] = $lang->projectCommon . ' - Waterfall + Model'; +$lang->custom->features['execution'] = 'Execution'; +$lang->custom->features['qa'] = 'QA'; +$lang->custom->features['devops'] = 'DevOps'; +$lang->custom->features['kanban'] = 'Kanban'; +$lang->custom->features['doc'] = 'Doc'; +$lang->custom->features['report'] = $lang->report->common; +$lang->custom->features['system'] = 'System'; +$lang->custom->features['assetlib'] = 'Asset Lib'; +$lang->custom->features['oa'] = 'Attend'; +$lang->custom->features['ops'] = 'Deploy'; +$lang->custom->features['feedback'] = 'Feedback'; +$lang->custom->features['traincourse'] = 'Academy'; +$lang->custom->features['workflow'] = 'Workflow'; +$lang->custom->features['admin'] = 'Admin'; +$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface'; -$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall'; -$lang->custom->needClosedFunctions['URStory'] = 'User Story'; +$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall'; +$lang->custom->needClosedFunctions['waterfallplus'] = 'Waterfall +'; +$lang->custom->needClosedFunctions['URStory'] = 'User Story'; if($config->edition == 'max') $lang->custom->needClosedFunctions['assetLib'] = 'Assetlib'; $lang->custom->scoreStatus[1] = 'On'; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index 8c29df5c94..b929cb6ce3 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -8,9 +8,9 @@ $lang->custom->set = 'Customize'; $lang->custom->restore = 'Reset'; $lang->custom->key = 'Key'; $lang->custom->value = 'Value'; -$lang->custom->flow = 'Concept'; $lang->custom->working = 'Mode'; $lang->custom->select = 'Select Concept'; +$lang->custom->hours = 'Hours'; $lang->custom->branch = 'Multi-Branch'; $lang->custom->owner = 'Owner'; $lang->custom->module = 'Module'; @@ -59,6 +59,8 @@ $lang->custom->executionCommon = 'Execution'; $lang->custom->selectDefaultProgram = 'Please select default program'; $lang->custom->defaultProgram = 'Default program'; $lang->custom->modeManagement = 'Mode Management'; +$lang->custom->percent = $lang->stage->percent; +$lang->custom->setPercent = "Enable or Disable {$lang->stage->percent}"; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -188,7 +190,7 @@ $lang->custom->notice->noClosedBlock = 'You have no blocks that are closed $lang->custom->notice->required = 'The selected field is required.'; $lang->custom->notice->conceptResult = 'According to your preference, %s-%s is set for you. Use %s + %s.'; $lang->custom->notice->conceptPath = 'Go to Admin -> Custom -> Concept to set it.'; -$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; +$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases, plans and builds of the closed product is also forbidden.'; $lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed {$lang->executionCommon} is also forbidden."; $lang->custom->notice->readOnlyOfKanban = "If Change Forbidden, any change on kanban card and related operations of {$lang->custom->kanban} is also forbidden."; $lang->custom->notice->URSREmpty = 'Custom requirement name can not be empty!'; @@ -199,6 +201,7 @@ $lang->custom->notice->storyReviewTip = 'After selecting by individual, pos $lang->custom->notice->selectAllTip = 'After selecting all people, the reviewers will be emptied and grayed out while hiding their positions and departments.'; $lang->custom->notice->repeatKey = 'Repeat Key %s'; $lang->custom->notice->readOnlyOfCode = 'A code is a management term that exists for secrecy or as an antonym. When code management is enabled, the code information of product, project, and execution in the system will be displayed in the creation, editing, detail, and list pages.'; +$lang->custom->notice->readOnlyOfPercent = 'The "Workload Ratio" is used to divide the workload of a project into different stages. The sum of the percentages of the same level stages cannot exceed 100%. After enabling the "Workload Ratio", users have to fill in the ratio fields when setting up the stages in the Waterfall project and Waterfall Plus project management models.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Home. Do you want to go to Product Home?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Home. Do you want to go to Project Home?"; @@ -252,31 +255,34 @@ $lang->custom->modeList['ALM'] = 'ALM Mode'; $lang->custom->modeIntroductionList['light'] = 'Provides the core function of project management, suitable for small R&D teams'; $lang->custom->modeIntroductionList['ALM'] = 'The concept is more complete and rigorous, and the function is more abundant. It is suitable for medium and large R&D teams'; -$lang->custom->features['program'] = 'Program'; -$lang->custom->features['productRR'] = 'Product - R&D Requirements'; -$lang->custom->features['productUR'] = 'Product - User Requirements'; -$lang->custom->features['productLine'] = 'Product - Product Line'; -$lang->custom->features['projectScrum'] = 'Project - Scrum Model'; -$lang->custom->features['projectWaterfall'] = 'Project - Waterfall Model'; -$lang->custom->features['projectKanban'] = 'Project - Kanban Model'; -$lang->custom->features['execution'] = 'Execution'; -$lang->custom->features['qa'] = 'QA'; -$lang->custom->features['devops'] = 'DevOps'; -$lang->custom->features['kanban'] = 'Kanban'; -$lang->custom->features['doc'] = 'Doc'; -$lang->custom->features['report'] = 'Statistics'; -$lang->custom->features['system'] = 'System'; -$lang->custom->features['assetlib'] = 'Asset Lib'; -$lang->custom->features['oa'] = 'Attend'; -$lang->custom->features['ops'] = 'Deploy'; -$lang->custom->features['feedback'] = 'Feedback'; -$lang->custom->features['traincourse'] = 'Academy'; -$lang->custom->features['workflow'] = 'Workflow'; -$lang->custom->features['admin'] = 'Admin'; -$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface'; +$lang->custom->features['program'] = 'Program'; +$lang->custom->features['productRR'] = $lang->productCommon . ' - R&D Requirements'; +$lang->custom->features['productUR'] = $lang->productCommon . ' - User Requirements'; +$lang->custom->features['productLine'] = $lang->productCommon . ' - Product Line'; +$lang->custom->features['projectScrum'] = $lang->projectCommon . ' - Scrum Model'; +$lang->custom->features['projectWaterfall'] = $lang->projectCommon . ' - Waterfall Model'; +$lang->custom->features['projectKanban'] = $lang->projectCommon . ' - Kanban Model'; +$lang->custom->features['projectAgileplus'] = $lang->projectCommon . ' - Agile + Model'; +$lang->custom->features['projectWaterfallplus'] = $lang->projectCommon . ' - Waterfall + Model'; +$lang->custom->features['execution'] = 'Execution'; +$lang->custom->features['qa'] = 'QA'; +$lang->custom->features['devops'] = 'DevOps'; +$lang->custom->features['kanban'] = 'Kanban'; +$lang->custom->features['doc'] = 'Doc'; +$lang->custom->features['report'] = $lang->report->common; +$lang->custom->features['system'] = 'System'; +$lang->custom->features['assetlib'] = 'Asset Lib'; +$lang->custom->features['oa'] = 'Attend'; +$lang->custom->features['ops'] = 'Deploy'; +$lang->custom->features['feedback'] = 'Feedback'; +$lang->custom->features['traincourse'] = 'Academy'; +$lang->custom->features['workflow'] = 'Workflow'; +$lang->custom->features['admin'] = 'Admin'; +$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface'; -$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall'; -$lang->custom->needClosedFunctions['URStory'] = 'User Story'; +$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall'; +$lang->custom->needClosedFunctions['waterfallplus'] = 'Waterfall +'; +$lang->custom->needClosedFunctions['URStory'] = 'User Story'; if($config->edition == 'max') $lang->custom->needClosedFunctions['assetLib'] = 'Assetlib'; $lang->custom->scoreStatus[1] = 'On'; diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php index 609cad69a4..243193c2f9 100644 --- a/module/custom/lang/fr.php +++ b/module/custom/lang/fr.php @@ -8,9 +8,9 @@ $lang->custom->set = 'Personnaliser'; $lang->custom->restore = 'Réinitialiser'; $lang->custom->key = 'Clé'; $lang->custom->value = 'Valeur'; -$lang->custom->flow = 'Concept'; $lang->custom->working = 'Mode'; $lang->custom->select = 'Choix du Concept'; +$lang->custom->hours = 'Hours'; $lang->custom->branch = 'Multi-Branches'; $lang->custom->owner = 'Propriétaire'; $lang->custom->module = 'Module'; @@ -59,6 +59,8 @@ $lang->custom->executionCommon = 'Execution'; $lang->custom->selectDefaultProgram = 'Please select default program'; $lang->custom->defaultProgram = 'Default program'; $lang->custom->modeManagement = 'Mode Management'; +$lang->custom->percent = $lang->stage->percent; +$lang->custom->setPercent = "Enable or Disable {$lang->stage->percent}"; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; @@ -188,7 +190,7 @@ $lang->custom->notice->noClosedBlock = "Vous n'avez aucun bloc fermé déf $lang->custom->notice->required = 'Le champ sélectionné est obligatoire.'; $lang->custom->notice->conceptResult = 'Selon votre préférence, %s-%s peut être fixé pour vous. Utilisez %s + %s。'; $lang->custom->notice->conceptPath = 'Allez à Admin -> Custom -> Concept pour le paramétrer.'; -$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; +$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases, plans and builds of the closed product is also forbidden.'; $lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on tasks, builds, efforts and stories of the closed {$lang->executionCommon} is also forbidden."; $lang->custom->notice->readOnlyOfKanban = "If Change Forbidden, any change on kanban card and related operations of {$lang->custom->kanban} is also forbidden."; $lang->custom->notice->URSREmpty = 'Custom requirement name can not be empty!'; @@ -199,6 +201,7 @@ $lang->custom->notice->storyReviewTip = 'After selecting by individual, pos $lang->custom->notice->selectAllTip = 'After selecting all people, the reviewers will be emptied and grayed out while hiding their positions and departments.'; $lang->custom->notice->repeatKey = 'Repeat Key %s'; $lang->custom->notice->readOnlyOfCode = "Le code est un terme de gestion utilisé pour la confidentialité ou comme alias. Lorsque la gestion du code est activée, le produit, le projet et l'exécution dans le système afficheront les informations de code sur les pages de création, de modification, de détails et de liste."; +$lang->custom->notice->readOnlyOfPercent = 'The "Workload Ratio" is used to divide the workload of a project into different stages. The sum of the percentages of the same level stages cannot exceed 100%. After enabling the "Workload Ratio", users have to fill in the ratio fields when setting up the stages in the Waterfall project and Waterfall Plus project management models.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ possède une page d'accueil. Voulez-vous consulter la page d'accueil du produit ?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ possède une page d'accueil. Voulez-vous consulter la page d'accueil du produit ?"; @@ -252,31 +255,34 @@ $lang->custom->modeList['ALM'] = 'ALM Mode'; $lang->custom->modeIntroductionList['light'] = 'Provides the core function of project management, suitable for small R&D teams'; $lang->custom->modeIntroductionList['ALM'] = 'The concept is more complete and rigorous, and the function is more abundant. It is suitable for medium and large R&D teams'; -$lang->custom->features['program'] = 'Program'; -$lang->custom->features['productRR'] = 'Product - R&D Requirements'; -$lang->custom->features['productUR'] = 'Product - User Requirements'; -$lang->custom->features['productLine'] = 'Product - Product Line'; -$lang->custom->features['projectScrum'] = 'Project - Scrum Model'; -$lang->custom->features['projectWaterfall'] = 'Project - Waterfall Model'; -$lang->custom->features['projectKanban'] = 'Project - Kanban Model'; -$lang->custom->features['execution'] = 'Execution'; -$lang->custom->features['qa'] = 'QA'; -$lang->custom->features['devops'] = 'DevOps'; -$lang->custom->features['kanban'] = 'Kanban'; -$lang->custom->features['doc'] = 'Doc'; -$lang->custom->features['report'] = 'Statistics'; -$lang->custom->features['system'] = 'System'; -$lang->custom->features['assetlib'] = 'Asset Lib'; -$lang->custom->features['oa'] = 'Attend'; -$lang->custom->features['ops'] = 'Deploy'; -$lang->custom->features['feedback'] = 'Feedback'; -$lang->custom->features['traincourse'] = 'Academy'; -$lang->custom->features['workflow'] = 'Workflow'; -$lang->custom->features['admin'] = 'Admin'; -$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface'; +$lang->custom->features['program'] = 'Program'; +$lang->custom->features['productRR'] = $lang->productCommon . ' - R&D Requirements'; +$lang->custom->features['productUR'] = $lang->productCommon . ' - User Requirements'; +$lang->custom->features['productLine'] = $lang->productCommon . ' - Product Line'; +$lang->custom->features['projectScrum'] = $lang->projectCommon . ' - Scrum Model'; +$lang->custom->features['projectWaterfall'] = $lang->projectCommon . ' - Waterfall Model'; +$lang->custom->features['projectKanban'] = $lang->projectCommon . ' - Kanban Model'; +$lang->custom->features['projectAgileplus'] = $lang->projectCommon . ' - Agile + Model'; +$lang->custom->features['projectWaterfallplus'] = $lang->projectCommon . ' - Waterfall + Model'; +$lang->custom->features['execution'] = 'Execution'; +$lang->custom->features['qa'] = 'QA'; +$lang->custom->features['devops'] = 'DevOps'; +$lang->custom->features['kanban'] = 'Kanban'; +$lang->custom->features['doc'] = 'Doc'; +$lang->custom->features['report'] = $lang->report->common; +$lang->custom->features['system'] = 'System'; +$lang->custom->features['assetlib'] = 'Asset Lib'; +$lang->custom->features['oa'] = 'Attend'; +$lang->custom->features['ops'] = 'Deploy'; +$lang->custom->features['feedback'] = 'Feedback'; +$lang->custom->features['traincourse'] = 'Academy'; +$lang->custom->features['workflow'] = 'Workflow'; +$lang->custom->features['admin'] = 'Admin'; +$lang->custom->features['vision'] = 'Full Feature Interface, Operation Management Interface'; -$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall'; -$lang->custom->needClosedFunctions['URStory'] = 'User Story'; +$lang->custom->needClosedFunctions['waterfall'] = 'Waterfall'; +$lang->custom->needClosedFunctions['waterfallplus'] = 'Waterfall +'; +$lang->custom->needClosedFunctions['URStory'] = 'User Story'; if($config->edition == 'max') $lang->custom->needClosedFunctions['assetLib'] = 'Assetlib'; $lang->custom->scoreStatus[1] = 'On'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index ae60c824fb..c6cf74ef8f 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -8,8 +8,8 @@ $lang->custom->set = '自定义配置'; $lang->custom->restore = '恢复默认'; $lang->custom->key = '键'; $lang->custom->value = '值'; -$lang->custom->flow = '流程设置'; $lang->custom->working = '工作方式'; +$lang->custom->hours = '工时'; $lang->custom->select = '请选择流程:'; $lang->custom->branch = '多分支'; $lang->custom->owner = '所有者'; @@ -59,6 +59,8 @@ $lang->custom->executionCommon = '执行'; $lang->custom->selectDefaultProgram = '请选择一个默认项目集'; $lang->custom->defaultProgram = '默认项目集'; $lang->custom->modeManagement = '模式管理'; +$lang->custom->percent = $lang->stage->percent; +$lang->custom->setPercent = "是否启用{$lang->stage->percent}"; $lang->custom->unitList['efficiency'] = '工时/'; $lang->custom->unitList['manhour'] = '人时/'; @@ -188,7 +190,7 @@ $lang->custom->notice->noClosedBlock = '没有永久关闭的区块'; $lang->custom->notice->required = '页面提交时,选中的字段必填'; $lang->custom->notice->conceptResult = '我们已经根据您的选择为您设置了 %s-%s 模式,使用%s + %s。'; $lang->custom->notice->conceptPath = '您可以在:后台 -> 自定义 -> 流程页面修改。'; -$lang->custom->notice->readOnlyOfProduct = '禁止修改后,已关闭' . $lang->productCommon . '下的' . $lang->SRCommon . '、Bug、用例、日志、发布、计划都禁止修改。'; +$lang->custom->notice->readOnlyOfProduct = '禁止修改后,已关闭' . $lang->productCommon . '下的' . $lang->SRCommon . '、Bug、用例、日志、发布、计划、版本都禁止修改。'; $lang->custom->notice->readOnlyOfExecution = "禁止修改后,已关闭{$lang->custom->executionCommon}下的任务、版本、日志以及关联需求都禁止修改。"; $lang->custom->notice->readOnlyOfKanban = "禁止修改后,已关闭{$lang->custom->kanban}下的卡片以及相关设置都禁止修改。"; $lang->custom->notice->URSREmpty = '自定义需求名称不能为空!'; @@ -199,6 +201,7 @@ $lang->custom->notice->storyReviewTip = '按人员、职位、部门勾选 $lang->custom->notice->selectAllTip = '勾选所有人员后,会清空并置灰评审人员,同时隐藏职位、部门。'; $lang->custom->notice->repeatKey = '%s键重复'; $lang->custom->notice->readOnlyOfCode = '代号是一种管理话术,主要便于保密或作为别名存在。启用代号管理后,系统中的产品、项目、执行在创建、编辑、详情、列表等页面均会展示代号信息。'; +$lang->custom->notice->readOnlyOfPercent = '工作量占比用于划分项目中存在多个阶段时的工作量的占比,同一级阶段的百分比之和最高为100%。启用工作量占比后,系统中的瀑布项目和融合瀑布项目模型中设置阶段时需要维护阶段的工作量占比。'; $lang->custom->notice->indexPage['product'] = "从8.2版本起增加了产品主页视图,是否默认进入产品主页?"; $lang->custom->notice->indexPage['project'] = "从8.2版本起增加了项目主页视图,是否默认进入项目主页?"; @@ -252,31 +255,34 @@ $lang->custom->modeList['ALM'] = '全生命周期管理模式'; $lang->custom->modeIntroductionList['light'] = '提供了项目管理的核心功能,适用于小型研发团队'; $lang->custom->modeIntroductionList['ALM'] = '概念更加完整、严谨,功能更加丰富,适用于中大型研发团队'; -$lang->custom->features['program'] = '项目集'; -$lang->custom->features['productRR'] = '产品-研发需求'; -$lang->custom->features['productUR'] = '产品-用户需求'; -$lang->custom->features['productLine'] = '产品-产品线'; -$lang->custom->features['projectScrum'] = '项目-敏捷模型'; -$lang->custom->features['projectWaterfall'] = '项目-瀑布模型'; -$lang->custom->features['projectKanban'] = '项目-看板模型'; -$lang->custom->features['execution'] = '执行'; -$lang->custom->features['qa'] = '测试'; -$lang->custom->features['devops'] = 'DevOps'; -$lang->custom->features['kanban'] = '看板'; -$lang->custom->features['doc'] = '文档'; -$lang->custom->features['report'] = '统计'; -$lang->custom->features['system'] = '组织'; -$lang->custom->features['assetlib'] = '资产库'; -$lang->custom->features['oa'] = '办公'; -$lang->custom->features['ops'] = '运维'; -$lang->custom->features['feedback'] = '反馈'; -$lang->custom->features['traincourse'] = '学堂'; -$lang->custom->features['workflow'] = '工作流'; -$lang->custom->features['admin'] = '后台'; -$lang->custom->features['vision'] = '研发综合界面、运营管理界面'; +$lang->custom->features['program'] = '项目集'; +$lang->custom->features['productRR'] = '产品-研发需求'; +$lang->custom->features['productUR'] = '产品-用户需求'; +$lang->custom->features['productLine'] = '产品-产品线'; +$lang->custom->features['projectScrum'] = '项目-敏捷模型'; +$lang->custom->features['projectWaterfall'] = '项目-瀑布模型'; +$lang->custom->features['projectKanban'] = '项目-看板模型'; +$lang->custom->features['projectAgileplus'] = '项目-融合敏捷模型'; +$lang->custom->features['projectWaterfallplus'] = '项目-融合瀑布模型'; +$lang->custom->features['execution'] = '执行'; +$lang->custom->features['qa'] = '测试'; +$lang->custom->features['devops'] = 'DevOps'; +$lang->custom->features['kanban'] = '看板'; +$lang->custom->features['doc'] = '文档'; +$lang->custom->features['report'] = $lang->report->common; +$lang->custom->features['system'] = '组织'; +$lang->custom->features['assetlib'] = '资产库'; +$lang->custom->features['oa'] = '办公'; +$lang->custom->features['ops'] = '运维'; +$lang->custom->features['feedback'] = '反馈'; +$lang->custom->features['traincourse'] = '学堂'; +$lang->custom->features['workflow'] = '工作流'; +$lang->custom->features['admin'] = '后台'; +$lang->custom->features['vision'] = '研发综合界面、运营管理界面'; -$lang->custom->needClosedFunctions['waterfall'] = '瀑布项目'; -$lang->custom->needClosedFunctions['URStory'] = '用户需求'; +$lang->custom->needClosedFunctions['waterfall'] = '瀑布项目'; +$lang->custom->needClosedFunctions['waterfallplus'] = '融合瀑布项目'; +$lang->custom->needClosedFunctions['URStory'] = '用户需求'; if($config->edition == 'max') $lang->custom->needClosedFunctions['assetLib'] = '资产库'; $lang->custom->scoreStatus[1] = '开启'; diff --git a/module/custom/model.php b/module/custom/model.php index 92376c196d..e6b7d2ea6b 100644 --- a/module/custom/model.php +++ b/module/custom/model.php @@ -204,6 +204,9 @@ class customModel extends model ksort($menuOrder); foreach($menuOrder as $name) { + /* If menu is removed, delete the menuOrder. */ + if(!isset($allMenu->$name)) continue; + $item = new stdclass(); $item->name = $name; $item->hidden = false; @@ -840,7 +843,7 @@ class customModel extends model if(!isset($disabledFeatures['scrum'])) $disabledFeatures['scrum'] = array(); $disabledFeatures['scrum'][] = $feature; } - elseif($feature == 'waterfall') + elseif(in_array($feature, array('waterfall', 'waterfallplus'))) { $disabledFeatures[] = 'project' . ucfirst($feature); } @@ -955,14 +958,21 @@ class customModel extends model foreach($this->config->custom->dataFeatures as $feature) { $function = 'has' . ucfirst($feature) . 'Data'; - if(!$this->$function()) $disabledFeatures .= "$feature,"; + if(!$this->$function()) + { + $disabledFeatures .= "$feature,"; + if(strpos($feature, 'scrum') === 0) $disabledFeatures .= 'agileplus' . substr($feature, 5) . ','; + } } - $disabledFeatures .= 'scrumMeasrecord,productTrack,productRoadmap'; + $disabledFeatures .= 'scrumMeasrecord,agileplusMeasrecord,productTrack,productRoadmap'; } $disabledFeatures = rtrim($disabledFeatures, ','); $this->loadModel('setting')->setItem('system.common.disabledFeatures', $disabledFeatures); + $URAndSR = strpos(",$disabledFeatures,", ',productUR,') === false ? 1 : 0; + $this->setting->setItem('system.custom.URAndSR', $URAndSR); + $this->processMeasrecordCron(); } @@ -988,6 +998,17 @@ class customModel extends model return $this->dao->select('*')->from(TABLE_PROJECT)->where('model')->eq('waterfall')->andWhere('deleted')->eq('0')->count(); } + /** + * Check for waterfallplus project data. + * + * @access public + * @return int + */ + public function hasWaterfallplusData() + { + return $this->dao->select('*')->from(TABLE_PROJECT)->where('model')->eq('waterfallplus')->andWhere('deleted')->eq('0')->count(); + } + /** * Check for assetlib data. * @@ -1123,12 +1144,15 @@ class customModel extends model $disabledFeatures = $this->setting->getItem('owner=system&module=common§ion=&key=disabledFeatures'); $disabledFeatures = $disabledFeatures . ',' . $closedFeatures; - $hasWaterfall = strpos(",{$disabledFeatures},", ',waterfall,') === false; - $hasScrumMeasrecord = strpos(",{$disabledFeatures},", ',scrumMeasrecord,') === false; - $hasWaterfallMeasrecord = (strpos(",{$disabledFeatures},", ',waterfallMeasrecord,') === false and $hasWaterfall); + $hasWaterfall = strpos(",{$disabledFeatures},", ',waterfall,') === false; + $hasWaterfallPlus = strpos(",{$disabledFeatures},", ',waterfallplus,') === false; + $hasScrumMeasrecord = strpos(",{$disabledFeatures},", ',scrumMeasrecord,') === false; + $hasAgilePlusMeasrecord = strpos(",{$disabledFeatures},", ',agileMeasrecord,') === false; + $hasWaterfallMeasrecord = (strpos(",{$disabledFeatures},", ',waterfallMeasrecord,') === false and $hasWaterfall); + $hasWaterfallPlusMeasrecord = (strpos(",{$disabledFeatures},", ',waterfallplusMeasrecord,') === false and $hasWaterfallPlus); $cronStatus = 'normal'; - if(!$hasScrumMeasrecord and !$hasWaterfallMeasrecord) $cronStatus = 'stop'; + if(!$hasScrumMeasrecord and !$hasAgilePlusMeasrecord and !$hasWaterfallMeasrecord and $hasWaterfallPlusMeasrecord) $cronStatus = 'stop'; $this->loadModel('cron'); $cron = $this->dao->select('id,status')->from(TABLE_CRON)->where('command')->like('%methodName=initCrontabQueue')->fetch(); diff --git a/module/custom/view/code.html.php b/module/custom/view/code.html.php index 65a80730d4..643aeb940b 100644 --- a/module/custom/view/code.html.php +++ b/module/custom/view/code.html.php @@ -16,7 +16,7 @@
- + - - + + custom->allFeatures as $feature):?> - + - + diff --git a/module/custom/view/percent.html.php b/module/custom/view/percent.html.php new file mode 100644 index 0000000000..25ecf9ddd0 --- /dev/null +++ b/module/custom/view/percent.html.php @@ -0,0 +1,42 @@ + + * @package custom + * @version $Id$ + * @link https://www.zentao.net + */ +?> +getModuleRoot() . 'common/view/header.html.php';?> +
+
+
>type, 'class=form-control');?>
bug->productplan;?> plan, "class='form-control chosen'");?> diff --git a/module/bug/view/view.html.php b/module/bug/view/view.html.php index 63300878dd..7f11fcfa4f 100644 --- a/module/bug/view/view.html.php +++ b/module/bug/view/view.html.php @@ -161,7 +161,7 @@ bug->fromCase;?> case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion", '', true), " {$lang->bug->fromCase}$lang->colon$bug->case", '', isonlybody() ? '' : "data-toggle='modal' data-type='iframe' data-width='80%'");?>
bug->productplan;?> plan or !common::printLink('productplan', 'view', "planID=$bug->plan&type=bug", $bug->planName)) echo $bug->planName;?>
build->notice->changeProduct;?>
build->project :($executionType ? $lang->build->executionAB : $lang->build->execution);?>execution);?> + execution);?> + +
custom->setCode;?> - setCode) ? $config->setCode : 1;?> + setCode) ? $config->setCode : 0;?> custom->conceptOptions->URAndSR as $key => $value):?> diff --git a/module/custom/view/hours.html.php b/module/custom/view/hours.html.php index 466398467d..50807ab711 100644 --- a/module/custom/view/hours.html.php +++ b/module/custom/view/hours.html.php @@ -17,7 +17,7 @@ diff --git a/module/custom/view/mode.html.php b/module/custom/view/mode.html.php index 7378168d3a..7e7dcfc8e8 100644 --- a/module/custom/view/mode.html.php +++ b/module/custom/view/mode.html.php @@ -36,19 +36,19 @@ custom->modeIntroductionList['ALM'];?>
lang->custom->scrum->common, implode($lang->comma, $disabledScrumFeatures)) : $this->lang->custom->features[$feature];?>lang->custom->scrum->common, implode($lang->comma, $disabledScrumFeatures)) : $this->lang->custom->features[$feature];?>
lang->custom->scrum->common, implode($lang->comma, $enabledScrumFeatures)) : $this->lang->custom->features[$feature];?>lang->custom->scrum->common, implode($lang->comma, $enabledScrumFeatures)) : $this->lang->custom->features[$feature];?>
+ + + + + + + + + + + + + +
custom->setPercent;?> + setPercent) ? $config->setPercent : 0;?> + custom->conceptOptions->URAndSR as $key => $value):?> + + +
+
 
+
custom->notice->readOnlyOfPercent;?>
+
+ +
+ +
+ diff --git a/module/design/control.php b/module/design/control.php index fd6babe192..9964b82378 100755 --- a/module/design/control.php +++ b/module/design/control.php @@ -71,6 +71,9 @@ class design extends control { $productID = $this->commonAction($projectID, $productID); + $project = $this->loadModel('project')->getByID($projectID); + $typeList = $project->model == 'waterfall' ? $this->lang->design->typeList : $this->lang->design->plusTypeList; + /* Save session for design list and process product id. */ $this->session->set('designList', $this->app->getURI(true), 'project'); $this->session->set('reviewList', $this->app->getURI(true), 'project'); @@ -80,6 +83,7 @@ class design extends control $productIdList = $productID ? $productID : array_keys($products); $stories = $this->loadModel('story')->getProductStoryPairs($productIdList, 'all', 0, 'active', 'id_desc', 0, 'full', 'story', false); $this->config->design->search['params']['story']['values'] = $stories; + $this->config->design->search['params']['type']['values'] = $typeList; $queryID = ($type == 'bySearch') ? (int)$param : 0; $actionURL = $this->createLink('design', 'browse', "projectID=$projectID&productID=$productID&type=bySearch&queryID=myQueryID"); @@ -120,7 +124,6 @@ class design extends control $pager = pager::init(0, $recPerPage, $pageID); $designs = $this->design->getList($projectID, $productID, $type, $queryID, $orderBy, $pager); - $project = $this->loadModel('project')->getByID($projectID); $this->view->hiddenProduct = $project->hasProduct ? false : true; $this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->browse; @@ -134,6 +137,7 @@ class design extends control $this->view->projectID = $projectID; $this->view->pager = $pager; $this->view->users = $this->loadModel('user')->getPairs('noletter'); + $this->view->typeList = $typeList; $this->display(); } @@ -173,6 +177,8 @@ class design extends control $products = $this->product->getProductPairsByProject($projectID); $productIdList = $productID ? $productID : array_keys($products); + $project = $this->loadModel('project')->getByID($projectID); + $this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->create; $this->view->position[] = $this->lang->design->create; @@ -181,7 +187,7 @@ class design extends control $this->view->productID = $productID; $this->view->projectID = $projectID; $this->view->type = $type; - $this->view->project = $this->loadModel('project')->getByID($projectID); + $this->view->typeList = $project->model == 'waterfall' ? $this->lang->design->typeList : $this->lang->design->plusTypeList; $this->display(); } @@ -220,12 +226,15 @@ class design extends control $products = $this->product->getProductPairsByProject($projectID); $productIdList = $productID ? $productID : array_keys($products); + $project = $this->loadModel('project')->getByID($projectID); + $this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->batchCreate; $this->view->position[] = $this->lang->design->batchCreate; - $this->view->stories = $this->loadModel('story')->getProductStoryPairs($productIdList); - $this->view->users = $this->loadModel('user')->getPairs('noclosed'); - $this->view->type = $type; + $this->view->stories = $this->loadModel('story')->getProductStoryPairs($productIdList); + $this->view->users = $this->loadModel('user')->getPairs('noclosed'); + $this->view->type = $type; + $this->view->typeList = $project->model == 'waterfall' ? $this->lang->design->typeList : $this->lang->design->plusTypeList; $this->display(); } @@ -248,6 +257,8 @@ class design extends control $products = $this->product->getProductPairsByProject($design->project); $productIdList = $design->product ? $design->product : array_keys($products); + $project = $this->loadModel('project')->getByID($design->project); + $this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->view; $this->view->position[] = $this->lang->design->view; @@ -256,7 +267,8 @@ class design extends control $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->actions = $this->loadModel('action')->getList('design', $design->id); $this->view->repos = $this->loadModel('repo')->getRepoPairs('project', $design->project); - $this->view->project = $this->loadModel('project')->getByID($design->project); + $this->view->project = $project; + $this->view->typeList = $project->model == 'waterfall' ? $this->lang->design->typeList : $this->lang->design->plusTypeList; $this->display(); } @@ -300,13 +312,16 @@ class design extends control $products = $this->product->getProductPairsByProject($design->project); $productIdList = $design->product ? $design->product : array_keys($products); + $project = $this->loadModel('project')->getByID($design->project); + $this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->edit; $this->view->position[] = $this->lang->design->edit; $this->view->design = $design; - $this->view->project = $this->loadModel('project')->getByID($design->project); + $this->view->project = $project; $this->view->stories = $this->loadModel('story')->getProductStoryPairs($productIdList); $this->view->users = $this->loadModel('user')->getPairs('noclosed'); + $this->view->typeList = $project->model == 'waterfall' ? $this->lang->design->typeList : $this->lang->design->plusTypeList; $this->display(); } diff --git a/module/design/lang/de.php b/module/design/lang/de.php index ac051992b9..9fe4690a63 100644 --- a/module/design/lang/de.php +++ b/module/design/lang/de.php @@ -65,6 +65,8 @@ $lang->design->typeList['DDS'] = 'Detailed'; $lang->design->typeList['DBDS'] = 'Database'; $lang->design->typeList['ADS'] = 'API'; +$lang->design->plusTypeList = $lang->design->typeList; + $lang->design->rangeList = array(); $lang->design->rangeList['all'] = 'All'; $lang->design->rangeList['assign'] = 'Selected'; diff --git a/module/design/lang/en.php b/module/design/lang/en.php index 9b3d40e66c..166f1458f9 100644 --- a/module/design/lang/en.php +++ b/module/design/lang/en.php @@ -65,6 +65,8 @@ $lang->design->typeList['DDS'] = 'Detailed'; $lang->design->typeList['DBDS'] = 'Database'; $lang->design->typeList['ADS'] = 'API'; +$lang->design->plusTypeList = $lang->design->typeList; + $lang->design->rangeList = array(); $lang->design->rangeList['all'] = 'All'; $lang->design->rangeList['assign'] = 'Selected'; diff --git a/module/design/lang/fr.php b/module/design/lang/fr.php index 91f8e004e5..33a0580b41 100644 --- a/module/design/lang/fr.php +++ b/module/design/lang/fr.php @@ -65,6 +65,8 @@ $lang->design->typeList['DDS'] = 'Detailed'; $lang->design->typeList['DBDS'] = 'Database'; $lang->design->typeList['ADS'] = 'API'; +$lang->design->plusTypeList = $lang->design->typeList; + $lang->design->rangeList = array(); $lang->design->rangeList['all'] = 'All'; $lang->design->rangeList['assign'] = 'Selected'; diff --git a/module/design/lang/zh-cn.php b/module/design/lang/zh-cn.php index f500018190..372ec8dca6 100644 --- a/module/design/lang/zh-cn.php +++ b/module/design/lang/zh-cn.php @@ -65,6 +65,8 @@ $lang->design->typeList['DDS'] = '详细设计'; $lang->design->typeList['DBDS'] = '数据库设计'; $lang->design->typeList['ADS'] = '接口设计'; +$lang->design->plusTypeList = $lang->design->typeList; + $lang->design->rangeList = array(); $lang->design->rangeList['all'] = '全部记录'; $lang->design->rangeList['assign'] = '选中记录'; diff --git a/module/design/model.php b/module/design/model.php index 7384f2755b..caa5d6ca3b 100755 --- a/module/design/model.php +++ b/module/design/model.php @@ -404,11 +404,15 @@ class designModel extends model */ public function setMenu($projectID, $products, $productID = 0) { + $project = $this->loadModel('project')->getByID($projectID); + if(!empty($project) and $project->model == 'waterfall') $typeList = 'typeList'; + if(!empty($project) and $project->model == 'waterfallplus') $typeList = 'plusTypeList'; + /* Show custom design types. */ $this->lang->waterfall->menu->design['subMenu'] = new stdclass(); $this->lang->waterfall->menu->design['subMenu']->all = array('link' => "{$this->lang->all}|design|browse|projectID=%s&productID=0&browseType=all"); $count = 1; - foreach(array_filter($this->lang->design->typeList) as $key => $value) + foreach(array_filter($this->lang->design->{$typeList}) as $key => $value) { $key = strtolower($key); diff --git a/module/design/view/batchcreate.html.php b/module/design/view/batchcreate.html.php index 891f37465f..955682d283 100644 --- a/module/design/view/batchcreate.html.php +++ b/module/design/view/batchcreate.html.php @@ -30,7 +30,7 @@ - design->typeList, '', "class='form-control chosen'");?> + diff --git a/module/design/view/browse.html.php b/module/design/view/browse.html.php index 59d1e8dd20..ca58918162 100644 --- a/module/design/view/browse.html.php +++ b/module/design/view/browse.html.php @@ -48,7 +48,7 @@ id);?> createLink('design', 'view', "id={$design->id}"), $design->name) : $design->name;?> product);?> - design->typeList, $design->type);?> + type);?> design->printAssignedHtml($design, $users);?> createdBy);?> createdDate, 0, 11);?> diff --git a/module/design/view/create.html.php b/module/design/view/create.html.php index 01c69ec63e..38976d0ca5 100755 --- a/module/design/view/create.html.php +++ b/module/design/view/create.html.php @@ -34,7 +34,7 @@ design->type;?> - design->typeList, '', "class='form-control chosen'");?> + diff --git a/module/design/view/edit.html.php b/module/design/view/edit.html.php index 78bb51cfd2..7c39073ec9 100755 --- a/module/design/view/edit.html.php +++ b/module/design/view/edit.html.php @@ -40,7 +40,7 @@ design->type;?> - design->typeList, $design->type, "class='form-control chosen'");?> + type, "class='form-control chosen'");?> diff --git a/module/design/view/view.html.php b/module/design/view/view.html.php index ec45ab0e80..c3b9b45f80 100755 --- a/module/design/view/view.html.php +++ b/module/design/view/view.html.php @@ -66,7 +66,7 @@ - + hasProduct)) echo "class='hide'";?>> diff --git a/module/dev/config.php b/module/dev/config.php index 697b172c04..108c481640 100644 --- a/module/dev/config.php +++ b/module/dev/config.php @@ -240,6 +240,3 @@ $config->dev->postParams['testcase']['create']['steps'] = 'string'; $config->dev->postParams['testcase']['create']['expect'] = 'string'; $config->dev->postParams['testcase']['create']['mailto'] = 'string'; $config->dev->postParams['testcase']['create']['keywords'] = 'string'; - -$config->disableFeature = array(); -if(!helper::hasFeature('waterfall')) $config->disableFeature = array('design', 'stage', 'programplan', 'weekly', 'researchplan', 'researchreport', 'gapanalysis'); diff --git a/module/dev/view/api.html.php b/module/dev/view/api.html.php index 3bdb9b80a8..914b930f84 100644 --- a/module/dev/view/api.html.php +++ b/module/dev/view/api.html.php @@ -9,7 +9,6 @@
disableFeature and in_array($module, $config->disableFeature)) continue; $active = ($module == $selectedModule) ? 'text-primary' : ''; $moduleName = zget($lang->dev->tableList, $module, $module); ?> diff --git a/module/doc/js/selectlibtype.js b/module/doc/js/selectlibtype.js index 8f807dfeb3..4ca7d52cb6 100644 --- a/module/doc/js/selectlibtype.js +++ b/module/doc/js/selectlibtype.js @@ -39,6 +39,7 @@ function loadDocLibs(type) $('#lib').replaceWith(data); $('#lib_chosen').remove(); $('#lib').chosen(); + $('#lib').siblings('div').css('width', 'calc(100% - 25px)'); if($('#lib').find('option').length == 0) { diff --git a/module/execution/config.php b/module/execution/config.php index f2304568fe..fe54586d73 100644 --- a/module/execution/config.php +++ b/module/execution/config.php @@ -31,10 +31,10 @@ $config->execution->edit->requiredFields = 'name,code,begin,end'; $config->execution->start->requiredFields = 'realBegan'; $config->execution->close->requiredFields = 'realEnd'; -$config->execution->customBatchEditFields = 'days,type,teamname,status,desc,PO,QD,PM,RD'; +$config->execution->customBatchEditFields = 'days,type,teamname,desc,PO,QD,PM,RD'; $config->execution->custom = new stdclass(); -$config->execution->custom->batchEditFields = 'days,status,PM'; +$config->execution->custom->batchEditFields = 'days,PM'; $config->execution->editor = new stdclass(); $config->execution->editor->create = array('id' => 'desc', 'tools' => 'simpleTools'); @@ -176,7 +176,7 @@ $config->execution->gantt->linkType['end']['end'] = 2; $config->execution->gantt->linkType['begin']['end'] = 3; $config->execution->datatable = new stdclass(); -if(!isset($config->setCode) or $config->setCode == 1) +if(isset($config->setCode) and $config->setCode == 1) { $config->execution->datatable->defaultField = array('id', 'name', 'code', 'project', 'PM', 'status', 'progress', 'openedDate', 'begin', 'end', 'estimate', 'consumed', 'left', 'burn'); } @@ -201,7 +201,7 @@ $config->execution->datatable->fieldList['name']['nestedToggle'] = true; $config->execution->datatable->fieldList['name']['iconRender'] = true; $config->execution->datatable->fieldList['name']['required'] = 'yes'; -if(!isset($config->setCode) or $config->setCode == 1) +if(isset($config->setCode) and $config->setCode == 1) { $config->execution->datatable->fieldList['code']['title'] = 'execCode'; $config->execution->datatable->fieldList['code']['width'] = '180'; @@ -223,7 +223,7 @@ $config->execution->datatable->fieldList['status']['required'] = 'no'; $config->execution->datatable->fieldList['status']['fixed'] = 'no'; $config->execution->datatable->fieldList['PM']['title'] = 'owner'; -$config->execution->datatable->fieldList['PM']['width'] = '70'; +$config->execution->datatable->fieldList['PM']['width'] = '90'; $config->execution->datatable->fieldList['PM']['required'] = 'no'; $config->execution->datatable->fieldList['PM']['fixed'] = 'no'; diff --git a/module/execution/control.php b/module/execution/control.php index 44d1973535..0c473b3597 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -472,6 +472,7 @@ class execution extends control $this->view->users = $users; $this->view->moduleID = 0; $this->view->moduleName = $this->lang->tree->all; + $this->view->features = $this->execution->getExecutionFeatures($execution); $this->view->filter = $filter; $this->view->allCount = $allCount; $this->display(); @@ -506,9 +507,10 @@ class execution extends control $execution = $this->commonAction($toExecution); $toExecution = $execution->id; + $project = $this->loadModel('project')->getByID($execution->project); $branches = $this->execution->getBranches($toExecution); $tasks = $this->execution->getTasks2Imported($toExecution, $branches); - $executions = $this->execution->getToImport(array_keys($tasks), $execution->type); + $executions = $this->execution->getToImport(array_keys($tasks), $execution->type, $project->model); unset($executions[$toExecution]); unset($tasks[$toExecution]); @@ -1034,7 +1036,8 @@ class execution extends control $execution = $this->commonAction($executionID); $project = $this->loadModel('project')->getByID($execution->project); $executionID = $execution->id; - $products = $this->product->getProducts($execution->id); + $products = $this->product->getProducts($execution->id); + if(count($products) === 1) $productID = current($products)->id; if($execution->hasProduct) { @@ -1547,6 +1550,7 @@ class execution extends control $this->view->executionName = $execution->name; $this->view->executionID = $executionID; $this->view->chartData = $chartData; + $this->view->features = $this->execution->getExecutionFeatures($execution); $this->view->begin = $begin; $this->view->end = $end; $this->view->minDate = $minDate; @@ -1727,15 +1731,8 @@ class execution extends control } $importPlanStoryTips = $multiBranchProduct ? $this->lang->execution->importBranchPlanStory : $this->lang->execution->importPlanStory; - if(!$execution->hasProduct) - { - return print(js::locate(inlink('create', "projectID=$projectID&executionID=$executionID"))); - } - else - { - return print(js::confirm($importPlanStoryTips, inlink('create', "projectID=$projectID&executionID=$executionID©ExecutionID=&planID=$planID&confirm=yes"), inlink('create', "projectID=$projectID&executionID=$executionID"))); - } + return print(js::confirm($importPlanStoryTips, inlink('create', "projectID=$projectID&executionID=$executionID©ExecutionID=&planID=$planID&confirm=yes"), inlink('create', "projectID=$projectID&executionID=$executionID"))); } } @@ -1801,16 +1798,11 @@ class execution extends control { if(isset($_POST['attribute']) and in_array($_POST['attribute'], array('request', 'design', 'review'))) unset($_POST['plans']); - /* No product execution link plans. */ - if(isset($project->hasProduct) and empty($project->hasProduct) and !empty($_POST['plans'])) + /* Filter empty plans. */ + if(!empty($_POST['plans'])) { - $plansItem = array(); - foreach($_POST['plans'] as $planItem) - { - if(empty($planItem[0][0])) continue; - $plansItem[] = $planItem[0][0]; - } - $_POST['plans'] = array($_POST['products'][0] => array(0 => $plansItem)); + foreach($_POST['plans'] as $key => $planItem) $_POST['plans'][$key] = array_filter($_POST['plans'][$key]); + $_POST['plans'] = array_filter($_POST['plans']); } $executionID = $this->execution->create($copyExecutionID); @@ -1874,7 +1866,12 @@ class execution extends control $this->loadModel('product'); $allProducts = $this->product->getProductPairsByProject($projectID, 'noclosed'); - $copyProjects = $this->loadModel('project')->getPairsByProgram(isset($project->parent) ? $project->parent : '', 'noclosed', '', 'order_asc', '', isset($project->model) ? $project->model : '', 'multiple'); + + $projectModel = isset($project->model) ? $project->model : ''; + if($projectModel == 'agileplus') $projectModel = array('scrum', 'agileplus'); + if($projectModel == 'waterfallplus') $projectModel = array('waterfall', 'waterfallplus'); + + $copyProjects = $this->loadModel('project')->getPairsByProgram(isset($project->parent) ? $project->parent : '', 'noclosed', '', 'order_asc', '', $projectModel, 'multiple'); $copyProjectID = ($projectID == 0) ? key($copyProjects) : $projectID; if(!empty($project->hasProduct)) $allProducts = array(0 => '') + $allProducts; @@ -1883,7 +1880,6 @@ class execution extends control $this->view->title = $this->app->tab == 'execution' ? $this->lang->execution->createExec : $this->lang->execution->create; $this->view->position[] = $this->view->title; $this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('execution', 'all') : ''; - $this->view->executions = array('' => '') + $this->execution->getList($projectID); $this->view->groups = $this->loadModel('group')->getPairs(); $this->view->allProducts = $allProducts; $this->view->acl = $acl; @@ -1894,7 +1890,7 @@ class execution extends control $this->view->teams = array(0 => '') + $this->execution->getCanCopyObjects((int)$projectID); $this->view->allProjects = array(0 => '') + $this->project->getPairsByModel('all', 0, 'noclosed,multiple'); $this->view->copyProjects = $copyProjects; - $this->view->copyExecutions = array('' => '') + $this->execution->getList($copyProjectID); + $this->view->copyExecutions = array('' => '') + $this->execution->getList($copyProjectID, 'all', 'all', 0, 0, 0, null, false); $this->view->executionID = $executionID; $this->view->productID = $productID; $this->view->projectID = $projectID; @@ -1912,7 +1908,7 @@ class execution extends control $this->view->users = $this->loadModel('user')->getPairs('nodeleted|noclosed'); $this->view->copyExecution = isset($copyExecution) ? $copyExecution : ''; $this->view->from = $this->app->tab; - $this->view->isStage = (isset($project->model) and $project->model == 'waterfall') ? true : false; + $this->view->isStage = (isset($project->model) and ($project->model == 'waterfall' or $project->model == 'waterfallplus')) ? true : false; $this->view->project = $project; $this->view->division = !empty($project) ? $project->division : 1; $this->view->type = $type; @@ -1938,6 +1934,7 @@ class execution extends control $this->app->loadLang('programplan'); $browseExecutionLink = $this->createLink('execution', 'browse', "executionID=$executionID"); $execution = $this->execution->getById($executionID); + $project = $this->project->getById($execution->project); $branches = $this->project->getBranchesByProject($executionID); $linkedProductIdList = empty($branches) ? '' : array_keys($branches); @@ -1999,22 +1996,19 @@ class execution extends control $this->action->logHistory($actionID, $changes); } - if($execution->type == 'stage') $this->loadModel('programplan')->computeProgress($executionID, 'edit'); + $project = $this->loadModel('project')->getById($execution->project); + if($project->model == 'waterfall' or $project->model == 'waterfallplus') $this->loadModel('programplan')->computeProgress($executionID, 'edit'); /* Link the plan stories. */ $oldPlans = explode(',', implode(',' ,$oldPlans)); $newPlans = array(); if(isset($_POST['plans'])) { - foreach($_POST['plans'] as $plans) { - foreach($plans as $planList) + foreach($plans as $planID) { - foreach($planList as $planID) - { - if(array_search($planID, $oldPlans) === false) $newPlans[$planID] = $planID; - } + if(array_search($planID, $oldPlans) === false) $newPlans[$planID] = $planID; } } } @@ -2099,7 +2093,7 @@ class execution extends control $project = $this->project->getById($execution->project); if(!$project->hasProduct) $this->lang->execution->PO = $this->lang->common->story . $this->lang->execution->owner; - if($execution->type == 'stage') + if($project->model == 'waterfall' or $project->model == 'waterfallplus') { $parentStage = $this->project->getByID($execution->parent, 'stage'); @@ -2109,12 +2103,14 @@ class execution extends control { $productID = $this->product->getProductIDByProject($executionID); $parentStageList = $this->loadModel('programplan')->getParentStageList($execution->project, $executionID, $productID); + unset($parentStageList[0]); } $this->view->title = $title; $this->view->position = $position; $this->view->executions = $executions; $this->view->execution = $execution; + $this->view->project = $project; $this->view->poUsers = $poUsers; $this->view->pmUsers = $pmUsers; $this->view->qdUsers = $qdUsers; @@ -2164,17 +2160,6 @@ class execution extends control $actionID = $this->loadModel('action')->create($this->objectType, $executionID, 'Edited'); $this->action->logHistory($actionID, $changes); - - $syncExecution = ''; - foreach($changes as $changeField) - { - if($changeField['field'] == 'status' && $changeField['old'] =='wait' && $changeField['new'] =='doing') - { - $syncExecution = $executionID; - break; - } - } - $this->loadModel('common')->syncPPEStatus($syncExecution); } } @@ -2197,6 +2182,8 @@ class execution extends control if(!$this->post->executionIDList) return print(js::locate($this->session->executionList, 'parent')); $executionIDList = $this->post->executionIDList; $executions = $this->dao->select('*')->from(TABLE_EXECUTION)->where('id')->in($executionIDList)->fetchAll('id'); + $projects = $this->dao->select('id,project')->from(TABLE_PROJECT)->where('id')->in($executionIDList)->fetchPairs(); + $projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->in($projects)->fetchAll('id'); $appendPoUsers = $appendPmUsers = $appendQdUsers = $appendRdUsers = array(); foreach($executions as $execution) @@ -2229,6 +2216,7 @@ class execution extends control $this->view->position[] = $this->lang->execution->batchEdit; $this->view->executions = $executions; $this->view->allProjects = $allProjects; + $this->view->projects = $projects; $this->view->pmUsers = $pmUsers; $this->view->poUsers = $poUsers; $this->view->qdUsers = $qdUsers; @@ -2237,6 +2225,52 @@ class execution extends control $this->display(); } + /** + * Batch change status. + * + * @param string $status + * @param int $projectID + * @access public + * @return void + */ + public function batchChangeStatus($status, $projectID = 0) + { + $executionIdList = $this->post->executionIDList; + if(is_string($executionIdList)) $executionIdList = explode(',', $executionIdList); + + $pointOutStages = $this->execution->batchChangeStatus($executionIdList, $status); + $project = $this->loadModel('project')->getById($projectID); + + if($pointOutStages) + { + $alertLang = ''; + + if($status == 'wait') + { + /* In execution-all list or waterfall, waterfallplus project's execution list. */ + if(empty($project) or (!empty($project) and strpos($project->model, 'waterfall') !== false)) + { + $executionLang = (empty($project) or (!empty($project) and $project->model == 'waterfallplus')) ? $this->lang->execution->common : $this->lang->stage->common; + $alertLang = sprintf($this->lang->execution->hasStartedTaskOrSubStage, $executionLang, $pointOutStages); + } + + if(!empty($project) and strpos('agileplus,scrum', $project->model) !== false) + { + $executionLang = $project->model == 'scrum' ? $this->lang->executionCommon : $this->lang->execution->common; + $alertLang = sprintf($this->lang->execution->hasStartedTask, $executionLang, $pointOutStages); + } + } + + if($status == 'suspended') $alertLang = sprintf($this->lang->execution->hasSuspendedOrClosedChildren, $pointOutStages); + + if($status == 'closed') $alertLang = sprintf($this->lang->execution->hasNotClosedChildren, $pointOutStages); + + return print(js::alert($alertLang) . js::locate($this->session->executionList, 'parent')); + } + + return print(js::locate($this->session->executionList, 'parent')); + } + /** * Start execution. * @@ -2263,7 +2297,8 @@ class execution extends control $this->action->logHistory($actionID, $changes); } - if($execution->type == 'stage') $this->loadModel('programplan')->computeProgress($executionID, 'start'); + $project = $this->loadModel('project')->getById($execution->project); + if($project->model == 'waterfall' or $project->model == 'waterfallplus') $this->loadModel('programplan')->computeProgress($executionID, 'start'); $this->loadModel('common')->syncPPEStatus($executionID); $this->executeHooks($executionID); @@ -2355,7 +2390,8 @@ class execution extends control $this->action->logHistory($actionID, $changes); } - if($execution->type == 'stage') $this->loadModel('programplan')->computeProgress($executionID, 'suspend'); + $project = $this->loadModel('project')->getById($execution->project); + if($project->model == 'waterfall' or $project->model == 'waterfallplus') $this->loadModel('programplan')->computeProgress($executionID, 'suspend'); $this->executeHooks($executionID); if(isonlybody() and $from == 'kanban') @@ -2395,7 +2431,8 @@ class execution extends control $this->execution->activate($executionID); if(dao::isError()) return print(js::error(dao::getError())); - if($execution->type == 'stage') $this->loadModel('programplan')->computeProgress($executionID, 'activate'); + $project = $this->loadModel('project')->getById($execution->project); + if($project->model == 'waterfall' or $project->model == 'waterfallplus') $this->loadModel('programplan')->computeProgress($executionID, 'activate'); $this->executeHooks($executionID); if(isonlybody() and $from == 'kanban') @@ -2443,7 +2480,8 @@ class execution extends control $this->execution->close($executionID); if(dao::isError()) return print(js::error(dao::getError())); - if($execution->type == 'stage') $this->loadModel('programplan')->computeProgress($executionID, 'close'); + $project = $this->loadModel('project')->getById($execution->project); + if($project->model == 'waterfall' or $project->model == 'waterfallplus') $this->loadModel('programplan')->computeProgress($executionID, 'close'); $this->executeHooks($executionID); if(isonlybody() and $from == 'kanban') @@ -2564,6 +2602,7 @@ class execution extends control $this->view->chartData = $chartData; $this->view->canBeChanged = common::canModify('execution', $execution); // Determines whether an object is editable. $this->view->type = $type; + $this->view->features = $this->execution->getExecutionFeatures($execution); $this->view->project = $this->loadModel('project')->getByID($execution->project); $this->display(); @@ -2582,19 +2621,20 @@ class execution extends control public function kanban($executionID, $browseType = 'all', $orderBy = 'id_asc', $groupBy = 'default') { $this->app->loadLang('bug'); + $this->app->loadLang('kanban'); if(empty($groupBy)) $groupBy = 'default'; - /* Set Session. */ - $this->session->set('execLaneType', $browseType); - $this->session->set('execGroupBy', $groupBy); - $this->session->set('storyList', $this->app->getURI(true), 'execution'); - $this->session->set('rdSearchValue', ''); - $this->lang->execution->menu = new stdclass(); $execution = $this->commonAction($executionID); if($execution->type != 'kanban') return print(js::locate(inlink('view', "executionID=$executionID"))); + /* Set Session. */ + $this->session->set('execGroupBy', $groupBy); + $this->session->set('storyList', $this->app->getURI(true), 'execution'); + $this->session->set('rdSearchValue', ''); + + $features = $this->execution->getExecutionFeatures($execution); $kanbanData = $this->loadModel('kanban')->getRDKanban($executionID, $browseType, $orderBy, 0, $groupBy); $executionActions = array(); foreach($this->config->execution->statusActions as $action) @@ -2602,11 +2642,10 @@ class execution extends control if($this->execution->isClickable($execution, $action)) $executionActions[] = $action; } - if($execution->lifetime == 'ops' or in_array($execution->attribute, array('request', 'review'))) - { - $browseType = 'task'; - unset($this->lang->kanban->group->task['story']); - } + /* Set lane type. */ + if(!$features['story'] and !$features['qa']) $browseType = 'task'; + if(!$features['story']) unset($this->lang->kanban->group->task['story']); + $this->session->set('execLaneType', $browseType); $userList = array(); $users = $this->loadModel('user')->getPairs('noletter|nodeleted'); @@ -2662,6 +2701,7 @@ class execution extends control $this->view->projectID = $projectID; $this->view->project = $this->loadModel('project')->getByID($projectID); $this->view->allPlans = $allPlans; + $this->view->features = $features; $this->view->kanbanData = $kanbanData; $this->view->executionActions = $executionActions; $this->view->kanban = $this->lang->execution->kanban; @@ -2688,7 +2728,6 @@ class execution extends control $uri = $this->app->getURI(true); $this->app->session->set('taskList', $uri, 'execution'); $this->app->session->set('bugList', $uri, 'qa'); - $this->app->session->set('execLaneType', $browseType); $this->app->session->set('execGroupBy', $groupBy); /* Load language. */ @@ -2707,14 +2746,21 @@ class execution extends control unset($this->lang->kanban->group->task['story']); } + $this->app->session->set('execLaneType', $browseType); + if($groupBy == 'story' and $browseType == 'task' and !isset($this->lang->kanban->orderList[$orderBy])) $orderBy = 'id_asc'; $kanbanGroup = $this->kanban->getExecutionKanban($executionID, $browseType, $groupBy, '', $orderBy); + if(empty($kanbanGroup)) { $this->kanban->createExecutionLane($executionID, $browseType); $kanbanGroup = $this->kanban->getExecutionKanban($executionID, $browseType, $groupBy, '', $orderBy); } + /* Show lanes of the attribute: no story&bug in request, no bug in design. */ + if(!isset($this->lang->execution->menu->story)) unset($kanbanGroup['story']); + if(!isset($this->lang->execution->menu->qa)) unset($kanbanGroup['bug']); + /* Determines whether an object is editable. */ $canBeChanged = common::canModify('execution', $execution); @@ -2752,6 +2798,7 @@ class execution extends control $this->view->productNum = count($products); $this->view->allPlans = $allPlans; $this->view->browseType = $browseType; + $this->view->features = $this->execution->getExecutionFeatures($execution); $this->view->kanbanGroup = $kanbanGroup; $this->view->execution = $execution; $this->view->groupBy = $groupBy; @@ -2772,7 +2819,7 @@ class execution extends control { $this->loadModel('project'); $projects = $this->project->getPairsByProgram('', 'noclosed'); - $executions = $this->execution->getStatData(0, 'all', 0, 0, false, '', 'id_desc'); + $executions = $this->execution->getStatData(0, 'all', 0, 0, false, 'withchild', 'id_desc'); foreach($executions as $execution) { @@ -2910,6 +2957,7 @@ class execution extends control $this->view->executionID = $executionID; $this->view->level = $type; $this->view->tree = $this->execution->printTree($tree, $project->hasProduct); + $this->view->features = $this->execution->getExecutionFeatures($execution); $this->display(); } @@ -3120,7 +3168,8 @@ class execution extends control $this->execution->updateUserView($executionID); $this->loadModel('common')->syncPPEStatus($executionID); - if($execution->type == 'stage') $this->loadModel('programplan')->computeProgress($executionID); + $project = $this->loadModel('project')->getById($execution->project); + if($project->model == 'waterfall' or $project->model == 'waterfallplus') $this->loadModel('programplan')->computeProgress($executionID); $this->session->set('execution', ''); $message = $this->executeHooks($executionID); @@ -3148,6 +3197,9 @@ class execution extends control $this->loadModel('product'); $execution = $this->execution->getById($executionID); + $project = $this->loadModel('project')->getByID($execution->project); + if(!$project->hasProduct) return print(js::error($this->lang->project->cannotManageProducts) . js::locate('back')); + if($project->model == 'waterfall' or $project->model == 'waterfallplus') return print(js::error(sprintf($this->lang->execution->cannotManageProducts, zget($this->lang->project->modelList, $project->model))) . js::locate('back')); if(!empty($_POST)) { @@ -3771,7 +3823,7 @@ class execution extends control ->andWhere('type')->in('sprint,stage,kanban') ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi() ->andWhere('project')->in(array_keys($projects)) - ->orderBy('id_desc') + ->orderBy('order_asc') ->fetchGroup('project', 'id'); $teams = $this->dao->select('root,account')->from(TABLE_TEAM) @@ -3785,9 +3837,15 @@ class execution extends control $executions = zget($executionGroups, $project->id, array()); if(isset($project->model) and $project->model == 'waterfall') ksort($executions); - $parents = array(); - foreach($executions as $execution) $parents[$execution->parent] = $execution->parent; + $parents = array(); + $firstGradeExecs = array(); + foreach($executions as $execution) + { + $parents[$execution->parent] = $execution->parent; + if($execution->grade == 1) $firstGradeExecs[$execution->id] = $execution->id; + } + $executions = $this->execution->resetExecutionSorts($executions, $firstGradeExecs); foreach($executions as $execution) { /* Only show leaf executions. */ @@ -3970,7 +4028,6 @@ class execution extends control $this->view->status = $status; $this->view->from = $from; $this->view->param = $param; - $this->view->isStage = (isset($project->model) and $project->model == 'waterfall') ? true : false; $this->view->showBatchEdit = $this->cookie->showExecutionBatchEdit; $this->display(); @@ -4071,22 +4128,7 @@ class execution extends control unset($fields[$key]); } - $executionStats = $this->execution->getStatData($projectID, $status == 'byproduct' ? 'all' : $status, $productID, 0, false, '', 'id_asc'); - if(isset($project->model) and $project->model == 'waterfall') - { - $stageList = array(); - foreach($executionStats as $stage) - { - $stageList[] = $stage; - foreach($stage->children as $child) - { - $child->name = $stage->name . '/' . $child->name; - $stageList[] = $child; - } - } - - $executionStats = $stageList; - } + $executionStats = $this->execution->getStatData($projectID, $status == 'byproduct' ? 'all' : $status, $productID, 0, false, 'hasParentName', 'order_asc'); $users = $this->loadModel('user')->getPairs('noletter'); foreach($executionStats as $i => $execution) @@ -4097,6 +4139,7 @@ class execution extends control $execution->totalConsumed = $execution->hours->totalConsumed; $execution->totalLeft = $execution->hours->totalLeft; $execution->progress = $execution->hours->progress . '%'; + $execution->name = isset($execution->title) ? $execution->title : $execution->name; if($this->app->tab == 'project' and ($project->model == 'agileplus' or $project->model == 'waterfallplus')) $execution->method = zget($executionLang->typeList, $execution->type); if($this->post->exportType == 'selected') @@ -4431,7 +4474,7 @@ class execution extends control */ public function ajaxGetCopyProjectExecutions($projectID = 0) { - $executions = $this->execution->getList($projectID); + $executions = $this->execution->getList($projectID, 'all', 'all', 0, 0, 0, null, false); echo json_encode($executions); } diff --git a/module/execution/css/all.css b/module/execution/css/all.css old mode 100644 new mode 100755 index 2b631af971..81bb4a7bde --- a/module/execution/css/all.css +++ b/module/execution/css/all.css @@ -1,9 +1,19 @@ -body {margin-bottom: 25px;} - +#main {padding-bottom: 0;} #myTable .dtable-header, #executionsForm .dtable-rows {z-index: 4;} -.table-header.fixed-right > .btn-toolbar {right: 0} +.table-header.fixed-right > .btn-toolbar {right: 0; background-color: #f1f5f9;} #myTable input[type=checkbox] {margin: 0px} +.table-footer {border-top: 1px solid #fff4ea} .table-footer .pager{z-index: 10} #myTable .scrollbar {z-index: 11} + +.dtable {--dtable-checked-bg: #fff4ea; --dtable-border-color: #f4f5f7} +.dtable-row {border-bottom-style: solid;} +.dtable-cell-html a{color: #2463c7} +.dtable-cell[data-sort='up'] .dtable-sort:before {color: #000; opacity: 1} +.dtable-cell[data-sort='down'] .dtable-sort:after {color: #000; opacity: 1} +.dtable .toggle-icon {border-radius: 50%; border-style: solid;} +.dtable-nested-toggle.is-no-child {display: block; opacity: 0; pointer-events: none;} + +.dtable-row.is-normal .dtable-cell[data-col="name"] {padding-left: 20px;} diff --git a/module/execution/css/batchedit.css b/module/execution/css/batchedit.css index 6051595822..76393a2f7f 100644 --- a/module/execution/css/batchedit.css +++ b/module/execution/css/batchedit.css @@ -1,4 +1,7 @@ .c-id {width: 50px;} .c-team-name {width: 120px;} .c-project, .c-user, .c-code, .c-desc, .c-days {width: 150px;} -.c-method {width: 45px;} +.c-method {width: 70px;} +.c-type > .icon-help {vertical-align: text-top;} +.c-type > .popover .popover-content {font-weight: 400;} +#executionForm tbody td {vertical-align: top;} diff --git a/module/execution/css/batchedit.en.css b/module/execution/css/batchedit.en.css index 1bc7227968..855a234699 100644 --- a/module/execution/css/batchedit.en.css +++ b/module/execution/css/batchedit.en.css @@ -1,3 +1,4 @@ .c-user {width: 150px !important;} .c-date {width: 125px;} -.c-method {width: 60px;} +.c-method {width: 145px;} +.c-type {width: 130px;} diff --git a/module/execution/css/create.css b/module/execution/css/create.css index 8a387053df..8ba2c65184 100644 --- a/module/execution/css/create.css +++ b/module/execution/css/create.css @@ -39,3 +39,4 @@ .productsBox .required + .text-danger.help-text {position: relative; left: 10px;} .productsBox > #productNameLabel {padding-top: 8px;} .productsBox div[id^='branch'].chosen-disabled {pointer-events: none;} +.methodTip icon:before {margin-bottom: 5px;} diff --git a/module/execution/css/edit.css b/module/execution/css/edit.css index 1331271af3..b02143f914 100644 --- a/module/execution/css/edit.css +++ b/module/execution/css/edit.css @@ -7,3 +7,7 @@ #dateRange {vertical-align: top; padding-top: 13px;} .form-date {min-width: 90px;} + +.productsBox div[id^='branch'].chosen-disabled {pointer-events: none;} + +#dataform th.c-name, #dataform th.c-projectName, #dataform th.c-method {width: 120px;} diff --git a/module/execution/css/edit.en.css b/module/execution/css/edit.en.css new file mode 100644 index 0000000000..89aae150fd --- /dev/null +++ b/module/execution/css/edit.en.css @@ -0,0 +1 @@ +#dataform th.c-method {width: 150px;} diff --git a/module/execution/js/all.js b/module/execution/js/all.js index 959742346f..91ef53a14a 100644 --- a/module/execution/js/all.js +++ b/module/execution/js/all.js @@ -31,3 +31,41 @@ function byProduct(productID, projectID, status) { location.href = createLink('project', 'all', "status=" + status + "&project=" + projectID + "&orderBy=" + orderBy + '&productID=' + productID); } + +/** + * Set the color of the badge to white. + * + * @param object obj + * @param bool isShow + * @access public + * @return void + */ +function setBadgeStyle(obj, isShow) +{ + var $label = $(obj); + if(isShow == true) + { + $label.find('.label-badge').css({"color":"#fff", "border-color":"#fff"}); + } + else + { + $label.find('.label-badge').css({"color":"#838a9d", "border-color":"#838a9d"}); + } +} + +function buildForm(action, target) +{ + var tempform = document.createElement("form"); + tempform.action = action; + tempform.method = "post"; + tempform.target = typeof(target) == 'undefined' ? '' : target; + tempform.style.display = "none"; + + var opt = document.createElement("input"); + opt.name = 'executionIDList'; + opt.value = checkItems; + + tempform.appendChild(opt); + document.body.appendChild(tempform); + tempform.submit(); +} diff --git a/module/execution/js/batchedit.js b/module/execution/js/batchedit.js index db84c6b085..603122e2bd 100644 --- a/module/execution/js/batchedit.js +++ b/module/execution/js/batchedit.js @@ -27,3 +27,8 @@ $('#executionForm').on('change input mousedown', '.has-error', function() $(this).parent().find('.text-danger').remove(); $(this).removeClass('has-error'); }) + +$(function() +{ + $('[data-toggle="popover"]').popover(); +}) diff --git a/module/execution/js/common.js b/module/execution/js/common.js index 7a138fe055..db31593818 100644 --- a/module/execution/js/common.js +++ b/module/execution/js/common.js @@ -177,16 +177,16 @@ function loadBranches(product) disableSelectedProduct(); } - var branch = $('#branch' + index); - loadPlans(product, branch); - - if(typeof isWaterfall != 'undefined' && isWaterfall == true) + if(typeof isStage != 'undefined' && isStage == true) { $tableRow.find("select[name^='branch'] option").attr('selected', 'selected'); $tableRow.find("select[name^='branch']").trigger('chosen:updated'); $tableRow.find("div[id^='branch']").addClass('chosen-disabled'); } }); + + var branch = $('#branch' + index); + loadPlans(product, branch); } /** @@ -285,3 +285,32 @@ function setCardCount(heightType) { heightType != 'custom' ? $('#cardBox').addClass('hidden') : $('#cardBox').removeClass('hidden'); } + +/** + * Hide plan box by stage's attribute. + * + * @param string attribute + * @access public + * @return void + */ +function hidePlanBox(attribute) +{ + if(attribute == 'request' || attribute == 'review') + { + $('.productsBox .planBox').addClass('hide'); + $('.productsBox .planBox select').attr('disabled', 'disabled'); + $('#productTitle').text(manageProductsLang); + + $('#plansBox').closest('tr').addClass('hide'); + $('#plansBox').attr('disabled', 'disabled'); + } + else + { + $('.productsBox .planBox').removeClass('hide'); + $('.productsBox .planBox select').attr('disabled', ''); + $('#productTitle').text(manageProductPlanLang); + + $('#plansBox').closest('tr').removeClass('hide'); + $('#plansBox').attr('disabled', ''); + } +} diff --git a/module/execution/js/create.js b/module/execution/js/create.js index 750bdae6b0..cb0c0e1091 100644 --- a/module/execution/js/create.js +++ b/module/execution/js/create.js @@ -82,14 +82,7 @@ $(function() $('#attribute').change(function() { var attribute = $(this).val(); - if(attribute == 'request' || attribute == 'design' || attribute == 'review') - { - $('#plansBox').closest('tr').addClass('hide'); - } - else - { - $('#plansBox').closest('tr').removeClass('hide'); - } + hidePlanBox(attribute); }) $('#attribute').change(); @@ -153,6 +146,8 @@ $(function() { $('.disabledBranch div[id^="branch"]').addClass('chosen-disabled'); } + + $('[data-toggle="popover"]').popover(); }); function showLifeTimeTips() diff --git a/module/execution/js/edit.js b/module/execution/js/edit.js index 78d040216c..ba9a203b05 100644 --- a/module/execution/js/edit.js +++ b/module/execution/js/edit.js @@ -107,6 +107,18 @@ $(function() }); $(document).on('change', "select[id^='branch']", disableSelectedBranch); + + if($('.disabledBranch').length > 0) + { + $('.disabledBranch div[id^="branch"]').addClass('chosen-disabled'); + } + + $('[data-toggle="popover"]').popover(); + + if(isWaterfall) + { + hidePlanBox(executionAttr); + } }) var lastProjectID = $("#project").val(); diff --git a/module/execution/js/kanban.js b/module/execution/js/kanban.js index 87ac799f21..13228c26c6 100644 --- a/module/execution/js/kanban.js +++ b/module/execution/js/kanban.js @@ -215,7 +215,7 @@ $('.c-group').change(function() { $('.c-group').show(); - var type = $('#type').val(); + var type = $('#type').val() ? $('#type').val() : browseType; var group = $('#group').val(); var link = createLink('execution', 'kanban', 'executionID=' + executionID + '&type=' + type + '&orderBy=id_asc' + '&groupBy=' + group); location.href = link; diff --git a/module/execution/lang/de.php b/module/execution/lang/de.php index cfe000f2a8..c7edb3a7d8 100644 --- a/module/execution/lang/de.php +++ b/module/execution/lang/de.php @@ -139,7 +139,8 @@ $lang->execution->kanbanNoLinkProduct = "Kanban not linked {$lang->productCommon $lang->execution->myTask = "My Task"; $lang->execution->list = "{$lang->executionCommon} List"; $lang->execution->allProject = 'All'; -$lang->execution->method = 'Method'; +$lang->execution->method = 'Management Method'; +$lang->execution->sameAsParent = "Same as parent"; /* Fields of zt_team. */ $lang->execution->root = 'Root'; @@ -150,6 +151,9 @@ $lang->execution->left = 'Left'; $lang->execution->copyTeamTip = "copy Project/project team members"; $lang->execution->daysGreaterProject = 'Days cannot be greater than days of execution 『%s』'; $lang->execution->errorHours = 'Hours/Day cannot be greater than『24』'; +$lang->execution->agileplusMethodTip = 'When creating executions in an Agile Plus project, both Iteration and Kanban management methods are supported.'; +$lang->execution->typeTip = "The sub-stages of other types can be created under the parent stage of the 'mix' type, while the type of other parent-child levels is consistent."; +$lang->execution->waterfallTip = 'In the Waterfall project or in the Waterfall + project,'; $lang->execution->start = 'Start'; $lang->execution->activate = 'Aktivieren'; @@ -262,6 +266,7 @@ $lang->execution->edit = "Bearbeiten"; $lang->execution->editAction = "Edit Execution"; $lang->execution->batchEdit = "Mehere bearbeiten"; $lang->execution->batchEditAction = "Batch Edit"; +$lang->execution->batchChangeStatus = "Batch Change Status"; $lang->execution->manageMembers = 'Teams verwalten'; $lang->execution->unlinkMember = 'Mitgliefer entfernen'; $lang->execution->unlinkStory = 'Story entfernen'; @@ -277,7 +282,7 @@ $lang->execution->treeViewTask = 'Tree View Task'; $lang->execution->treeViewStory = 'Tree View Story'; $lang->execution->storyKanban = 'Story Kanban'; $lang->execution->storySort = 'Story sortieren'; -$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only active ' . $lang->SRCommon . ' can be imported.'; $lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; $lang->execution->importBranchPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; $lang->execution->importBranchEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; @@ -376,51 +381,57 @@ $lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been link $lang->execution->copyTeamTitle = "Choose a {$lang->project->common} or {$lang->execution->common} Team to copy."; /* Interactive prompts. */ -$lang->execution->confirmDelete = "Möchten Sie {$lang->executionCommon}[%s] löschen?"; -$lang->execution->confirmUnlinkMember = "Möchten Sie den Benutzer vom {$lang->executionCommon} entfernen?"; -$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?"; -$lang->execution->confirmSync = "After modifying the project, in order to maintain the consistency of data, the data of products, requirements, teams and whitelist associated with the implementation will be synchronized to the new project. Please know."; -$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?"; -$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again."; -$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action."; -$lang->execution->errorNoLinkedProducts = "Kein verknüpftes {$lang->productCommon} in {$lang->executionCommon} gefunden. Sie werden auf die {$lang->productCommon} Seite geleitet."; -$lang->execution->errorSameProducts = "{$lang->executionCommon} Kann nicht mit mehreren identischen {$lang->productCommon} verknüpft werden"; -$lang->execution->errorSameBranches = "{$lang->executionCommon} cannot be linked to the same branch twice"; -$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; -$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; -$lang->execution->errorLetterProject = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; -$lang->execution->errorGreaterProject = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; -$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.'; -$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.'; -$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.'; -$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.'; -$lang->execution->errorNameRepeat = 'Child stages of the same parent stage cannot have the same name.'; -$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage."; -$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!"; -$lang->execution->tips = 'Hinweis'; -$lang->execution->afterInfo = "{$lang->executionCommon} wurde erstellt. Als nächstes können Sie "; -$lang->execution->setTeam = 'Team setzen'; -$lang->execution->linkStory = 'Link Stories'; -$lang->execution->createTask = 'Aufgaben erstellen'; -$lang->execution->goback = "Zurückkehren"; -$lang->execution->gobackExecution = "Go Back {$lang->executionCommon} List"; -$lang->execution->noweekend = 'Ohne Wochenende'; -$lang->execution->nodelay = 'Exclude Delay Date'; -$lang->execution->withweekend = 'Mit Wochenende'; -$lang->execution->withdelay = 'Include Delay Date'; -$lang->execution->interval = 'Intervale '; -$lang->execution->fixFirstWithLeft = 'Modify the left'; -$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has "; -$lang->execution->unfinishedTask = "[%s] unfinished tasks. "; -$lang->execution->unresolvedBug = "[%s] unresolved bugs. "; -$lang->execution->projectNotEmpty = 'Project cannot be empty.'; -$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?'; -$lang->execution->ge = "『%s』should be >= actual begin『%s』."; -$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again."; -$lang->execution->countTip = ' (%s member)'; -$lang->execution->pleaseInput = "Enter"; -$lang->execution->week = 'week'; -$lang->execution->checkedExecutions = "Seleted %s {$lang->executionCommon}."; +$lang->execution->confirmDelete = "Möchten Sie {$lang->executionCommon}[%s] löschen?"; +$lang->execution->confirmUnlinkMember = "Möchten Sie den Benutzer vom {$lang->executionCommon} entfernen?"; +$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?"; +$lang->execution->confirmSync = "After modifying the project, in order to maintain the consistency of data, the data of products, requirements, teams and whitelist associated with the implementation will be synchronized to the new project. Please know."; +$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?"; +$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again."; +$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action."; +$lang->execution->errorNoLinkedProducts = "Kein verknüpftes {$lang->productCommon} in {$lang->executionCommon} gefunden. Sie werden auf die {$lang->productCommon} Seite geleitet."; +$lang->execution->errorSameProducts = "{$lang->executionCommon} Kann nicht mit mehreren identischen {$lang->productCommon} verknüpft werden"; +$lang->execution->errorSameBranches = "{$lang->executionCommon} cannot be linked to the same branch twice"; +$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; +$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; +$lang->execution->errorLetterProject = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; +$lang->execution->errorGreaterProject = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; +$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.'; +$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.'; +$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.'; +$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.'; +$lang->execution->errorNameRepeat = "Child %s of the same parent stage cannot have the same name."; +$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage."; +$lang->execution->errorLetterPlan = "『%s』cannot be less than the plan start time『%s』。"; +$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!"; +$lang->execution->tips = 'Hinweis'; +$lang->execution->afterInfo = "{$lang->executionCommon} wurde erstellt. Als nächstes können Sie "; +$lang->execution->setTeam = 'Team setzen'; +$lang->execution->linkStory = 'Link Stories'; +$lang->execution->createTask = 'Aufgaben erstellen'; +$lang->execution->goback = "Zurückkehren"; +$lang->execution->gobackExecution = "Go Back {$lang->executionCommon} List"; +$lang->execution->noweekend = 'Ohne Wochenende'; +$lang->execution->nodelay = 'Exclude Delay Date'; +$lang->execution->withweekend = 'Mit Wochenende'; +$lang->execution->withdelay = 'Include Delay Date'; +$lang->execution->interval = 'Intervale '; +$lang->execution->fixFirstWithLeft = 'Modify the left'; +$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has "; +$lang->execution->unfinishedTask = "[%s] unfinished tasks. "; +$lang->execution->unresolvedBug = "[%s] unresolved bugs. "; +$lang->execution->projectNotEmpty = 'Project cannot be empty.'; +$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?'; +$lang->execution->ge = "『%s』should be >= actual begin『%s』."; +$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again."; +$lang->execution->countTip = ' (%s member)'; +$lang->execution->pleaseInput = "Enter"; +$lang->execution->week = 'week'; +$lang->execution->checkedExecutions = "Seleted %s {$lang->executionCommon}."; +$lang->execution->hasStartedTaskOrSubStage = "Tasks or subphases under %s %s have already started, cannot be modified, and have been filtered."; +$lang->execution->hasSuspendedOrClosedChildren = "The sub-stages under stage %s are not all suspended or closed, cannot be modified, and have been filtered."; +$lang->execution->hasNotClosedChildren = "The sub-stages under stage %s are not all closed, cannot be modified, and have been filtered."; +$lang->execution->hasStartedTask = "The task under %s %s has already started, cannot be modified, and has been filtered."; +$lang->execution->cannotManageProducts = 'The ' . strtolower($lang->project->common). ' model of this ' . strtolower($lang->execution->common) . " is %s and this " . strtolower($lang->execution->common) . ' cannot be associated with products.'; /* Statistics. */ $lang->execution->charts = new stdclass(); @@ -561,6 +572,9 @@ $lang->execution->action->startbychildclose = '$date, the stage status is execution->action->startbychildcreate = '$date, the stage status is Doing as the system judges that its sub-stages are Created. '; $lang->execution->action->startbychildedit = '$date, the stage status is Doing as the system judges that its sub-stages are Edited'; $lang->execution->action->startbychild = '$date, the stage status is Doing as the system judges that its sub-stages are Activated.'; +$lang->execution->action->waitbychild = '$date, the stage status is Wait as the system judges that its sub-stages are Edited'; +$lang->execution->action->suspendbychild = '$date, the stage status is Suspended as the system judges that its sub-stages are Edited'; +$lang->execution->action->closebychild = '$date, the stage status is Closed as the system judges that its sub-stages are Edited'; $lang->execution->startbychildactivate = 'activated'; $lang->execution->waitbychilddelete = 'stop'; @@ -576,6 +590,9 @@ $lang->execution->startbychildclose = 'activated'; $lang->execution->startbychildcreate = 'activated'; $lang->execution->startbychildedit = 'activated'; $lang->execution->startbychild = 'activated'; +$lang->execution->waitbychild = 'stop'; +$lang->execution->suspendbychild = 'suspended'; +$lang->execution->closebychild = 'closed'; $lang->execution->statusColorList = array(); $lang->execution->statusColorList['wait'] = '#0991FF'; diff --git a/module/execution/lang/en.php b/module/execution/lang/en.php index 4914a06a6d..b9d06aa7ad 100644 --- a/module/execution/lang/en.php +++ b/module/execution/lang/en.php @@ -139,7 +139,8 @@ $lang->execution->kanbanNoLinkProduct = "Kanban not linked {$lang->productCommon $lang->execution->myTask = "My Task"; $lang->execution->list = 'List'; $lang->execution->allProject = 'All'; -$lang->execution->method = 'Method'; +$lang->execution->method = 'Management Method'; +$lang->execution->sameAsParent = "Same as parent"; /* Fields of zt_team. */ $lang->execution->root = 'Root'; @@ -150,6 +151,9 @@ $lang->execution->left = 'Left'; $lang->execution->copyTeamTip = "copy Project/project team members"; $lang->execution->daysGreaterProject = 'Days cannot be greater than days of execution 『%s』'; $lang->execution->errorHours = 'Hours/Day cannot be greater than『24』'; +$lang->execution->agileplusMethodTip = 'When creating executions in an Agile Plus project, both Iteration and Kanban management methods are supported.'; +$lang->execution->typeTip = "The sub-stages of other types can be created under the parent stage of the 'mix' type, while the type of other parent-child levels is consistent."; +$lang->execution->waterfallTip = 'In the Waterfall project or in the Waterfall + project,'; $lang->execution->start = 'Start'; $lang->execution->activate = 'Activate'; @@ -262,6 +266,7 @@ $lang->execution->edit = "Edit {$lang->executionCommon}"; $lang->execution->editAction = "Edit Execution"; $lang->execution->batchEdit = "Edit"; $lang->execution->batchEditAction = "Batch Edit"; +$lang->execution->batchChangeStatus = "Batch Change Status"; $lang->execution->manageMembers = 'Manage Team'; $lang->execution->unlinkMember = 'Remove Member'; $lang->execution->unlinkStory = 'Unlink Story'; @@ -277,7 +282,7 @@ $lang->execution->treeViewTask = 'Tree View Task'; $lang->execution->treeViewStory = 'Tree View Story'; $lang->execution->storyKanban = 'Story Kanban'; $lang->execution->storySort = 'Rank Story'; -$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only active ' . $lang->SRCommon . ' can be imported.'; $lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; $lang->execution->importBranchPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; $lang->execution->importBranchEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; @@ -376,51 +381,57 @@ $lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been link $lang->execution->copyTeamTitle = "Choose a {$lang->project->common} or {$lang->execution->common} Team to copy."; /* Interactive prompts. */ -$lang->execution->confirmDelete = "Do you want to delete the {$lang->executionCommon}[%s]?"; -$lang->execution->confirmUnlinkMember = "Do you want to unlink this User from {$lang->executionCommon}?"; -$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?"; -$lang->execution->confirmSync = "After modifying the project, in order to maintain the consistency of data, the data of products, requirements, teams and whitelist associated with the implementation will be synchronized to the new project. Please know."; -$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the execution?"; -$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the execution. Remove it from the {$lang->executionCommon}, then try again."; -$lang->execution->notAllowRemoveProducts = "The story %s of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action."; -$lang->execution->errorNoLinkedProducts = "No {$lang->productCommon} is linked to {$lang->executionCommon}. You will be directed to {$lang->productCommon} page to link one."; -$lang->execution->errorSameProducts = "{$lang->executionCommon} cannot be linked to the same {$lang->productCommon} twice."; -$lang->execution->errorSameBranches = "{$lang->executionCommon} cannot be linked to the same branch twice"; -$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; -$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; -$lang->execution->errorLetterProject = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; -$lang->execution->errorGreaterProject = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; -$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.'; -$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.'; -$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.'; -$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.'; -$lang->execution->errorNameRepeat = 'Child stages of the same parent stage cannot have the same name.'; -$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage."; -$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!"; -$lang->execution->tips = 'Note'; -$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can "; -$lang->execution->setTeam = 'Set Team'; -$lang->execution->linkStory = 'Link Story'; -$lang->execution->createTask = 'Create Task'; -$lang->execution->goback = "Go Back Task List"; -$lang->execution->gobackExecution = "Go Back {$lang->executionCommon} List"; -$lang->execution->noweekend = 'Exclude Weekend'; -$lang->execution->nodelay = 'Exclude Delay Date'; -$lang->execution->withweekend = 'Include Weekend'; -$lang->execution->withdelay = 'Include Delay Date'; -$lang->execution->interval = 'Intervals '; -$lang->execution->fixFirstWithLeft = 'Update hours left too'; -$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has "; -$lang->execution->unfinishedTask = "[%s] unfinished tasks. "; -$lang->execution->unresolvedBug = "[%s] unresolved bugs. "; -$lang->execution->projectNotEmpty = 'Project cannot be empty.'; -$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?'; -$lang->execution->ge = "『%s』should be >= actual begin『%s』."; -$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again."; -$lang->execution->countTip = ' (%s member)'; -$lang->execution->pleaseInput = "Enter"; -$lang->execution->week = 'week'; -$lang->execution->checkedExecutions = "Seleted %s {$lang->executionCommon}."; +$lang->execution->confirmDelete = "Do you want to delete the {$lang->executionCommon}[%s]?"; +$lang->execution->confirmUnlinkMember = "Do you want to unlink this User from {$lang->executionCommon}?"; +$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?"; +$lang->execution->confirmSync = "After modifying the project, in order to maintain the consistency of data, the data of products, requirements, teams and whitelist associated with the implementation will be synchronized to the new project. Please know."; +$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the execution?"; +$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the execution. Remove it from the {$lang->executionCommon}, then try again."; +$lang->execution->notAllowRemoveProducts = "The story %s of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action."; +$lang->execution->errorNoLinkedProducts = "No {$lang->productCommon} is linked to {$lang->executionCommon}. You will be directed to {$lang->productCommon} page to link one."; +$lang->execution->errorSameProducts = "{$lang->executionCommon} cannot be linked to the same {$lang->productCommon} twice."; +$lang->execution->errorSameBranches = "{$lang->executionCommon} cannot be linked to the same branch twice"; +$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; +$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; +$lang->execution->errorLetterProject = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; +$lang->execution->errorGreaterProject = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; +$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.'; +$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.'; +$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.'; +$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.'; +$lang->execution->errorNameRepeat = "Child %s of the same parent stage cannot have the same name."; +$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage."; +$lang->execution->errorLetterPlan = "『%s』cannot be less than the plan start time『%s』。"; +$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!"; +$lang->execution->tips = 'Note'; +$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can "; +$lang->execution->setTeam = 'Set Team'; +$lang->execution->linkStory = 'Link Story'; +$lang->execution->createTask = 'Create Task'; +$lang->execution->goback = "Go Back Task List"; +$lang->execution->gobackExecution = "Go Back {$lang->executionCommon} List"; +$lang->execution->noweekend = 'Exclude Weekend'; +$lang->execution->nodelay = 'Exclude Delay Date'; +$lang->execution->withweekend = 'Include Weekend'; +$lang->execution->withdelay = 'Include Delay Date'; +$lang->execution->interval = 'Intervals '; +$lang->execution->fixFirstWithLeft = 'Update hours left too'; +$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has "; +$lang->execution->unfinishedTask = "[%s] unfinished tasks. "; +$lang->execution->unresolvedBug = "[%s] unresolved bugs. "; +$lang->execution->projectNotEmpty = 'Project cannot be empty.'; +$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?'; +$lang->execution->ge = "『%s』should be >= actual begin『%s』."; +$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again."; +$lang->execution->countTip = ' (%s member)'; +$lang->execution->pleaseInput = "Enter"; +$lang->execution->week = 'week'; +$lang->execution->checkedExecutions = "Seleted %s {$lang->executionCommon}."; +$lang->execution->hasStartedTaskOrSubStage = "Tasks or subphases under %s %s have already started, cannot be modified, and have been filtered."; +$lang->execution->hasSuspendedOrClosedChildren = "The sub-stages under stage %s are not all suspended or closed, cannot be modified, and have been filtered."; +$lang->execution->hasNotClosedChildren = "The sub-stages under stage %s are not all closed, cannot be modified, and have been filtered."; +$lang->execution->hasStartedTask = "The task under %s %s has already started, cannot be modified, and has been filtered."; +$lang->execution->cannotManageProducts = 'The ' . strtolower($lang->project->common). ' model of this ' . strtolower($lang->execution->common) . " is %s and this " . strtolower($lang->execution->common) . ' cannot be associated with products.'; /* Statistics. */ $lang->execution->charts = new stdclass(); @@ -561,6 +572,9 @@ $lang->execution->action->startbychildclose = '$date, the stage status is execution->action->startbychildcreate = '$date, the stage status is Doing as the system judges that its sub-stages are Created. '; $lang->execution->action->startbychildedit = '$date, the stage status is Doing as the system judges that its sub-stages are Edited'; $lang->execution->action->startbychild = '$date, the stage status is Doing as the system judges that its sub-stages are Activated.'; +$lang->execution->action->waitbychild = '$date, the stage status is Wait as the system judges that its sub-stages are Edited'; +$lang->execution->action->suspendbychild = '$date, the stage status is Suspended as the system judges that its sub-stages are Edited'; +$lang->execution->action->closebychild = '$date, the stage status is Closed as the system judges that its sub-stages are Edited'; $lang->execution->startbychildactivate = 'activated'; $lang->execution->waitbychilddelete = 'stop'; @@ -576,6 +590,9 @@ $lang->execution->startbychildclose = 'activated'; $lang->execution->startbychildcreate = 'activated'; $lang->execution->startbychildedit = 'activated'; $lang->execution->startbychild = 'activated'; +$lang->execution->waitbychild = 'stop'; +$lang->execution->suspendbychild = 'suspended'; +$lang->execution->closebychild = 'closed'; $lang->execution->statusColorList = array(); $lang->execution->statusColorList['wait'] = '#0991FF'; diff --git a/module/execution/lang/fr.php b/module/execution/lang/fr.php index bd6a30e4a5..15d6cc69c0 100644 --- a/module/execution/lang/fr.php +++ b/module/execution/lang/fr.php @@ -139,7 +139,8 @@ $lang->execution->kanbanNoLinkProduct = "Kanban not linked {$lang->productCommon $lang->execution->myTask = "My Task"; $lang->execution->list = "{$lang->executionCommon} List"; $lang->execution->allProject = 'Tous'; -$lang->execution->method = 'Method'; +$lang->execution->method = 'Management Method'; +$lang->execution->sameAsParent = "Same as parent"; /* Fields of zt_team. */ $lang->execution->root = 'Root'; @@ -150,6 +151,9 @@ $lang->execution->left = 'Left'; $lang->execution->copyTeamTip = "copy Project/project team members"; $lang->execution->daysGreaterProject = 'Days cannot be greater than days of execution 『%s』'; $lang->execution->errorHours = 'Hours/Day cannot be greater than『24』'; +$lang->execution->agileplusMethodTip = 'When creating executions in an Agile Plus project, both Iteration and Kanban management methods are supported.'; +$lang->execution->typeTip = "The sub-stages of other types can be created under the parent stage of the 'mix' type, while the type of other parent-child levels is consistent."; +$lang->execution->waterfallTip = 'In the Waterfall project or in the Waterfall + project,'; $lang->execution->start = 'Démarrer'; $lang->execution->activate = 'Activer'; @@ -262,6 +266,7 @@ $lang->execution->edit = "Edit {$lang->executionCommon}"; $lang->execution->editAction = "Edit Execution"; $lang->execution->batchEdit = "Edit"; $lang->execution->batchEditAction = "Batch Edit"; +$lang->execution->batchChangeStatus = "Batch Change Status"; $lang->execution->manageMembers = 'Manage Team'; $lang->execution->unlinkMember = 'Remove Member'; $lang->execution->unlinkStory = 'Unlink Story'; @@ -277,7 +282,7 @@ $lang->execution->treeViewTask = 'Tree View Task'; $lang->execution->treeViewStory = 'Tree View Story'; $lang->execution->storyKanban = 'Story Kanban'; $lang->execution->storySort = 'Rank Story'; -$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; +$lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only active ' . $lang->SRCommon . ' can be imported.'; $lang->execution->importEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? The stories in the draft will be automatically filtered out when imported.'; $lang->execution->importBranchPlanStory = $lang->executionCommon . ' is created!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; $lang->execution->importBranchEditPlanStory = $lang->executionCommon . ' is edited!\nDo you want to import stories that have been linked to the plan? Only the activation stories of the branch associated with this ' .$lang->executionCommon. ' will be associated with the import'; @@ -376,51 +381,57 @@ $lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been link $lang->execution->copyTeamTitle = "Choose a {$lang->project->common} or {$lang->execution->common} Team to copy."; /* Interactive prompts. */ -$lang->execution->confirmDelete = "Voulez-vous réellement supprimer le {$lang->executionCommon}[%s] ?"; -$lang->execution->confirmUnlinkMember = "Voulez-vous retirer cet utilisateur du {$lang->executionCommon} ?"; -$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?"; -$lang->execution->confirmSync = "After modifying the project, in order to maintain the consistency of data, the data of products, requirements, teams and whitelist associated with the implementation will be synchronized to the new project. Please know."; -$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?"; -$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again."; -$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action."; -$lang->execution->errorNoLinkedProducts = "Aucun {$lang->productCommon} n'est associé à ce {$lang->executionCommon}. Vous allez être redirigé vers la page {$lang->productCommon} pour en associer un."; -$lang->execution->errorSameProducts = "Ce {$lang->executionCommon} ne peut pas être associé deux fois au même {$lang->productCommon}. Imaginez un peu les résultats !"; -$lang->execution->errorSameBranches = "{$lang->executionCommon} cannot be linked to the same branch twice"; -$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; -$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; -$lang->execution->errorLetterProject = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; -$lang->execution->errorGreaterProject = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; -$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.'; -$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.'; -$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.'; -$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.'; -$lang->execution->errorNameRepeat = 'Child stages of the same parent stage cannot have the same name.'; -$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage."; -$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé."; -$lang->execution->tips = 'Note'; -$lang->execution->afterInfo = "Le {$lang->executionCommon} a été créé avec succès ! Ensuite vous pouvez "; -$lang->execution->setTeam = "Composer l'Equipe"; -$lang->execution->linkStory = 'Stories liées'; -$lang->execution->createTask = 'Créer des Tâches'; -$lang->execution->goback = "Revenir en arrière"; -$lang->execution->gobackExecution = "Go Back {$lang->executionCommon} List"; -$lang->execution->noweekend = 'Exclure les Weekends'; -$lang->execution->nodelay = 'Exclude Delay Date'; -$lang->execution->withweekend = 'Inclure les Weekends'; -$lang->execution->withdelay = 'Include Delay Date'; -$lang->execution->interval = 'Intervalles'; -$lang->execution->fixFirstWithLeft = 'Mettre à jour les heures également'; -$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has "; -$lang->execution->unfinishedTask = "[%s] unfinished tasks. "; -$lang->execution->unresolvedBug = "[%s] unresolved bugs. "; -$lang->execution->projectNotEmpty = 'Project cannot be empty.'; -$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?'; -$lang->execution->ge = "『%s』should be >= actual begin『%s』."; -$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again."; -$lang->execution->countTip = ' (%s member)'; -$lang->execution->pleaseInput = "Enter"; -$lang->execution->week = 'week'; -$lang->execution->checkedExecutions = "Pour s électionner l'élément%s."; +$lang->execution->confirmDelete = "Voulez-vous réellement supprimer le {$lang->executionCommon}[%s] ?"; +$lang->execution->confirmUnlinkMember = "Voulez-vous retirer cet utilisateur du {$lang->executionCommon} ?"; +$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?"; +$lang->execution->confirmSync = "After modifying the project, in order to maintain the consistency of data, the data of products, requirements, teams and whitelist associated with the implementation will be synchronized to the new project. Please know."; +$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?"; +$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again."; +$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action."; +$lang->execution->errorNoLinkedProducts = "Aucun {$lang->productCommon} n'est associé à ce {$lang->executionCommon}. Vous allez être redirigé vers la page {$lang->productCommon} pour en associer un."; +$lang->execution->errorSameProducts = "Ce {$lang->executionCommon} ne peut pas être associé deux fois au même {$lang->productCommon}. Imaginez un peu les résultats !"; +$lang->execution->errorSameBranches = "{$lang->executionCommon} cannot be linked to the same branch twice"; +$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; +$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; +$lang->execution->errorLetterProject = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s."; +$lang->execution->errorGreaterProject = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project."; +$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.'; +$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.'; +$lang->execution->errorLetterParent = 'The begin cannot be less than the begin of the parent stage to which it belongs: %s.'; +$lang->execution->errorGreaterParent = 'The end cannot be greater than the end of the parent stage to which it belongs:%s.'; +$lang->execution->errorNameRepeat = "Child %s of the same parent stage cannot have the same name."; +$lang->execution->errorAttrMatch = "Parent stage's attribute is [%s], the attribute needs to be consistent with the parent stage."; +$lang->execution->errorLetterPlan = "『%s』cannot be less than the plan start time『%s』。"; +$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé."; +$lang->execution->tips = 'Note'; +$lang->execution->afterInfo = "Le {$lang->executionCommon} a été créé avec succès ! Ensuite vous pouvez "; +$lang->execution->setTeam = "Composer l'Equipe"; +$lang->execution->linkStory = 'Stories liées'; +$lang->execution->createTask = 'Créer des Tâches'; +$lang->execution->goback = "Revenir en arrière"; +$lang->execution->gobackExecution = "Go Back {$lang->executionCommon} List"; +$lang->execution->noweekend = 'Exclure les Weekends'; +$lang->execution->nodelay = 'Exclude Delay Date'; +$lang->execution->withweekend = 'Inclure les Weekends'; +$lang->execution->withdelay = 'Include Delay Date'; +$lang->execution->interval = 'Intervalles'; +$lang->execution->fixFirstWithLeft = 'Mettre à jour les heures également'; +$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has "; +$lang->execution->unfinishedTask = "[%s] unfinished tasks. "; +$lang->execution->unresolvedBug = "[%s] unresolved bugs. "; +$lang->execution->projectNotEmpty = 'Project cannot be empty.'; +$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?'; +$lang->execution->ge = "『%s』should be >= actual begin『%s』."; +$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again."; +$lang->execution->countTip = ' (%s member)'; +$lang->execution->pleaseInput = "Enter"; +$lang->execution->week = 'week'; +$lang->execution->checkedExecutions = "Pour s électionner l'élément%s."; +$lang->execution->hasStartedTaskOrSubStage = "Tasks or subphases under %s %s have already started, cannot be modified, and have been filtered."; +$lang->execution->hasSuspendedOrClosedChildren = "The sub-stages under stage %s are not all suspended or closed, cannot be modified, and have been filtered."; +$lang->execution->hasNotClosedChildren = "The sub-stages under stage %s are not all closed, cannot be modified, and have been filtered."; +$lang->execution->hasStartedTask = "The task under %s %s has already started, cannot be modified, and has been filtered."; +$lang->execution->cannotManageProducts = 'The ' . strtolower($lang->project->common). ' model of this ' . strtolower($lang->execution->common) . " is %s and this " . strtolower($lang->execution->common) . ' cannot be associated with products.'; /* Statistics. */ $lang->execution->charts = new stdclass(); @@ -561,6 +572,9 @@ $lang->execution->action->startbychildclose = '$date, the stage status is execution->action->startbychildcreate = '$date, the stage status is Doing as the system judges that its sub-stages are Created. '; $lang->execution->action->startbychildedit = '$date, the stage status is Doing as the system judges that its sub-stages are Edited'; $lang->execution->action->startbychild = '$date, the stage status is Doing as the system judges that its sub-stages are Activated.'; +$lang->execution->action->waitbychild = '$date, the stage status is Wait as the system judges that its sub-stages are Edited'; +$lang->execution->action->suspendbychild = '$date, the stage status is Suspended as the system judges that its sub-stages are Edited'; +$lang->execution->action->closebychild = '$date, the stage status is Closed as the system judges that its sub-stages are Edited'; $lang->execution->startbychildactivate = 'activated'; $lang->execution->waitbychilddelete = 'stop'; @@ -576,6 +590,9 @@ $lang->execution->startbychildclose = 'activated'; $lang->execution->startbychildcreate = 'activated'; $lang->execution->startbychildedit = 'activated'; $lang->execution->startbychild = 'activated'; +$lang->execution->waitbychild = 'stop'; +$lang->execution->suspendbychild = 'suspended'; +$lang->execution->closebychild = 'closed'; $lang->execution->statusColorList = array(); $lang->execution->statusColorList['wait'] = '#0991FF'; diff --git a/module/execution/lang/zh-cn.php b/module/execution/lang/zh-cn.php index 5353f38177..2430c2b7af 100644 --- a/module/execution/lang/zh-cn.php +++ b/module/execution/lang/zh-cn.php @@ -139,7 +139,8 @@ $lang->execution->kanbanNoLinkProduct = "看板没有关联{$lang->productCommon $lang->execution->myTask = "我的任务"; $lang->execution->list = '列表'; $lang->execution->allProject = '全部项目'; -$lang->execution->method = '方法'; +$lang->execution->method = '管理方法'; +$lang->execution->sameAsParent = "同父阶段"; /* Fields of zt_team. */ $lang->execution->root = '源ID'; @@ -147,9 +148,12 @@ $lang->execution->estimate = '预计'; $lang->execution->consumed = '消耗'; $lang->execution->left = '剩余'; -$lang->execution->copyTeamTip = "可以选择复制项目或{$lang->execution->common}团队的成员"; -$lang->execution->daysGreaterProject = '可用工日不能大于执行的可用工日『%s』'; -$lang->execution->errorHours = '可用工时/天不能大于『24』'; +$lang->execution->copyTeamTip = "可以选择复制项目或{$lang->execution->common}团队的成员"; +$lang->execution->daysGreaterProject = '可用工日不能大于执行的可用工日『%s』'; +$lang->execution->errorHours = '可用工时/天不能大于『24』'; +$lang->execution->agileplusMethodTip = '融合敏捷项目创建执行时,支持迭代和看板两种管理方法。'; +$lang->execution->typeTip = '“综合”类型的父阶段可以创建其它类型的子级,其它父子层级的类型均一致。'; +$lang->execution->waterfallTip = '瀑布项目和融合瀑布项目中,'; $lang->execution->start = "开始"; $lang->execution->activate = "激活"; @@ -262,6 +266,7 @@ $lang->execution->edit = "设置{$lang->executionCommon}"; $lang->execution->editAction = "编辑{$lang->execution->common}"; $lang->execution->batchEdit = "编辑"; $lang->execution->batchEditAction = "批量编辑"; +$lang->execution->batchChangeStatus = "批量修改状态"; $lang->execution->manageMembers = '团队管理'; $lang->execution->unlinkMember = '移除成员'; $lang->execution->unlinkStory = "移除{$lang->SRCommon}"; @@ -277,7 +282,7 @@ $lang->execution->treeViewTask = '树状图查看任务'; $lang->execution->treeViewStory = "树状图查看{$lang->SRCommon}"; $lang->execution->storyKanban = "{$lang->SRCommon}看板"; $lang->execution->storySort = "{$lang->SRCommon}排序"; -$lang->execution->importPlanStory = '创建' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将自动过滤掉草稿状态的' . $lang->SRCommon . '。'; +$lang->execution->importPlanStory = '创建' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时只能导入激活状态的' . $lang->SRCommon . '。'; $lang->execution->importEditPlanStory = '编辑' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将自动过滤掉草稿状态的' . $lang->SRCommon . '。'; $lang->execution->importBranchPlanStory = '创建' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将只关联本' . $lang->executionCommon . '所关联分支的激活需求。'; $lang->execution->importBranchEditPlanStory = '编辑' . $lang->executionCommon . '成功!\n是否导入计划关联的相关' . $lang->SRCommon . '?导入时将只关联本' . $lang->executionCommon . '所关联分支的激活需求。'; @@ -376,51 +381,57 @@ $lang->execution->linkAllStoryTip = "(项目下还未关联{$lang->SRCommon $lang->execution->copyTeamTitle = "选择一个{$lang->project->common}或{$lang->execution->common}团队"; /* 交互提示。*/ -$lang->execution->confirmDelete = "您确定删除{$lang->executionCommon}[%s]吗?"; -$lang->execution->confirmUnlinkMember = "您确定从该{$lang->executionCommon}中移除该用户吗?"; -$lang->execution->confirmUnlinkStory = "移除该{$lang->SRCommon}后,该{$lang->SRCommon}关联的用例将被移除,该{$lang->SRCommon}关联的任务将被取消,请确认。"; -$lang->execution->confirmSync = "修改所属项目后,为了保持数据的一致性,该执行所关联的产品、需求、团队和白名单数据将会同步到新的项目中,请知悉。"; -$lang->execution->confirmUnlinkExecutionStory = "您确定从该项目中移除该{$lang->SRCommon}吗?"; -$lang->execution->notAllowedUnlinkStory = "该{$lang->SRCommon}已经与项目下{$lang->executionCommon}相关联,请从{$lang->executionCommon}中移除后再操作。"; -$lang->execution->notAllowRemoveProducts = "该{$lang->productCommon}中的{$lang->SRCommon}%s已与该{$lang->executionCommon}进行了关联,请取消关联后再操作。"; -$lang->execution->errorNoLinkedProducts = "该{$lang->executionCommon}没有关联的{$lang->productCommon},系统将转到{$lang->productCommon}关联页面"; -$lang->execution->errorSameProducts = "{$lang->executionCommon}不能关联多个相同的{$lang->productCommon}。"; -$lang->execution->errorSameBranches = "{$lang->executionCommon}不能关联多个相同的分支。"; -$lang->execution->errorBegin = "{$lang->executionCommon}的开始时间不能小于所属项目的开始时间%s。"; -$lang->execution->errorEnd = "{$lang->executionCommon}的截止时间不能大于所属项目的结束时间%s。"; -$lang->execution->errorLetterProject = "{$lang->executionCommon}的计划开始时间不能小于所属项目的计划开始时间%s。"; -$lang->execution->errorGreaterProject = "{$lang->executionCommon}的计划完成时间不能大于所属项目的计划完成时间%s。"; -$lang->execution->errorCommonBegin = $lang->executionCommon . '开始日期应大于等于项目的开始日期:%s。'; -$lang->execution->errorCommonEnd = $lang->executionCommon . '截止日期应小于等于项目的截止日期:%s。'; -$lang->execution->errorLetterParent = '计划开始时间不能小于所属父阶段的计划开始时间:%s。'; -$lang->execution->errorGreaterParent = '计划完成时间不能大于所属父阶段的计划完成时间:%s。'; -$lang->execution->errorNameRepeat = '相同父阶段的子阶段名称不能相同'; -$lang->execution->errorAttrMatch = "父阶段类型为[%s],阶段类型需与父阶段一致"; -$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!"; -$lang->execution->tips = '提示'; -$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:"; -$lang->execution->setTeam = '设置团队'; -$lang->execution->linkStory = "关联{$lang->SRCommon}"; -$lang->execution->createTask = '创建任务'; -$lang->execution->goback = "返回任务列表"; -$lang->execution->gobackExecution = "返回{$lang->executionCommon}列表"; -$lang->execution->noweekend = '去除周末'; -$lang->execution->nodelay = '去除延期日期'; -$lang->execution->withweekend = '显示周末'; -$lang->execution->withdelay = '显示延期日期'; -$lang->execution->interval = '间隔'; -$lang->execution->fixFirstWithLeft = '修改剩余工时'; -$lang->execution->unfinishedExecution = "该{$lang->executionCommon}下还有"; -$lang->execution->unfinishedTask = "[%s]个未完成的任务,"; -$lang->execution->unresolvedBug = "[%s]个未解决的bug,"; -$lang->execution->projectNotEmpty = '所属项目不能为空。'; -$lang->execution->confirmStoryToTask = '%s' . $lang->SRCommon . '已经在当前' . $lang->execution->common . '中转了任务,请确认是否重复转任务。'; -$lang->execution->ge = "『%s』应当不小于实际开始时间『%s』。"; -$lang->execution->storyDragError = "该{$lang->SRCommon}不是激活状态,请激活后再拖动"; -$lang->execution->countTip = '(%s人)'; -$lang->execution->pleaseInput = "请输入"; -$lang->execution->week = '周'; -$lang->execution->checkedExecutions = "共选中%s个{$lang->executionCommon}。"; +$lang->execution->confirmDelete = "您确定删除{$lang->executionCommon}[%s]吗?"; +$lang->execution->confirmUnlinkMember = "您确定从该{$lang->executionCommon}中移除该用户吗?"; +$lang->execution->confirmUnlinkStory = "移除该{$lang->SRCommon}后,该{$lang->SRCommon}关联的用例将被移除,该{$lang->SRCommon}关联的任务将被取消,请确认。"; +$lang->execution->confirmSync = "修改所属项目后,为了保持数据的一致性,该执行所关联的产品、需求、团队和白名单数据将会同步到新的项目中,请知悉。"; +$lang->execution->confirmUnlinkExecutionStory = "您确定从该项目中移除该{$lang->SRCommon}吗?"; +$lang->execution->notAllowedUnlinkStory = "该{$lang->SRCommon}已经与项目下{$lang->executionCommon}相关联,请从{$lang->executionCommon}中移除后再操作。"; +$lang->execution->notAllowRemoveProducts = "该{$lang->productCommon}中的{$lang->SRCommon}%s已与该{$lang->executionCommon}进行了关联,请取消关联后再操作。"; +$lang->execution->errorNoLinkedProducts = "该{$lang->executionCommon}没有关联的{$lang->productCommon},系统将转到{$lang->productCommon}关联页面"; +$lang->execution->errorSameProducts = "{$lang->executionCommon}不能关联多个相同的{$lang->productCommon}。"; +$lang->execution->errorSameBranches = "{$lang->executionCommon}不能关联多个相同的分支。"; +$lang->execution->errorBegin = "{$lang->executionCommon}的开始时间不能小于所属项目的开始时间%s。"; +$lang->execution->errorEnd = "{$lang->executionCommon}的截止时间不能大于所属项目的结束时间%s。"; +$lang->execution->errorLetterProject = "{$lang->executionCommon}的计划开始时间不能小于所属项目的计划开始时间%s。"; +$lang->execution->errorGreaterProject = "{$lang->executionCommon}的计划完成时间不能大于所属项目的计划完成时间%s。"; +$lang->execution->errorCommonBegin = $lang->executionCommon . '开始日期应大于等于项目的开始日期:%s。'; +$lang->execution->errorCommonEnd = $lang->executionCommon . '截止日期应小于等于项目的截止日期:%s。'; +$lang->execution->errorLetterParent = '计划开始时间不能小于所属父阶段的计划开始时间:%s。'; +$lang->execution->errorGreaterParent = '计划完成时间不能大于所属父阶段的计划完成时间:%s。'; +$lang->execution->errorNameRepeat = "相同父阶段的子%s名称不能相同"; +$lang->execution->errorAttrMatch = "父阶段类型为[%s],阶段类型需与父阶段一致"; +$lang->execution->errorLetterPlan = "『%s』应当不小于计划开始时间『%s』。"; +$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!"; +$lang->execution->tips = '提示'; +$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:"; +$lang->execution->setTeam = '设置团队'; +$lang->execution->linkStory = "关联{$lang->SRCommon}"; +$lang->execution->createTask = '创建任务'; +$lang->execution->goback = "返回任务列表"; +$lang->execution->gobackExecution = "返回{$lang->executionCommon}列表"; +$lang->execution->noweekend = '去除周末'; +$lang->execution->nodelay = '去除延期日期'; +$lang->execution->withweekend = '显示周末'; +$lang->execution->withdelay = '显示延期日期'; +$lang->execution->interval = '间隔'; +$lang->execution->fixFirstWithLeft = '修改剩余工时'; +$lang->execution->unfinishedExecution = "该{$lang->executionCommon}下还有"; +$lang->execution->unfinishedTask = "[%s]个未完成的任务,"; +$lang->execution->unresolvedBug = "[%s]个未解决的bug,"; +$lang->execution->projectNotEmpty = '所属项目不能为空。'; +$lang->execution->confirmStoryToTask = '%s' . $lang->SRCommon . '已经在当前' . $lang->execution->common . '中转了任务,请确认是否重复转任务。'; +$lang->execution->ge = "『%s』应当不小于实际开始时间『%s』。"; +$lang->execution->storyDragError = "该{$lang->SRCommon}不是激活状态,请激活后再拖动"; +$lang->execution->countTip = '(%s人)'; +$lang->execution->pleaseInput = "请输入"; +$lang->execution->week = '周'; +$lang->execution->checkedExecutions = "共选中%s个{$lang->executionCommon}。"; +$lang->execution->hasStartedTaskOrSubStage = "%s%s下的任务或子阶段已经开始,无法修改,已过滤。"; +$lang->execution->hasSuspendedOrClosedChildren = "阶段%s下的子阶段未全部挂起或关闭,无法修改,已过滤。"; +$lang->execution->hasNotClosedChildren = "阶段%s下的子阶段未全部关闭,无法修改,已过滤。"; +$lang->execution->hasStartedTask = "%s%s下的任务已经开始,无法修改,已过滤。"; +$lang->execution->cannotManageProducts = "当前{$lang->execution->common}的{$lang->project->common}为%s{$lang->project->common},不能关联产品。"; /* 统计。*/ $lang->execution->charts = new stdclass(); @@ -561,7 +572,9 @@ $lang->execution->action->startbychildclose = '$date, 系统判断由于子 $lang->execution->action->startbychildcreate = '$date, 系统判断由于 创建 子阶段 ,将阶段状态置为 进行中 。'; $lang->execution->action->startbychildedit = '$date, 系统判断由于子阶段 状态修改 ,将阶段状态置为 进行中 。'; $lang->execution->action->startbychild = '$date, 系统判断由于子阶段 激活 ,将阶段状态置为 进行中 。'; - +$lang->execution->action->waitbychild = '$date, 系统判断由于子阶段 状态修改 ,将阶段状态置为 未开始 。'; +$lang->execution->action->suspendbychild = '$date, 系统判断由于子阶段 状态修改 ,将阶段状态置为 已挂起 。'; +$lang->execution->action->closebychild = '$date, 系统判断由于子阶段 状态修改 ,将阶段状态置为 已关闭 。'; $lang->execution->startbychildactivate = '激活了'; $lang->execution->waitbychilddelete = '停止了'; @@ -577,6 +590,9 @@ $lang->execution->startbychildclose = '激活了'; $lang->execution->startbychildcreate = '激活了'; $lang->execution->startbychildedit = '激活了'; $lang->execution->startbychild = '激活了'; +$lang->execution->waitbychild = '停止了'; +$lang->execution->suspendbychild = '挂起了'; +$lang->execution->closebychild = '关闭了'; $lang->execution->statusColorList = array(); $lang->execution->statusColorList['wait'] = '#0991FF'; diff --git a/module/execution/model.php b/module/execution/model.php index b55724ecaf..df16b218f8 100755 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -9,8 +9,6 @@ * @version $Id: model.php 5118 2013-07-12 07:41:41Z chencongzhi520@gmail.com $ * @link http://www.zentao.net */ -?> - true, 'task' => true, 'qa' => true, 'devops' => true, 'burn' => true, 'build' => true, 'other' => true); + + /* Unset story, bug, build and testtask if type is ops. */ + if($execution->lifetime == 'ops') + { + $features['story'] = false; + $features['qa'] = false; + $features['build'] = false; + $features['burn'] = false; + } + elseif(!empty($execution->attribute)) + { + $features['other'] = false; + if(in_array($execution->attribute, array('request', 'design', 'review'))) + { + $features['qa'] = false; + $features['devops'] = false; + $features['build'] = false; + + if(in_array($execution->attribute, array('request', 'review'))) + { + $features['story'] = false; + } + } + } + + return $features; + } + /** * Set menu. * @@ -107,30 +143,17 @@ class executionModel extends model if(isset($execution->acl) and $execution->acl != 'private') unset($this->lang->execution->menu->settings['subMenu']->whitelist); - /* Unset story, bug, build and testtask if type is ops. */ - if($execution and $execution->lifetime == 'ops') - { - unset($this->lang->execution->menu->story); - unset($this->lang->execution->menu->qa); - unset($this->lang->execution->menu->build); - unset($this->lang->execution->menu->burn); - } - - $stageFilter = array('request', 'design', 'review'); - if(isset($execution->attribute) and in_array($execution->attribute, $stageFilter)) - { - if(in_array($execution->attribute, array('request', 'review'))) - { - unset($this->lang->execution->menu->story); - unset($this->lang->execution->menu->view['subMenu']->groupTask); - unset($this->lang->execution->menu->view['subMenu']->tree); - unset($this->lang->execution->menu->other); - } - - unset($this->lang->execution->menu->devops); - unset($this->lang->execution->menu->qa); - unset($this->lang->execution->menu->build); - } + /* Redjust menus. */ + $features = $this->getExecutionFeatures($execution); + if(!$features['story']) unset($this->lang->execution->menu->story); + if(!$features['story']) unset($this->lang->execution->menu->view['subMenu']->groupTask); + if(!$features['story']) unset($this->lang->execution->menu->view['subMenu']->tree); + if(!$features['qa']) unset($this->lang->execution->menu->qa); + if(!$features['devops']) unset($this->lang->execution->menu->devops); + if(!$features['build']) unset($this->lang->execution->menu->build); + if(!$features['burn']) unset($this->lang->execution->menu->burn); + if(!$features['other']) unset($this->lang->execution->menu->other); + if(!$features['story'] and $this->config->edition == 'open') unset($this->lang->execution->menu->view); if($executions and (!isset($executions[$executionID]) or !$this->checkPriv($executionID))) $this->accessDenied(); @@ -361,7 +384,7 @@ class executionModel extends model $type = 'sprint'; if($project) $type = zget($this->config->execution->modelList, $project->model, 'sprint'); - if($project->model == 'waterfall') + if(($project->model == 'waterfall' or $project->model == 'waterfallplus') and isset($this->config->setPercent) and $this->config->setPercent == 1) { $this->checkWorkload('create', $_POST['percent'], $project); if(dao::isError()) return false; @@ -385,8 +408,10 @@ class executionModel extends model ->setDefault('openedVersion', $this->config->version) ->setDefault('lastEditedBy', $this->app->user->account) ->setDefault('lastEditedDate', helper::now()) + ->setDefault('days', '0') ->setDefault('team', $this->post->name) ->setDefault('parent', $this->post->project) + ->setIF($this->post->parent, 'parent', $this->post->parent) ->setIF($this->post->heightType == 'auto', 'displayCards', 0) ->setIF(!isset($_POST['whitelist']), 'whitelist', '') ->setIF($this->post->acl == 'open', 'whitelist', '') @@ -396,7 +421,7 @@ class executionModel extends model ->remove('products, workDays, delta, branch, uid, plans, teams, teamMembers, contactListMenu, heightType') ->get(); - if(!empty($sprint->parent)) + if(!empty($sprint->parent) and ($sprint->project == $sprint->parent)) { $project = $this->loadModel('project')->getByID($sprint->parent); $sprint->hasProduct = $project->hasProduct; @@ -408,7 +433,7 @@ class executionModel extends model } /* Check the workload format and total. */ - if(!empty($sprint->percent)) $this->checkWorkload('create', $sprint->percent, $sprint->project); + if(!empty($sprint->percent) and isset($this->config->setPercent) and $this->config->setPercent == 1) $this->checkWorkload('create', $sprint->percent, $sprint->project); /* Set planDuration and realDuration. */ if($this->config->edition == 'max') @@ -459,6 +484,15 @@ class executionModel extends model if((isset($project) and $project->model != 'kanban') or empty($project)) $this->loadModel('kanban')->createExecutionLane($executionID); + /* Api create infinitus stages. */ + if(isset($sprint->parent) and ($sprint->parent != $sprint->project) and $sprint->type == 'stage') + { + $parent = $this->getByID($sprint->parent); + $grade = $parent->grade + 1; + $path = rtrim($parent->path, ',') . ",{$executionID}"; + $this->dao->update(TABLE_EXECUTION)->set('path')->eq($path)->set('grade')->eq($grade)->where('id')->eq($executionID)->exec(); + } + /* Save order. */ $this->dao->update(TABLE_EXECUTION)->set('`order`')->eq($executionID * 5)->where('id')->eq($executionID)->exec(); $this->file->updateObjectID($this->post->uid, $executionID, 'execution'); @@ -523,7 +557,7 @@ class executionModel extends model $oldExecution = $this->dao->findById($executionID)->from(TABLE_EXECUTION)->fetch(); /* Judgment of required items. */ - if($oldExecution->type != 'stage' and $this->post->code == '' and (!isset($this->config->setCode) or $this->config->setCode == 1)) + if($oldExecution->type != 'stage' and $this->post->code == '' and isset($this->config->setCode) and $this->config->setCode == 1) { dao::$errors['code'] = sprintf($this->lang->error->notempty, $this->lang->execution->code); return false; @@ -565,6 +599,7 @@ class executionModel extends model ->setIF($this->post->status == 'closed' and $oldExecution->status != 'closed', 'closedDate', helper::now()) ->setIF($this->post->status == 'suspended' and $oldExecution->status != 'suspended', 'suspendedDate', helper::today()) ->setIF($oldExecution->type == 'stage', 'project', $oldExecution->project) + ->setDefault('days', '0') ->setDefault('team', $this->post->name) ->join('whitelist', ',') ->stripTags($this->config->execution->editor->edit['id'], $this->config->allowedTags) @@ -578,7 +613,7 @@ class executionModel extends model if(in_array($execution->status, array('closed', 'suspended'))) $this->computeBurn($executionID); - if(empty($execution->project) or $execution->project == $oldExecution->project) $this->checkBeginAndEndDate($oldExecution->project, $execution->begin, $execution->end); + if(empty($execution->project) or $execution->project == $oldExecution->project) $this->checkBeginAndEndDate($oldExecution->project, $execution->begin, $execution->end, !empty($execution->parent) ? $execution : $oldExecution); if(dao::isError()) return false; /* Child stage inherits parent stage permissions. */ @@ -587,7 +622,7 @@ class executionModel extends model $execution = $this->loadModel('file')->processImgURL($execution, $this->config->execution->editor->edit['id'], $this->post->uid); /* Check the workload format and total. */ - if(!empty($execution->percent)) $this->checkWorkload('update', $execution->percent, $oldExecution); + if(!empty($execution->percent) and isset($this->config->setPercent) and $this->config->setPercent == 1) $this->checkWorkload('update', $execution->percent, $oldExecution); /* Set planDuration and realDuration. */ if($this->config->edition == 'max') @@ -624,6 +659,8 @@ class executionModel extends model if(dao::isError()) return false; + if(isset($_POST['parent'])) $this->loadModel('programplan')->setTreePath($executionID); + /* Get team and language item. */ $this->loadModel('user'); $team = $this->user->getTeamMemberPairs($executionID, 'execution'); @@ -711,6 +748,7 @@ class executionModel extends model { $this->loadModel('user'); $this->loadModel('project'); + $this->app->loadLang('programplan'); $executions = array(); $allChanges = array(); @@ -754,7 +792,6 @@ class executionModel extends model $executions[$executionID]->PO = $data->POs[$executionID]; $executions[$executionID]->QD = $data->QDs[$executionID]; $executions[$executionID]->RD = $data->RDs[$executionID]; - $executions[$executionID]->status = $data->statuses[$executionID]; $executions[$executionID]->begin = $data->begins[$executionID]; $executions[$executionID]->end = $data->ends[$executionID]; $executions[$executionID]->team = $data->teams[$executionID]; @@ -763,12 +800,10 @@ class executionModel extends model $executions[$executionID]->lastEditedBy = $this->app->user->account; $executions[$executionID]->lastEditedDate = helper::now(); - if(isset($data->codes)) $executions[$executionID]->code = $executionCode; - if(isset($data->projects)) $executions[$executionID]->project = zget($data->projects, $executionID, 0); - if(isset($data->attributes)) $executions[$executionID]->attribute = zget($data->attributes, $executionID, ''); - if(isset($data->lifetimes)) $executions[$executionID]->lifetime = $data->lifetimes[$executionID]; - if($executions[$executionID]->status == 'closed' and $oldExecutions[$executionID]->status != 'closed') $executions[$executionID]->closedDate = helper::now(); - if($executions[$executionID]->status == 'suspended' and $oldExecutions[$executionID]->status != 'suspended') $executions[$executionID]->suspendedDate = helper::today(); + if(isset($data->codes)) $executions[$executionID]->code = $executionCode; + if(isset($data->projects)) $executions[$executionID]->project = zget($data->projects, $executionID, 0); + if(isset($data->attributes[$executionID])) $executions[$executionID]->attribute = zget($data->attributes, $executionID, ''); + if(isset($data->lifetimes[$executionID])) $executions[$executionID]->lifetime = $data->lifetimes[$executionID]; $oldExecution = $oldExecutions[$executionID]; $projectID = isset($executions[$executionID]->project) ? $executions[$executionID]->project : $oldExecution->project; @@ -796,7 +831,8 @@ class executionModel extends model { if($parentID == $parents[$repeatID]) { - dao::$errors["names$executionID"][] = $this->lang->execution->errorNameRepeat; + $type = $oldExecution->type == 'stage' ? 'stage' : 'agileplus'; + dao::$errors["names$executionID"][] = sprintf($this->lang->execution->errorNameRepeat, strtolower(zget($this->lang->programplan->typeList, $type))); break; } } @@ -807,9 +843,7 @@ class executionModel extends model /* Attribute check. */ if(isset($data->attributes)) { - $executionType = $oldExecutions[$executionID]->type; - - if($executionType == 'stage') + if(isset($project->model) and ($project->model == 'waterfall' or $project->model == 'waterfallplus')) { $this->app->loadLang('stage'); $attribute = $executions[$executionID]->attribute; @@ -876,7 +910,7 @@ class executionModel extends model { if($executions[$executionID]->begin > $executions[$executionID]->end) { - dao::$errors["ends{$executionID}"][] = sprintf($this->lang->execution->ge, $executions[$executionID]->end, $executions[$executionID]->begin); + dao::$errors["ends{$executionID}"][] = sprintf($this->lang->execution->errorLetterPlan, $executions[$executionID]->end, $executions[$executionID]->begin); } if($project and $executions[$executionID]->begin < $project->begin) @@ -975,6 +1009,168 @@ class executionModel extends model return $allChanges; } + /** + * Batch change status. + * + * @param array $executionIdList + * @param string $status + * @access public + * @return void + */ + public function batchChangeStatus($executionIdList, $status) + { + $this->loadModel('programplan'); + + /* Sort the IDs, the child stage comes first, and the parent stage follows. */ + $executionIdList = $this->dao->select('id')->from(TABLE_EXECUTION)->where('id')->in($executionIdList)->orderBy('grade_desc')->fetchPairs(); + + $pointOutStages = ''; + foreach($executionIdList as $executionID) + { + /* The state of the parent stage or the sibling stage may be affected by the child stage before the change, so it cannot be checked in advance. */ + $selfAndChildrenList = $this->programplan->getSelfAndChildrenList($executionID); + $siblingStages = $this->programplan->getSiblings($executionID); + + $selfAndChildren = $selfAndChildrenList[$executionID]; + $execution = $selfAndChildren[$executionID]; + $executionType = $execution->type; + + $siblingList = array(); + if($executionType == 'stage') $siblingList = $siblingStages[$executionID]; + + if($status == 'wait' and $execution->status != 'wait') + { + $pointOutStages .= $this->changeStatus2Wait($executionID, $selfAndChildren, $siblingList); + } + + if($status == 'doing' and $execution->status != 'doing') + { + $this->changeStatus2Doing($executionID, $selfAndChildren); + } + + if(($status == 'suspended' and $execution->status != 'suspended') or ($status == 'closed' and $execution->status != 'closed')) + { + $pointOutStages .= $this->changeStatus2Inactived($executionID, $status, $selfAndChildren, $siblingList); + } + } + + return trim($pointOutStages, ','); + } + + /** + * Change status to wait. + * + * @param int $executionID + * @param array $selfAndChildren + * @param array $siblingStages + * @access public + * @return string + */ + public function changeStatus2Wait($executionID, $selfAndChildren, $siblingStages) + { + $this->loadModel('programplan'); + $this->loadModel('action'); + + $parentID = $selfAndChildren[$executionID]->parent; + + /* There are already tasks consuming work in this phase or its sub-phases already have start times. */ + $hasStartedChildren = $this->dao->select('id')->from(TABLE_EXECUTION)->where('deleted')->eq(0)->andWhere('realBegan')->ne('0000-00-00')->andWhere('id')->in(array_keys($selfAndChildren))->andWhere('id')->ne($executionID)->fetchPairs(); + $hasConsumedTasks = $this->dao->select('count(consumed) as count')->from(TABLE_TASK)->where('deleted')->eq(0)->andWhere('execution')->in(array_keys($selfAndChildren))->andWhere('consumed')->gt(0)->fetch('count'); + if($hasStartedChildren or $hasConsumedTasks) return "'{$selfAndChildren[$executionID]->name}',"; + + $newExecution = $this->buildExecutionByStatus('wait'); + $this->dao->update(TABLE_EXECUTION)->data($newExecution)->where('id')->eq($executionID)->exec(); + + if(!dao::isError()) + { + /* Action. */ + $changes = common::createChanges($selfAndChildren[$executionID], $newExecution); + $actionID = $this->action->create('execution', $executionID, 'Edited'); + $this->action->logHistory($actionID, $changes); + + /* This stage has a parent stage. */ + $checkTopStage = $this->programplan->checkTopStage($executionID); + if(!$checkTopStage) $this->programplan->computeProgress($executionID); + } + } + + /** + * Change status to doing. + * + * @param int $executionID + * @param array $selfAndChildren + * @access public + * @return string + */ + public function changeStatus2Doing($executionID, $selfAndChildren) + { + $this->loadModel('programplan'); + $this->loadModel('action'); + + $type = $selfAndChildren[$executionID]->type; + $parentID = $selfAndChildren[$executionID]->parent; + + $newExecution = $this->buildExecutionByStatus('doing'); + $this->dao->update(TABLE_EXECUTION)->data($newExecution)->where('id')->eq($executionID)->exec(); + if(!dao::isError()) + { + $changes = common::createChanges($selfAndChildren[$executionID], $newExecution); + $actionID = $this->action->create('execution', $executionID, 'Started'); + $this->action->logHistory($actionID, $changes); + + /* This stage has a parent stage. */ + $checkTopStage = $this->programplan->checkTopStage($executionID); + if(!$checkTopStage) $this->programplan->computeProgress($executionID); + } + } + + /** + * Change status to suspended or closed. + * + * @param int $executionID + * @param strint $status + * @param array $selfAndChildren + * @param array $siblingStages + * @access public + * @return string + */ + public function changeStatus2Inactived($executionID, $status, $selfAndChildren, $siblingStages) + { + $this->loadModel('programplan'); + $this->loadModel('action'); + + $type = $selfAndChildren[$executionID]->type; + $parentID = $selfAndChildren[$executionID]->parent; + $checkedStatus = $status == 'suspended' ? 'wait,doing' : 'wait,doing,suspended'; + + /* If status is suspended, the rules is there are sub-stages under this stage, and not all sub-stages are suspended or closed. */ + /* If status is closed, the rules is there are sub-stages under this stage, and not all sub-stages are closed. */ + $checkLeafStage = $this->programplan->checkLeafStage($executionID); + if(!$checkLeafStage) + { + foreach($selfAndChildren as $childID => $child) + { + if($childID == $executionID) continue; + + if(strpos($checkedStatus, $child->status) !== false) return "'{$selfAndChildren[$executionID]->name}',"; + } + } + + $newExecution = $this->buildExecutionByStatus($status); + $this->dao->update(TABLE_EXECUTION)->data($newExecution)->where('id')->eq($executionID)->exec(); + if(!dao::isError()) + { + $changes = common::createChanges($selfAndChildren[$executionID], $newExecution); + $actionID = $this->action->create('execution', $executionID, strtoupper($status)); + $this->action->logHistory($actionID, $changes); + + /* Suspended: When all child stages at the same level are suspended or closed, the status of the parent stage becomes "suspended". */ + /* Closed: When all child stages at the same level are closed, the status of the parent stage becomes "closed". */ + $checkTopStage = $this->programplan->checkTopStage($executionID); + if(!$checkTopStage) $this->programplan->computeProgress($executionID); + } + } + /** * Start execution. * @@ -1262,37 +1458,39 @@ class executionModel extends model } /* The total workload of the first stage should not exceed 100%. */ - if($type == 'create' or (!empty($oldExecution) and $oldExecution->grade == 1)) + if($type == 'create' or (!empty($oldExecution) and $oldExecution->grade == 1 and isset($this->lang->execution->typeList[$oldExecution->type]))) { $oldPercentTotal = $this->dao->select('SUM(t2.percent) as total')->from(TABLE_PROJECTPRODUCT)->alias('t1') ->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.project=t2.id') ->where('t1.product')->eq($this->post->products[0]) + ->beginIF(!empty($_POST['branch'][0]))->andWhere('t1.branch')->eq(current($this->post->branch[0]))->fi() ->andWhere('t2.type')->eq('stage') ->andWhere('t2.grade')->eq(1) ->andWhere('t2.deleted')->eq(0) - ->andWhere('t2.parent')->eq($oldExecution->id) + ->beginIF($type == 'create')->andWhere('t2.parent')->eq($oldExecution->id)->fi() + ->beginIF(!empty($oldExecution) and isset($this->lang->execution->typeList[$oldExecution->type]))->andWhere('t2.parent')->eq($oldExecution->parent)->fi() ->fetch('total'); if(!$oldPercentTotal) $oldPercentTotal = 0; if($type == 'create') $percentTotal = $percent + $oldPercentTotal; - if(!empty($oldExecution) and $oldExecution->grade == 1) $percentTotal = $oldPercentTotal - $oldExecution->percent + $this->post->percent; + if(!empty($oldExecution) and isset($this->lang->execution->typeList[$oldExecution->type])) $percentTotal = $oldPercentTotal - $oldExecution->percent + $percent; if($percentTotal > 100) { - dao::$errors['percent'] = sprintf($this->lang->execution->workloadTotal, '%', $oldPercentTotal . '%'); + $printPercent = $type == 'create' ? $oldPercentTotal : $percentTotal; + dao::$errors['percent'] = sprintf($this->lang->execution->workloadTotal, '%', $printPercent . '%'); return false; } } - if($type == 'update' and $oldExecution->grade == 2) + if($type == 'update' and $oldExecution->grade > 1) { - $parentPlan = $this->loadModel('programPlan')->getByID($oldExecution->parent); - $childrenTotalPercent = $this->dao->select('SUM(percent) as total')->from(TABLE_EXECUTION)->where('parent')->eq($oldExecution->parent)->andWhere('deleted')->eq(0)->fetch('total'); + $childrenTotalPercent = $this->dao->select('SUM(percent) as total')->from(TABLE_EXECUTION)->where('parent')->eq($oldExecution->parent)->andWhere('project')->eq($oldExecution->project)->andWhere('deleted')->eq(0)->fetch('total'); $childrenTotalPercent = $childrenTotalPercent - $oldExecution->percent + $this->post->percent; if($childrenTotalPercent > 100) { - dao::$errors['parent'] = sprintf($this->lang->execution->workloadTotal, '%', $childrenTotalPercent . '%'); + dao::$errors['percent'] = sprintf($this->lang->execution->workloadTotal, '%', $childrenTotalPercent . '%'); return false; } } @@ -1304,16 +1502,24 @@ class executionModel extends model * @param int $projectID * @param string $begin * @param string $end + * @param object $execution * @access public * @return void */ - public function checkBeginAndEndDate($projectID, $begin, $end) + public function checkBeginAndEndDate($projectID, $begin, $end, $execution = null) { $project = $this->loadModel('project')->getByID($projectID); if(empty($project)) return; if($begin < $project->begin) dao::$errors['begin'] = sprintf($this->lang->execution->errorCommonBegin, $project->begin); if($end > $project->end) dao::$errors['end'] = sprintf($this->lang->execution->errorCommonEnd, $project->end); + if(($project->model == 'waterfall' or $project->model == 'waterfallplus') and isset($execution) and $execution->parent != $projectID) + { + $this->app->loadLang('programplan'); + $parent = $this->getByID($execution->parent); + if($begin < $parent->begin) dao::$errors['begin'] = sprintf($this->lang->programplan->error->letterParent, $parent->begin); + if($end > $parent->end) dao::$errors['end'] = sprintf($this->lang->programplan->error->greaterParent, $parent->end); + } } /* @@ -1366,7 +1572,7 @@ class executionModel extends model * * @param int $projectID * @param string $type all|sprint|stage|kanban - * @param string $mode all|noclosed|stagefilter|withdelete|multiple|leaf or empty + * @param string $mode all|noclosed|stagefilter|withdelete|multiple|leaf|order_asc or empty * @access public * @return array */ @@ -1379,10 +1585,10 @@ class executionModel extends model if($projectID) { $executionModel = $this->dao->select('model')->from(TABLE_EXECUTION)->where('id')->eq($projectID)->andWhere('deleted')->eq(0)->fetch('model'); - $orderBy = $executionModel == 'waterfall' ? 'sortStatus_asc,begin_asc,id_asc' : 'id_desc'; + $orderBy = in_array($executionModel, array('waterfall', 'waterfallplus')) ? 'sortStatus_asc,begin_asc,id_asc' : 'id_desc'; /* Waterfall execution, when all phases are closed, in reverse order of date. */ - if($executionModel == 'waterfall') + if(in_array($executionModel, array('waterfall', 'waterfallplus'))) { $summary = $this->dao->select('count(id) as executions, sum(IF(INSTR("closed", status) < 1, 0, 1)) as closedExecutions')->from(TABLE_EXECUTION)->where('project')->eq($projectID)->andWhere('deleted')->eq('0')->fetch(); if($summary->executions == $summary->closedExecutions) $orderBy = 'sortStatus_asc,begin_desc,id_asc'; @@ -1401,20 +1607,19 @@ class executionModel extends model ->beginIF(strpos($mode, 'withdelete') === false)->andWhere('deleted')->eq(0)->fi() ->beginIF(!$this->app->user->admin and strpos($mode, 'all') === false)->andWhere('id')->in($this->app->user->view->sprints)->fi() ->orderBy($orderBy) - ->fetchAll(); + ->fetchAll('id'); /* If mode == leaf, only show leaf executions. */ - $allExecutions = $this->dao->select('id,name,parent')->from(TABLE_EXECUTION) + $allExecutions = $this->dao->select('id,name,parent,grade')->from(TABLE_EXECUTION) ->where('type')->notin(array('program', 'project')) ->andWhere('deleted')->eq('0') ->beginIf($projectID)->andWhere('project')->eq($projectID)->fi() ->fetchAll('id'); $parents = array(); - foreach($allExecutions as $exec) - { - $parents[$exec->parent] = true; - } + foreach($allExecutions as $exec) $parents[$exec->parent] = true; + + if(strpos($mode, 'order_asc') !== false) $executions = $this->resetExecutionSorts($executions); $pairs = array(); $noMultiples = array(); @@ -1422,7 +1627,7 @@ class executionModel extends model { if(strpos($mode, 'leaf') !== false and isset($parents[$execution->id])) continue; // Only show leaf. if(strpos($mode, 'noclosed') !== false and ($execution->status == 'done' or $execution->status == 'closed')) continue; - if(strpos($mode, 'stagefilter') !== false and isset($executionModel) and $executionModel == 'waterfall' and in_array($execution->attribute, array('request', 'design', 'review'))) continue; // Some stages of waterfall not need. + if(strpos($mode, 'stagefilter') !== false and isset($executionModel) and in_array($executionModel, array('waterfall', 'waterfallplus')) and in_array($execution->attribute, array('request', 'design', 'review'))) continue; // Some stages of waterfall and waterfallplus not need. if(empty($execution->multiple)) $noMultiples[$execution->id] = $execution->project; @@ -1493,10 +1698,11 @@ class executionModel extends model * @param int $productID * @param int $branch * @param object $pager + * @param bool $withChildren * @access public * @return array */ - public function getList($projectID = 0, $type = 'all', $status = 'all', $limit = 0, $productID = 0, $branch = 0, $pager = null) + public function getList($projectID = 0, $type = 'all', $status = 'all', $limit = 0, $productID = 0, $branch = 0, $pager = null, $withChildren = true) { if($status == 'involved') return $this->getInvolvedExecutionList($projectID, $status, $limit, $productID, $branch); @@ -1513,6 +1719,7 @@ class executionModel extends model ->beginIF($branch)->andWhere('t1.branch')->eq($branch)->fi() ->beginIF($status != 'all' and $status != 'undone')->andWhere('status')->in($status)->fi() ->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->sprints)->fi() + ->beginIF(!$withChildren)->andWhere('grade')->eq(1)->fi() ->orderBy('order_desc') ->page($pager) ->beginIF($limit)->limit($limit)->fi() @@ -1529,6 +1736,7 @@ class executionModel extends model ->beginIF($status == 'undone')->andWhere('status')->notIN('done,closed')->fi() ->beginIF($status != 'all' and $status != 'undone')->andWhere('status')->in($status)->fi() ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi() + ->beginIF(!$withChildren)->andWhere('grade')->eq(1)->fi() ->orderBy('order_desc') ->page($pager) ->beginIF($limit)->limit($limit)->fi() @@ -1672,7 +1880,7 @@ class executionModel extends model ->andWhere('t1.reviewStatus')->eq('doing') ->fi() ->orderBy($orderBy) - ->page($pager) + ->page($pager, 't1.id') ->fetchAll('id'); if(empty($productID) and !empty($executions)) $projectProductIdList = $this->dao->select('project, product')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($executions))->fetchPairs(); @@ -1741,10 +1949,15 @@ class executionModel extends model if($execution->parent) $parentList[$execution->parent] = $execution->parent; if($execution->projectName) $execution->name = $execution->projectName . ' / ' . $execution->name; } - elseif($param === 'hasParentName') + elseif(strpos($param, 'hasParentName') !== false) { $parentExecutions = $this->dao->select('id,name')->from(TABLE_EXECUTION)->where('id')->in(trim($execution->path, ','))->andWhere('type')->in('stage,kanban,sprint')->orderBy('grade')->fetchPairs(); $executions[$execution->id]->title = implode('/', $parentExecutions); + if(strpos($param, 'skipParent') !== false) + { + $children = $this->getChildExecutions($execution->id); + if(count($children) > 0) $parentList[$execution->id] = $execution->id; + } } elseif(isset($executions[$execution->parent])) { @@ -1759,7 +1972,11 @@ class executionModel extends model } } - foreach($childList as $childID) unset($executions[$childID]); + if(strpos($param, 'withchild') === false) + { + foreach($childList as $childID) unset($executions[$childID]); + } + foreach($parentList as $parentID) unset($executions[$parentID]); return array_values($executions); @@ -1780,9 +1997,7 @@ class executionModel extends model { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getExecutionPairs(); - $project = $this->loadModel('project')->getByID($projectID); - $orderBy = (isset($project->model) and $project->model == 'waterfall') ? 'begin_asc,id_asc' : 'begin_desc,id_desc'; - + $project = $this->loadModel('project')->getByID($projectID); $executions = $this->dao->select('*')->from(TABLE_EXECUTION) ->where('type')->in('stage,sprint,kanban') ->andWhere('deleted')->eq('0') @@ -1794,12 +2009,12 @@ class executionModel extends model ->beginIF($status == 'noclosed')->andWhere('status')->ne('closed')->fi() ->beginIF($devel === true)->andWhere('attribute')->in('dev,qa,release')->fi() ->beginIF($appendedID)->orWhere('id')->eq($appendedID)->fi() - ->orderBy($orderBy) + ->orderBy('order_asc') ->beginIF($limit)->limit($limit)->fi() ->fetchAll('id'); /* Add product name and parent stage name to stage name. */ - if(isset($project->model) and $project->model == 'waterfall') + if(isset($project->model) and in_array($project->model, array('waterfall', 'waterfallplus'))) { $executionProducts = array(); if($project->hasProduct and $project->division) @@ -1812,8 +2027,8 @@ class executionModel extends model ->fetchPairs(); } - $allExecutions = $this->dao->select('id,name,parent')->from(TABLE_EXECUTION) - ->where('type')->eq('stage') + $allExecutions = $this->dao->select('id,name,parent,grade')->from(TABLE_EXECUTION) + ->where('type')->in('stage,sprint,kanban') ->andWhere('deleted')->eq('0') ->beginIf($projectID)->andWhere('project')->eq($projectID)->fi() ->fetchAll('id'); @@ -1821,6 +2036,7 @@ class executionModel extends model $parents = array(); foreach($allExecutions as $id => $execution) $parents[$execution->parent] = $execution->parent; + $executions = $this->resetExecutionSorts($executions); foreach($executions as $id => $execution) { if(isset($parents[$execution->id])) @@ -1831,12 +2047,14 @@ class executionModel extends model $executionName = ''; $paths = array_slice(explode(',', trim($execution->path, ',')), 1); - foreach($paths as $path) $executionName .= '/' . $allExecutions[$path]->name; + foreach($paths as $path) + { + if(isset($allExecutions[$path])) $executionName .= '/' . $allExecutions[$path]->name; + } if($executionName) $execution->name = ltrim($executionName, '/'); if(isset($executionProducts[$id])) $execution->name = $executionProducts[$id] . '/' . $execution->name; } - } $projects = array(); @@ -2514,17 +2732,19 @@ class executionModel extends model * Get executions to import * * @param array $executionIds - * @param string $type sprint|stage + * @param string $type sprint|stage|kanban + * @param string $model * @access public * @return array */ - public function getToImport($executionIds, $type) + public function getToImport($executionIds, $type, $model = '') { return $this->dao->select('t1.id,concat_ws(" / ", t2.name, t1.name) as name')->from(TABLE_EXECUTION)->alias('t1') ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t2.id=t1.project') ->where('t1.id')->in($executionIds) ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi() - ->andWhere('t1.type')->eq($type) + ->beginIF(empty($model) or strpos(',waterfallplus,agileplus,', ",$model,") === false)->andWhere('t1.type')->eq($type)->fi() + ->beginIF(!empty($model) and $model == 'agileplus')->andWhere('t1.type')->in(array('sprint', 'kanban'))->fi() ->andWhere('t1.deleted')->eq(0) ->orderBy('t1.id desc') ->fetchPairs('id', 'name'); @@ -2609,6 +2829,7 @@ class executionModel extends model ->where('project')->in($brotherProjects) ->andWhere('multiple')->eq('1') ->andWhere('status')->ne('closed') + ->andWhere('deleted')->eq(0) ->fetchPairs('id'); $branches = str_replace(',', "','", $branches); @@ -2636,14 +2857,17 @@ class executionModel extends model $this->loadModel('task'); $taskStories = array(); + $parents = array(); $execution = $this->getByID($executionID); - $tasks = $this->dao->select('id,execution,assignedTo,story,consumed,status')->from(TABLE_TASK)->where('id')->in($this->post->tasks)->fetchAll('id'); + $tasks = $this->dao->select('id,execution,assignedTo,story,consumed,status,parent')->from(TABLE_TASK)->where('id')->in($this->post->tasks)->fetchAll('id'); foreach($tasks as $task) { /* Save the assignedToes and stories, should linked to execution. */ $assignedToes[$task->assignedTo] = $task->execution; $taskStories[$task->story] = $task->story; + if($task->parent < 0) $parents[$task->id] = $task->id; + $data = new stdclass(); $data->project = $execution->project; $data->execution = $executionID; @@ -2663,6 +2887,10 @@ class executionModel extends model $this->loadModel('action')->create('task', $task->id, 'moved', '', $task->execution); } + /* Get stories of children task. */ + $childrens = $this->dao->select('*')->from(TABLE_TASK)->where('parent')->in($parents)->fetchAll('id'); + foreach($childrens as $children) $taskStories[$children->story] = $children->story; + /* Remove empty story. */ unset($taskStories[0]); @@ -3451,7 +3679,13 @@ class executionModel extends model if($changedAccounts) { $this->loadModel('user')->updateUserView($projectID, $projectType, $changedAccounts); - $linkedProducts = $this->loadModel('product')->getProductPairsByProject($projectID); + $linkedProducts = $this->dao->select("t2.id")->from(TABLE_PROJECTPRODUCT)->alias('t1') + ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id') + ->where('t2.deleted')->eq(0) + ->andWhere('t1.project')->eq($projectID) + ->andWhere('t2.vision')->eq($this->config->vision) + ->fetchPairs(); + if(!empty($linkedProducts)) $this->user->updateUserView(array_keys($linkedProducts), 'product', $changedAccounts); } } @@ -4930,7 +5164,13 @@ class executionModel extends model } else { - $path = str_replace(",$execution->project", '', $execution->path); + if(strpos($execution->path, ",$execution->project,") !== false) + { + $path = explode(',', trim($execution->path, ',')); + $path = array_slice($path, array_search($execution->project, $path) + 1); + $path = implode(',', $path); + } + $trClass = 'table-nest-hide'; $trAttrs = "data-id={$execution->id} data-parent={$execution->parent} data-status={$execution->status}"; $trAttrs .= " data-nest-parent='$execution->parent' data-order='$execution->order' data-nest-path='$path'"; @@ -4979,7 +5219,8 @@ class executionModel extends model $class = !empty($execution->children) ? 'disabled' : ''; common::printIcon('task', 'create', "executionID={$execution->id}", '', 'list', '', '', $class, false, "data-app='execution'"); - if($execution->type == 'stage' or $this->app->tab == 'project') + $project = $this->loadModel('project')->getByID($execution->project); + if($execution->type == 'stage' or ($this->app->tab == 'project' and !empty($project->model) and $project->model == 'waterfallplus')) { $isCreateTask = $this->loadModel('programplan')->isCreateTask($execution->id); $disabled = ($isCreateTask and $execution->type == 'stage') ? '' : ' disabled'; @@ -5066,18 +5307,6 @@ class executionModel extends model return $productpairs; } - /** - * Get lifetime by id list. - * - * @param string $idList - * @access public - * @return array - */ - public function getLifetimeByIdList($idList = '') - { - return $this->dao->select('id,lifetime')->from(TABLE_EXECUTION)->where('id')->in($idList)->fetchPairs(); - } - /** * Set stage tree path. * @@ -5315,20 +5544,21 @@ class executionModel extends model /** * Generate col for dtable. * + * @param string $orderBy * @access public * @return void */ - public function generateCol() + public function generateCol($orderBy = '') { $this->loadModel('datatable'); - $setting = $this->datatable->getSetting('execution'); - + $setting = $this->datatable->getSetting('execution'); $fieldList = $this->config->execution->datatable->fieldList; foreach($fieldList as $field => $items) { - $title = zget($this->lang->execution, $items['title'], zget($this->lang, $items['title'], $items['title'])); + $fieldKey = in_array($field, array('name', 'code', 'type', 'PM', 'status')) ? 'exec' . ucfirst($field) : $field; + $title = $field == 'id' ? 'ID' : zget($this->lang->execution, $fieldKey, zget($this->lang, $field, $field)); $fieldList[$field]['title'] = $title; } @@ -5345,6 +5575,13 @@ class executionModel extends model $set->name = $value; $set->title = $fieldList[$id]['title']; + $sortType = ''; + if(strpos($orderBy, $id) !== false) + { + $sort = str_replace("{$id}_", '', $orderBy); + $sortType = $sort == 'asc' ? 'up' : 'down'; + } + if(isset($fieldList[$id]['checkbox'])) $set->checkbox = $fieldList[$id]['checkbox']; if(isset($fieldList[$id]['nestedToggle'])) $set->nestedToggle = $fieldList[$id]['nestedToggle']; if(isset($fieldList[$id]['fixed'])) $set->fixed = $fieldList[$id]['fixed']; @@ -5356,6 +5593,8 @@ class executionModel extends model if(isset($fieldList[$id]['maxWidth'])) $set->maxWidth = $fieldList[$id]['maxWidth']; if(isset($fieldList[$id]['pri'])) $set->pri = $fieldList[$id]['pri']; + if($sortType) $set->sortType = $sortType; + $setting[$key] = $set; } } @@ -5369,6 +5608,13 @@ class executionModel extends model continue; } + $sortType = ''; + if(strpos($orderBy, $set->id) !== false) + { + $sort = str_replace("{$set->id}_", '', $orderBy); + $sortType = $sort == 'asc' ? 'up' : 'down'; + } + $set->name = $set->id; $set->title = $fieldList[$set->id]['title']; @@ -5382,6 +5628,8 @@ class executionModel extends model if(isset($fieldList[$set->id]['maxWidth'])) $set->maxWidth = $fieldList[$set->id]['maxWidth']; if(isset($fieldList[$set->id]['pri'])) $set->pri = $fieldList[$set->id]['pri']; + if($sortType) $set->sortType = $sortType; + $set->width = str_replace('px', '', $set->width); unset($set->id); @@ -5410,7 +5658,7 @@ class executionModel extends model { $label = $execution->type == 'stage' ? 'label-warning' : 'label-info'; $link = $execution->type == 'kanban' ? helper::createLink('execution', 'kanban', "id=$execution->id") : helper::createLink('execution', 'task', "id=$execution->id"); - $execution->name = "{$this->lang->execution->typeList[$execution->type]} " . html::a($link, $execution->name); + $execution->name = "{$this->lang->execution->typeList[$execution->type]} " . (empty($execution->children) ? html::a($link, $execution->name) : $execution->name); $execution->project = $execution->projectName; $execution->parent = ($execution->parent and $execution->grade > 1) ? $execution->parent : ''; $execution->asParent = !empty($execution->children); @@ -5473,12 +5721,13 @@ class executionModel extends model $_POST['status'] = 'wait'; $_POST['days'] = $project->days; $_POST['team'] = $project->team; + $_POST['desc'] = $project->desc; $_POST['teamMembers'] = array($this->app->user->account); $_POST['acl'] = 'open'; - $_POST['PO'] = ''; - $_POST['QD'] = ''; - $_POST['PM'] = ''; - $_POST['RD'] = ''; + $_POST['PO'] = $this->app->user->account; + $_POST['QD'] = $this->app->user->account; + $_POST['PM'] = $this->app->user->account; + $_POST['RD'] = $this->app->user->account; $_POST['multiple'] = '0'; $_POST['hasProduct'] = $project->hasProduct; if($project->code) $_POST['code'] = $project->code; @@ -5533,7 +5782,7 @@ class executionModel extends model $_POST['status'] = $project->status; $_POST['acl'] = 'open'; - if(!isset($this->config->setCode) or $this->config->setCode == 1) $_POST['code'] = $project->code; + if(isset($this->config->setCode) and $this->config->setCode == 1) $_POST['code'] = $project->code; $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($projectID)->fetchAll(); foreach($projectProducts as $projectProduct) @@ -5613,4 +5862,90 @@ class executionModel extends model return $executionIdList; } + + /** + * Build execution object by status. + * + * @param string $status + * @access public + * @return object + */ + public function buildExecutionByStatus($status) + { + $execution = new stdclass(); + $execution->status = $status; + $execution->lastEditedBy = $this->app->user->account; + $execution->lastEditedDate = helper::now(); + + if($status == 'wait') + { + $execution->realBegan = ''; + $execution->realEnd = ''; + $execution->closedBy = ''; + $execution->closedDate = ''; + $execution->canceledBy = ''; + $execution->canceledDate = ''; + $execution->suspendedDate = ''; + } + + if($status == 'doing') + { + $execution->realBegan = helper::today(); + $execution->realEnd = ''; + $execution->closedBy = ''; + $execution->closedDate = ''; + $execution->canceledBy = ''; + $execution->canceledDate = ''; + $execution->suspendedDate = ''; + } + + if($status == 'suspended') + { + $execution->suspendedDate = helper::now(); + $execution->closedBy = ''; + $execution->closedDate = ''; + } + + if($status == 'closed') + { + $execution->closedBy = $this->app->user->account; + $execution->closedDate = helper::now(); + } + + return $execution; + } + + /** + * Reset execution orders. + * + * @param array $executions + * @param array $parentExecutions + * @access public + * @return array + */ + public function resetExecutionSorts($executions, $parentExecutions = array()) + { + if(empty($executions)) return array(); + if(empty($parentExecutions)) + { + $execution = current($executions); + $parentExecutions = $this->dao->select('*')->from(TABLE_EXECUTION) + ->where('deleted')->eq(0) + ->andWhere('type')->in('kanban,sprint,stage') + ->andWhere('grade')->eq(1) + ->andWhere('project')->eq($execution->project) + ->orderBy('order_asc') + ->fetchAll('id'); + } + + $sortedExecutions = array(); + foreach($parentExecutions as $executionID => $execution) + { + if(!isset($sortedExecutions[$executionID]) and isset($executions[$executionID])) $sortedExecutions[$executionID] = $executions[$executionID]; + + $children = $this->getChildExecutions($executionID, 'order_asc'); + if(!empty($children)) $sortedExecutions += $this->resetExecutionSorts($executions, $children); + } + return $sortedExecutions; + } } diff --git a/module/execution/view/ajaxgetdropmenu.html.php b/module/execution/view/ajaxgetdropmenu.html.php index e4abda23d4..82685f94e9 100644 --- a/module/execution/view/ajaxgetdropmenu.html.php +++ b/module/execution/view/ajaxgetdropmenu.html.php @@ -206,22 +206,22 @@ $(function() } }); - $('#swapper #dropMenu').on('onSearchComplete', function(event, value) + $('#swapper #dropMenu').on('onSearchComplete', function() { - if($('.list-group.executions').height() == 0) - { - $('#closed').attr("hidden", true); - $('#gray-line').attr("hidden", true); - } - var listItem = $(this).find('.has-list'); - listItem.each(function () + listItem.each(function() { $(this).css('display','') var $hidden = $(this).find('.hidden'); var $item = $(this).find('.search-list-item'); if($hidden.length == $item.length) $(this).css('display','none'); }); + + if($('.list-group.executions').height() == 0) + { + $('#closed').attr("hidden", true); + $('#gray-line').attr("hidden", true); + } }); }) diff --git a/module/execution/view/all.html.php b/module/execution/view/all.html.php index 23d70c16a9..f5906f02d3 100644 --- a/module/execution/view/all.html.php +++ b/module/execution/view/all.html.php @@ -15,7 +15,7 @@ js::import($jsRoot . 'dtable/min.js'); css::import($jsRoot . 'dtable/min.css'); -$cols = $this->execution->generateCol(); +$cols = $this->execution->generateCol($orderBy); $executions = $this->execution->generateRow($executionStats, $users, $productID); $sortLink = $this->createLink('execution', 'all', "status=$status&orderBy={orderBy}&productID=$productID¶m=$param&recTotal=$pager->recTotal&recPerPage=$pager->recPerPage&pageID=$pager->pageID"); @@ -32,6 +32,7 @@ js::set('isCNLang', !$this->loadModel('common')->checkNotCN()); ?> + @@ -102,17 +117,43 @@ js::set('isCNLang', !$this->loadModel('common')->checkNotCN()); diff --git a/module/execution/view/batchedit.html.php b/module/execution/view/batchedit.html.php index 477eeaa4e8..25a0929662 100755 --- a/module/execution/view/batchedit.html.php +++ b/module/execution/view/batchedit.html.php @@ -41,7 +41,6 @@ $PM = $from == 'execution' ? 'execPM' : 'PM'; $type = $from == 'execution' ? 'execType' : 'type'; $desc = $from == 'execution' ? 'execDesc' : 'desc'; - $status = $from == 'execution' ? 'execStatus' : 'status'; ?> '>
@@ -56,15 +55,20 @@
- setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> - - + @@ -93,7 +97,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -101,13 +105,12 @@ - diff --git a/module/execution/view/cfd.html.php b/module/execution/view/cfd.html.php index 527631a655..af900fad3d 100644 --- a/module/execution/view/cfd.html.php +++ b/module/execution/view/cfd.html.php @@ -33,11 +33,11 @@ $weekend = $withWeekend == 'true' ? 'noweekend' : 'withweekend'; echo html::a('#', $lang->execution->$weekend, '', "class='btn btn-link' id='weekend'"); ?> - lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review'))):?> + execution->cfdTypeList['story']);?> + execution->cfdTypeList['bug']);?>
execution->cfdTypeList, $type, "class='form-control chosen'");?>
-
diff --git a/module/execution/view/create.html.php b/module/execution/view/create.html.php index 472a35d630..4db3b363ef 100644 --- a/module/execution/view/create.html.php +++ b/module/execution/view/create.html.php @@ -31,7 +31,6 @@ -model) and ($project->model == 'waterfall' or $project->model == 'waterfallplus')) ? true : false;?> execution->weekend);?> execution->placeholder);?> @@ -47,7 +46,8 @@ execution->cancelCopy);?> execution->copyNoExecution);?> model) ? $project->model : '');?> - +project->manageProducts);?> +project->manageProductPlan);?>
@@ -59,7 +59,8 @@
design->type;?>design->typeList, $design->type);?>type);?>
design->product;?> execution->method;?> execution->$name;?>execution->$code;?> '>execution->$PM;?> '>execution->PO;?> '>execution->QD;?> '>execution->RD;?>'>execution->$type;?>'>execution->$status;?>'> + execution->$type;?> + app->tab == 'execution' or (isset($project) and ($project->model == 'waterfall' or $project->model == 'waterfallplus'))):?> + app->tab == 'execution' ? $lang->execution->waterfallTip . lcfirst($lang->execution->typeTip) : $lang->execution->typeTip;?> + + + execution->begin;?> execution->end;?> '>execution->$desc;?>execution->typeList, $executions[$executionID]->type);?> name, "class='form-control' id='names{$executionID}'");?>code, "id='codes{$executionID}' class='form-control'");?> ' style='overflow:visible'>PM, "class='form-control picker-select'");?>' style='overflow:visible'>QD, "class='form-control picker-select'");?> ' style='overflow:visible'>RD, "class='form-control picker-select'");?> '> - type == 'stage'):?> + project]) and ($projects[$execution->project]->model == 'waterfall' or $projects[$execution->project]->model == 'waterfallplus')):?> stage->typeList, $executions[$executionID]->attribute, 'class=form-control');?> execution->lifeTimeList, $executions[$executionID]->lifetime, 'class=form-control');?> '>execution->statusList, $executions[$executionID]->status, 'class=form-control');?> begin, "id='begins{$executionID}' class='form-control form-date' onchange='computeWorkDays(this.id)'");?> end, "id='ends{$executionID}' class='form-control form-date' onchange='computeWorkDays(this.id)'");?> '>desc, "rows='1' class='form-control autosize'");?>
- + getClientLang(), 'zh-') === false and !empty($project->model) and $project->model == 'agileplus') ? 'w-150px' : 'w-120px';?> + @@ -68,7 +69,10 @@ - + + @@ -76,7 +80,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -120,7 +124,7 @@ - + setPercent) and $config->setPercent == 1):?> + hasProduct) and strpos($project->model, 'waterfall') === false):?> + + + + - + model == 'kanban'):?> id);?> model == 'agileplus'):?> - + tab == 'project' and $project->model == 'waterfallplus'):?> - + - + - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -83,21 +87,24 @@ - type != 'kanban'):?> + type != 'kanban' or $project->model == 'waterfall' or $project->model == 'waterfallplus'):?> + @@ -137,7 +144,7 @@ - type == 'stage'):?> + type == 'stage' and isset($config->setPercent) and $config->setPercent == 1):?> - + + hasProduct)):?> + + + + - type == 'stage' and !in_array($execution->attribute, array('request', 'design', 'review'))) or $execution->type != 'stage'): ?> + hasProduct)):?> + + - - + - + + + - + diff --git a/module/execution/view/grouptask.html.php b/module/execution/view/grouptask.html.php index 4dccd0971f..2e457a02d7 100644 --- a/module/execution/view/grouptask.html.php +++ b/module/execution/view/grouptask.html.php @@ -63,10 +63,13 @@ $link = common::hasPriv('execution', 'importTask') ? $this->createLink('execution', 'importTask', "execution=$execution->id") : '#'; echo "
  • " . html::a($link, $lang->execution->importTask, '', $misc) . "
  • "; - $class = common::hasPriv('execution', 'importBug') ? '' : "class=disabled"; - $misc = common::hasPriv('execution', 'importBug') ? "class='import'" : "class=disabled"; - $link = common::hasPriv('execution', 'importBug') ? $this->createLink('execution', 'importBug', "execution=$execution->id") : '#'; - echo "
  • " . html::a($link, $lang->execution->importBug, '', $misc) . "
  • "; + if($features['qa']) + { + $class = common::hasPriv('execution', 'importBug') ? '' : "class=disabled"; + $misc = common::hasPriv('execution', 'importBug') ? "class='import'" : "class=disabled"; + $link = common::hasPriv('execution', 'importBug') ? $this->createLink('execution', 'importBug', "execution=$execution->id") : '#'; + echo "
  • " . html::a($link, $lang->execution->importBug, '', $misc) . "
  • "; + } ?> diff --git a/module/execution/view/importtask.html.php b/module/execution/view/importtask.html.php index 30b3b5adf5..5144168cb9 100644 --- a/module/execution/view/importtask.html.php +++ b/module/execution/view/importtask.html.php @@ -11,6 +11,9 @@ */ ?> + + + + lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review'))):?> + @@ -65,6 +70,7 @@ + lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review'))):?> + diff --git a/module/execution/view/kanban.html.php b/module/execution/view/kanban.html.php index f89f2e2f00..5b88da0f03 100644 --- a/module/execution/view/kanban.html.php +++ b/module/execution/view/kanban.html.php @@ -61,40 +61,27 @@ js::set('rdSearchValue', ''); js::set('defaultMinColWidth', $this->config->minColWidth); js::set('defaultMaxColWidth', $this->config->maxColWidth); -$canSortRegion = (commonModel::hasPriv('kanban', 'sortRegion') and count($regions) > 1); -$canCreateRegion = (common::hasPriv('kanban', 'createRegion') and $groupBy == 'default'); +$canSortRegion = commonModel::hasPriv('kanban', 'sortRegion') && count($regions) > 1; +$canCreateRegion = common::hasPriv('kanban', 'createRegion') && $groupBy == 'default'; $canEditRegion = commonModel::hasPriv('kanban', 'editRegion'); $canDeleteRegion = commonModel::hasPriv('kanban', 'deleteRegion'); $canCreateLane = commonModel::hasPriv('kanban', 'createLane'); $canCreateTask = common::hasPriv('task', 'create'); $canBatchCreateTask = common::hasPriv('task', 'batchCreate'); -$canImportTask = (common::hasPriv('execution', 'importTask') and $execution->multiple); +$canImportTask = common::hasPriv('execution', 'importTask') && $execution->multiple; -if($execution->lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review'))) -{ - $canCreateBug = ($productID and common::hasPriv('bug', 'create')); - $canBatchCreateBug = ($productID and common::hasPriv('bug', 'batchCreate') and $execution->multiple); - $canImportBug = ($productID and common::hasPriv('execution', 'importBug')); - $canCreateStory = ($productID and common::hasPriv('story', 'create')); - $canBatchCreateStory = ($productID and common::hasPriv('story', 'batchCreate')); - $canLinkStory = ($productID and common::hasPriv('execution', 'linkStory') and !empty($execution->hasProduct)); - $canLinkStoryByPlan = ($productID and common::hasPriv('execution', 'importplanstories') and !empty($project->hasProduct)); - $hasStoryButton = ($canCreateStory or $canBatchCreateStory or $canLinkStory or $canLinkStoryByPlan); - $hasBugButton = ($canCreateBug or $canBatchCreateBug); -} -else -{ - $canCreateBug = false; - $canBatchCreateBug = false; - $canImportBug = false; - $canCreateStory = false; - $canBatchCreateStory = false; - $canLinkStory = false; - $canLinkStoryByPlan = false; - $hasStoryButton = false; - $hasBugButton = false; -} -$hasTaskButton = ($canCreateTask or $canBatchCreateTask or $canImportBug); +$canCreateBug = $features['qa'] && $productID && common::hasPriv('bug', 'create'); +$canBatchCreateBug = $features['qa'] && $productID && common::hasPriv('bug', 'batchCreate') && $execution->multiple; +$canImportBug = $features['qa'] && $productID && common::hasPriv('execution', 'importBug'); +$hasBugButton = $features['qa'] && ($canCreateBug || $canBatchCreateBug); + +$canCreateStory = $features['story'] && $productID && common::hasPriv('story', 'create'); +$canBatchCreateStory = $features['story'] && $productID && common::hasPriv('story', 'batchCreate'); +$canLinkStory = $features['story'] && $productID && common::hasPriv('execution', 'linkStory') && !empty($execution->hasProduct); +$canLinkStoryByPlan = $features['story'] && $productID && common::hasPriv('execution', 'importplanstories') && !empty($project->hasProduct); +$hasStoryButton = $features['story'] && ($canCreateStory || $canBatchCreateStory || $canLinkStory || $canLinkStoryByPlan); + +$hasTaskButton = $canCreateTask || $canBatchCreateTask || $canImportBug; js::set('priv', array( @@ -134,7 +121,7 @@ js::set('priv', 'canDeleteStory' => common::hasPriv('story', 'delete'), 'canChangeStory' => common::hasPriv('story', 'change'), 'canCloseStory' => common::hasPriv('story', 'close'), - 'canUnlinkStory' => (common::hasPriv('execution', 'unlinkStory') and !empty($execution->hasProduct)), + 'canUnlinkStory' => (common::hasPriv('execution', 'unlinkStory') && !empty($execution->hasProduct)), 'canViewStory' => common::hasPriv('execution', 'storyView'), ) ); @@ -142,13 +129,17 @@ js::set('priv', -lifetime == 'ops' or in_array($execution->attribute, array('request', 'review'))):?> + - + @@ -420,14 +420,13 @@
    execution->projectName;?>execution->projectName;?>
    execution->method;?> execution->typeList, $type, "class='form-control chosen' required onchange='setType(this.value)'");?> + +
    execution->execCode : $lang->execution->code;?>
    execution->typeDesc;?>
    stage->percent;?> @@ -140,38 +144,40 @@ printExtendFields('', 'table', 'columns=3');?> hasProduct)) $hidden = ''?> - + hasProduct) and !empty($project->hasProduct) and $products):?>
    project->manageProductPlan;?>
    -
    +
    type != 'normal' and isset($branchGroups[$product->id]);?>
    '> product->common;?> - division) ? "disabled='disabled'" : '';?> + division) ? "disabled='disabled'" : '';?> id, "class='form-control chosen' $disabled onchange='loadBranches(this)' data-last='" . $product->id . "' data-type='" . $product->type . "'");?> - division) echo html::hidden("products[$i]", $product->id);?> + division) echo html::hidden("products[$i]", $product->id);?>
    '>
    project->branch;?> branches) ? join(',', $product->branches) : '';?> - id]) ? $branchGroups[$product->id] : array(), $branchIdList, "class='form-control chosen' multiple onchange=\"loadPlans('#products{$i}', this)\"");?> + id]) ? $branchGroups[$product->id] : array(), $branchIdList, "class='form-control chosen' multiple onchange=\"loadPlans('#products{$i}', this)\"");?> + id]) ? $branchGroups[$product->id] : array(), !empty($linkedBranches[$product->id]) ? $linkedBranches[$product->id] : array(), "class='form-control chosen' multiple onchange=\"loadPlans('#products{$i}', this)\"");?>
    -
    +
    > product->plan;?> - id][]", isset($productPlans[$product->id]) ? $productPlans[$product->id] : array(), isset($product->plans) ? $product->plans : '', "class='form-control chosen' multiple");?> - division)):?> + id)) echo html::select("plans[$product->id][]", isset($productPlans[$product->id]) ? $productPlans[$product->id] : array(), isset($product->plans) ? $product->plans : '', "class='form-control chosen' multiple");?> + id) echo html::select("plans[$product->id][]", !empty($productPlan) ? $productPlan : array(), isset($productPlan[$plan->id]) ? $plan->id : '', "class='form-control chosen' multiple");?> + division)):?>
    > @@ -184,12 +190,22 @@
    execution->linkPlan;?> + + + + +
    project->manageProductPlan;?>
    -
    +
    @@ -205,11 +221,11 @@
    -
    +
    product->plan;?> - division)):?> + division)):?>
    @@ -301,15 +317,14 @@
    execution->projectName;?>execution->projectName;?> project, "class='form-control chosen' onchange='changeProject(this.value)' required");?>
    execution->method;?>execution->method;?> execution->typeList, $execution->type);?>
    programplan->parent;?>programplan->parent;?> parent, "class='form-control chosen '");?>
    execution->name;?>execution->name;?> name, "class='form-control' required");?>
    execution->code;?> code, "class='form-control' required");?>
    execution->type;?> type != 'stage') - { - echo html::select('lifetime', $lang->execution->lifeTimeList, $execution->lifetime, "class='form-control' onchange='showLifeTimeTips()'"); - } - else + if($project->model == 'waterfall' or $project->model == 'waterfallplus') { echo $enableOptionalAttr ? html::select('attribute', $lang->stage->typeList, $execution->attribute, "class='form-control chosen'") : zget($lang->stage->typeList, $execution->attribute); } + elseif($execution->type != 'kanban') + { + echo html::select('lifetime', $lang->execution->lifeTimeList, $execution->lifetime, "class='form-control' onchange='showLifeTimeTips()'"); + } ?> + +
    stage->percent;?> @@ -151,14 +158,14 @@ model != 'waterfall' and $project->model != 'waterfallplus'): ?> hasProduct)) $hidden = ''?> - + hasProduct) and $linkedProducts):?>
    project->manageProductPlan;?>project->manageProductPlan;?>
    -
    +
    type != 'normal' and isset($branchGroups[$product->id]);?> @@ -178,7 +185,7 @@
    -
    +
    > product->plan;?> id][]", isset($productPlans[$product->id]) ? $productPlans[$product->id] : array(), $product->plans, "class='form-control chosen' multiple");?> @@ -195,12 +202,22 @@
    execution->linkPlan;?> + + plans : '', "class='form-control chosen' multiple");?> + + +
    project->manageProductPlan;?>
    -
    +
    @@ -216,7 +233,7 @@
    -
    +
    product->plan;?> @@ -230,30 +247,50 @@
    execution->manageProducts;?> -
    - - $product):?> - branches as $branchID):?> - -
    - " . $product->name . $branchName;?> +
    project->manageProductPlan;?> +
    +
    +
    +
    + type != 'normal' and isset($branchGroups[$product->id]);?> +
    '> + product->common;?> + model == 'waterfall' or $project->model == 'waterfallplus') ? "disabled='disabled'" : '';?> + id, "class='form-control chosen' $disabled onchange='loadBranches(this)' data-last='" . $product->id . "' data-type='" . $product->type . "'");?> + type == 'stage' and !$project->division) echo html::hidden("products[$i]", $product->id);?> +
    +
    +
    '> +
    + project->branch;?> + branches) ? join(',', $product->branches) : '';?> + id]) ? $branchGroups[$product->id] : array(), $branchIdList, "class='form-control chosen' multiple onchange=\"loadPlans('#products{$i}', this)\"");?> +
    +
    +
    +
    +
    +
    > + product->plan;?> + id][]", isset($productPlans[$product->id]) ? $productPlans[$product->id] : array(), isset($product->plans) ? $product->plans : '', "class='form-control chosen' multiple");?> +
    - - -
    execution->team;?> task->leftAB;?> task->deadlineAB;?> statusAB;?>task->story;?>
    left . ' ' . $lang->execution->workHourUnit;?> deadline, 0, 4) > 0) echo '' . $task->deadline . '';?> processStatus('task', $task);?> storyID) @@ -80,6 +86,7 @@ } ?>
    execution->totalEstimate;?> totalEstimate . $lang->execution->workHour;?> execution->totalDays;?>days;?>days . $lang->execution->day;?>
    execution->totalConsumed;?>
    - lifetime == 'ops' or in_array($execution->attribute, array('request', 'review'))):?> - - - + + + diff --git a/module/file/view/export.html.php b/module/file/view/export.html.php index 124be88913..4c8bb3b24e 100644 --- a/module/file/view/export.html.php +++ b/module/file/view/export.html.php @@ -279,7 +279,7 @@ if($isCustomExport) - + diff --git a/module/group/control.php b/module/group/control.php index 525866f45c..7042afe005 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -236,7 +236,7 @@ class group extends control } $this->lang->custom->common = $this->lang->group->config; - if($this->config->edition == 'max' and $this->config->vision == 'rnd' and (!$menu or $menu == 'admin')) $this->lang->baseline->common = $this->lang->group->docTemplate; + if($this->config->edition == 'max' and $this->config->vision == 'rnd' and isset($this->lang->baseline)) $this->lang->baseline->common = $this->lang->group->docTemplate; $this->view->group = $group; $this->view->changelogs = ',' . join(',', $changelog) . ','; @@ -254,9 +254,9 @@ class group extends control foreach($this->lang->resource as $module => $moduleActions) { $modules[$module] = $this->lang->$module->common; - foreach($moduleActions as $action) + foreach($moduleActions as $key => $action) { - $actions[$module][$action] = $this->lang->$module->$action; + $actions[$module][$key] = $this->lang->$module->$action; } } $this->view->groups = $this->group->getPairs(); diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 6d3ff6178f..58b0e2ec31 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -240,6 +240,7 @@ $lang->project->methodOrder[190] = 'manageRepo'; $lang->resource->projectbuild = new stdclass(); $lang->resource->projectbuild->browse = 'browse'; +$lang->resource->projectbuild->create = 'create'; $lang->resource->projectbuild->edit = 'edit'; $lang->resource->projectbuild->view = 'view'; $lang->resource->projectbuild->delete = 'delete'; @@ -251,6 +252,7 @@ $lang->resource->projectbuild->unlinkBug = 'unlinkBug'; $lang->resource->projectbuild->batchUnlinkBug = 'batchUnlinkBug'; $lang->projectbuild->methodOrder[5] = 'browse'; +$lang->projectbuild->methodOrder[10] = 'create'; $lang->projectbuild->methodOrder[15] = 'edit'; $lang->projectbuild->methodOrder[20] = 'view'; $lang->projectbuild->methodOrder[25] = 'delete'; @@ -399,6 +401,7 @@ $lang->resource->stage->batchCreate = 'batchCreate'; $lang->resource->stage->edit = 'edit'; $lang->resource->stage->setType = 'setType'; $lang->resource->stage->delete = 'delete'; +$lang->resource->stage->plusBrowse = 'plusBrowse'; $lang->stage->methodOrder[5] = 'browse'; $lang->stage->methodOrder[10] = 'create'; @@ -406,6 +409,7 @@ $lang->stage->methodOrder[15] = 'batchCreate'; $lang->stage->methodOrder[20] = 'edit'; $lang->stage->methodOrder[25] = 'setType'; $lang->stage->methodOrder[30] = 'delete'; +$lang->stage->methodOrder[35] = 'plusBrowse'; /* Program. */ $lang->resource->program = new stdclass(); @@ -802,6 +806,7 @@ $lang->resource->execution->browse = 'browse'; $lang->resource->execution->create = 'createExec'; $lang->resource->execution->edit = 'editAction'; $lang->resource->execution->batchedit = 'batchEditAction'; +$lang->resource->execution->batchchangestatus = 'batchChangeStatus'; $lang->resource->execution->start = 'startAction'; $lang->resource->execution->activate = 'activateAction'; $lang->resource->execution->putoff = 'delayAction'; @@ -860,6 +865,7 @@ $lang->execution->methodOrder[10] = 'browse'; $lang->execution->methodOrder[15] = 'create'; $lang->execution->methodOrder[20] = 'edit'; $lang->execution->methodOrder[25] = 'batchedit'; +$lang->execution->methodOrder[27] = 'batchchangestatus'; $lang->execution->methodOrder[30] = 'start'; $lang->execution->methodOrder[35] = 'activate'; $lang->execution->methodOrder[40] = 'putoff'; @@ -1438,6 +1444,8 @@ $lang->resource->custom->setDefaultConcept = 'setDefaultConcept'; $lang->resource->custom->deleteStoryConcept = 'deleteStoryConcept'; $lang->resource->custom->kanban = 'kanban'; $lang->resource->custom->code = 'code'; +$lang->resource->custom->hours = 'hours'; +$lang->resource->custom->percent = 'percent'; $lang->custom->methodOrder[5] = 'index'; $lang->custom->methodOrder[10] = 'set'; @@ -1455,6 +1463,8 @@ $lang->custom->methodOrder[65] = 'setDefaultConcept'; $lang->custom->methodOrder[70] = 'deleteStoryConcept'; $lang->custom->methodOrder[75] = 'kanban'; $lang->custom->methodOrder[80] = 'code'; +$lang->custom->methodOrder[85] = 'hours'; +$lang->custom->methodOrder[90] = 'percent'; $lang->resource->datatable = new stdclass(); $lang->resource->datatable->setGlobal = 'setGlobal'; @@ -1759,7 +1769,6 @@ $lang->screen->methodOrder[5] = 'view'; /* Report. */ $lang->resource->report = new stdclass(); $lang->resource->report->index = 'index'; -$lang->resource->report->preview = 'preview'; $lang->resource->report->projectDeviation = 'projectDeviation'; $lang->resource->report->productSummary = 'productSummary'; $lang->resource->report->bugCreate = 'bugCreate'; @@ -1769,14 +1778,13 @@ $lang->resource->report->annualData = 'annual'; $lang->resource->report->allAnnualData = 'viewEveryoneAnnual'; $lang->report->methodOrder[0] = 'index'; -$lang->report->methodOrder[5] = 'preview'; -$lang->report->methodOrder[10] = 'projectDeviation'; -$lang->report->methodOrder[15] = 'productSummary'; -$lang->report->methodOrder[20] = 'bugCreate'; -$lang->report->methodOrder[25] = 'bugAssign'; -$lang->report->methodOrder[30] = 'workload'; -$lang->report->methodOrder[35] = 'annual'; -$lang->report->methodOrder[40] = 'allAnnualData'; +$lang->report->methodOrder[5] = 'projectDeviation'; +$lang->report->methodOrder[10] = 'productSummary'; +$lang->report->methodOrder[15] = 'bugCreate'; +$lang->report->methodOrder[20] = 'bugAssign'; +$lang->report->methodOrder[25] = 'workload'; +$lang->report->methodOrder[30] = 'annual'; +$lang->report->methodOrder[35] = 'allAnnualData'; /* Search. */ $lang->resource->search = new stdclass(); @@ -2015,15 +2023,15 @@ if(!$inUpgrade) unset($lang->resource->program); unset($lang->resource->project->programTitle); } - if(!helper::hasFeature('waterfall')) + if(!helper::hasFeature('waterfall') and !helper::hasFeature('waterfallplus')) { unset($lang->resource->design); unset($lang->resource->programplan); unset($lang->resource->stage); } - if(!helper::hasFeature('product_track')) unset($lang->resource->product->track); - if(!helper::hasFeature('product_roadmap')) unset($lang->resource->product->roadmap); - if(!helper::hasFeature('waterfall_track')) unset($lang->resource->projectstory->track); + if(!helper::hasFeature('product_track')) unset($lang->resource->product->track); + if(!helper::hasFeature('product_roadmap')) unset($lang->resource->product->roadmap); + if(!helper::hasFeature('waterfall_track') and !helper::hasFeature('waterfallplus_track')) unset($lang->resource->projectstory->track); if(!helper::hasFeature('devops')) { unset($lang->resource->repo); diff --git a/module/holiday/css/browse.css b/module/holiday/css/browse.css index 0a8cf7038e..9ee7e73529 100644 --- a/module/holiday/css/browse.css +++ b/module/holiday/css/browse.css @@ -7,3 +7,5 @@ .table-import {padding: 6px 5px 5px 5px; } .shadow-sm {box-shadow: 0 1px 1px rgb(0 0 0 / 5%), 0 2px 6px 0 rgb(0 0 0 / 25%)} .flex-center {display: flex; align-items: center; justify-content: center;} +.c-desc {width: 280px;} +p.c-desc {white-space: nowrap; margin-bottom: 0; text-overflow: clip; overflow: hidden;} diff --git a/module/holiday/css/index.html b/module/holiday/css/index.html deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/module/holiday/lang/index.html b/module/holiday/lang/index.html deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/module/holiday/view/browse.html.php b/module/holiday/view/browse.html.php index 0f81948867..538d7fd72f 100644 --- a/module/holiday/view/browse.html.php +++ b/module/holiday/view/browse.html.php @@ -15,8 +15,10 @@
    task->common;?>taskCount;?> story->common;?> storyCount;?> task->common;?> taskCount;?> bug->common;?> bugCount;?>
    file->extension;?>exportFileTypeList, '', 'onchange=switchEncode(this.value) class="form-control chosen"');?>exportFileTypeList, '', 'onchange=switchEncode(this.value) class="form-control chosen" data-drop_direction="down"');?>
    file->encoding;?>
    - + > - + @@ -49,7 +51,7 @@ - + - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -106,7 +112,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -140,9 +146,9 @@ setMilestone) ? '' : "disabled='disabled'"?> id);?> - + - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -178,7 +184,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -225,7 +231,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> diff --git a/module/programplan/view/edit.html.php b/module/programplan/view/edit.html.php index ad7e3c569e..83e047eeda 100644 --- a/module/programplan/view/edit.html.php +++ b/module/programplan/view/edit.html.php @@ -36,7 +36,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -46,6 +46,7 @@ + setPercent) and $config->setPercent == 1):?> + + setMilestone):?> diff --git a/module/project/config.php b/module/project/config.php index 6e526e769b..bb8ff5e92d 100644 --- a/module/project/config.php +++ b/module/project/config.php @@ -136,7 +136,7 @@ $config->project->datatable->fieldList['actions']['width'] = '165'; $config->project->datatable->fieldList['actions']['required'] = 'yes'; $config->project->datatable->fieldList['actions']['pri'] = '1'; -if(isset($config->setCode) and $config->setCode == 0) unset($config->project->datatable->fieldList['code']); +if(!isset($config->setCode) or $config->setCode == 0) unset($config->project->datatable->fieldList['code']); $config->project->checkList = new stdclass(); $config->project->checkList->scrum = array('bug', 'execution', 'build', 'doc', 'release', 'testtask', 'case'); diff --git a/module/project/control.php b/module/project/control.php index 089447b42f..260801420f 100755 --- a/module/project/control.php +++ b/module/project/control.php @@ -68,7 +68,7 @@ class project extends control $fields[$fieldName] = zget($projectLang, $fieldName); unset($fields[$key]); } - if(isset($this->config->setCode) and empty($this->config->setCode)) unset($fields['code']); + if(!isset($this->config->setCode) or empty($this->config->setCode)) unset($fields['code']); if(isset($fields['hasProduct'])) $fields['hasProduct'] = $projectLang->type; @@ -84,7 +84,6 @@ class project extends control $project->PM = zget($users, $project->PM); $project->status = $this->processStatus('project', $project); $project->model = zget($projectLang->modelList, $project->model); - $project->budget = $project->budget . zget($projectLang->unitList, $project->budgetUnit); $project->budget = $project->budget != 0 ? $project->budget . zget($projectLang->unitList, $project->budgetUnit) : $this->lang->project->future; $project->parent = $project->parentName; $project->hasProduct = zget($projectLang->projectTypeList, $project->hasProduct); @@ -167,10 +166,16 @@ class project extends control public function ajaxGetCopyProjects() { $data = fixer::input('post')->get(); + + $model = $data->model; + if($data->model == 'agileplus') $model = array('scrum', 'agileplus'); + if($data->model == 'waterfallplus') $model = array('waterfall', 'waterfallplus'); + $projectPairs = $this->dao->select('id, name')->from(TABLE_PROJECT) ->where('type')->eq('project') ->andWhere('deleted')->eq(0) ->andWhere('vision')->eq($this->config->vision) + ->andWhere('model')->in($model) ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi() ->beginIF(trim($data->name))->andWhere('name')->like("%$data->name%")->fi() ->fetchPairs(); @@ -545,14 +550,14 @@ class project extends control } } + $extra = str_replace(array(',', ' '), array('&', ''), $extra); + parse_str($extra, $output); + if($this->app->tab == 'program' and $programID) $this->loadModel('program')->setMenu($programID); if($this->app->tab == 'product' and !empty($output['productID'])) $this->loadModel('product')->setMenu($output['productID']); if($this->app->tab == 'doc') unset($this->lang->doc->menu->project['subMenu']); $this->session->set('projectModel', $model); - $extra = str_replace(array(',', ' '), array('&', ''), $extra); - parse_str($extra, $output); - $name = ''; $code = ''; $team = ''; @@ -578,7 +583,6 @@ class project extends control $multiple = $copyProject->multiple; $hasProduct = $copyProject->hasProduct; $programID = $copyProject->parent; - $model = $copyProject->model; $products = $this->product->getProducts($copyProjectID); if(!$copyProject->hasProduct) $shadow = 1; @@ -1103,19 +1107,30 @@ class project extends control if(!empty($execution->tasks) or !empty($execution->children)) $showToggleIcon = true; } - $this->view->executionStats = $executionStats; - $this->view->showToggleIcon = $showToggleIcon; - $this->view->productList = $this->loadModel('product')->getProductPairsByProject($projectID, 'all', '', false); - $this->view->productID = $productID; - $this->view->product = $this->product->getByID($productID); - $this->view->projectID = $projectID; - $this->view->project = $project; - $this->view->projects = $projects; - $this->view->pager = $pager; - $this->view->orderBy = $orderBy; - $this->view->users = $this->loadModel('user')->getPairs('noletter'); - $this->view->status = $status; - $this->view->isStage = (isset($project->model) and ($project->model == 'waterfall' or $project->model == 'waterfallplus')) ? true : false; + $changeStatusHtml = "
    "; + $changeStatusHtml .= ""; + $changeStatusHtml .= "
    "; + + $this->view->executionStats = $executionStats; + $this->view->showToggleIcon = $showToggleIcon; + $this->view->productList = $this->loadModel('product')->getProductPairsByProject($projectID, 'all', '', false); + $this->view->productID = $productID; + $this->view->product = $this->product->getByID($productID); + $this->view->projectID = $projectID; + $this->view->project = $project; + $this->view->projects = $projects; + $this->view->pager = $pager; + $this->view->orderBy = $orderBy; + $this->view->users = $this->loadModel('user')->getPairs('noletter'); + $this->view->status = $status; + $this->view->isStage = (isset($project->model) and ($project->model == 'waterfall' or $project->model == 'waterfallplus')) ? true : false; + $this->view->changeStatusHtml = common::hasPriv('execution', 'batchChangeStatus') ? $changeStatusHtml : ''; $this->display(); } @@ -1302,6 +1317,7 @@ class project extends control * @param string|int $branch * @param string $browseType * @param int $param + * @param string $caseType * @param string $orderBy * @param int $recTotal * @param int $recPerPage @@ -1309,7 +1325,7 @@ class project extends control * @access public * @return void */ - public function testcase($projectID = 0, $productID = 0, $branch = 'all', $browseType = 'all', $param = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) + public function testcase($projectID = 0, $productID = 0, $branch = 'all', $browseType = 'all', $param = 0, $caseType = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { $this->loadModel('product'); $this->session->set('bugList', $this->app->getURI(true), 'project'); @@ -1322,7 +1338,7 @@ class project extends control $hasProduct = $this->dao->findByID($projectID)->from(TABLE_PROJECT)->fetch('hasProduct'); if($hasProduct) $this->lang->modulePageNav = $this->product->select($products, $productID, 'project', 'testcase', $extra, $branch); - echo $this->fetch('testcase', 'browse', "productID=$productID&branch=$branch&browseType=$browseType¶m=$param&caseType=&orderBy=$orderBy&recTotal=$orderBy&recPerPage=$recPerPage&pageID=$pageID&projectID=$projectID"); + echo $this->fetch('testcase', 'browse', "productID=$productID&branch=$branch&browseType=$browseType¶m=$param&caseType=&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID&projectID=$projectID"); } /** diff --git a/module/project/css/execution.css b/module/project/css/execution.css index 291cca644c..afd49abd35 100644 --- a/module/project/css/execution.css +++ b/module/project/css/execution.css @@ -16,6 +16,7 @@ td.flex {display: flex; flex-flow: row nowrap; justify-content: flex-start; alig td.c-name > .project-type-label {flex: 0 0 36px; padding-right: 2px;} .c-name > a, .table-children .text-left > a, .c-name > span.text-ellipsis { padding-left: 5px; text-overflow: clip;} span.table-nest-icon.table-nest-toggle {min-width: 22px; max-width: 22px;} +span.table-nest-icon {padding-left: 22px;} #projectForm .c-name, #executionTableList .c-name, #programTableList .c-name {padding-right:47px;} #mainMenu .pull-left > .btn-group > a > .text{overflow: hidden;display: block;} #mainMenu .pull-right .icon-list{padding-left: 7px;} diff --git a/module/project/js/edit.js b/module/project/js/edit.js index c1353908a1..fdc708019d 100644 --- a/module/project/js/edit.js +++ b/module/project/js/edit.js @@ -62,6 +62,13 @@ $(function() bootbox.alert(unLinkProductTip.replace("%s", allProducts[last])); } } + var chosenProducts = 0; + $(".productsBox select[name^='products']").each(function() + { + if($(this).val() > 0) chosenProducts ++; + }); + if(chosenProducts > 1) $('.division').removeClass('hide'); + if(chosenProducts <= 1) $('.division').addClass('hide'); }); $(document).on('change', '[name*=branch]', function() @@ -198,7 +205,7 @@ function loadBranches(product) } }); - (chosenProducts.length > 1 && model == 'waterfall') ? $('.division').removeClass('hide') : $('.division').addClass('hide'); + (chosenProducts.length > 1 && model == 'waterfall' && model == 'waterfallplus') ? $('.division').removeClass('hide') : $('.division').addClass('hide'); var $tableRow = $(product).closest('.table-row'); var index = $tableRow.find('select:first').attr('id').replace('products' , ''); @@ -255,15 +262,15 @@ function loadPlans(product, branch) /** * Add new line for link product. - * - * @param obj $obj + * + * @param obj $obj * @access public * @return void */ function addNewLine(obj) { var newLine = $(obj).closest('tr').clone(); - var index = 0; + var index = 0; $(".productsBox select[name^='products']").each(function() { var id = $(this).attr('id').replace('products' , ''); @@ -294,5 +301,5 @@ function removeLine(obj) { $(obj).closest('tr').remove(); disableSelectedProduct(); - if($("select[name^='products']").length < 2) $('.division').addClass('hide'); + if($("select[name^='products']").length < 2) $('.division').addClass('hide'); } diff --git a/module/project/js/execution.js b/module/project/js/execution.js index 49a94fd3f4..9a3925e050 100644 --- a/module/project/js/execution.js +++ b/module/project/js/execution.js @@ -217,19 +217,16 @@ function showEditCheckbox(show) $tr.find('td:first').prepend("
    "); $tr.find('td:first').find('.checkbox-primary').css('margin-left', marginLeft).css('width', '14'); - $tr.find('td:first').find('span.table-nest-icon').css('margin-left', '0'); } else { - var marginLeft = $tr.find('td:first').find('.checkbox-primary').css('margin-left'); - $tr.find('td:first').find('span.table-nest-icon').css('margin-left', marginLeft); $tr.find('td:first').find('[name^="executionIDList"]').parent().remove(); } }); if(show) { $('.table-nest-title').prepend("
    ").addClass('table-nest-title-edit'); - var tableFooter = "
    "; + var tableFooter = "
    " + changeStatusHtml + "
    "; $('#executionForm').attr('action', createLink('execution', 'batchEdit')); $('.table-footer').prepend(tableFooter).show(); $('body').scroll(); @@ -242,3 +239,24 @@ function showEditCheckbox(show) $('#executionForm').removeAttr('action'); } } + +/** + * Set the color of the badge to white. + * + * @param object obj + * @param bool isShow + * @access public + * @return void + */ +function setBadgeStyle(obj, isShow) +{ + var $label = $(obj); + if(isShow == true) + { + $label.find('.label-badge').css({"color":"#fff", "border-color":"#fff"}); + } + else + { + $label.find('.label-badge').css({"color":"#838a9d", "border-color":"#838a9d"}); + } +} diff --git a/module/project/lang/de.php b/module/project/lang/de.php index dfd375a94d..91198d2690 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -272,7 +272,7 @@ $lang->project->modelList['scrum'] = "Scrum"; if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; $lang->project->modelList['agileplus'] = "Agile +"; -if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfallplus'] = "Waterfall +"; +if(helper::hasFeature('waterfallplus')) $lang->project->modelList['waterfallplus'] = "Waterfall +"; $lang->project->featureBar['browse']['all'] = 'All'; $lang->project->featureBar['browse']['undone'] = 'Unfinished'; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index d25999685f..5092070e59 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -272,7 +272,7 @@ $lang->project->modelList['scrum'] = "Scrum"; if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; $lang->project->modelList['agileplus'] = "Agile +"; -if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfallplus'] = "Waterfall +"; +if(helper::hasFeature('waterfallplus')) $lang->project->modelList['waterfallplus'] = "Waterfall +"; $lang->project->featureBar['browse']['all'] = 'All'; $lang->project->featureBar['browse']['undone'] = 'Unfinished'; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 5e82bde244..73c3749268 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -272,7 +272,7 @@ $lang->project->modelList['scrum'] = "Scrum"; if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; $lang->project->modelList['agileplus'] = "Agile +"; -if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfallplus'] = "Waterfall +"; +if(helper::hasFeature('waterfallplus')) $lang->project->modelList['waterfallplus'] = "Waterfall +"; $lang->project->featureBar['browse']['all'] = 'All'; $lang->project->featureBar['browse']['undone'] = 'Non Terminées'; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index be8f261079..6721e62b8c 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -272,7 +272,7 @@ $lang->project->modelList['scrum'] = "Scrum"; if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfall'] = "瀑布"; $lang->project->modelList['kanban'] = "看板"; $lang->project->modelList['agileplus'] = "融合敏捷"; -if(helper::hasFeature('waterfall')) $lang->project->modelList['waterfallplus'] = "融合瀑布"; +if(helper::hasFeature('waterfallplus')) $lang->project->modelList['waterfallplus'] = "融合瀑布"; $lang->project->featureBar['browse']['all'] = '全部'; $lang->project->featureBar['browse']['undone'] = '未完成'; diff --git a/module/project/model.php b/module/project/model.php index 59b321bc28..ce5b643326 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -438,6 +438,8 @@ class projectModel extends model foreach($projectList as $projectID => $stageList) { $progress = 0; + $projectConsumed = 0; + $projectLeft = 0; foreach($stageList as $stageID => $stage) { if($stage->project != $projectID) continue; @@ -445,10 +447,13 @@ class projectModel extends model $stageTotalConsumed = isset($totalHour[$projectID][$stageID]) ? $totalHour[$projectID][$stageID]->totalConsumed : 0; $stageTotalLeft = isset($totalHour[$projectID][$stageID]) ? round($totalHour[$projectID][$stageID]->totalLeft, 1) : 0; - $stageProgress = ($stageTotalConsumed + $stageTotalLeft) ? floor($stageTotalConsumed / ($stageTotalConsumed + $stageTotalLeft) * 1000) / 1000 * 100 : 0; + $projectConsumed += $stageTotalConsumed; + $projectLeft += $stageTotalLeft; - $progress += $stageProgress * ($stage->percent / 100); } + + $progress += ($projectConsumed + $projectLeft) == 0 ? 0 : floor($projectConsumed / ($projectConsumed + $projectLeft) * 1000) / 1000 * 100; + $progressList[$projectID] = $progress; } @@ -818,13 +823,13 @@ class projectModel extends model /** * Get project pairs by programID. * - * @param int $programID - * @param status $status all|wait|doing|suspended|closed|noclosed - * @param bool $isQueryAll - * @param string $orderBy - * @param string $excludedModel - * @param string $model - * @param string $param multiple|product + * @param int $programID + * @param status $status all|wait|doing|suspended|closed|noclosed + * @param bool $isQueryAll + * @param string $orderBy + * @param string $excludedModel + * @param string|array $model + * @param string $param multiple|product * @access public * @return object */ @@ -839,7 +844,7 @@ class projectModel extends model ->beginIF($programID === 0)->andWhere('parent')->eq(0)->fi() ->beginIF($status != 'all' and $status != 'noclosed')->andWhere('status')->eq($status)->fi() ->beginIF($excludedModel)->andWhere('model')->ne($excludedModel)->fi() - ->beginIF($model)->andWhere('model')->eq($model)->fi() + ->beginIF($model)->andWhere('model')->in($model)->fi() ->beginIF(strpos($param, 'multiple') !== false)->andWhere('multiple')->eq(1)->fi() ->beginIF(strpos($param, 'product') !== false)->andWhere('hasProduct')->eq(1)->fi() ->beginIF($status == 'noclosed')->andWhere('status')->ne('closed')->fi() @@ -1023,7 +1028,7 @@ class projectModel extends model $programPairs += $this->loadModel('program')->getPairs(); $this->config->project->search['params']['parent']['values'] = $programPairs; - if(isset($this->config->setCode) and $this->config->setCode == 0) unset($this->config->project->search['fields']['code'], $this->config->project->search['params']['code']); + if(!isset($this->config->setCode) or $this->config->setCode == 0) unset($this->config->project->search['fields']['code'], $this->config->project->search['params']['code']); if($this->config->systemMode == 'light') unset($this->config->project->search['fields']['parent'], $this->config->project->search['params']['parent']); $this->loadModel('search')->setSearchParams($this->config->project->search); @@ -1090,12 +1095,15 @@ class projectModel extends model { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProjectPairs(); + if($model == 'agileplus') $model = array('scrum', 'agileplus'); + if($model == 'waterfallplus') $model = array('waterfall', 'waterfallplus'); + $projects = $this->dao->select('id, name, path')->from(TABLE_PROJECT) ->where('type')->eq('project') ->andWhere('deleted')->eq('0') ->beginIF($programID)->andWhere('parent')->eq($programID)->fi() ->beginIF($this->config->vision)->andWhere('vision')->eq($this->config->vision)->fi() - ->beginIF($model != 'all')->andWhere('model')->eq($model)->fi() + ->beginIF($model != 'all')->andWhere('model')->in($model)->fi() ->beginIF(strpos($param, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() ->beginIF(strpos($param, 'multiple') !== false)->andWhere('multiple')->eq('1')->fi() ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi() @@ -1236,18 +1244,19 @@ class projectModel extends model ->setIF($this->post->delta == 999, 'days', 0) ->setIF($this->post->acl == 'open', 'whitelist', '') ->setIF(!isset($_POST['whitelist']), 'whitelist', '') - ->setDefault('multiple', '1') + ->setIF(!isset($_POST['multiple']), 'multiple', '1') ->setDefault('openedBy', $this->app->user->account) ->setDefault('openedDate', helper::now()) ->setDefault('team', $this->post->name) ->setDefault('lastEditedBy', $this->app->user->account) ->setDefault('lastEditedDate', helper::now()) + ->setDefault('days', '0') ->add('type', 'project') ->join('whitelist', ',') ->stripTags($this->config->project->editor->create['id'], $this->config->allowedTags) ->remove('products,branch,plans,delta,newProduct,productName,future,contactListMenu,teamMembers') ->get(); - if(isset($this->config->setCode) and $this->config->setCode == 0) unset($project->code); + if(!isset($this->config->setCode) or $this->config->setCode == 0) unset($project->code); /* Lean mode relation defaultProgram. */ if($this->config->systemMode == 'light') $project->parent = $this->config->global->defaultProgram; @@ -1338,12 +1347,6 @@ class projectModel extends model $requiredFields = $this->config->project->create->requiredFields; if($this->post->delta == 999) $requiredFields = trim(str_replace(',end,', ',', ",{$requiredFields},"), ','); - /* Redefines the language entries for the fields in the project table. */ - foreach(explode(',', $requiredFields) as $field) - { - if(isset($this->lang->project->$field)) $this->lang->project->$field = $this->lang->project->$field; - } - $this->lang->error->unique = $this->lang->error->repeat; $project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->create['id'], $this->post->uid); $this->dao->insert(TABLE_PROJECT)->data($project) @@ -1438,6 +1441,7 @@ class projectModel extends model $this->dao->insert(TABLE_PRODUCT)->data($product)->exec(); $productID = $this->dao->lastInsertId(); + if(!$project->hasProduct) $this->loadModel('personnel')->updateWhitelist($whitelist, 'product', $productID); $this->loadModel('action')->create('product', $productID, 'opened'); $this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($productID * 5)->where('id')->eq($productID)->exec(); if($product->acl != 'open') $this->loadModel('user')->updateUserView($productID, 'product'); @@ -1517,7 +1521,6 @@ class projectModel extends model ->setDefault('team', $this->post->name) ->setDefault('lastEditedBy', $this->app->user->account) ->setDefault('lastEditedDate', helper::now()) - ->setDefault('parent', 0) ->setIF($this->post->delta == 999, 'end', LONG_TIME) ->setIF($this->post->delta == 999, 'days', 0) ->setIF($this->post->begin == '0000-00-00', 'begin', '') @@ -1530,6 +1533,8 @@ class projectModel extends model ->remove('products,branch,plans,delta,future,contactListMenu,teamMembers') ->get(); + if(!isset($project->parent)) $project->parent = $oldProject->parent; + $executionsCount = $this->dao->select('COUNT(*) as count')->from(TABLE_PROJECT)->where('project')->eq($project->id)->andWhere('deleted')->eq('0')->fetch('count'); if(!empty($executionsCount) and $oldProject->multiple) @@ -1581,12 +1586,6 @@ class projectModel extends model $requiredFields = $this->config->project->edit->requiredFields; if($this->post->delta == 999) $requiredFields = trim(str_replace(',end,', ',', ",{$requiredFields},"), ','); - /* Redefines the language entries for the fields in the project table. */ - foreach(explode(',', $requiredFields) as $field) - { - if(isset($this->lang->project->$field)) $this->lang->project->$field = $this->lang->project->$field; - } - $this->lang->error->unique = $this->lang->error->repeat; $this->dao->update(TABLE_PROJECT)->data($project) ->autoCheck($skipFields = 'begin,end') @@ -1653,6 +1652,7 @@ class projectModel extends model $whitelist = explode(',', $project->whitelist); $this->loadModel('personnel')->updateWhitelist($whitelist, 'project', $projectID); + if(!$oldProject->hasProduct) $this->loadModel('personnel')->updateWhitelist($whitelist, 'product', current($linkedProducts)); if($project->acl != 'open') { $this->loadModel('user')->updateUserView($projectID, 'project'); @@ -2196,7 +2196,12 @@ class projectModel extends model $changedAccounts = array_unique($changedAccounts); $childSprints = $this->dao->select('id')->from(TABLE_PROJECT)->where('project')->eq($projectID)->andWhere('type')->in('stage,sprint')->andWhere('deleted')->eq('0')->fetchPairs(); - $linkedProducts = $this->loadModel('product')->getProductPairsByProject($projectID); + $linkedProducts = $this->dao->select("t2.id")->from(TABLE_PROJECTPRODUCT)->alias('t1') + ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id') + ->where('t2.deleted')->eq(0) + ->andWhere('t1.project')->eq($projectID) + ->andWhere('t2.vision')->eq($this->config->vision) + ->fetchPairs(); $this->loadModel('user')->updateUserView(array($projectID), 'project', $changedAccounts); if(!empty($childSprints)) $this->user->updateUserView($childSprints, 'sprint', $changedAccounts); @@ -2621,7 +2626,7 @@ class projectModel extends model $this->loadModel('program'); $projects = $this->program->getProjectStats(0, 'all', 0, 'order_asc'); - $executions = $this->loadModel('execution')->getStatData(0, 'doing'); + $executions = $this->loadModel('execution')->getStatData(0, 'doing', 0, 0, false, 'hasParentName|skipParent'); $doingExecutions = array(); $latestExecutions = array(); @@ -2706,6 +2711,13 @@ class projectModel extends model ->andWhere('deleted')->eq(0) ->fetchGroup('execution', 'id'); + $projects = $this->dao->select('t1.id,t2.model') + ->from(TABLE_PROJECT)->alias('t1') + ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id') + ->where('t1.deleted')->eq('0') + ->andWhere('t1.id')->in(array_keys($executions)) + ->fetchPairs(); + /* Compute totalEstimate, totalConsumed, totalLeft. */ foreach($tasks as $executionID => $executionTasks) { @@ -2718,7 +2730,7 @@ class projectModel extends model } $hours[$executionID] = $hour; - if(isset($executions[$executionID]) and $executions[$executionID]->type == 'stage' and $executions[$executionID]->grade > 1) + if(isset($executions[$executionID]) and $executions[$executionID]->grade > 1 and isset($projects[$executionID]) and ($projects[$executionID] == 'waterfall' or $projects[$executionID] == 'waterfallplus')) { $stageParents = $this->dao->select('id')->from(TABLE_EXECUTION)->where('id')->in(trim($executions[$executionID]->path, ','))->andWhere('type')->eq('stage')->andWhere('id')->ne($executions[$executionID]->id)->orderBy('grade')->fetchPairs(); foreach($stageParents as $stageParent) diff --git a/module/project/view/ajaxgetdropmenu.html.php b/module/project/view/ajaxgetdropmenu.html.php index 6c51b4d224..b21bb7acc5 100644 --- a/module/project/view/ajaxgetdropmenu.html.php +++ b/module/project/view/ajaxgetdropmenu.html.php @@ -80,19 +80,19 @@ foreach($projects as $programID => $programProjects) { $link = $indexLink; } - elseif($project->model == 'scrum' and + elseif((in_array($project->model, array('scrum', 'agileplus'))) and ( - (in_array($module, array('issue', 'risk', 'meeting')) and !helper::hasFeature("scrum_{$module}")) or - ($module == 'report' and $method == 'projectsummary' and !helper::hasFeature("scrum_measrecord")) + (in_array($module, array('issue', 'risk', 'meeting')) and !helper::hasFeature("{$project->model}_{$module}")) or + ($module == 'report' and $method == 'projectsummary' and !helper::hasFeature("{$project->model}_measrecord")) )) { $link = $indexLink; } - elseif($project->model == 'waterfall' and + elseif(in_array($project->model, array('waterfall', 'waterfallplus')) and ( - (in_array($module, array('issue', 'risk', 'opportunity', 'measrecord', 'auditplan', 'meeting')) and !helper::hasFeature("waterfall_{$module}")) or - ($module == 'pssp' and !helper::hasFeature("waterfall_process")) or - ($module == 'report' and $method == 'projectsummary' and !helper::hasFeature("scrum_measrecord")) + (in_array($module, array('issue', 'risk', 'opportunity', 'measrecord', 'auditplan', 'meeting')) and !helper::hasFeature("{$project->model}_{$module}")) or + ($module == 'pssp' and !helper::hasFeature("{$project->model}_process")) or + ($module == 'report' and $method == 'projectsummary' and !helper::hasFeature("{$project->model}_measrecord")) )) { $link = $indexLink; diff --git a/module/project/view/batchedit.html.php b/module/project/view/batchedit.html.php index 0c32848914..796850275a 100644 --- a/module/project/view/batchedit.html.php +++ b/module/project/view/batchedit.html.php @@ -34,7 +34,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> @@ -63,7 +63,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> diff --git a/module/project/view/browsebycard.html.php b/module/project/view/browsebycard.html.php index 8de3c49593..e9800019c2 100644 --- a/module/project/view/browsebycard.html.php +++ b/module/project/view/browsebycard.html.php @@ -107,10 +107,12 @@ project->statusList[$status];?>
    - model === 'waterfall'):?> - + model, array('waterfall', 'waterfallplus'))):?> + model === 'kanban'):?> + model === 'agileplus'):?> + diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php index 42c9cddd97..86aaf07843 100755 --- a/module/project/view/create.html.php +++ b/module/project/view/create.html.php @@ -48,7 +48,7 @@

    - edition != 'max' || $model == 'kanban'):?> + edition != 'max' or $model == 'kanban'):?> @@ -73,7 +73,7 @@
    - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> diff --git a/module/project/view/createguide.html.php b/module/project/view/createguide.html.php index 14a5710c35..af2ca0be3b 100644 --- a/module/project/view/createguide.html.php +++ b/module/project/view/createguide.html.php @@ -5,7 +5,7 @@ - setCode) or $config->setCode == 1):?> + setCode) and $config->setCode == 1):?> diff --git a/module/project/view/execution.html.php b/module/project/view/execution.html.php index 9485fb7828..8ed16b257d 100644 --- a/module/project/view/execution.html.php +++ b/module/project/view/execution.html.php @@ -13,6 +13,7 @@ execution->pageExecSummary);?> execution->executionSummary);?> execution->checkedExecutions);?> + - + diff --git a/module/repo/control.php b/module/repo/control.php index 77e1813617..5b125ab8e9 100644 --- a/module/repo/control.php +++ b/module/repo/control.php @@ -599,7 +599,7 @@ class repo extends control } /* Refresh repo. */ - if($refresh) $this->repo->updateCommit($repoID, $originBranchID); + if($refresh) $this->repo->updateCommit($repoID, $objectID, $originBranchID); /* Get files info. */ $infos = $this->repo->getFileCommits($repo, $branchID, $path); @@ -1372,7 +1372,7 @@ class repo extends control $content = file($logFile); $lastLine = $content[count($content) - 1]; - if(!strpos($lastLine, 'done')) + if(strpos($lastLine, 'done') === false) { if(strpos($lastLine, 'empty repository') !== false) { diff --git a/module/repo/js/diff.js b/module/repo/js/diff.js index 8c9c22dcb6..69df534fe1 100644 --- a/module/repo/js/diff.js +++ b/module/repo/js/diff.js @@ -48,20 +48,23 @@ function getDiffs(fileName) { if(!diff.contents || typeof diff.contents[0].lines != 'object') return result; - var lines = diff.contents[0].lines; - $.each(lines, function(l, code) + $.each(diff.contents, function(k, content) { - if(code.type == 'all' || code.type == 'new') + var lines = content.lines; + $.each(lines, function(l, code) { - result.code.new += htmlspecialchars_decode(code.line.substring(2)) + "\n"; - result.line.new.push(parseInt(code.newlc)); - } + if(code.type == 'all' || code.type == 'new') + { + result.code.new += htmlspecialchars_decode(code.line.substring(1)) + "\n"; + result.line.new.push(parseInt(code.newlc)); + } - if(code.type == 'all' || code.type == 'old') - { - result.code.old += htmlspecialchars_decode(code.line.substring(2)) + "\n"; - result.line.old.push(parseInt(code.oldlc)); - } + if(code.type == 'all' || code.type == 'old') + { + result.code.old += htmlspecialchars_decode(code.line.substring(1)) + "\n"; + result.line.old.push(parseInt(code.oldlc)); + } + }) }) return result; } diff --git a/module/repo/model.php b/module/repo/model.php index 8a59e21530..3a9aa88859 100644 --- a/module/repo/model.php +++ b/module/repo/model.php @@ -2810,7 +2810,7 @@ class repoModel extends model * @access public * @return void */ - public function updateCommit($repoID, $branchID = 0) + public function updateCommit($repoID, $objectID = 0, $branchID = 0) { $repo = $this->getRepoByID($repoID); /* Update code commit history. */ @@ -2829,11 +2829,8 @@ class repoModel extends model return print(js::locate($link)); } } - else - { - $this->loadModel('git')->updateCommit($repo, $commentGroup, false); - $_COOKIE['repoBranch'] = $branch; - } + $this->loadModel('git')->updateCommit($repo, $commentGroup, false); + $_COOKIE['repoBranch'] = $branch; } if($repo->SCM == 'Subversion') $this->loadModel('svn')->updateCommit($repo, $commentGroup, false); } diff --git a/module/report/js/bugcreate.js b/module/report/js/bugcreate.js index 7d7b2ae166..979317b94b 100644 --- a/module/report/js/bugcreate.js +++ b/module/report/js/bugcreate.js @@ -17,7 +17,6 @@ function changeParams(obj) for(i=0 ; i < endarray.length ; i++) end = end + endarray[i]; } - var params = window.btoa('begin=' + begin + '&end=' + end + '&product=' + product + '&execution=' + execution); - var link = createLink('report', 'preview', 'dimension=' + dimension + '&group=' + group + '&module=report&method=bugcreate¶ms=' + params); - location.href = link; + link = createLink('report', 'bugcreate', 'begin=' + begin + '&end=' + end + '&product=' + product + '&execution=' + execution); + location.href=link; } diff --git a/module/report/js/productsummary.js b/module/report/js/productsummary.js index 9bebb7d6af..26199a6d7f 100644 --- a/module/report/js/productsummary.js +++ b/module/report/js/productsummary.js @@ -6,8 +6,5 @@ $('#conditions input:checkbox').change(function() if($(this).prop('checked')) conditions += $(this).val() + ','; }) conditions = conditions.substring(0, conditions.length - 1); - - var params = window.btoa('conditions=' + conditions); - var link = createLink('report', 'preview', 'dimension=' + dimension + '&group=' + group + '&module=report&method=productSummary¶ms=' + params); - location.href = link; + location.href = createLink('report', 'productSummary', 'conditions=' + conditions); }) diff --git a/module/report/js/projectdeviation.js b/module/report/js/projectdeviation.js index 4d4db57c1c..a1d18cc556 100644 --- a/module/report/js/projectdeviation.js +++ b/module/report/js/projectdeviation.js @@ -29,8 +29,6 @@ function changeDate(begin, end) end = end + endarray[i]; } } - - var params = window.btoa('begin=' + begin + '&end=' + end); - var link = createLink('report', 'preview', 'dimension=' + dimension + '&group=' + group + '&module=report&method=projectdeviation¶ms=' + params); - location.href = link; + link = createLink('report', 'projectdeviation', 'begin=' + begin + '&end=' + end); + location.href=link; } diff --git a/module/report/js/workload.js b/module/report/js/workload.js index a8abfab0da..5ef0381265 100644 --- a/module/report/js/workload.js +++ b/module/report/js/workload.js @@ -22,8 +22,7 @@ function changeParams(obj) for(i = 0 ; i < endarray.length ; i++) end = end + endarray[i]; } - var params = window.btoa('begin=' + begin + '&end=' + end + '&days=' + days + '&workday=' + workday + '&dept=' + dept + '&assign=' + assign); - var link = createLink('report', 'preview', 'dimension=' + dimension + '&group=' + group + '&module=report&method=workload¶ms=' + params); + var link = createLink('report', 'workload', 'begin=' + begin + '&end=' + end + '&days=' + days + '&workday=' + workday + '&dept=' + dept + '&assign=' + assign); location.href = link; } diff --git a/module/report/view/bugassign.html.php b/module/report/view/bugassign.html.php index cf4b0b9e6b..3289684a2d 100644 --- a/module/report/view/bugassign.html.php +++ b/module/report/view/bugassign.html.php @@ -1,56 +1,62 @@ +config->edition != 'open'):?> - -
    -
    -

    error->noData;?>

    +
    + +
    + +
    +
    +

    error->noData;?>

    +
    + +
    +
    +
    +
    + +
    +
    +
    holiday->name;?> holiday->holiday;?> holiday->type;?>holiday->desc;?>holiday->desc;?> actions;?>
    name;?> begin, DT_DATE1) . ' ~ ' . formatTime($holiday->end, DT_DATE1);?> holiday->typeList, $holiday->type);?>desc;?>

    desc;?>

    id", $holiday, 'list', '', '', 'iframe', 'yes');?> id", $holiday, 'list', '', 'hiddenwin');?> diff --git a/module/holiday/view/index.html b/module/holiday/view/index.html deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/module/index/js/index.js b/module/index/js/index.js index 86ab05c19c..591c1b3753 100644 --- a/module/index/js/index.js +++ b/module/index/js/index.js @@ -891,6 +891,9 @@ $(function() { $('#globalSearchInput').click(); }); + + /* Update patch, plugin, news, publicclass from zetao.net. */ + if(isAdminUser) $.get(createLink('admin', 'ajaxSetZentaoData')); }); /* Change the search object according to the module and method. */ diff --git a/module/index/view/index.html.php b/module/index/view/index.html.php index be9093fc00..bb74a7d06c 100644 --- a/module/index/view/index.html.php +++ b/module/index/view/index.html.php @@ -21,6 +21,7 @@ js::set('appsMenuItems', commonModel::getMainNavList($app->rawModule)); js::set('defaultOpen', (isset($open) and !empty($open)) ? $open : ''); js::set('manualText', $lang->manual); js::set('manualUrl', ((!empty($config->isINT)) ? $config->manualUrl['int'] : $config->manualUrl['home']) . '&theme=' . $_COOKIE['theme']); +js::set('isAdminUser', $this->app->user->admin); ?> diff --git a/module/programplan/config.php b/module/programplan/config.php index 3136c4559d..e5745773c6 100644 --- a/module/programplan/config.php +++ b/module/programplan/config.php @@ -5,7 +5,14 @@ $config->programplan->create->requiredFields = 'name,begin,end'; $config->programplan->edit->requiredFields = 'name,begin,end'; $config->programplan->datatable = new stdclass(); -$config->programplan->datatable->defaultField = array('id', 'name', 'percent', 'attribute', 'begin', 'end', 'realBegan', 'realEnd', 'actions'); +if(isset($config->setPercent) and $config->setPercent == 1) +{ + $config->programplan->datatable->defaultField = array('id', 'name', 'percent', 'attribute', 'begin', 'end', 'realBegan', 'realEnd', 'actions'); +} +else +{ + $config->programplan->datatable->defaultField = array('id', 'name', 'attribute', 'begin', 'end', 'realBegan', 'realEnd', 'actions'); +} $config->programplan->datatable->fieldList['id']['title'] = 'idAB'; $config->programplan->datatable->fieldList['id']['fixed'] = 'left'; @@ -17,10 +24,13 @@ $config->programplan->datatable->fieldList['name']['fixed'] = 'left'; $config->programplan->datatable->fieldList['name']['width'] = 'auto'; $config->programplan->datatable->fieldList['name']['required'] = 'yes'; -$config->programplan->datatable->fieldList['percent']['title'] = 'percent'; -$config->programplan->datatable->fieldList['percent']['fixed'] = 'no'; -$config->programplan->datatable->fieldList['percent']['width'] = '100'; -$config->programplan->datatable->fieldList['percent']['required'] = 'no'; +if(isset($config->setPercent) and $config->setPercent == 1) +{ + $config->programplan->datatable->fieldList['percent']['title'] = 'percent'; + $config->programplan->datatable->fieldList['percent']['fixed'] = 'no'; + $config->programplan->datatable->fieldList['percent']['width'] = '100'; + $config->programplan->datatable->fieldList['percent']['required'] = 'no'; +} $config->programplan->datatable->fieldList['attribute']['title'] = 'attribute'; $config->programplan->datatable->fieldList['attribute']['fixed'] = 'no'; @@ -53,10 +63,18 @@ $config->programplan->datatable->fieldList['actions']['width'] = '150'; $config->programplan->datatable->fieldList['actions']['required'] = 'yes'; $config->programplan->datatable->fieldList['actions']['sort'] = 'no'; -$config->programplan->customCreateFields = 'PM,percent,attribute,acl,milestone,realBegan,realEnd'; - $config->programplan->custom = new stdclass(); -$config->programplan->custom->createFields = 'PM,percent,attribute,acl,milestone'; + +if(isset($config->setPercent) and $config->setPercent == 1) +{ + $config->programplan->custom->createFields = 'PM,percent,attribute,acl,milestone'; + $config->programplan->customCreateFields = 'PM,percent,attribute,acl,milestone,realBegan,realEnd'; +} +else +{ + $config->programplan->custom->createFields = 'PM,attribute,acl,milestone'; + $config->programplan->customCreateFields = 'PM,attribute,acl,milestone,realBegan,realEnd'; +} $config->programplan->customAgilePlusCreateFields = 'PM,milestone,acl,desc,attribute'; diff --git a/module/programplan/control.php b/module/programplan/control.php index 7a7783561f..83f280143f 100644 --- a/module/programplan/control.php +++ b/module/programplan/control.php @@ -205,13 +205,14 @@ class programplan extends control if(strpos(",{$this->config->programplan->$customCreateFields},", ",{$field},") !== false) $visibleFields[$field] = ''; } } + if(empty($this->config->setPercent)) unset($visibleFields['percent'], $requiredFields['percent']); if($executionType != 'stage') unset($this->lang->execution->typeList[''], $this->lang->execution->typeList['stage']); $this->view->productList = $productList; $this->view->project = $project; $this->view->productID = $productID ? $productID : key($productList); - $this->view->stages = empty($planID) ? $this->loadModel('stage')->getStages('id_asc') : array(); + $this->view->stages = empty($planID) ? $this->loadModel('stage')->getStages('id_asc', 0, $project->model) : array(); $this->view->programPlan = $programPlan; $this->view->plans = empty($executions) ? $plans : $executions; $this->view->planID = $planID; diff --git a/module/programplan/css/create.css b/module/programplan/css/create.css index eb0ae52c08..3cbcc213e0 100644 --- a/module/programplan/css/create.css +++ b/module/programplan/css/create.css @@ -1 +1,3 @@ #planForm tr td {vertical-align: top;} +#mainContent .methodTitle, #mainContent .methodTip {display: inline-block; vertical-align: middle;} +.type-list-radio {display: inline-block; padding: 10px 5px;} diff --git a/module/programplan/js/create.js b/module/programplan/js/create.js index 241610d959..13f91ece2d 100644 --- a/module/programplan/js/create.js +++ b/module/programplan/js/create.js @@ -5,6 +5,8 @@ $(function() $(this).removeClass('has-error'); $(this).closest('td').find('.text-danger.help-text').remove(); }); + + $('[data-toggle="popover"]').popover(); }); /** * Add item to create view of programplan. diff --git a/module/programplan/js/edit.js b/module/programplan/js/edit.js index c8854adfdc..c2a243fa1f 100644 --- a/module/programplan/js/edit.js +++ b/module/programplan/js/edit.js @@ -2,7 +2,7 @@ function changeParentStage(stageID) { $.get(createLink('programplan', 'ajaxGetAttribute', 'stageID=' + stageID + '&attribute=' + plan.attribute), function(attribute) { - $('#attributeType td').html(attribute); + $('#attributeType td:first').html(attribute); $("#attribute" + "_chosen").remove(); $("#attribute").next('.picker').remove(); $("#attribute").chosen(); @@ -57,4 +57,6 @@ $(function() if(!result) return false; } }) + + $('[data-toggle="popover"]').popover(); }) diff --git a/module/programplan/lang/de.php b/module/programplan/lang/de.php index e653b4534c..05e042641b 100644 --- a/module/programplan/lang/de.php +++ b/module/programplan/lang/de.php @@ -20,6 +20,7 @@ $lang->programplan->delete = 'Delete Stage'; $lang->programplan->close = 'Close Stage'; $lang->programplan->activate = 'Activate Stage'; $lang->programplan->createSubPlan = 'Create Sub Plan'; +$lang->programplan->subPlanManage = 'Sub-stages management'; $lang->programplan->parent = 'Parent Stage'; $lang->programplan->emptyParent = 'N/A'; @@ -72,6 +73,7 @@ $lang->programplan->emptyBegin = '『Begin』should not be blank'; $lang->programplan->emptyEnd = '『End』should not be blank'; $lang->programplan->checkBegin = '『Begin』should be valid date'; $lang->programplan->checkEnd = '『End』should be valid date'; +$lang->programplan->methodTip = "You can choose to continue creating stages or Iterations/Kanban for work in this stage. It's not supported to further split the Iteration/Kanban."; $lang->programplan->milestoneList[1] = 'Yes'; $lang->programplan->milestoneList[0] = 'No'; @@ -82,7 +84,7 @@ $lang->programplan->delayList[0] = 'No'; $lang->programplan->typeList = array(); $lang->programplan->typeList['stage'] = 'Stage'; -$lang->programplan->typeList['agileplus'] = 'Sprint/Kanban'; +$lang->programplan->typeList['agileplus'] = $lang->executionCommon . '/Kanban'; $lang->programplan->noData = 'No Data'; $lang->programplan->children = 'Sub Plan'; @@ -110,15 +112,17 @@ $lang->programplan->ganttCustom['delayDays'] = 'Delay days'; $lang->programplan->error = new stdclass(); $lang->programplan->error->percentNumber = '"Workload %" must be digits.'; $lang->programplan->error->planFinishSmall = 'The "End" date must be > the "Begin" date.'; -$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100%.'; +$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100% of one stage.'; $lang->programplan->error->createdTask = 'The task has been decomposed. Sub phases cannot be added.'; $lang->programplan->error->parentWorkload = 'The sum of the workload of the child phase cannot be greater than that of the parent phase: %s.'; -$lang->programplan->error->parentDuration = 'The planned start and planned completion of the child phase cannot exceed the parent phase.'; +$lang->programplan->error->letterParent = "The planned start of the child stage cannot be less than the begin of parent stage: %s."; +$lang->programplan->error->greaterParent = "The planned end of the child stage cannot be greater the end of parent stage: %s"; $lang->programplan->error->sameName = 'Stage name cannot be the same!'; $lang->programplan->error->sameCode = 'Stage code cannot be the same!'; $lang->programplan->error->taskDrag = 'The %s task cannot be dragged'; $lang->programplan->error->planDrag = 'The %s stage cannot be dragged'; -$lang->programplan->error->notStage = 'Sprint/Kanban cannot create a sub stage.'; +$lang->programplan->error->notStage = $lang->executionCommon . '/Kanban cannot create a sub stage.'; +$lang->programplan->error->sameType = 'Type of the stage must be as same as parent: "%s"'; $lang->programplan->ganttBrowseType['gantt'] = 'Group by Stage'; $lang->programplan->ganttBrowseType['assignedTo'] = 'Group by AssignedTo'; diff --git a/module/programplan/lang/en.php b/module/programplan/lang/en.php index 1846fa4c83..2b5367be28 100644 --- a/module/programplan/lang/en.php +++ b/module/programplan/lang/en.php @@ -20,6 +20,7 @@ $lang->programplan->delete = 'Delete Stage'; $lang->programplan->close = 'Close Stage'; $lang->programplan->activate = 'Activate Stage'; $lang->programplan->createSubPlan = 'Create Sub Stage'; +$lang->programplan->subPlanManage = 'Sub-stages management'; $lang->programplan->parent = 'Parent Stage'; $lang->programplan->emptyParent = 'N/A'; @@ -72,6 +73,7 @@ $lang->programplan->emptyBegin = '『Begin』should not be blank'; $lang->programplan->emptyEnd = '『End』should not be blank'; $lang->programplan->checkBegin = '『Begin』should be valid date'; $lang->programplan->checkEnd = '『End』should be valid date'; +$lang->programplan->methodTip = "You can choose to continue creating stages or Iterations/Kanban for work in this stage. It's not supported to further split the Iteration/Kanban."; $lang->programplan->milestoneList[1] = 'Yes'; $lang->programplan->milestoneList[0] = 'No'; @@ -82,7 +84,7 @@ $lang->programplan->delayList[0] = 'No'; $lang->programplan->typeList = array(); $lang->programplan->typeList['stage'] = 'Stage'; -$lang->programplan->typeList['agileplus'] = 'Sprint/Kanban'; +$lang->programplan->typeList['agileplus'] = $lang->executionCommon . '/Kanban'; $lang->programplan->noData = 'No Data'; $lang->programplan->children = 'Sub Plan'; @@ -110,15 +112,17 @@ $lang->programplan->ganttCustom['delayDays'] = 'Delay days'; $lang->programplan->error = new stdclass(); $lang->programplan->error->percentNumber = '"Workload %" must be digits.'; $lang->programplan->error->planFinishSmall = 'The "End" date must be > the "Begin" date.'; -$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100%.'; +$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100% of one stage.'; $lang->programplan->error->createdTask = 'The task is decomposed. Sub stages cannot be added.'; $lang->programplan->error->parentWorkload = 'The sum of the workload in the sub stage cannot be > that in the parent stage: %s.'; -$lang->programplan->error->parentDuration = 'The planned start and planned completion of the child phase cannot exceed the parent phase.'; +$lang->programplan->error->letterParent = "The planned start of the child stage cannot be less than the begin of parent stage: %s."; +$lang->programplan->error->greaterParent = "The planned end of the child stage cannot be greater the end of parent stage: %s"; $lang->programplan->error->sameName = 'Stage name cannot be the same!'; $lang->programplan->error->sameCode = 'Stage code cannot be the same!'; $lang->programplan->error->taskDrag = 'The %s task cannot be dragged'; $lang->programplan->error->planDrag = 'The %s stage cannot be dragged'; -$lang->programplan->error->notStage = 'Sprint/Kanban cannot create a sub stage.'; +$lang->programplan->error->notStage = $lang->executionCommon . '/Kanban cannot create a sub stage.'; +$lang->programplan->error->sameType = 'Type of the stage must be as same as parent: "%s"'; $lang->programplan->ganttBrowseType['gantt'] = 'Group by Stage'; $lang->programplan->ganttBrowseType['assignedTo'] = 'Group by AssignedTo'; diff --git a/module/programplan/lang/fr.php b/module/programplan/lang/fr.php index e653b4534c..05e042641b 100644 --- a/module/programplan/lang/fr.php +++ b/module/programplan/lang/fr.php @@ -20,6 +20,7 @@ $lang->programplan->delete = 'Delete Stage'; $lang->programplan->close = 'Close Stage'; $lang->programplan->activate = 'Activate Stage'; $lang->programplan->createSubPlan = 'Create Sub Plan'; +$lang->programplan->subPlanManage = 'Sub-stages management'; $lang->programplan->parent = 'Parent Stage'; $lang->programplan->emptyParent = 'N/A'; @@ -72,6 +73,7 @@ $lang->programplan->emptyBegin = '『Begin』should not be blank'; $lang->programplan->emptyEnd = '『End』should not be blank'; $lang->programplan->checkBegin = '『Begin』should be valid date'; $lang->programplan->checkEnd = '『End』should be valid date'; +$lang->programplan->methodTip = "You can choose to continue creating stages or Iterations/Kanban for work in this stage. It's not supported to further split the Iteration/Kanban."; $lang->programplan->milestoneList[1] = 'Yes'; $lang->programplan->milestoneList[0] = 'No'; @@ -82,7 +84,7 @@ $lang->programplan->delayList[0] = 'No'; $lang->programplan->typeList = array(); $lang->programplan->typeList['stage'] = 'Stage'; -$lang->programplan->typeList['agileplus'] = 'Sprint/Kanban'; +$lang->programplan->typeList['agileplus'] = $lang->executionCommon . '/Kanban'; $lang->programplan->noData = 'No Data'; $lang->programplan->children = 'Sub Plan'; @@ -110,15 +112,17 @@ $lang->programplan->ganttCustom['delayDays'] = 'Delay days'; $lang->programplan->error = new stdclass(); $lang->programplan->error->percentNumber = '"Workload %" must be digits.'; $lang->programplan->error->planFinishSmall = 'The "End" date must be > the "Begin" date.'; -$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100%.'; +$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100% of one stage.'; $lang->programplan->error->createdTask = 'The task has been decomposed. Sub phases cannot be added.'; $lang->programplan->error->parentWorkload = 'The sum of the workload of the child phase cannot be greater than that of the parent phase: %s.'; -$lang->programplan->error->parentDuration = 'The planned start and planned completion of the child phase cannot exceed the parent phase.'; +$lang->programplan->error->letterParent = "The planned start of the child stage cannot be less than the begin of parent stage: %s."; +$lang->programplan->error->greaterParent = "The planned end of the child stage cannot be greater the end of parent stage: %s"; $lang->programplan->error->sameName = 'Stage name cannot be the same!'; $lang->programplan->error->sameCode = 'Stage code cannot be the same!'; $lang->programplan->error->taskDrag = 'The %s task cannot be dragged'; $lang->programplan->error->planDrag = 'The %s stage cannot be dragged'; -$lang->programplan->error->notStage = 'Sprint/Kanban cannot create a sub stage.'; +$lang->programplan->error->notStage = $lang->executionCommon . '/Kanban cannot create a sub stage.'; +$lang->programplan->error->sameType = 'Type of the stage must be as same as parent: "%s"'; $lang->programplan->ganttBrowseType['gantt'] = 'Group by Stage'; $lang->programplan->ganttBrowseType['assignedTo'] = 'Group by AssignedTo'; diff --git a/module/programplan/lang/vi.php b/module/programplan/lang/vi.php index da516686a2..0a5cb7e8cb 100644 --- a/module/programplan/lang/vi.php +++ b/module/programplan/lang/vi.php @@ -68,6 +68,7 @@ $lang->programplan->stageCustom->task = 'Show Task'; $lang->programplan->error = new stdclass(); $lang->programplan->error->percentNumber = '"Workload %" must be digits.'; $lang->programplan->error->planFinishSmall = 'The "End" date must be > the "Begin" date.'; -$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100%.'; +$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100% of one stage.'; $lang->programplan->error->createdTask = 'The task has been decomposed. Sub phases cannot be added.'; $lang->programplan->error->parentWorkload = 'The sum of the workload of the child phase cannot be greater than that of the parent phase: %s.'; +$lang->programplan->error->sameType = 'Type of the stage must be as same as parent: "%s"'; diff --git a/module/programplan/lang/zh-cn.php b/module/programplan/lang/zh-cn.php index 6bb4359a30..535813cf86 100644 --- a/module/programplan/lang/zh-cn.php +++ b/module/programplan/lang/zh-cn.php @@ -20,6 +20,7 @@ $lang->programplan->delete = '删除阶段'; $lang->programplan->close = '关闭阶段'; $lang->programplan->activate = '激活阶段'; $lang->programplan->createSubPlan = '创建子阶段'; +$lang->programplan->subPlanManage = '子阶段的管理方法'; $lang->programplan->parent = '父阶段'; $lang->programplan->emptyParent = '无'; @@ -72,6 +73,7 @@ $lang->programplan->emptyBegin = '『计划开始』日期不能为空'; $lang->programplan->emptyEnd = '『计划完成』日期不能为空'; $lang->programplan->checkBegin = '『计划开始』应当为合法的日期'; $lang->programplan->checkEnd = '『计划完成』应当为合法的日期'; +$lang->programplan->methodTip = '您可以在该阶段下选择继续创建阶段或创建迭代/看板进行工作。迭代/看板不支持继续拆分。'; $lang->programplan->milestoneList[1] = '是'; $lang->programplan->milestoneList[0] = '否'; @@ -82,7 +84,7 @@ $lang->programplan->delayList[0] = '否'; $lang->programplan->typeList = array(); $lang->programplan->typeList['stage'] = '阶段'; -$lang->programplan->typeList['agileplus'] = '迭代/看板'; +$lang->programplan->typeList['agileplus'] = $lang->executionCommon . '/看板'; $lang->programplan->noData = '暂无数据。'; $lang->programplan->children = '二级计划'; @@ -110,15 +112,17 @@ $lang->programplan->ganttCustom['delayDays'] = '延期天数'; $lang->programplan->error = new stdclass(); $lang->programplan->error->percentNumber = '"工作量占比"必须为数字'; $lang->programplan->error->planFinishSmall = '"计划完成时间"必须大于"计划开始时间"'; -$lang->programplan->error->percentOver = '工作量占比累计不应当超过100%'; +$lang->programplan->error->percentOver = '相同父阶段的子阶段工作量占比之和不超过100%'; $lang->programplan->error->createdTask = '已分解任务,不可添加子阶段'; $lang->programplan->error->parentWorkload = '子阶段的工作量之和不能大于父阶段的工作量:%s'; -$lang->programplan->error->parentDuration = '子阶段计划开始、计划完成不能超过父阶段'; +$lang->programplan->error->letterParent = "子阶段计划开始不能超过父阶段的计划开始时间 %s"; +$lang->programplan->error->greaterParent = "子阶段计划完成不能超过父阶段的计划完成时间 %s"; $lang->programplan->error->sameName = '阶段名称不能相同!'; $lang->programplan->error->sameCode = '阶段代号不能相同!'; $lang->programplan->error->taskDrag = '%s的任务不可以拖动'; $lang->programplan->error->planDrag = '%s的阶段不可以拖动'; -$lang->programplan->error->notStage = '迭代/看板不支持创建子阶段'; +$lang->programplan->error->notStage = $lang->executionCommon . '/看板不支持创建子阶段'; +$lang->programplan->error->sameType = '父阶段类型为"%s",阶段类型需与父阶段一致'; $lang->programplan->ganttBrowseType['gantt'] = '按阶段分组'; $lang->programplan->ganttBrowseType['assignedTo'] = '按指派给分组'; diff --git a/module/programplan/model.php b/module/programplan/model.php index 15d82b1d11..0d174a533c 100755 --- a/module/programplan/model.php +++ b/module/programplan/model.php @@ -53,10 +53,12 @@ class programplanModel extends model public function getStage($executionID = 0, $productID = 0, $browseType = 'all', $orderBy = 'id_asc') { if(empty($executionID)) return array(); + $projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($executionID)->fetch('model'); $plans = $this->dao->select('t1.*')->from(TABLE_EXECUTION)->alias('t1') ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.project') - ->where('t1.type')->eq('stage') + ->where('1 = 1') + ->beginIF($projectModel != 'waterfallplus')->andWhere('t1.type')->eq('stage')->fi() ->beginIF($productID)->andWhere('t2.product')->eq($productID)->fi() ->beginIF($browseType == 'all')->andWhere('t1.project')->eq($executionID)->fi() ->beginIF($browseType == 'parent')->andWhere('t1.parent')->eq($executionID)->fi() @@ -121,7 +123,7 @@ class programplanModel extends model */ public function getPairs($executionID, $productID = 0, $type = 'all') { - $plans = $this->getStage($executionID, $productID, 'all', $orderBy); + $plans = $this->getStage($executionID, $productID, $type); $pairs = array(0 => ''); @@ -199,7 +201,7 @@ class programplanModel extends model $data->type = 'plan'; $data->text = empty($plan->milestone) ? $plan->name : $plan->name . $isMilestone ; $data->name = $plan->name; - $data->percent = $plan->percent; + if(isset($this->config->setPercent) and $this->config->setPercent == 1) $data->percent = $plan->percent; $data->attribute = zget($this->lang->stage->typeList, $plan->attribute); $data->milestone = zget($this->lang->programplan->milestoneList, $plan->milestone); $data->owner_id = $plan->PM; @@ -712,9 +714,10 @@ class programplanModel extends model $sameNames = array_diff_assoc($names, array_unique($names)); $project = $this->loadModel('project')->getByID($projectID); - $setCode = (!isset($this->config->setCode) or $this->config->setCode == 1) ? true : false; - $sameCodes = $this->checkCodeUnique($codes, isset($planIDList) ? $planIDList : ''); + $setCode = (isset($this->config->setCode) and $this->config->setCode == 1) ? true : false; + $sameCodes = $setCode ? $this->checkCodeUnique($codes, isset($planIDList) ? $planIDList : '') : false; + $setPercent = (isset($this->config->setPercent) and $this->config->setPercent == 1) ? true : false; $datas = array(); foreach($names as $key => $name) { @@ -726,8 +729,8 @@ class programplanModel extends model $plan->project = $projectID; $plan->parent = $parentID ? $parentID : $projectID; $plan->name = $names[$key]; - if($setCode) $plan->code = $codes[$key]; - $plan->percent = $percents[$key]; + if($setCode) $plan->code = $codes[$key]; + if($setPercent) $plan->percent = $percents[$key]; $plan->attribute = (empty($parentID) or $parentAttribute == 'mix') ? $attributes[$key] : $parentAttribute; $plan->milestone = $milestone[$key]; $plan->begin = empty($begin[$key]) ? '0000-00-00' : $begin[$key]; @@ -749,9 +752,9 @@ class programplanModel extends model foreach($datas as $index => $plan) { if(!empty($sameNames) and in_array($plan->name, $sameNames)) dao::$errors[$index]['name'] = empty($type) ? $this->lang->programplan->error->sameName : str_replace($this->lang->execution->stage, '', $this->lang->programplan->error->sameName); - if($setCode and $sameCodes !== true and !empty($sameCodes) and in_array($plan->code, $sameCodes)) dao::$errors[$index]['code'] = sprintf($this->lang->error->repeat, $this->lang->execution->code, $plan->code); + if($setCode and $sameCodes !== true and !empty($sameCodes) and in_array($plan->code, $sameCodes)) dao::$errors[$index]['code'] = sprintf($this->lang->error->repeat, $plan->type == 'stage' ? $this->lang->execution->code : $this->lang->code, $plan->code); - if($plan->percent and !preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $plan->percent)) + if($setPercent and $plan->percent and !preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $plan->percent)) { dao::$errors[$index]['percent'] = $this->lang->programplan->error->percentNumber; } @@ -775,10 +778,13 @@ class programplanModel extends model { dao::$errors[$index]['end'] = $this->lang->programplan->error->planFinishSmall; } - if(isset($parentStage) and ($plan->end > $parentStage->end || $plan->begin < $parentStage->begin)) + if(isset($parentStage) and $plan->begin < $parentStage->begin) { - if($plan->begin < $parentStage->begin and empty(dao::$errors[$index]['begin'])) dao::$errors[$index]['begin'] = $this->lang->programplan->error->parentDuration; - if($plan->end < $parentStage->end and empty(dao::$errors[$index]['end'])) dao::$errors[$index]['end'] = $this->lang->programplan->error->parentDuration; + dao::$errors[$index]['begin'] = sprintf($this->lang->programplan->error->letterParent, $parentStage->begin); + } + if(isset($parentStage) and $plan->end > $parentStage->end) + { + dao::$errors[$index]['end'] = sprintf($this->lang->programplan->error->greaterParent, $parentStage->end); } if($plan->begin < $project->begin and empty(dao::$errors[$index]['begin'])) { @@ -793,7 +799,7 @@ class programplanModel extends model if(helper::isZeroDate($plan->end)) $plan->end = ''; if($setCode and empty($plan->code)) { - dao::$errors[$index]['code'] = sprintf($this->lang->error->notempty, $this->lang->execution->code); + dao::$errors[$index]['code'] = sprintf($this->lang->error->notempty, $plan->type == 'stage' ? $this->lang->execution->code : $this->lang->code); } foreach(explode(',', $this->config->programplan->create->requiredFields) as $field) { @@ -804,13 +810,16 @@ class programplanModel extends model } } - $plan->percent = (float)$plan->percent; - $totalPercent += $plan->percent; + if($setPercent) + { + $plan->percent = (float)$plan->percent; + $totalPercent += $plan->percent; + } if($plan->milestone) $milestone = 1; } - if($totalPercent > 100) dao::$errors['percent'] = $this->lang->programplan->error->percentOver; + if($setPercent and $totalPercent > 100) dao::$errors['percent'] = $this->lang->programplan->error->percentOver; if(dao::isError()) return false; $this->loadModel('action'); @@ -833,6 +842,22 @@ class programplanModel extends model } } + $linkProducts = array(); + $linkBranches = array(); + $productList = $this->loadModel('product')->getProducts($projectID); + if($project->division) + { + $linkProducts = array(0 => $productID); + $linkBranches = array(0 => $productList[$productID]->branches); + } + else + { + $linkProducts = array_keys($productList); + foreach($linkProducts as $index => $productID) $linkBranches[$index] = $productList[$productID]->branches; + } + $this->post->set('products', $linkProducts); + $this->post->set('branch', $linkBranches); + foreach($datas as $data) { /* Set planDuration and realDuration. */ @@ -846,10 +871,11 @@ class programplanModel extends model $data->days = helper::diffDate($data->end, $data->begin) + 1; $data->order = current($orders); + if($data->id) { $stageID = $data->id; - unset($data->id); + unset($data->id, $data->type); $oldStage = $this->getByID($stageID); $planChanged = ($oldStage->name != $data->name || $oldStage->milestone != $data->milestone || $oldStage->begin != $data->begin || $oldStage->end != $data->end); @@ -858,7 +884,7 @@ class programplanModel extends model $this->dao->update(TABLE_PROJECT)->data($data) ->autoCheck() ->batchCheck($this->config->programplan->edit->requiredFields, 'notempty') - ->checkIF($plan->percent != '', 'percent', 'float') + ->checkIF($plan->percent != '' and $setPercent, 'percent', 'float') ->where('id')->eq($stageID) ->exec(); @@ -915,7 +941,7 @@ class programplanModel extends model $this->dao->insert(TABLE_PROJECT)->data($data) ->autoCheck() ->batchCheck($this->config->programplan->create->requiredFields, 'notempty') - ->checkIF($plan->percent != '', 'percent', 'float') + ->checkIF($plan->percent != '' and $setPercent, 'percent', 'float') ->exec(); if(!dao::isError()) @@ -985,22 +1011,6 @@ class programplanModel extends model $this->computeProgress($stageID, 'create'); } } - - $linkProducts = array(); - $linkBranches = array(); - $productList = $this->loadModel('product')->getProducts($projectID); - if($project->division) - { - $linkProducts = array(0 => $productID); - $linkBranches = array(0 => $productList[$productID]->branches); - } - else - { - $linkProducts = array_keys($productList); - foreach($linkProducts as $index => $productID) $linkBranches[$index] = $productList[$productID]->branches; - } - $this->post->set('products', $linkProducts); - $this->post->set('branch', $linkBranches); $this->execution->updateProducts($stageID); /* If child plans has milestone, update parent plan set milestone eq 0 . */ @@ -1024,17 +1034,26 @@ class programplanModel extends model $stage = $this->dao->select('id,type,parent,path,grade')->from(TABLE_PROJECT)->where('id')->eq($planID)->fetch(); $parent = $this->dao->select('id,type,parent,path,grade')->from(TABLE_PROJECT)->where('id')->eq($stage->parent)->fetch(); + $this->loadModel('execution'); if($parent->type == 'project') { $path['path'] = ",{$parent->id},{$stage->id},"; $path['grade'] = 1; } - elseif($parent->type == 'stage') + elseif(isset($this->lang->execution->typeList[$parent->type])) { $path['path'] = $parent->path . "{$stage->id},"; $path['grade'] = $parent->grade + 1; + + $children = $this->execution->getChildExecutions($planID); } + $this->dao->update(TABLE_PROJECT)->set('path')->eq($path['path'])->set('grade')->eq($path['grade'])->where('id')->eq($stage->id)->exec(); + + if(!empty($children)) + { + foreach($children as $id => $child) $this->setTreePath($id); + } } /** @@ -1063,16 +1082,21 @@ class programplanModel extends model if(dao::isError()) return false; if($plan->parent) $parentStage = $this->getByID($plan->parent); - if(isset($parentStage) and ($plan->end > $parentStage->end || $plan->begin < $parentStage->begin)) + if(isset($parentStage) and $plan->begin < $parentStage->begin) { - dao::$errors['message'][] = $this->lang->programplan->error->parentDuration; + dao::$errors['begin'] = sprintf($this->lang->programplan->error->letterParent, $parentStage->begin); + return false; + } + if(isset($parentStage) and $plan->end > $parentStage->end) + { + dao::$errors['end'] = sprintf($this->lang->programplan->error->greaterParent, $parentStage->end); return false; } if($projectID) $this->loadModel('execution')->checkBeginAndEndDate($projectID, $plan->begin, $plan->end); if(dao::isError()) return false; - $setCode = (!isset($this->config->setCode) or $this->config->setCode == 1) ? true : false; + $setCode = (isset($this->config->setCode) and $this->config->setCode == 1) ? true : false; if($setCode and empty($plan->code)) { dao::$errors['code'][] = sprintf($this->lang->error->notempty, $this->lang->execution->code); @@ -1081,15 +1105,18 @@ class programplanModel extends model $planChanged = ($oldPlan->name != $plan->name || $oldPlan->milestone != $plan->milestone || $oldPlan->begin != $plan->begin || $oldPlan->end != $plan->end); + $setPercent = isset($this->config->setPercent) and $this->config->setPercent == 1 ? true : false; if($plan->parent > 0) { $plan->attribute = $parentStage->attribute == 'mix' ? $plan->attribute : $parentStage->attribute; $plan->acl = $parentStage->acl; - $parentPercent = $parentStage->percent; - - $childrenTotalPercent = $this->getTotalPercent($parentStage, true); - $childrenTotalPercent = $plan->parent == $oldPlan->parent ? ($childrenTotalPercent - $oldPlan->percent + $plan->percent) : ($childrenTotalPercent + $plan->percent); - if($childrenTotalPercent > 100) return dao::$errors['percent'][] = $this->lang->programplan->error->percentOver; + if($setPercent) + { + $parentPercent = $parentStage->percent; + $childrenTotalPercent = $this->getTotalPercent($parentStage, true); + $childrenTotalPercent = $plan->parent == $oldPlan->parent ? ($childrenTotalPercent - $oldPlan->percent + $plan->percent) : ($childrenTotalPercent + $plan->percent); + if($childrenTotalPercent > 100) return dao::$errors['percent'][] = $this->lang->programplan->error->percentOver; + } /* If child plan has milestone, update parent plan set milestone eq 0 . */ if($plan->milestone and $parentStage->milestone) $this->dao->update(TABLE_PROJECT)->set('milestone')->eq(0)->where('id')->eq($oldPlan->parent)->exec(); @@ -1102,9 +1129,12 @@ class programplanModel extends model /* The workload of the parent plan cannot exceed 100%. */ $oldPlan->parent = $plan->parent; - $totalPercent = $this->getTotalPercent($oldPlan); - $totalPercent = $totalPercent + $plan->percent; - if($totalPercent > 100) return dao::$errors['percent'][] = $this->lang->programplan->error->percentOver; + if($setPercent) + { + $totalPercent = $this->getTotalPercent($oldPlan); + $totalPercent = $totalPercent + $plan->percent; + if($totalPercent > 100) return dao::$errors['percent'][] = $this->lang->programplan->error->percentOver; + } } /* Set planDuration and realDuration. */ @@ -1141,7 +1171,7 @@ class programplanModel extends model $this->updateSubStageAttr($planID, $plan->attribute); if($plan->acl != 'open') { - $planIdList = $this->dao->select('id')->from(TABLE_EXECUTION)->where('path')->like("%,$planID,%")->andWhere('type')->eq('stage')->fetchAll('id'); + $planIdList = $this->dao->select('id')->from(TABLE_EXECUTION)->where('path')->like("%,$planID,%")->andWhere('type')->ne('project')->fetchAll('id'); $this->loadModel('user')->updateUserView(array_keys($planIdList), 'sprint'); } @@ -1346,15 +1376,15 @@ class programplanModel extends model public function checkCodeUnique($codes, $planIDList) { $codes = array_filter($codes); - if(count(array_unique($codes)) != count($codes)) return false; - $code = $this->dao->select('code')->from(TABLE_EXECUTION) + $sameCodes = $this->dao->select('code')->from(TABLE_EXECUTION) ->where('type')->in('sprint,stage,kanban') ->andWhere('deleted')->eq('0') ->andWhere('code')->in($codes) ->beginIF($planIDList)->andWhere('id')->notin($planIDList)->fi() ->fetchPairs('code'); - return $code ? $code : true; + if(count(array_unique($codes)) != count($codes)) $sameCodes += array_diff_assoc($codes, array_unique($codes)); + return $sameCodes ? $sameCodes : true; } /** @@ -1475,8 +1505,9 @@ class programplanModel extends model */ public function computeProgress($stageID, $action = '', $isParent = false) { - $stage = $this->loadModel('execution')->getByID($stageID); - if(empty($stage) or empty($stage->path) or $stage->type != 'stage') return false; + $stage = $this->loadModel('execution')->getByID($stageID); + $project = $this->loadModel('project')->getByID($stage->project); + if(empty($stage) or empty($stage->path) or ($project->model != 'waterfall' and $project->model != 'waterfallplus')) return false; $this->loadModel('execution'); $this->loadModel('action'); @@ -1486,7 +1517,7 @@ class programplanModel extends model foreach($parentIdList as $id) { $parent = $this->execution->getByID($id); - if($parent->type != 'stage' or (!$isParent and $id == $stageID)) continue; + if(empty($this->lang->execution->typeList[$parent->type]) or (!$isParent and $id == $stageID)) continue; $statusCount = array(); $children = $this->execution->getChildExecutions($parent->id); @@ -1494,20 +1525,13 @@ class programplanModel extends model $startTasks = $this->dao->select('count(1) as count')->from(TABLE_TASK)->where('deleted')->eq(0)->andWhere('execution')->in($allChildren)->andWhere('consumed')->ne(0)->fetch('count'); foreach($children as $childID => $childExecution) $statusCount[$childExecution->status] = empty($statusCount[$childExecution->status]) ? 1 : $statusCount[$childExecution->status] ++; + if(empty($statusCount)) continue; + if(isset($statusCount['wait']) and count($statusCount) == 1 and helper::isZeroDate($parent->realBegan) and $startTasks == 0) { if($parent->status != 'wait') { - $newParent = new stdclass(); - $newParent->status = 'wait'; - $newParent->realBegan = ''; - $newParent->closedDate = ''; - $newParent->closedBy = ''; - $newParent->canceledDate = ''; - $newParent->canceledBy = ''; - $newParent->suspendedDate = ''; - $newParent->lastEditedBy = $this->app->user->account; - $newParent->lastEditedDate = helper::now(); + $newParent = $this->execution->buildExecutionByStatus('wait'); $parentAction = 'waitbychild'; } } @@ -1515,12 +1539,7 @@ class programplanModel extends model { if($parent->status != 'closed') { - $newParent = new stdclass(); - $newParent->status = 'closed'; - $newParent->closedDate = helper::now(); - $newParent->closedBy = $this->app->user->account; - $newParent->lastEditedBy = $this->app->user->account; - $newParent->lastEditedDate = helper::now(); + $newParent = $this->execution->buildExecutionByStatus('closed'); $parentAction = 'closedbychild'; } } @@ -1528,11 +1547,7 @@ class programplanModel extends model { if($parent->status != 'suspended') { - $newParent = new stdclass(); - $newParent->status = 'suspended'; - $newParent->suspendedDate = helper::now(); - $newParent->lastEditedBy = $this->app->user->account; - $newParent->lastEditedDate = helper::now(); + $newParent = $this->execution->buildExecutionByStatus('suspended'); $parentAction = 'suspendedbychild'; } } @@ -1540,16 +1555,7 @@ class programplanModel extends model { if($parent->status != 'doing') { - $newParent = new stdclass(); - $newParent->status = 'doing'; - $newParent->realBegan = helper::today(); - $newParent->closedDate = ''; - $newParent->closedBy = ''; - $newParent->canceledDate = ''; - $newParent->canceledBy = ''; - $newParent->suspendedDate = ''; - $newParent->lastEditedBy = $this->app->user->account; - $newParent->lastEditedDate = helper::now(); + $newParent = $this->execution->buildExecutionByStatus('doing'); $parentAction = $parent->status == 'wait' ?'startbychildstart' : 'startbychild' . $action; } } @@ -1578,7 +1584,7 @@ class programplanModel extends model } /** - * Change whether it is the top stage. + * Check whether it is the top stage. * * @param int $planID * @access public @@ -1597,23 +1603,82 @@ class programplanModel extends model * * @param int $planID * @param string $attribute - * @param bool $withDeleted * @access public * @return bool */ - public function updateSubStageAttr($planID, $attribute, $withDeleted = false) + public function updateSubStageAttr($planID, $attribute) { if($attribute == 'mix') return true; $subStageList = $this->dao->select('id')->from(TABLE_EXECUTION) ->where('parent')->eq($planID) - ->beginIF(!$withDeleted)->andWhere('deleted')->eq(0)->fi() + ->andWhere('deleted')->eq(0) ->fetchAll('id'); $this->dao->update(TABLE_EXECUTION)->set('attribute')->eq($attribute)->where('id')->in(array_keys($subStageList))->exec(); foreach($subStageList as $childID => $subStage) { - $this->updateSubStageAttr($childID, $attribute, $withDeleted); + $this->updateSubStageAttr($childID, $attribute); } } + + /** + * Get plan and its children. + * + * @param string|int|array $planIdList + * @access public + * @return array + */ + public function getSelfAndChildrenList($planIdList) + { + if(is_numeric($planIdList)) $planIdList = (array)$planIdList; + + $planList = $this->dao->select('t2.*')->from(TABLE_EXECUTION)->alias('t1') + ->leftJoin(TABLE_EXECUTION)->alias('t2')->on('FIND_IN_SET(t1.id,t2.`path`)') + ->where('t1.id')->in($planIdList) + ->andWhere('t2.deleted')->eq(0) + ->fetchAll('id'); + + $selfAndChildrenList = array(); + foreach($planIdList as $planID) + { + if(!isset($selfAndChildrenList[$planID])) $selfAndChildrenList[$planID] = array(); + foreach($planList as $plan) + { + if(strpos($plan->path, ",$planID,") !== false) $selfAndChildrenList[$planID][$plan->id] = $plan; + } + } + + return $selfAndChildrenList; + } + + /** + * Get plan's siblings. + * + * @param string|int|array $planIdList + * @access public + * @return array + */ + public function getSiblings($planIdList) + { + if(is_numeric($planIdList)) $planIdList = (array)$planIdList; + + $siblingsList = $this->dao->select('t1.*')->from(TABLE_EXECUTION)->alias('t1') + ->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.parent=t2.parent') + ->where('t2.id')->in($planIdList) + ->andWhere('t1.deleted')->eq(0) + ->fetchAll('id'); + + $siblingStages = array(); + foreach($planIdList as $planID) + { + if(!isset($siblingStages[$planID])) $siblingStages[$planID] = array(); + foreach($siblingsList as $sibling) + { + if($siblingsList[$planID]->parent == $sibling->parent) $siblingStages[$planID][$sibling->id] = $sibling; + } + } + + return $siblingStages; + } } diff --git a/module/programplan/view/create.html.php b/module/programplan/view/create.html.php index d719335d9d..22981125a1 100644 --- a/module/programplan/view/create.html.php +++ b/module/programplan/view/create.html.php @@ -45,18 +45,24 @@
    model == 'waterfallplus'):?>
    -
    - programplan->typeList, $executionType);?> -
    +
    + programplan->typeList) > 1) + { foreach($lang->programplan->typeList as $key => $value) { - $class = $executionType == $key ? 'class="active"' : ''; - echo "
  • " . html::a($this->createLink('programplan', 'create', "projectID=$project->id&productID=$productID&planID=$planID&type=$key"), $value) . "
  • "; + $label = ""; + echo html::a($this->createLink('programplan', 'create', "projectID=$project->id&productID=$productID&planID=$planID&type=$key"), $label); } - ?> - + } + else + { + echo zget($lang->programplan->typeList, $executionType); + } + ?>
    +
    @@ -76,7 +82,7 @@
    execution->method;?> nameAB;?>execution->code : $lang->code;?> '>programplan->PM : $lang->programplan->PMAB;?>
    code) ? $stage->code : '', "class='form-control'");?> >
    execution->typeList, $plan->type, "class='form-control chosen'");?>execution->typeList, $plan->type);?>'>execution->typeList, $plan->type);?> code, "class='form-control'");?> >PM, "class='form-control picker-select'");?>
    execution->typeList, '', "class='form-control chosen'");?> >
    execution->code;?> code, "class='form-control'");?>programplan->PM;?>
    programplan->percent;?> @@ -55,11 +56,15 @@
    programplan->attribute;?> stage->typeList, $plan->attribute, "class='form-control'") : zget($lang->stage->typeList, $plan->attribute);?> + +
    project->parent;?> project->name;?>project->code;?> project->PM;?> name, "class='form-control'");?>code, "class='form-control'");?> PM, "class='form-control chosen'");?>
    project->code;?> name, "class='form-control' required");?>
    project->code;?> code, "class='form-control' required");?> execution->totalEstimate;?> totalEstimate . $lang->execution->workHour;?> execution->totalDays;?>days;?>days . $lang->execution->day;?>
    execution->totalConsumed;?>
    + + + + + + + + + + $assign):?> + + + + + $count):?> + ';?> + + + + + + '; $id ++;?> + + + + +
    report->user;?>report->product;?>report->bugTotal;?>report->total;?>
    + createLink('product', 'view', "product={$count['productID']}") : $this->createLink('project', 'view', "projectID={$count['projectID']}");?> + + + +
    + + + - -
    -
    -
    -
    - -
    -
    - - - - - - - - - - - $assign):?> - - - - - $count):?> - ';?> - - - - - - '; $id ++;?> - - - - -
    report->user;?>report->product;?>report->bugTotal;?>report->total;?>
    - createLink('product', 'view', "product={$count['productID']}") : $this->createLink('project', 'view', "projectID={$count['projectID']}");?> - - - -
    -
    -
    -
    - - + diff --git a/module/report/view/bugcreate.html.php b/module/report/view/bugcreate.html.php index c330149633..f3dd5bb8ae 100644 --- a/module/report/view/bugcreate.html.php +++ b/module/report/view/bugcreate.html.php @@ -1,80 +1,85 @@ - - -
    -
    -

    error->noData;?>

    -
    -
    - + -
    -
    -
    -
    - report->bugOpenedDate;?> -
    - report->to;?> -
    -
    -
    -
    -
    - report->product;?> - -
    -
    -
    -
    - execution->common;?> - -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - - - - - - bug->resolutionList as $resolutionType => $resolution):?> - - - - - - - - - $bug):?> - - - - - bug->resolutionList as $resolutionType => $resolution):?> - - - - - - - - -
    bug->openedBy;?>bug->unResolved;?>report->validRate;?>report->total;?>
    -
    -
    -
    - +config->edition != 'open'):?> + + +
    + +
    +
    +
    +
    +
    + report->bugOpenedDate;?> +
    + report->to;?> +
    +
    +
    +
    +
    + report->product;?> + +
    +
    +
    +
    + execution->common;?> + +
    +
    +
    +
    + +
    +
    +

    error->noData;?>

    +
    +
    + +
    +
    +
    +
    + +
    +
    + + + + + + bug->resolutionList as $resolutionType => $resolution):?> + + + + + + + + + $bug):?> + + + + + bug->resolutionList as $resolutionType => $resolution):?> + + + + + + + + +
    bug->openedBy;?>bug->unResolved;?>report->validRate;?>report->total;?>
    +
    +
    +
    + +
    +
    + diff --git a/module/report/view/productsummary.html.php b/module/report/view/productsummary.html.php index 13ad80079b..52e182bf8f 100644 --- a/module/report/view/productsummary.html.php +++ b/module/report/view/productsummary.html.php @@ -1,109 +1,114 @@ - config->edition != 'open'):?> -#mainContent > .side-col.col-lg{width: 235px} -.hide-sidebar #sidebar{width: 0 !important} + + - - -
    -
    -

    error->noData;?>

    +
    + -
    - -
    -
    -
    -
    -
    -
    -
    -
    - /> - -
    -
    - /> - +
    + +
    +
    +

    error->noData;?>

    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + /> + +
    +
    + /> + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + plans) ? count($product->plans) : 1;?> + + + plans)):?> + + plans as $plan):?> + + "?> + parent) and $plan->parent > 0 and isset($product->plans[$plan->parent])) ? ' child' : '';?> + + + + status['draft']) ? $plan->status['draft'] : 0; + $reviewingCount = isset($plan->status['reviewing']) ? $plan->status['reviewing'] : 0; + $activeCount = isset($plan->status['active']) ? $plan->status['active'] : 0; + $changedCount = isset($plan->status['changing']) ? $plan->status['changing'] : 0; + $closedCount = isset($plan->status['closed']) ? $plan->status['closed'] : 0; + ?> + + + + + + + "?> + + + + + + + + + + + + + + + + + + + +
    product->name;?>report->PO;?>productplan->common;?>productplan->begin;?>productplan->end;?>story->statusList['draft'];?>story->statusList['reviewing'];?>story->statusList['active'];?>story->statusList['changing'];?>story->statusList['closed'];?>report->total;?>
    " . html::a($this->createLink('product', 'view', "product=$product->id"), $product->name) . "

    ";?>
    " . zget($users, $product->PO) . '

    ';?>
    title;?>begin == '2030-01-01' ? $lang->productplan->future : $plan->begin;?>end == '2030-01-01' ? $lang->productplan->future : $plan->end;?>000000
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - plans) ? count($product->plans) : 1;?> - - - plans)):?> - - plans as $plan):?> - - "?> - parent) and $plan->parent > 0 and isset($product->plans[$plan->parent])) ? ' child' : '';?> - - - - status['draft']) ? $plan->status['draft'] : 0; - $reviewingCount = isset($plan->status['reviewing']) ? $plan->status['reviewing'] : 0; - $activeCount = isset($plan->status['active']) ? $plan->status['active'] : 0; - $changedCount = isset($plan->status['changing']) ? $plan->status['changing'] : 0; - $closedCount = isset($plan->status['closed']) ? $plan->status['closed'] : 0; - ?> - - - - - - - "?> - - - - - - - - - - - - - - - - - - - -
    product->name;?>report->PO;?>productplan->common;?>productplan->begin;?>productplan->end;?>story->statusList['draft'];?>story->statusList['reviewing'];?>story->statusList['active'];?>story->statusList['changing'];?>story->statusList['closed'];?>report->total;?>
    " . html::a($this->createLink('product', 'view', "product=$product->id"), $product->name) . "

    ";?>
    " . zget($users, $product->PO) . '

    ';?>
    title;?>begin == '2030-01-01' ? $lang->productplan->future : $plan->begin;?>end == '2030-01-01' ? $lang->productplan->future : $plan->end;?>000000
    +
    - - + diff --git a/module/report/view/projectdeviation.html.php b/module/report/view/projectdeviation.html.php index 78df99f523..04924161d5 100644 --- a/module/report/view/projectdeviation.html.php +++ b/module/report/view/projectdeviation.html.php @@ -1,160 +1,163 @@ - - -
    -
    -

    error->noData;?>

    -
    -
    - + - array(), 'data' => array());?> -
    -
    -
    -
    - report->execution . $lang->report->begin;?> -
    -
    -
    -
    -
    - report->execution . $lang->report->end;?> -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - -
    - -
    -
    - - - - - - - - - - - - - - $execution):?> - - - - - - - consumed - $execution->estimate, 2);?> - - - - - -
    report->id;?>report->project;?>report->execution;?>report->estimate;?>report->consumed;?>report->deviation;?>report->deviationRate;?>
    - name ? $execution->projectName : html::a($this->createLink('project', 'index', "projectID=$execution->projectID"), $execution->projectName);?> - - multiple):?> - name ? html::a($this->createLink('execution', 'view', "executionID=$id"), $execution->name) : '';?> - - null;?> - - estimate, 2);?>consumed, 2);?> - 0) - { - echo '' . $deviation; - } - else if($deviation < 0) - { - echo '' . abs($deviation); - } - else - { - echo '0'; - } - ?> - - estimate ? round($deviation / $execution->estimate * 100, 2) : 'n/a'; - if($num >= 50) - { - echo '' . $num . '%'; - } - elseif($num >= 30) - { - echo '' . $num . '%'; - } - elseif($num >= 10) - { - echo '' . $num . '%'; - } - elseif($num > 0) - { - echo '' . abs($num) . '%'; - } - elseif($num <= -20) - { - echo '' . abs($num) . '%'; - } - elseif($num < 0) - { - echo '' . abs($num) . '%'; - } - elseif($num == 'n/a') - { - echo '' . $num . ''; - } - else - { - echo '' . abs($num) . '%'; - } - - $chartData['labels'][] = $execution->name; - $chartData['data'][] = $deviation; - ?> -
    -
    -
    -
    - -
    - 30) - { - $chartData['labels'] = array_slice($chartData['labels'], 0, 30); - $chartData['data'] = array_slice($chartData['data'], 0, 30); - } - ?> -
    -
    -
    report->deviationChart?>
    -
    -
    - -
    -
    -
    +config->edition != 'open'):?> + + + array(), 'data' => array());?> +
    + +
    +
    +
    +
    +
    + report->execution . $lang->report->begin;?> +
    +
    +
    +
    +
    + report->execution . $lang->report->end;?> +
    +
    +
    +
    +
    + +
    +
    +

    error->noData;?>

    +
    +
    + +
    +
    +
    +
    + + + +
    + +
    +
    + + + + + + + + + + + + + + $execution):?> + + + + + + + consumed - $execution->estimate, 2);?> + + + + + +
    report->id;?>report->project;?>report->execution;?>report->estimate;?>report->consumed;?>report->deviation;?>report->deviationRate;?>
    + name ? $execution->projectName : html::a($this->createLink('project', 'index', "projectID=$execution->projectID"), $execution->projectName);?> + + multiple):?> + name ? html::a($this->createLink('execution', 'view', "executionID=$id"), $execution->name) : '';?> + + null;?> + + estimate, 2);?>consumed, 2);?> + 0) + { + echo '' . $deviation; + } + else if($deviation < 0) + { + echo '' . abs($deviation); + } + else + { + echo '0'; + } + ?> + + estimate ? round($deviation / $execution->estimate * 100, 2) : 'n/a'; + if($num >= 50) + { + echo '' . $num . '%'; + } + elseif($num >= 30) + { + echo '' . $num . '%'; + } + elseif($num >= 10) + { + echo '' . $num . '%'; + } + elseif($num > 0) + { + echo '' . abs($num) . '%'; + } + elseif($num <= -20) + { + echo '' . abs($num) . '%'; + } + elseif($num < 0) + { + echo '' . abs($num) . '%'; + } + elseif($num == 'n/a') + { + echo '' . $num . ''; + } + else + { + echo '' . abs($num) . '%'; + } + + $chartData['labels'][] = $execution->name; + $chartData['data'][] = $deviation; + ?> +
    +
    + + +
    + 30) + { + $chartData['labels'] = array_slice($chartData['labels'], 0, 30); + $chartData['data'] = array_slice($chartData['data'], 0, 30); + } + ?> +
    +
    +
    report->deviationChart?>
    +
    +
    + +
    +
    +
    + +
    +
    - + diff --git a/module/report/view/workload.html.php b/module/report/view/workload.html.php index f8529330bf..7574e45f7d 100644 --- a/module/report/view/workload.html.php +++ b/module/report/view/workload.html.php @@ -1,122 +1,127 @@ - + +config->edition != 'open'):?> + + + execution->weekend);?> -
    - -
    -
    -
    - report->dept;?> - -
    -
    -
    -
    - report->beginAndEnd;?> -
    - report->to;?> -
    -
    -
    -
    -
    - report->diffDays;?> - -
    -
    -
    -
    -
    +
    + +
    +
    + +
    +
    - report->workday;?> - + report->dept;?> +
    -
    - report->assign, $assign, "class='form-control' onchange='changeParams(this)'");?> +
    +
    + report->beginAndEnd;?> +
    + report->to;?> +
    +
    -
    - report->query, '', 'btn btn-primary btn-block');?> +
    +
    + report->diffDays;?> + +
    +
    +
    +
    +
    + report->workday;?> + +
    +
    +
    + report->assign, $assign, "class='form-control' onchange='changeParams(this)'");?> +
    +
    + report->query, '', 'btn btn-primary btn-block');?> +
    +
    +
    +
    + +
    + +
    +
    +

    error->noData;?>

    +
    +
    + +
    +
    +
    +
    + +
    + +
    +
    + + + + + + + + + + + + + + + $load):?> + + + + $info) foreach($info['execution'] as $executionName => $executionInfo) $userCount ++;?> + + $info):?> + + $executionInfo) $projectCount ++ ;?> + $executionInfo):?> + ";?> + + + + + + + + + + + + + + + + ";?> + + + + + + + +
    report->user;?>report->project ;?> + report->execution;?>report->task;?>report->remain;?>report->taskTotal;?>report->manhourTotal;?>report->workloadAB;?>
    createLink('project', 'view', "projectID={$info['projectID']}"), $projectName);?>createLink('execution', 'view', "executionID={$executionInfo['executionID']}"), $executionName);?>null;?>
    - -
    - -
    -
    -

    error->noData;?>

    +
    - -
    -
    -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - $load):?> - - - - $info) foreach($info['execution'] as $executionName => $executionInfo) $userCount ++;?> - - $info):?> - - $executionInfo) $projectCount ++ ;?> - $executionInfo):?> - ";?> - - - - - - - - - - - - - - - - ";?> - - - - - - - -
    report->user;?>report->project ;?> - report->execution;?>report->task;?>report->remain;?>report->taskTotal;?>report->manhourTotal;?>report->workloadAB;?>
    createLink('project', 'view', "projectID={$info['projectID']}"), $projectName);?>createLink('execution', 'view', "executionID={$executionInfo['executionID']}"), $executionName);?>null;?>
    -
    -
    -
    - - + diff --git a/module/stage/config.php b/module/stage/config.php index f77eb68cd9..1e76c319bd 100644 --- a/module/stage/config.php +++ b/module/stage/config.php @@ -1,5 +1,13 @@ -stage->create = new stdclass(); $config->stage->edit = new stdclass(); -$config->stage->create->requiredFields = 'name,percent,type'; -$config->stage->edit->requiredFields = 'name,percent,type'; +if(isset($config->setPercent) and $config->setPercent == 1) +{ + $config->stage->create->requiredFields = 'name,percent,type'; + $config->stage->edit->requiredFields = 'name,percent,type'; +} +else +{ + $config->stage->create->requiredFields = 'name,type'; + $config->stage->edit->requiredFields = 'name,type'; +} diff --git a/module/stage/control.php b/module/stage/control.php index 1012136791..fe00fe1b34 100644 --- a/module/stage/control.php +++ b/module/stage/control.php @@ -15,13 +15,19 @@ class stage extends control * Browse stages. * * @param string $orderBy + * @param string $type * @access public * @return void */ - public function browse($orderBy = "id_asc") + public function browse($orderBy = "id_asc", $type = 'waterfall') { - $this->view->stages = $this->stage->getStages($orderBy); + if($type == 'waterfallplus') $this->locate($this->createLink('stage', 'plusBrowse', "orderBy=$orderBy&type=waterfallplus")); + + $this->stage->setMenu($type); + + $this->view->stages = $this->stage->getStages($orderBy, 0, $type); $this->view->orderBy = $orderBy; + $this->view->type = $type; $this->view->title = $this->lang->stage->common . $this->lang->colon . $this->lang->stage->browse; $this->view->position[] = $this->lang->stage->common; $this->view->position[] = $this->lang->stage->browse; @@ -30,16 +36,41 @@ class stage extends control } /** - * Create a stage. + * Browse stages. * + * @param string $orderBy * @access public * @return void */ - public function create() + public function plusBrowse($orderBy = "id_asc", $type = 'waterfallplus') { + if($type == 'waterfall') $this->locate($this->createLink('stage', 'browse', "orderBy=$orderBy&type=waterfall")); + + $this->stage->setMenu($type); + + $this->view->stages = $this->stage->getStages($orderBy, 0, $type); + $this->view->orderBy = $orderBy; + $this->view->type = $type; + $this->view->title = $this->lang->stage->common . $this->lang->colon . $this->lang->stage->browse; + $this->view->position[] = $this->lang->stage->common; + $this->view->position[] = $this->lang->stage->browse; + + $this->display('stage', 'browse'); + } + + /** + * Create a stage. + * + * @param string $type + * @access public + * @return void + */ + public function create($type = 'waterfall') + { + $this->stage->setMenu($type); if($_POST) { - $stageID = $this->stage->create(); + $stageID = $this->stage->create($type); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); $response['result'] = 'success'; @@ -52,7 +83,7 @@ class stage extends control } $this->loadModel('action')->create('stage', $stageID, 'Opened'); - $response['locate'] = inlink('browse'); + $response['locate'] = inlink($type == 'waterfall' ? 'browse' : 'plusBrowse', "orderBy=id_asc&type=$type"); return $this->send($response); } @@ -66,14 +97,16 @@ class stage extends control /** * Batch create stages. * + * @param string $type * @access public * @return void */ - public function batchCreate() + public function batchCreate($type = 'waterfall') { + $this->stage->setMenu($type); if($_POST) { - $this->stage->batchCreate(); + $this->stage->batchCreate($type); $response['result'] = 'success'; $response['message'] = $this->lang->saveSuccess; @@ -84,7 +117,7 @@ class stage extends control return $this->send($response); } - $response['locate'] = inlink('browse'); + $response['locate'] = inlink($type == 'waterfall' ? 'browse' : 'plusBrowse', "orderBy=id_asc&type=$type"); return $this->send($response); } @@ -105,6 +138,7 @@ class stage extends control public function edit($stageID = 0) { $stage = $this->stage->getByID($stageID); + $this->stage->setMenu($stage->projectType); if($_POST) { $changes = $this->stage->update($stageID); @@ -120,7 +154,7 @@ class stage extends control $actionID = $this->loadModel('action')->create('stage', $stageID, 'Edited'); if(!empty($changes)) $this->action->logHistory($actionID, $changes); - $response['locate'] = inlink('browse'); + $response['locate'] = inlink($type == 'waterfall' ? 'browse' : 'plusBrowse', "orderBy=id_asc&type=$stage->projectType"); return $this->send($response); } diff --git a/module/stage/lang/de.php b/module/stage/lang/de.php index e2f736148b..7af6a877ca 100644 --- a/module/stage/lang/de.php +++ b/module/stage/lang/de.php @@ -10,12 +10,13 @@ * @link http://www.zentao.net */ /* Actions. */ -$lang->stage->browse = 'Stage List'; +$lang->stage->browse = 'Waterfall Stage List'; $lang->stage->create = 'Create Stage'; $lang->stage->batchCreate = 'Batch Create'; $lang->stage->edit = 'Edit'; $lang->stage->delete = 'Delete'; $lang->stage->view = 'Details'; +$lang->stage->plusBrowse = 'Waterfall Plus Stage List'; /* Fields. */ $lang->stage->id = 'ID'; diff --git a/module/stage/lang/en.php b/module/stage/lang/en.php index e2f736148b..7af6a877ca 100644 --- a/module/stage/lang/en.php +++ b/module/stage/lang/en.php @@ -10,12 +10,13 @@ * @link http://www.zentao.net */ /* Actions. */ -$lang->stage->browse = 'Stage List'; +$lang->stage->browse = 'Waterfall Stage List'; $lang->stage->create = 'Create Stage'; $lang->stage->batchCreate = 'Batch Create'; $lang->stage->edit = 'Edit'; $lang->stage->delete = 'Delete'; $lang->stage->view = 'Details'; +$lang->stage->plusBrowse = 'Waterfall Plus Stage List'; /* Fields. */ $lang->stage->id = 'ID'; diff --git a/module/stage/lang/fr.php b/module/stage/lang/fr.php index e2f736148b..7af6a877ca 100644 --- a/module/stage/lang/fr.php +++ b/module/stage/lang/fr.php @@ -10,12 +10,13 @@ * @link http://www.zentao.net */ /* Actions. */ -$lang->stage->browse = 'Stage List'; +$lang->stage->browse = 'Waterfall Stage List'; $lang->stage->create = 'Create Stage'; $lang->stage->batchCreate = 'Batch Create'; $lang->stage->edit = 'Edit'; $lang->stage->delete = 'Delete'; $lang->stage->view = 'Details'; +$lang->stage->plusBrowse = 'Waterfall Plus Stage List'; /* Fields. */ $lang->stage->id = 'ID'; diff --git a/module/stage/lang/zh-cn.php b/module/stage/lang/zh-cn.php index 8016239070..a0de0df795 100644 --- a/module/stage/lang/zh-cn.php +++ b/module/stage/lang/zh-cn.php @@ -10,15 +10,16 @@ * @link http://www.zentao.net */ /* Actions. */ -$lang->stage->browse = '阶段列表'; +$lang->stage->browse = '瀑布阶段列表'; $lang->stage->create = '新建'; $lang->stage->batchCreate = '批量新建'; $lang->stage->edit = '编辑'; $lang->stage->delete = '删除'; $lang->stage->view = '阶段详情'; +$lang->stage->plusBrowse = '融合瀑布阶段列表'; /* Fields. */ -$lang->stage->id = '编号'; +$lang->stage->id = 'ID'; $lang->stage->name = '阶段名称'; $lang->stage->type = '阶段类型'; $lang->stage->percent = '工作量占比'; diff --git a/module/stage/model.php b/module/stage/model.php index b4e616d0fe..5303d6d651 100644 --- a/module/stage/model.php +++ b/module/stage/model.php @@ -19,17 +19,21 @@ class stageModel extends model * @access public * @return int|bool */ - public function create() + public function create($type = 'waterfall') { $stage = fixer::input('post') + ->setDefault('projectType', $type) ->add('createdBy', $this->app->user->account) ->add('createdDate', helper::today()) ->get(); - $totalPercent = $this->getTotalPercent(); + if(isset($this->config->setPercent) and $this->config->setPercent == 1) + { + $totalPercent = $this->getTotalPercent($type); - if(!is_numeric($stage->percent)) return dao::$errors['message'][] = $this->lang->stage->error->notNum; - if(round($totalPercent + $stage->percent) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver; + if(!is_numeric($stage->percent)) return dao::$errors['message'][] = $this->lang->stage->error->notNum; + if(round($totalPercent + $stage->percent) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver; + } $this->dao->insert(TABLE_STAGE) ->data($stage) @@ -48,13 +52,16 @@ class stageModel extends model * @access public * @return bool */ - public function batchCreate() + public function batchCreate($type = 'waterfall') { $data = fixer::input('post')->get(); - $totalPercent = $this->getTotalPercent(); - - if(round($totalPercent + array_sum($data->percent)) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver; + $setPercent = (isset($this->config->setPercent) and $this->config->setPercent == 1) ? true : false; + if($setPercent) + { + $totalPercent = $this->getTotalPercent($type); + if(round($totalPercent + array_sum($data->percent)) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver; + } $this->loadModel('action'); foreach($data->name as $i => $name) @@ -63,8 +70,9 @@ class stageModel extends model $stage = new stdclass(); $stage->name = $name; - $stage->percent = $data->percent[$i]; + if($setPercent) $stage->percent = $data->percent[$i]; $stage->type = $data->type[$i]; + $stage->projectType = $type; $stage->createdBy = $this->app->user->account; $stage->createdDate = helper::today(); @@ -98,9 +106,11 @@ class stageModel extends model ->add('editedDate', helper::today()) ->get(); - $totalPercent = $this->getTotalPercent(); - - if(round($totalPercent + $stage->percent - $oldStage->percent) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver; + if(isset($this->config->setPercent) and $this->config->setPercent == 1) + { + $totalPercent = $this->getTotalPercent($oldStage->projectType); + if(round($totalPercent + $stage->percent - $oldStage->percent) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver; + } $this->dao->update(TABLE_STAGE) ->data($stage) @@ -118,10 +128,11 @@ class stageModel extends model * * @param string $orderBy * @param int $projectID + * @param string $type * @access public * @return array */ - public function getStages($orderBy = 'id_desc', $projectID = 0) + public function getStages($orderBy = 'id_desc', $projectID = 0, $type = '') { if($projectID) { @@ -137,7 +148,7 @@ class stageModel extends model } else { - return $this->dao->select('*')->from(TABLE_STAGE)->where('deleted')->eq(0)->orderBy($orderBy)->fetchAll('id'); + return $this->dao->select('*')->from(TABLE_STAGE)->where('deleted')->eq(0)->andWhere('projectType')->eq($type)->orderBy($orderBy)->fetchAll('id'); } } @@ -175,10 +186,41 @@ class stageModel extends model /** * Get stage total percent * - * return string + * @param string $type + * @return string */ - public function getTotalPercent() + public function getTotalPercent($type) { - return $this->dao->select('sum(percent) as total')->from(TABLE_STAGE)->where('deleted')->eq('0')->fetch('total'); + return $this->dao->select('sum(percent) as total')->from(TABLE_STAGE)->where('deleted')->eq('0')->andWhere('projectType')->eq($type)->fetch('total'); + } + + /** + * Set menu. + * + * @param string $type + * @access public + * @return void + */ + public function setMenu($type) + { + $this->app->loadLang('admin'); + $moduleName = $this->app->rawModule; + $methodName = $this->app->rawMethod; + if(!isset($this->lang->admin->menuList->model['subMenu']['waterfall']['exclude'])) $this->lang->admin->menuList->model['subMenu']['waterfall']['exclude'] = ''; + if(!isset($this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'])) $this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'] = ''; + if($type == 'waterfall') + { + $this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'] .= ",{$moduleName}-{$methodName}"; + unset($this->lang->admin->menuList->model['subMenu']['scrum']['subModule']); + unset($this->lang->admin->menuList->model['subMenu']['scrumplus']['subModule']); + unset($this->lang->admin->menuList->model['subMenu']['waterfallplus']['subModule']); + } + if($type == 'waterfallplus') + { + $this->lang->admin->menuList->model['subMenu']['waterfall']['exclude'] .= ",{$moduleName}-{$methodName}"; + unset($this->lang->admin->menuList->model['subMenu']['scrum']['subModule']); + unset($this->lang->admin->menuList->model['subMenu']['waterfall']['subModule']); + unset($this->lang->admin->menuList->model['subMenu']['scrumplus']['subModule']); + } } } diff --git a/module/stage/view/batchcreate.html.php b/module/stage/view/batchcreate.html.php index 6184ee3eaf..8043dcf55b 100644 --- a/module/stage/view/batchcreate.html.php +++ b/module/stage/view/batchcreate.html.php @@ -22,7 +22,9 @@ stage->id;?> stage->name;?> + setPercent) and $config->setPercent == 1):?> stage->percent;?> + stage->type;?> @@ -31,7 +33,9 @@ + setPercent) and $config->setPercent == 1):?> + '') + $lang->stage->typeList, '', "class='form-control chosen'");?> diff --git a/module/stage/view/browse.html.php b/module/stage/view/browse.html.php index 266234a805..e5abf7647f 100644 --- a/module/stage/view/browse.html.php +++ b/module/stage/view/browse.html.php @@ -17,40 +17,32 @@

    stage->noStage;?> - createLink('stage', 'create'), " " . $lang->stage->create, '', "class='btn btn-info'");?> + createLink('stage', 'create', "type={$type}"), " " . $lang->stage->create, '', "class='btn btn-info'");?>

    -
    -
    -
    -
    - stage->setType);?> - stage->browse, '', "class='selected'");?> -
    -
    -
    -
    - + + setPercent) and $config->setPercent == 1):?> + - + @@ -58,12 +50,14 @@ + setPercent) and $config->setPercent == 1):?> + diff --git a/module/stage/view/create.html.php b/module/stage/view/create.html.php index 5e47a980e2..23d83d06b3 100644 --- a/module/stage/view/create.html.php +++ b/module/stage/view/create.html.php @@ -25,15 +25,17 @@ + setPercent) and $config->setPercent == 1):?> + diff --git a/module/stage/view/edit.html.php b/module/stage/view/edit.html.php index 4a258ee822..f23abace37 100644 --- a/module/stage/view/edit.html.php +++ b/module/stage/view/edit.html.php @@ -25,15 +25,17 @@ + setPercent) and $config->setPercent == 1):?> + diff --git a/module/stage/view/settype.html.php b/module/stage/view/settype.html.php index 4dd7d72696..86f5e6fb03 100644 --- a/module/stage/view/settype.html.php +++ b/module/stage/view/settype.html.php @@ -29,16 +29,6 @@ EOT; ?>
    -
    -
    -
    -
    - stage->setType, '', "class='selected'");?> - stage->browse);?> -
    -
    -
    -
    stage->id);?> stage->name);?>stage->percent);?> stage->type);?>actions;?>actions;?>
    id;?> name;?>percent;?> stage->typeList, $stage->type);?> id", "", "list"); - common::printIcon('stage', 'delete', "stageID=$stage->id", "", "list", '', 'hiddenwin'); + common::printIcon('stage', 'delete', "stageID=$stage->id", "", "list", 'trash', 'hiddenwin'); ?>
    stage->percent;?>
    - % + %
    stage->type;?> stage->typeList, '', "class='form-control chosen'");?>
    stage->percent;?>
    percent, "class='form-control'");?> - % + %
    stage->type;?> stage->typeList, $stage->type, "class='form-control chosen'");?>
    diff --git a/module/story/control.php b/module/story/control.php index c9e303957f..744ee3b743 100755 --- a/module/story/control.php +++ b/module/story/control.php @@ -511,9 +511,11 @@ class story extends control $execution = $this->dao->findById((int)$executionID)->from(TABLE_EXECUTION)->fetch(); if($execution->type == 'project') { + $model = $execution->model == 'waterfallplus' ? 'waterfall' : $execution->model; + $model = $execution->model == 'agileplus' ? 'scrum' : $model; $this->project->setMenu($executionID); $this->lang->navGroup->story = 'project'; - $this->lang->product->menu = $this->lang->{$execution->model}->menu; + $this->lang->product->menu = $this->lang->{$model}->menu; } else { @@ -576,7 +578,7 @@ class story extends control if(!empty($_POST)) { $mails = $this->story->batchCreate($productID, $branch, $storyType); - if(dao::isError()) return print(js::error(dao::getError())); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); $stories = array(); foreach($mails as $mail) $stories[] = $mail->storyID; @@ -600,7 +602,7 @@ class story extends control if($storyID and !empty($mails)) { $this->story->subdivide($storyID, $stories); - if(dao::isError()) return print(js::error(dao::getError())); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); } if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $stories)); @@ -619,7 +621,7 @@ class story extends control $rdSearchValue = $this->session->rdSearchValue ? $this->session->rdSearchValue : ''; $kanbanData = $this->loadModel('kanban')->getRDKanban($executionID, $execLaneType, 'id_desc', 0, $execGroupBy, $rdSearchValue); $kanbanData = json_encode($kanbanData); - return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData)")); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "parent.parent.updateKanban($kanbanData)")); } else { @@ -628,12 +630,12 @@ class story extends control $kanbanType = $execLaneType == 'all' ? 'story' : key($kanbanData); $kanbanData = $kanbanData[$kanbanType]; $kanbanData = json_encode($kanbanData); - return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban(\"story\", $kanbanData)")); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "parent.parent.updateKanban(\"story\", $kanbanData)")); } } else { - return print(js::reload('parent.parent')); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => 'reloadByAjaxForm()')); } } @@ -641,24 +643,26 @@ class story extends control { if($this->app->tab == 'product') { - return print(js::locate(inlink('view', "storyID=$storyID&version=0¶m=0&storyType=$storyType"), 'parent')); + $locateLink = $this->inlink('view', "storyID=$storyID&version=0¶m=0&storyType=$storyType"); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink)); } else { + /* Lite. */ $locateLink = $this->session->storyList ? $this->session->storyList : $this->createLink('projectstory', 'view', "storyID=$storyID"); - return print(js::locate($locateLink, 'parent')); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink)); } } elseif($executionID) { setcookie('storyModuleParam', 0, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); - return print(js::locate($this->session->storyList, 'parent')); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->session->storyList)); } else { setcookie('storyModule', 0, 0, $this->config->webRoot, '', $this->config->cookieSecure, false); $locateLink = $this->session->storyList ? $this->session->storyList : $this->createLink('product', 'browse', "productID=$productID&branch=$branch&browseType=unclosed&queryID=0&storyType=$storyType"); - return print(js::locate($locateLink, 'parent')); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink)); } } @@ -922,7 +926,11 @@ class story extends control $this->view->hiddenParent = true; if($project->model !== 'scrum') $this->view->hiddenPlan = true; - if(!$project->multiple) $this->view->hiddenPlan = true; + if(!$project->multiple) + { + $this->view->hiddenPlan = true; + unset($this->lang->story->stageList[''], $this->lang->story->stageList['wait'], $this->lang->story->stageList['planned']); + } if($project->model === 'kanban') $this->view->hiddenURS = true; } @@ -1207,7 +1215,7 @@ class story extends control if(dao::isError()) { if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'fail', 'message' => dao::getError())); - return print(js::error(dao::getError())); + return $this->send(array('result' => 'fail', 'message' => dao::getError())); } if($this->post->comment != '' or !empty($changes)) @@ -1237,7 +1245,7 @@ class story extends control $rdSearchValue = $this->session->rdSearchValue ? $this->session->rdSearchValue : ''; $kanbanData = $this->loadModel('kanban')->getRDKanban($this->session->execution, $execLaneType, 'id_desc', 0, $execGroupBy, $rdSearchValue); $kanbanData = json_encode($kanbanData); - return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData)")); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "parent.parent.updateKanban($kanbanData)")); } if($from == 'taskkanban') { @@ -1246,12 +1254,12 @@ class story extends control $kanbanType = $execLaneType == 'all' ? 'story' : key($kanbanData); $kanbanData = $kanbanData[$kanbanType]; $kanbanData = json_encode($kanbanData); - return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban(\"story\", $kanbanData)")); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "parent.parent.updateKanban(\"story\", $kanbanData)")); } } else { - return print(js::reload('parent.parent')); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => 'reloadByAjaxForm()')); } } diff --git a/module/story/css/batchcreate.css b/module/story/css/batchcreate.css index 0cae942aed..fad4522720 100644 --- a/module/story/css/batchcreate.css +++ b/module/story/css/batchcreate.css @@ -11,3 +11,5 @@ #batchCreateForm .c-keywords {width: 140px;} .body-modal .main-header > h2 {max-width: 80%;} #batchCreateForm .reviewBox{width: 200px !important;} + +.table tbody>tr>td {vertical-align: top;} diff --git a/module/story/js/common.js b/module/story/js/common.js index 561ab1bdb0..2c417172c9 100644 --- a/module/story/js/common.js +++ b/module/story/js/common.js @@ -20,38 +20,63 @@ $(function() $('#navbar .nav>li[data-id=story]>a').html($('#navbar .nav li.active [data-id=' + storyType + ']').text() + ''); } - $('#saveButton').on('click', function() + var $saveButton = $('#saveButton'); + var $saveDraftButton = $('#saveDraftButton'); + $saveButton.on('click', function(e) { - $('#saveButton').attr('type', 'submit').attr('disabled', true); - $('#saveDraftButton').attr('disabled', true); + $saveButton.attr('type', 'submit').attr('disabled', true); + $saveDraftButton.attr('disabled', true); var storyStatus = !$('#reviewer').val() || $('#needNotReview').is(':checked') ? 'active' : 'reviewing'; $('').attr('type', 'hidden').attr('name', 'status').attr('value', storyStatus).appendTo('#dataform'); $('#dataform').submit(); + e.preventDefault(); setTimeout(function() { - $('#saveButton').attr('type', 'button').removeAttr('disabled'); - $('#saveDraftButton').removeAttr('disabled'); - }, 1000); + if($saveButton.attr('disabled') == 'disabled') + { + setTimeout(function() + { + console.log(11); + $saveButton.attr('type', 'button').removeAttr('disabled'); + $saveDraftButton.removeAttr('disabled'); + }, 10000); + } + else + { + $saveDraftButton.removeAttr('disabled'); + } + }, 100); }); - $('#saveDraftButton').on('click', function() + $saveDraftButton.on('click', function(e) { - $('#saveButton').attr('disabled', true); - $('#saveDraftButton').attr('type', 'submit').attr('disabled', true); + $saveButton.attr('disabled', true); + $saveDraftButton.attr('type', 'submit').attr('disabled', true); storyStatus = 'draft'; if(typeof(page) != 'undefined' && page == 'change') storyStatus = 'changing'; if(typeof(page) !== 'undefined' && page == 'edit' && $('#status').val() == 'changing') storyStatus = 'changing'; $('').attr('type', 'hidden').attr('name', 'status').attr('value', storyStatus).appendTo('#dataform'); $('#dataform').submit(); + e.preventDefault(); setTimeout(function() { - $('#saveButton').removeAttr('disabled'); - $('#saveDraftButton').attr('type', 'button').removeAttr('disabled'); - }, 1000); + if($saveDraftButton.attr('disabled') == 'disabled') + { + setTimeout(function() + { + $saveButton.removeAttr('disabled'); + $saveDraftButton.attr('type', 'button').removeAttr('disabled'); + }, 10000); + } + else + { + $saveButton.removeAttr('disabled'); + } + }, 100); }); }) @@ -151,3 +176,14 @@ function popoverCancel(index) $('[data-id="' + index + '"]').addClass('hide'); } + +/** + * Reload parent window When operating in a pop-up window. + * + * @access public + * @return void + */ +function reloadByAjaxForm() +{ + parent.location.reload(); +} diff --git a/module/story/js/edit.js b/module/story/js/edit.js index 2b8602a7b2..a5f7462886 100644 --- a/module/story/js/edit.js +++ b/module/story/js/edit.js @@ -95,4 +95,9 @@ $(function() { $('#planIdBox .chosen-container').find('div').css('width', $('#planIdBox').width()) }); + + $('#parent_chosen').click(function() + { + $('#parent_chosen').find('div').css('width', $('#parent_chosen').width()) + }); }) diff --git a/module/story/lang/de.php b/module/story/lang/de.php index 0fc7259a0a..cd127e0c48 100644 --- a/module/story/lang/de.php +++ b/module/story/lang/de.php @@ -481,7 +481,7 @@ $lang->story->recallTip['actived'] = 'The Story has not initiated a review proce $lang->story->subDivideTip = array(); $lang->story->subDivideTip['subStory'] = 'The Sub-stories cannot be subdivided.'; $lang->story->subDivideTip['notWait'] = 'The Story has been %s and cannot be subdivided.'; -$lang->story->subDivideTip['notActive'] = 'The Story is not active and cannot be subdivided.'; +$lang->story->subDivideTip['notActive'] = "The %s is not active and cannot be subdivided."; $lang->story->subDivideTip['twinsSplit'] = 'The Twins Story cannot be subdivided.'; $lang->story->featureBar['browse']['all'] = $lang->all; diff --git a/module/story/lang/en.php b/module/story/lang/en.php index 8df89bc064..19097e5939 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -481,7 +481,7 @@ $lang->story->recallTip['actived'] = 'The Story has not initiated a review proce $lang->story->subDivideTip = array(); $lang->story->subDivideTip['subStory'] = 'The Sub-stories cannot be subdivided.'; $lang->story->subDivideTip['notWait'] = 'The Story has been %s and cannot be subdivided.'; -$lang->story->subDivideTip['notActive'] = 'The Story is not active and cannot be subdivided.'; +$lang->story->subDivideTip['notActive'] = "The %s is not active and cannot be subdivided."; $lang->story->subDivideTip['twinsSplit'] = 'The Twins Story cannot be subdivided.'; $lang->story->featureBar['browse']['all'] = $lang->all; diff --git a/module/story/lang/fr.php b/module/story/lang/fr.php index 61cd091ec8..078db162c9 100644 --- a/module/story/lang/fr.php +++ b/module/story/lang/fr.php @@ -481,7 +481,7 @@ $lang->story->recallTip['actived'] = "Aucun processus de révision n'a été lan $lang->story->subDivideTip = array(); $lang->story->subDivideTip['subStory'] = 'Les sous-stories ne peuvent pas être décomposées.'; $lang->story->subDivideTip['notWait'] = "L'exigence %s ne peut pas être subdivisée."; -$lang->story->subDivideTip['notActive'] = "Cette Story n'est pas active et ne peut être subdivisée."; +$lang->story->subDivideTip['notActive'] = "The %s is not active and cannot be subdivided."; $lang->story->subDivideTip['twinsSplit'] = 'The Twins Story cannot be subdivided.'; $lang->story->featureBar['browse']['all'] = $lang->all; diff --git a/module/story/lang/zh-cn.php b/module/story/lang/zh-cn.php index 3a03f7a475..98a6a22463 100644 --- a/module/story/lang/zh-cn.php +++ b/module/story/lang/zh-cn.php @@ -481,7 +481,7 @@ $lang->story->recallTip['actived'] = "该{$lang->SRCommon}未发起评审流程 $lang->story->subDivideTip = array(); $lang->story->subDivideTip['subStory'] = "子{$lang->SRCommon}无法细分"; $lang->story->subDivideTip['notWait'] = "该{$lang->SRCommon}%s,无法进行细分操作"; -$lang->story->subDivideTip['notActive'] = "{$lang->SRCommon}不是激活状态,无法进行细分操作"; +$lang->story->subDivideTip['notActive'] = "%s不是激活状态,无法进行细分操作"; $lang->story->subDivideTip['twinsSplit'] = '孪生需求不可细分'; $lang->story->featureBar['browse']['all'] = '全部'; diff --git a/module/story/model.php b/module/story/model.php index 3323d09ee6..494d0ef399 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -541,8 +541,7 @@ class storyModel extends model { if(empty($title) and $this->common->checkValidRow('story', $stories, $i)) { - dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->story->title); - return false; + dao::$errors["title$i"][] = sprintf($this->lang->error->notempty, $this->lang->story->title); } $module = $stories->module[$i] == 'ditto' ? $module : $stories->module[$i]; @@ -571,8 +570,7 @@ class storyModel extends model $_POST['reviewer'][$i] = $reviewers; if(empty($stories->reviewer[$i]) and $forceReview) { - dao::$errors[] = $this->lang->story->errorEmptyReviewedBy; - return false; + dao::$errors["reviewer$i"][] = $this->lang->story->errorEmptyReviewedBy; } $story = new stdclass(); @@ -587,6 +585,7 @@ class storyModel extends model $story->pri = $stories->pri[$i]; $story->estimate = $stories->estimate[$i]; $story->spec = $stories->spec[$i]; + $story->verify = $stories->verify[$i]; $story->status = $saveDraft ? 'draft' : ((empty($stories->reviewer[$i]) and !$forceReview) ? 'active' : 'reviewing'); $story->stage = ($this->app->tab == 'project' or $this->app->tab == 'execution') ? 'projected' : 'wait'; $story->keywords = $stories->keywords[$i]; @@ -605,8 +604,7 @@ class storyModel extends model $story->{$extendField->field} = htmlSpecialString($story->{$extendField->field}); if(empty($story->{$extendField->field})) { - dao::$errors[] = sprintf($this->lang->error->notempty, $extendField->name); - return false; + dao::$errors["{$extendField->field}$i"][] = sprintf($this->lang->error->notempty, $extendField->name); } } @@ -620,8 +618,7 @@ class storyModel extends model if(!empty($story->$field)) continue; if($field == 'estimate' and strlen(trim($story->estimate)) != 0) continue; - dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->story->$field); - return false; + dao::$errors["{$field}$i"][] = sprintf($this->lang->error->notempty, $this->lang->story->$field); } $data[$i] = $story; } @@ -629,96 +626,95 @@ class storyModel extends model $link2Plans = array(); foreach($data as $i => $story) { - $this->dao->insert(TABLE_STORY)->data($story, 'spec')->autoCheck()->checkFlow()->exec(); - if(dao::isError()) + $this->dao->insert(TABLE_STORY)->data($story, 'spec,verify')->autoCheck()->checkFlow()->exec(); + if(!dao::isError()) { - echo js::error(dao::getError()); - return print(js::reload('parent')); - } + $storyID = $this->dao->lastInsertID(); + $this->setStage($storyID); - $storyID = $this->dao->lastInsertID(); - $this->setStage($storyID); - - /* Update product plan stories order. */ - if($story->plan) - { - $this->updateStoryOrderOfPlan($storyID, $story->plan); - $link2Plans[$story->plan] = empty($link2Plans[$story->plan]) ? $storyID : "{$link2Plans[$story->plan]},$storyID"; - } - - $specData = new stdclass(); - $specData->story = $storyID; - $specData->version = 1; - $specData->title = $stories->title[$i]; - $specData->spec = ''; - $specData->verify = ''; - if(!empty($stories->spec[$i])) $specData->spec = nl2br($stories->spec[$i]); - if(!empty($stories->verify[$i]))$specData->verify = nl2br($stories->verify[$i]); - - if(!empty($stories->uploadImage[$i])) - { - $fileName = $stories->uploadImage[$i]; - $file = $this->session->storyImagesFile[$fileName]; - - $realPath = $file['realpath']; - unset($file['realpath']); - - if(!is_dir($this->file->savePath)) mkdir($this->file->savePath, 0777, true); - if($realPath and rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname']))) + /* Update product plan stories order. */ + if($story->plan) { - $file['addedBy'] = $this->app->user->account; - $file['addedDate'] = $now; - $file['objectType'] = 'story'; - $file['objectID'] = $storyID; - if(in_array($file['extension'], $this->config->file->imageExtensions)) - { - $file['extra'] = 'editor'; - $this->dao->insert(TABLE_FILE)->data($file)->exec(); + $this->updateStoryOrderOfPlan($storyID, $story->plan); + $link2Plans[$story->plan] = empty($link2Plans[$story->plan]) ? $storyID : "{$link2Plans[$story->plan]},$storyID"; + } - $fileID = $this->dao->lastInsertID(); - $specData->spec .= ''; - } - else + $specData = new stdclass(); + $specData->story = $storyID; + $specData->version = 1; + $specData->title = $stories->title[$i]; + $specData->spec = ''; + $specData->verify = ''; + if(!empty($stories->spec[$i])) $specData->spec = nl2br($stories->spec[$i]); + if(!empty($stories->verify[$i]))$specData->verify = nl2br($stories->verify[$i]); + + if(!empty($stories->uploadImage[$i]) and $stories->uploadImage[$i] !== 'undefined') + { + $fileName = $stories->uploadImage[$i]; + $file = $this->session->storyImagesFile[$fileName]; + + $realPath = $file['realpath']; + unset($file['realpath']); + + if(!is_dir($this->file->savePath)) mkdir($this->file->savePath, 0777, true); + if($realPath and rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname']))) { - $this->dao->insert(TABLE_FILE)->data($file)->exec(); + $file['addedBy'] = $this->app->user->account; + $file['addedDate'] = $now; + $file['objectType'] = 'story'; + $file['objectID'] = $storyID; + if(in_array($file['extension'], $this->config->file->imageExtensions)) + { + $file['extra'] = 'editor'; + $this->dao->insert(TABLE_FILE)->data($file)->exec(); + + $fileID = $this->dao->lastInsertID(); + $specData->spec .= ''; + } + else + { + $this->dao->insert(TABLE_FILE)->data($file)->exec(); + } } } + + $this->dao->insert(TABLE_STORYSPEC)->data($specData)->exec(); + + /* Save the story reviewer to storyreview table. */ + foreach($_POST['reviewer'][$i] as $reviewer) + { + if(empty($reviewer)) continue; + + $reviewData = new stdclass(); + $reviewData->story = $storyID; + $reviewData->version = 1; + $reviewData->reviewer = $reviewer; + $this->dao->insert(TABLE_STORYREVIEW)->data($reviewData)->exec(); + } + + $this->executeHooks($storyID); + + $actionID = $this->action->create('story', $storyID, 'Opened', ''); + if(!dao::isError()) $this->loadModel('score')->create('story', 'create',$storyID); + $mails[$i] = new stdclass(); + $mails[$i]->storyID = $storyID; + $mails[$i]->actionID = $actionID; } - $this->dao->insert(TABLE_STORYSPEC)->data($specData)->exec(); - - /* Save the story reviewer to storyreview table. */ - foreach($_POST['reviewer'][$i] as $reviewer) - { - if(empty($reviewer)) continue; - - $reviewData = new stdclass(); - $reviewData->story = $storyID; - $reviewData->version = 1; - $reviewData->reviewer = $reviewer; - $this->dao->insert(TABLE_STORYREVIEW)->data($reviewData)->exec(); - } - - $this->executeHooks($storyID); - - $actionID = $this->action->create('story', $storyID, 'Opened', ''); - if(!dao::isError()) $this->loadModel('score')->create('story', 'create',$storyID); - $mails[$i] = new stdclass(); - $mails[$i]->storyID = $storyID; - $mails[$i]->actionID = $actionID; } - /* Remove upload image file and session. */ - if(!empty($stories->uploadImage) and $this->session->storyImagesFile) - { - $classFile = $this->app->loadClass('zfile'); - $file = current($_SESSION['storyImagesFile']); - $realPath = dirname($file['realpath']); - if(is_dir($realPath)) $classFile->removeDir($realPath); - unset($_SESSION['storyImagesFile']); - } if(!dao::isError()) { + /* Remove upload image file and session. */ + if(!empty($stories->uploadImage) and $this->session->storyImagesFile) + { + $classFile = $this->app->loadClass('zfile'); + $file = current($_SESSION['storyImagesFile']); + $realPath = dirname($file['realpath']); + if(is_dir($realPath)) $classFile->removeDir($realPath); + unset($_SESSION['storyImagesFile']); + } + $this->loadModel('score')->create('ajax', 'batchCreate'); foreach($link2Plans as $planID => $stories) $this->action->create('productplan', $planID, 'linkstory', '', $stories); } @@ -926,9 +922,6 @@ class storyModel extends model ->setDefault('assignedDate', $oldStory->assignedDate) ->setDefault('lastEditedBy', $this->app->user->account) ->setDefault('reviewedBy', $oldStory->reviewedBy) - ->setDefault('title', $oldStory->title) - ->setDefault('spec', $oldStory->spec) - ->setDefault('verify', $oldStory->verify) ->setDefault('mailto', '') ->setDefault('deleteFiles', array()) ->add('id', $storyID) @@ -945,6 +938,9 @@ class storyModel extends model ->setIF(!in_array($this->post->source, $this->config->story->feedbackSource), 'feedbackBy', '') ->setIF(!in_array($this->post->source, $this->config->story->feedbackSource), 'notifyEmail', '') ->setIF(!empty($_POST['plan'][0]) and $oldStory->stage == 'wait', 'stage', 'planned') + ->setIF(!isset($_POST['title']), 'title', $oldStory->title) + ->setIF(!isset($_POST['spec']), 'spec', $oldStory->spec) + ->setIF(!isset($_POST['verify']), 'verify', $oldStory->verify) ->stripTags($this->config->story->editor->edit['id'], $this->config->allowedTags) ->join('mailto', ',') ->join('linkStories', ',') @@ -3023,11 +3019,6 @@ class storyModel extends model */ public function getProductStoryPairs($productID = 0, $branch = 'all', $moduleIdList = 0, $status = 'all', $order = 'id_desc', $limit = 0, $type = 'full', $storyType = 'story', $hasParent = true) { - if($moduleIdList) - { - $moduleInfo = $this->loadModel('tree')->getByID($moduleIdList); - $moduleIdList = (isset($moduleInfo->type) and $moduleInfo->type == 'bug') ? 0 : $moduleIdList; - } $stories = $this->dao->select('t1.id, t1.title, t1.module, t1.pri, t1.estimate, t2.name AS product') ->from(TABLE_STORY)->alias('t1')->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id') ->where('1=1') @@ -4078,12 +4069,6 @@ class storyModel extends model $property = ''; } $storyPairs[$story->id] = $story->id . ':' . $story->title . ' ' . $property; - - if($limit > 0 && ++$i > $limit) - { - $storyPairs['showmore'] = $this->lang->more . $this->lang->ellipsis; - break; - } } return $storyPairs; } @@ -4609,7 +4594,7 @@ class storyModel extends model } else { - if($story->status != 'active') $title = $this->lang->story->subDivideTip['notActive']; + if($story->status != 'active') $title = sprintf($this->lang->story->subDivideTip['notActive'], $story->type == 'story' ? $this->lang->SRCommon : $this->lang->URCommon); if($story->status == 'active' and $story->stage != 'wait') $title = sprintf($this->lang->story->subDivideTip['notWait'], zget($this->lang->story->stageList, $story->stage)); } } @@ -4688,7 +4673,7 @@ class storyModel extends model $menu .= ""; } - if($this->app->tab == 'execution' and $story->status == 'active') $menu .= $this->buildMenu('task', 'create', "execution={$this->session->execution}&{$params}&moduleID=$story->module", $story, $type, 'plus', '', 'showinonlybody'); + if(($this->app->tab == 'execution' || (!empty($execution) and $execution->multiple === '0')) and $story->status == 'active') $menu .= $this->buildMenu('task', 'create', "execution={$this->session->execution}&{$params}&moduleID=$story->module", $story, $type, 'plus', '', 'showinonlybody'); $menu .= "
    "; $menu .= $this->buildFlowMenu('story', $story, $type, 'direct'); @@ -4789,7 +4774,7 @@ class storyModel extends model } else { - if($story->status != 'active') $title = $this->lang->story->subDivideTip['notActive']; + if($story->status != 'active') $title = sprintf($this->lang->story->subDivideTip['notActive'], $story->type == 'story' ? $this->lang->SRCommon : $this->lang->URCommon); if($story->status == 'active' and $story->stage != 'wait') $title = sprintf($this->lang->story->subDivideTip['notWait'], zget($this->lang->story->stageList, $story->stage)); } } diff --git a/module/story/view/batchcreate.html.php b/module/story/view/batchcreate.html.php index df03cbafa5..c1e848640c 100755 --- a/module/story/view/batchcreate.html.php +++ b/module/story/view/batchcreate.html.php @@ -46,7 +46,7 @@ } unset($visibleFields['module']); ?> - +
    diff --git a/module/story/view/change.html.php b/module/story/view/change.html.php index df9ed6da77..64aaca6944 100644 --- a/module/story/view/change.html.php +++ b/module/story/view/change.html.php @@ -21,7 +21,7 @@ arrow . ' ' . $lang->story->change;?> - +
    diff --git a/module/story/view/create.html.php b/module/story/view/create.html.php index ca5236ccee..c3decab087 100644 --- a/module/story/view/create.html.php +++ b/module/story/view/create.html.php @@ -112,11 +112,13 @@ foreach(explode(',', $config->story->create->requiredFields) as $field) + 1):?> + diff --git a/module/task/control.php b/module/task/control.php index c911ae4c34..43b52f9852 100755 --- a/module/task/control.php +++ b/module/task/control.php @@ -311,6 +311,15 @@ class task extends control } } + $lifetimeList = array(); + $attributeList = array(); + $executionList = $this->execution->getByIdList(array_keys($executions)); + foreach($executionList as $id => $object) + { + $lifetimeList[$id] = $object->lifetime; + $attributeList[$id] = $object->attribute; + } + $testStoryIdList = $this->loadModel('story')->getTestStories(array_keys($stories), $execution->id); /* Stories that can be used to create test tasks. */ $testStories = array(); @@ -330,7 +339,8 @@ class task extends control $this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('execution', 'task', "executionID=$executionID") : ''; $this->view->execution = $execution; $this->view->executions = $executions; - $this->view->lifetimeList = $this->execution->getLifetimeByIdList(array_keys($executions)); + $this->view->lifetimeList = $lifetimeList; + $this->view->attributeList = $attributeList; $this->view->task = $task; $this->view->users = $users; $this->view->storyID = $storyID; @@ -341,6 +351,7 @@ class task extends control $this->view->moduleOptionMenu = $moduleOptionMenu; $this->view->projectID = $projectID; $this->view->productID = $this->loadModel('product')->getProductIDByProject($projectID);; + $this->view->features = $this->execution->getExecutionFeatures($execution); $this->display(); } @@ -2078,7 +2089,7 @@ class task extends control { $execution = $this->execution->getById($executionID); $allExportFields = $this->config->task->exportFields; - if($execution->lifetime == 'ops') $allExportFields = str_replace(' story,', '', $allExportFields); + if($execution->lifetime == 'ops' or in_array($execution->attribute, array('request', 'review'))) $allExportFields = str_replace(' story,', '', $allExportFields); if($_POST) { diff --git a/module/task/css/edit.css b/module/task/css/edit.css index bdc7eb84b9..5492e1306d 100644 --- a/module/task/css/edit.css +++ b/module/task/css/edit.css @@ -6,3 +6,4 @@ #modalTeam .modal-content {padding: 20px 13px 0; height: 340px;max-height: 296px!important; overflow-y: scroll!important;} #taskTeamEditor tr .input-control {display: inline-block; width: 130px;} +#taskTeamEditor h2 {margin-top:0;} diff --git a/module/task/js/create.js b/module/task/js/create.js index 25b2552ef3..52497f9380 100644 --- a/module/task/js/create.js +++ b/module/task/js/create.js @@ -1,5 +1,40 @@ $(function() { + if(attribute == 'request' || attribute == 'review') + { + $('#story').closest('tr').hide(); + $("input[name='after'][value='toStoryList']").parent().hide(); + $("input[name='after'][value='continueAdding']").parent().hide(); + $("input[name='after'][value='toTaskList']").prop('checked', true); + $("input[name='after'][value='toTaskList']").parent().css('margin-left', '0px'); + } + + execAttribute = attribute; + $('#execution').change(function() + { + link = createLink('execution', 'ajaxGetAttribute', "executionID=" + $('#execution').val()); + $.get(link, function(attribute) + { + execAttribute = attribute; + if(attribute == 'request' || attribute == 'review') + { + $('#story').closest('tr').hide(); + $("input[name='after'][value='toStoryList']").parent().hide(); + $("input[name='after'][value='continueAdding']").parent().hide(); + $("input[name='after'][value='toTaskList']").prop('checked', true); + $("input[name='after'][value='toTaskList']").parent().css('margin-left', '0px'); + } + else + { + $('#story').closest('tr').show(); + $("input[name='after'][value='toStoryList']").parent().show(); + $("input[name='after'][value='continueAdding']").parent().show(); + $("input[name='after'][value='continueAdding']").prop('checked', true); + $("input[name='after'][value='toTaskList']").parent().css('margin-left', '10px'); + } + }); + }) + $('#customField').click(function() { hiddenRequireFields(); @@ -63,14 +98,16 @@ function showTeamMenu() function loadAll(executionID) { lifetime = lifetimeList[executionID]; + attribute = attributeList[executionID]; var fieldList = showFields + ','; - if(lifetime == 'ops') + if(lifetime == 'ops' || attribute == 'request' || attribute == 'review') { - $('.storyBox').addClass('hidden'); + $('.storyBox,#selectTestStoryBox,#testStoryBox').addClass('hidden'); } else if(fieldList.indexOf('story') >= 0) { - $('.storyBox').removeClass('hidden'); + $('.storyBox,#selectTestStoryBox').removeClass('hidden'); + if($('#selectTestStory').prop('checked')) $('#testStoryBox').removeClass('hidden'); } loadModuleMenu(executionID); @@ -377,6 +414,9 @@ function toggleSelectTestStory() $('.colorpicker').css('right', '0'); $('#dataform .table-form>tbody>tr>th').css('width', '130px'); $('[lang^="zh-"] #dataform .table-form>tbody>tr>th').css('width', '120px'); + + $('[name^=multiple]').attr('checked', false); + showTeamMenu(); } else { @@ -504,9 +544,10 @@ $(document).ready(function() var value = $select.val(); $selector.find('.pri-text').html('' + value + ''); }); + $('#type').change(function() { - if(lifetime != 'ops') + if(lifetime != 'ops' && attribute != 'request' && attribute != 'review') { $('#selectTestStoryBox').toggleClass('hidden', $(this).val() != 'test'); toggleSelectTestStory(); @@ -578,7 +619,7 @@ $(document).on('click', '#testStory_chosen', function() $('#modalTeam tfoot .btn').click(function() { - var team = ''; + var team = []; var time = 0; var error = false; var mode = $('[name="mode"]').val(); @@ -589,7 +630,7 @@ $('#modalTeam tfoot .btn').click(function() var tr = $(this).closest('tr'); var account = $(this).find('option:selected').text(); - team += ' ' + account; + if(!team.includes(account)) team.push(account); estimate = parseFloat($(this).parents('td').next('td').find('[name^=teamEstimate]').val()); if(!isNaN(estimate) && estimate > 0) time += estimate; @@ -602,8 +643,7 @@ $('#modalTeam tfoot .btn').click(function() }); if(error) return false; - var teamList = team.split(" "); - if(teamList.length <= 2) + if(team.length < 2) { bootbox.alert(teamMemberError); return false; diff --git a/module/task/lang/de.php b/module/task/lang/de.php index 49c129142c..a9dfb4350e 100644 --- a/module/task/lang/de.php +++ b/module/task/lang/de.php @@ -276,6 +276,7 @@ $lang->task->error->consumedThisTime = 'Bitte geben Sie die Stunden an'; $lang->task->error->left = 'Bitte geben Sie die verbleibenden Stunden an"'; $lang->task->error->work = '"Bemerkung" muss kleiner als %d Zeichen sein.'; $lang->task->error->teamMember = 'Team members must be at least 2 people'; +$lang->task->error->teamCantOperate = 'Please activate the closed, suspended, and canceled tasks before setting the team.'; $lang->task->error->skipClose = 'Aufgabe: %s ist nicht “Erledigt” oder “Abgebrochen”. Möchten Sie die Aufgabe jetzt schließen?'; $lang->task->error->closeParent = 'Task: %s is the Parent Task, which is automatically closed after all subtasks under the Parent Task are closed and cannot be closed manually.'; $lang->task->error->consumed = 'Aufgabe: %s Hour must be more than 0. Ignore changes to this Task.'; diff --git a/module/task/lang/en.php b/module/task/lang/en.php index 649c63c40b..13cd21ca77 100755 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -276,6 +276,7 @@ $lang->task->error->consumedThisTime = 'Please enter "Hours Cost"'; $lang->task->error->left = 'Please enter "Hours Left"'; $lang->task->error->work = '"Comment" must be < %d characters.'; $lang->task->error->teamMember = 'Team members must be at least 2 people'; +$lang->task->error->teamCantOperate = 'Please activate the closed, suspended, and canceled tasks before setting the team.'; $lang->task->error->skipClose = 'Task: %s is not “Finished” or “Cancelled”. Do you want to close it?'; $lang->task->error->closeParent = 'Task: %s is the Parent Task, which is automatically closed after all subtasks under the Parent Task are closed and cannot be closed manually.'; $lang->task->error->consumed = 'Task: %s hour must be < 0. Ignore changes to this task.'; diff --git a/module/task/lang/fr.php b/module/task/lang/fr.php index c602f0a06e..2fc2956dbb 100644 --- a/module/task/lang/fr.php +++ b/module/task/lang/fr.php @@ -276,6 +276,7 @@ $lang->task->error->consumedThisTime = 'Entrez le "Coût en Heures"'; $lang->task->error->left = 'Entrez les "Heures Restantes"'; $lang->task->error->work = '"Commentaire" doit être < %d caractères.'; $lang->task->error->teamMember = 'Team members must be at least 2 people'; +$lang->task->error->teamCantOperate = 'Please activate the closed, suspended, and canceled tasks before setting the team.'; $lang->task->error->skipClose = 'Tâche: %s non “Finie” ou “Annulée”. Voulez-vous la fermer malgré tout ?'; $lang->task->error->closeParent = 'Task: %s is the Parent Task, which is automatically closed after all subtasks under the Parent Task are closed and cannot be closed manually.'; $lang->task->error->consumed = 'Tâche: %s heures doivent être < 0. Ignorer changements de cette tâche.'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index 0b4bed4938..6f2f86dc88 100755 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -276,6 +276,7 @@ $lang->task->error->consumedThisTime = '请填写"消耗"'; $lang->task->error->left = '请填写"剩余"'; $lang->task->error->work = '"备注"必须小于%d个字符'; $lang->task->error->teamMember = '团队成员必须大于1人'; +$lang->task->error->teamCantOperate = '已关闭、已暂停、已取消的任务请激活后再维护团队。'; $lang->task->error->skipClose = '任务:%s 不是“已完成”或“已取消”状态,确定要关闭吗?'; $lang->task->error->closeParent = '任务:%s 是父任务,父任务在所有子任务关闭后会自动关闭,无法手动关闭。'; $lang->task->error->consumed = '任务:%s工时不能小于0,忽略该任务工时的改动'; diff --git a/module/task/model.php b/module/task/model.php index fb27eb64a4..080051259e 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -4087,16 +4087,23 @@ class taskModel extends model $today = helper::today(); $showmore = $showmore ? 'showmore' : ''; $trAttrs = "data-id='t$task->id'"; + + /* Remove projectID in execution path. */ + $executionPath = $execution->path; + $executionPath = trim($executionPath, ','); + $executionPath = substr($executionPath, strpos($executionPath, ',') + 1); + if(!$isChild) { - $path = $execution->grade == 2 ? "$execution->parent,$execution->id,t$task->id," : ",$execution->id,t$task->id,"; + + $path = ",{$executionPath},t{$task->id},"; $trAttrs .= " data-parent='$execution->id' data-nest-parent='$execution->id' data-nest-path='$path'"; if(empty($task->children)) $trAttrs .= " data-nested='false'"; $trClass = empty($task->children) ? '' : " has-nest-child"; } else { - $path = $execution->grade == 2 ? "$execution->parent,$execution->id,$task->parent,t$task->id," : ",$execution->id,$task->parent,t$task->id,"; + $path = ",{$executionPath},{$task->parent},t{$task->id},"; $trClass = 'is-nest-child no-nest'; $trAttrs .= " data-nested='false' data-parent='t$task->parent' data-nest-parent='t$task->parent' data-nest-path='$path'"; } @@ -4113,7 +4120,7 @@ class taskModel extends model } } $list .= ''; - if(!empty($execution->division)) $list .= ''; + if(!empty($execution->division) and $execution->hasProduct) $list .= ''; $list .= "'; $list .= ''; $list .= helper::isZeroDate($task->estStarted) ? '' : ''; diff --git a/module/task/view/batchcreate.html.php b/module/task/view/batchcreate.html.php index 6c43aa4a59..5ad5835485 100755 --- a/module/task/view/batchcreate.html.php +++ b/module/task/view/batchcreate.html.php @@ -75,7 +75,7 @@ $colspan = count($visibleFields) + 3; - + diff --git a/module/task/view/batchedit.html.php b/module/task/view/batchedit.html.php index 4d8bdae656..d2f806f0f8 100755 --- a/module/task/view/batchedit.html.php +++ b/module/task/view/batchedit.html.php @@ -59,7 +59,7 @@ js::set('requiredFields', $config->task->edit->requiredFields); - + diff --git a/module/task/view/create.html.php b/module/task/view/create.html.php index ac48512805..ba763dfdb1 100644 --- a/module/task/view/create.html.php +++ b/module/task/view/create.html.php @@ -22,7 +22,9 @@ task->create->requiredFields);?> error->gt, $lang->task->estimate, '0'))?> lifetime);?> +attribute);?> +hasProduct);?> task->create->requiredFields) as $field) printExtendFields('', 'table', 'columns=3');?> - lifetime != 'ops') ? '' : 'hidden'?> + - lifetime != 'ops'):?> + lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review'))):?> - + diff --git a/module/user/control.php b/module/user/control.php index f36e1f5652..4870995750 100755 --- a/module/user/control.php +++ b/module/user/control.php @@ -978,6 +978,7 @@ class user extends control } else { + setcookie('tab', false, time(), $this->config->webRoot); $loginExpired = !(preg_match("/(m=|\/)(index)(&f=|-)(index)(&|-|\.)?/", strtolower($this->referer), $output) or $this->referer == $this->config->webRoot or empty($this->referer) or preg_match("/\/www\/$/", strtolower($this->referer), $output)); $this->loadModel('misc'); @@ -1050,7 +1051,7 @@ class user extends control if(isset($this->app->user->id)) $this->loadModel('action')->create('user', $this->app->user->id, 'logout'); setcookie('za', false, time() - 3600, $this->config->webRoot); setcookie('zp', false, time() - 3600, $this->config->webRoot); - setcookie('tab', false, time() - 3600, $this->config->webRoot); ; + setcookie('tab', false, time() - 3600, $this->config->webRoot); session_destroy(); if($this->app->getViewType() == 'json') return print(json_encode(array('status' => 'success'))); diff --git a/module/zahost/css/view.css b/module/zahost/css/view.css index 5d092fc6e2..3c5509e705 100644 --- a/module/zahost/css/view.css +++ b/module/zahost/css/view.css @@ -21,3 +21,4 @@ .icon-refresh {font-size: 15px;} .load-indicator:after {top: 33%;} .btn.disabled i {color: #fff;} +#statusContainer{min-height: 120px;} diff --git a/module/zahost/js/view.js b/module/zahost/js/view.js index 2b07966f7c..4b42db6e78 100644 --- a/module/zahost/js/view.js +++ b/module/zahost/js/view.js @@ -35,6 +35,7 @@ function ajaxGetServiceStatus() setTimeout(function() { $('#serviceContent').removeClass('loading'); + $(".service-status, .status-notice").show() }, 500); }); return diff --git a/module/zahost/lang/de.php b/module/zahost/lang/de.php index b33c6f24cd..c20cbcb3b4 100644 --- a/module/zahost/lang/de.php +++ b/module/zahost/lang/de.php @@ -16,6 +16,7 @@ $lang->zahost->browseNode = 'ZAnode Browse'; $lang->zahost->deleted = "Deleted"; $lang->zahost->copy = 'Click to copy'; $lang->zahost->copied = 'Copy successful'; +$lang->zahost->baseInfo = 'Basic information'; $lang->zahost->name = 'Name'; $lang->zahost->IP = 'Extranet Address'; @@ -92,7 +93,7 @@ $lang->zahost->image->statusList['created'] = 'Inprogress'; $lang->zahost->image->statusList['canceled'] = 'Not Downloaded'; $lang->zahost->image->statusList['inprogress'] = 'Inprogress'; $lang->zahost->image->statusList['pending'] = 'Waiting for download'; -$lang->zahost->image->statusList['completed'] = 'Completed'; +$lang->zahost->image->statusList['completed'] = 'Usable'; $lang->zahost->image->statusList['failed'] = 'Failed'; $lang->zahost->image->imageEmpty = 'No Image'; diff --git a/module/zahost/lang/en.php b/module/zahost/lang/en.php index b33c6f24cd..c20cbcb3b4 100644 --- a/module/zahost/lang/en.php +++ b/module/zahost/lang/en.php @@ -16,6 +16,7 @@ $lang->zahost->browseNode = 'ZAnode Browse'; $lang->zahost->deleted = "Deleted"; $lang->zahost->copy = 'Click to copy'; $lang->zahost->copied = 'Copy successful'; +$lang->zahost->baseInfo = 'Basic information'; $lang->zahost->name = 'Name'; $lang->zahost->IP = 'Extranet Address'; @@ -92,7 +93,7 @@ $lang->zahost->image->statusList['created'] = 'Inprogress'; $lang->zahost->image->statusList['canceled'] = 'Not Downloaded'; $lang->zahost->image->statusList['inprogress'] = 'Inprogress'; $lang->zahost->image->statusList['pending'] = 'Waiting for download'; -$lang->zahost->image->statusList['completed'] = 'Completed'; +$lang->zahost->image->statusList['completed'] = 'Usable'; $lang->zahost->image->statusList['failed'] = 'Failed'; $lang->zahost->image->imageEmpty = 'No Image'; diff --git a/module/zahost/lang/fr.php b/module/zahost/lang/fr.php index b33c6f24cd..c20cbcb3b4 100644 --- a/module/zahost/lang/fr.php +++ b/module/zahost/lang/fr.php @@ -16,6 +16,7 @@ $lang->zahost->browseNode = 'ZAnode Browse'; $lang->zahost->deleted = "Deleted"; $lang->zahost->copy = 'Click to copy'; $lang->zahost->copied = 'Copy successful'; +$lang->zahost->baseInfo = 'Basic information'; $lang->zahost->name = 'Name'; $lang->zahost->IP = 'Extranet Address'; @@ -92,7 +93,7 @@ $lang->zahost->image->statusList['created'] = 'Inprogress'; $lang->zahost->image->statusList['canceled'] = 'Not Downloaded'; $lang->zahost->image->statusList['inprogress'] = 'Inprogress'; $lang->zahost->image->statusList['pending'] = 'Waiting for download'; -$lang->zahost->image->statusList['completed'] = 'Completed'; +$lang->zahost->image->statusList['completed'] = 'Usable'; $lang->zahost->image->statusList['failed'] = 'Failed'; $lang->zahost->image->imageEmpty = 'No Image'; diff --git a/module/zahost/lang/vi.php b/module/zahost/lang/vi.php index f639c0ca5c..2f0672f79a 100644 --- a/module/zahost/lang/vi.php +++ b/module/zahost/lang/vi.php @@ -91,7 +91,7 @@ $lang->zahost->image->statusList['created'] = 'Inprogress'; $lang->zahost->image->statusList['canceled'] = 'Not Downloaded'; $lang->zahost->image->statusList['inprogress'] = 'Inprogress'; $lang->zahost->image->statusList['pending'] = 'Waiting for download'; -$lang->zahost->image->statusList['completed'] = 'Completed'; +$lang->zahost->image->statusList['completed'] = 'Usable'; $lang->zahost->image->statusList['failed'] = 'Failed'; $lang->zahost->image->imageEmpty = 'No Image'; diff --git a/module/zahost/lang/zh-cn.php b/module/zahost/lang/zh-cn.php index b62373eece..746a55c035 100644 --- a/module/zahost/lang/zh-cn.php +++ b/module/zahost/lang/zh-cn.php @@ -16,6 +16,7 @@ $lang->zahost->browseNode = '执行节点列表'; $lang->zahost->deleted = "已删除"; $lang->zahost->copy = '复制'; $lang->zahost->copied = '复制成功'; +$lang->zahost->baseInfo = '基础信息'; $lang->zahost->name = '名称'; $lang->zahost->IP = 'IP/域名'; diff --git a/module/zahost/model.php b/module/zahost/model.php index 4f32d40121..8244095ee8 100644 --- a/module/zahost/model.php +++ b/module/zahost/model.php @@ -590,6 +590,7 @@ class zahostModel extends model */ public function getServiceStatus($host) { + if(in_array($host->status, array('wait', 'offline'))) return $this->lang->zahost->init->serviceStatus; $result = json_decode(commonModel::http("http://{$host->extranet}:{$host->zap}/api/v1/service/check", json_encode(array("services" => "all")), array(), array("Authorization:$host->tokenSN"))); if(empty($result) || $result->code != 'success') { diff --git a/module/zahost/view/view.html.php b/module/zahost/view/view.html.php index 1cd6e121a6..d5502a1ec8 100644 --- a/module/zahost/view/view.html.php +++ b/module/zahost/view/view.html.php @@ -33,7 +33,7 @@
    -
    zahost->view;?>
    +
    zahost->baseInfo;?>
    @@ -95,6 +95,10 @@
    +
    +
    zahost->desc;?>
    +
    desc) ? htmlspecialchars_decode($zahost->desc) : $lang->noData;?>
    +
    @@ -105,10 +109,7 @@
    -
    KVM
    -
    Nginx
    -
    noVNC
    -
    Websockify
    +
    createLink('zahost', 'browseImage', "hostID=$zahost->id", '', true), $lang->zahost->image->downloadImage, '', "class='iframe'");?> @@ -126,12 +127,6 @@
    -
    -
    -
    zahost->desc;?>
    -
    desc) ? htmlspecialchars_decode($zahost->desc) : $lang->noData;?>
    -
    -
    diff --git a/module/zanode/config.php b/module/zanode/config.php index 1096e4e057..c8a81099d6 100644 --- a/module/zanode/config.php +++ b/module/zanode/config.php @@ -2,9 +2,10 @@ $config->zanode->create = new stdClass(); $config->zanode->edit = new stdClass(); $config->zanode->createimage = new stdClass(); -$config->zanode->create->requiredFields = 'name,host,image,cpu,memory,disk,osName'; -$config->zanode->edit->requiredFields = ''; -$config->zanode->createimage->requiredFields = 'name'; +$config->zanode->create->requiredFields = 'name,host,image,cpu,memory,disk,osName'; +$config->zanode->create->physicsRequiredFields = 'name,extranet,cpu,memory,osName'; +$config->zanode->edit->requiredFields = ''; +$config->zanode->createimage->requiredFields = 'name'; $config->zanode->defaultPort = '55001'; $config->zanode->defaultAccount = 'z'; diff --git a/module/zanode/control.php b/module/zanode/control.php index 54f2ba863d..7360defed1 100644 --- a/module/zanode/control.php +++ b/module/zanode/control.php @@ -137,10 +137,15 @@ class zanode extends control return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse'))); } - $this->view->title = $this->lang->zanode->editAction; - $this->view->zanode = $this->zanode->getNodeByID($id); - $this->view->host = $this->zanode->getHostByID($this->view->zanode->parent); - $this->view->image = $this->zanode->getImageByID($this->view->zanode->image); + $zanode = $this->zanode->getNodeByID($id); + + $this->view->title = $this->lang->zanode->editAction; + $this->view->zanode = $zanode; + if($zanode->type == 'node') + { + $this->view->host = $this->zanode->getHostByID($this->view->zanode->parent); + $this->view->image = $this->zanode->getImageByID($this->view->zanode->image); + } $this->display(); } @@ -243,9 +248,7 @@ class zanode extends control if($error) { - $response['result'] = 'fail'; - $response['message'] = $error; - return $this->send($response); + return print(js::alert($error) . js::reload('parent')); } else { @@ -558,7 +561,7 @@ class zanode extends control { $node = $this->zanode->getNodeById($hostID); $serviceStatus = $this->zanode->getServiceStatus($node); - if ($node->status != 'running' && $node->status != 'wait') + if ($node->status != 'running') { $serviceStatus['ZenAgent'] = "unknown"; $serviceStatus['ZTF'] = "unknown"; diff --git a/module/zanode/css/browse.css b/module/zanode/css/browse.css index e30b3b4232..648be7123d 100644 --- a/module/zanode/css/browse.css +++ b/module/zanode/css/browse.css @@ -3,7 +3,7 @@ .c-status {width: 70px;} .c-cpu, .c-host {width: 100px;} .c-ip{width: 150px;} -.c-os {width: 120px;} +.c-os, .c-type {width: 120px;} .desktop, .createImage{margin-right: 4px;} #helpTab .icon-help {line-height: unset;} #bysearchTab {margin-right: 0px;} diff --git a/module/zanode/css/browse.zh-cn.css b/module/zanode/css/browse.zh-cn.css new file mode 100644 index 0000000000..d0bb3e1789 --- /dev/null +++ b/module/zanode/css/browse.zh-cn.css @@ -0,0 +1 @@ +.c-type {width: 80px;} diff --git a/module/zanode/css/view.css b/module/zanode/css/view.css index e89553f2ce..66481a016a 100644 --- a/module/zanode/css/view.css +++ b/module/zanode/css/view.css @@ -17,3 +17,4 @@ .node-not-wrap{white-space: nowrap;} .btn-info {background-color: unset;} .btn.disabled i {color: #fff;} +#serviceContent{min-height: 120px;} diff --git a/module/zanode/js/create.js b/module/zanode/js/create.js new file mode 100644 index 0000000000..bd96c2ca22 --- /dev/null +++ b/module/zanode/js/create.js @@ -0,0 +1,19 @@ +function zahostType() +{ + if($('#type').val() == 'physics') + { + $('#parent').closest('tr').hide(); + $('#image').closest('tr').hide(); + $('#extranet').closest('tr').removeClass('hidden'); + $('#osName').addClass('hidden'); + $('#osNamePhysics').removeClass('hidden'); + } + else + { + $('#parent').closest('tr').show(); + $('#image').closest('tr').show(); + $('#extranet').closest('tr').addClass('hidden'); + $('#osName').removeClass('hidden'); + $('#osNamePhysics').addClass('hidden'); + } +} diff --git a/module/zanode/js/view.js b/module/zanode/js/view.js index 9472d8a65a..d46022f99f 100644 --- a/module/zanode/js/view.js +++ b/module/zanode/js/view.js @@ -99,6 +99,7 @@ function checkServiceStatus(){ } setTimeout(function() { $('#serviceContent').removeClass('loading'); + $(".service-status, .status-notice").show() }, 500); }); return @@ -186,7 +187,7 @@ $('#jumpManual').click(function() $(function(){ - checkServiceStatus(); + $('#checkServiceStatus').trigger("click") checkInterval = setInterval(() => { intervalTimes++; if(intervalTimes > 300) diff --git a/module/zanode/lang/de.php b/module/zanode/lang/de.php index 6fb124d62c..2d269e533c 100644 --- a/module/zanode/lang/de.php +++ b/module/zanode/lang/de.php @@ -1,6 +1,7 @@ zanode->common = 'ZenAgent Node'; $lang->zanode->browse = 'ZenAgent Node List'; +$lang->zanode->nodeList = 'ZenAgent Node List'; $lang->zanode->create = 'Create ZenAgent Node'; $lang->zanode->edit = 'Edit ZenAgent Node'; $lang->zanode->editAction = 'Edit ZenAgent Node'; @@ -48,6 +49,7 @@ $lang->zanode->confirmReboot = "Are you sure to restart the ZenAgent Node?"; $lang->zanode->confirmShutdown = "Are you sure to shutdown the ZenAgent Node?"; $lang->zanode->confirmSuspend = "Are you sure to suspend the ZenAgent Node?"; $lang->zanode->confirmResume = "Are you sure to resume the ZenAgent Node?"; +$lang->zanode->confirmRestore = "The ZenAgent Node will be restored to this snapshot state, are you sure you want to continue?"; $lang->zanode->actionSuccess = 'Success'; $lang->zanode->deleted = "Deleted"; $lang->zanode->scriptPath = "Script path"; @@ -62,6 +64,9 @@ $lang->zanode->initializing = 'Initializing'; $lang->zanode->showPwd = 'Show Password'; $lang->zanode->hidePwd = 'Hide Password'; +$lang->zanode->typeList['node'] = 'Virtual machine'; +$lang->zanode->typeList['physics'] = 'Physical machine'; + $lang->automation = new stdClass(); $lang->automation->scriptPath = $lang->zanode->scriptPath; $lang->automation->node = $lang->zanode->common; @@ -72,6 +77,7 @@ $lang->zanode->noVncPort = 'Failed to get vnc port'; $lang->zanode->nameValid = "The name can only be letters, numbers, '-', '_', '.', and cannot start with a symbol"; $lang->zanode->empty = 'No zanode is found'; $lang->zanode->runCaseConfirm = 'The system detects the presence of an automation script. Whether to execute?'; +$lang->zanode->netError = 'Unable to connect to the physical machine, please check the network and try again.'; $lang->zanode->createImage = 'Create Image'; $lang->zanode->createImaging = 'Creating'; @@ -85,19 +91,26 @@ $lang->zanode->snapshotName = 'Snapshot Name'; $lang->zanode->browseSnapshot = 'Snapshot List'; $lang->zanode->createSnapshot = 'Create Snapshot'; $lang->zanode->editSnapshot = 'Edit Snapshot'; -$lang->zanode->restoreSnapshot = 'Revert Snapshot'; +$lang->zanode->restoreSnapshot = 'Revert From This Snapshot'; $lang->zanode->deleteSnapshot = 'Delete Snapshot'; $lang->zanode->snapshotEmpty = 'No snapshots'; $lang->zanode->confirmDeleteSnapshot = "The snapshot cannot be restored from the recycle bin after being deleted. Are you sure to continue?"; +$lang->zanode->snapshot = new stdClass(); $lang->zanode->snapshot->statusList['creating'] = 'Creating'; -$lang->zanode->snapshot->statusList['completed'] = 'Create Completed'; +$lang->zanode->snapshot->statusList['inprogress'] = 'Creating'; +$lang->zanode->snapshot->statusList['completed'] = 'Usable'; $lang->zanode->snapshot->statusList['failed'] = 'Create Failed'; $lang->zanode->snapshot->statusList['restoring'] = 'Restoring'; $lang->zanode->snapshot->statusList['restore_failed'] = 'Restore Failed'; -$lang->zanode->snapshot->statusList['restore_completed'] = 'Restore Completed'; +$lang->zanode->snapshot->statusList['restore_completed'] = 'Usable'; -$lang->zanode->imageNameEmpty = 'Name can not be empty.'; +$lang->zanode->snapshot->defaultSnapName = 'DefaultSnapshot'; +$lang->zanode->snapshot->defaultSnapUser = 'System'; + +$lang->zanode->imageNameEmpty = 'Name can not be empty.'; +$lang->zanode->snapStatusError = 'Snapshot is not ready.'; +$lang->zanode->snapRestoring = 'Snapshot is restoring.'; $lang->zanode->runTimeout = 'Network connection timeout, please check the host and execution node status.'; diff --git a/module/zanode/lang/en.php b/module/zanode/lang/en.php index 563d3eed23..996e12770c 100644 --- a/module/zanode/lang/en.php +++ b/module/zanode/lang/en.php @@ -1,6 +1,7 @@ zanode->common = 'ZenAgent Node'; $lang->zanode->browse = 'ZenAgent Node List'; +$lang->zanode->nodeList = 'ZenAgent Node List'; $lang->zanode->create = 'Create ZenAgent Node'; $lang->zanode->edit = 'Edit ZenAgent Node'; $lang->zanode->editAction = 'Edit ZenAgent Node'; @@ -48,7 +49,6 @@ $lang->zanode->confirmReboot = "Are you sure to restart the ZenAgent Node?"; $lang->zanode->confirmShutdown = "Are you sure to shutdown the ZenAgent Node?"; $lang->zanode->confirmSuspend = "Are you sure to suspend the ZenAgent Node?"; $lang->zanode->confirmResume = "Are you sure to resume the ZenAgent Node?"; -$lang->zanode->confirmRestore = "Are you sure to restore the ZenAgent Node?"; $lang->zanode->confirmRestore = "The ZenAgent Node will be restored to this snapshot state, are you sure you want to continue?"; $lang->zanode->actionSuccess = 'Success'; $lang->zanode->deleted = "Deleted"; @@ -64,6 +64,9 @@ $lang->zanode->initializing = 'Initializing'; $lang->zanode->showPwd = 'Show Password'; $lang->zanode->hidePwd = 'Hide Password'; +$lang->zanode->typeList['node'] = 'Virtual machine'; +$lang->zanode->typeList['physics'] = 'Physical machine'; + $lang->automation = new stdClass(); $lang->automation->scriptPath = $lang->zanode->scriptPath; $lang->automation->node = $lang->zanode->common; @@ -74,6 +77,7 @@ $lang->zanode->noVncPort = 'Failed to get vnc port'; $lang->zanode->nameValid = "The name can only be letters, numbers, '-', '_', '.', and cannot start with a symbol"; $lang->zanode->empty = 'No zanode is found'; $lang->zanode->runCaseConfirm = 'The system detects the presence of an automation script. Whether to execute?'; +$lang->zanode->netError = 'Unable to connect to the physical machine, please check the network and try again.'; $lang->zanode->createImage = 'Create Image'; $lang->zanode->createImaging = 'Creating'; @@ -87,17 +91,22 @@ $lang->zanode->snapshotName = 'Snapshot Name'; $lang->zanode->browseSnapshot = 'Snapshot List'; $lang->zanode->createSnapshot = 'Create Snapshot'; $lang->zanode->editSnapshot = 'Edit Snapshot'; -$lang->zanode->restoreSnapshot = 'Revert Snapshot'; +$lang->zanode->restoreSnapshot = 'Revert From This Snapshot'; $lang->zanode->deleteSnapshot = 'Delete Snapshot'; $lang->zanode->snapshotEmpty = 'No snapshots'; $lang->zanode->confirmDeleteSnapshot = "The snapshot cannot be restored from the recycle bin after being deleted. Are you sure to continue?"; +$lang->zanode->snapshot = new stdClass(); $lang->zanode->snapshot->statusList['creating'] = 'Creating'; -$lang->zanode->snapshot->statusList['completed'] = 'Create Completed'; +$lang->zanode->snapshot->statusList['inprogress'] = 'Creating'; +$lang->zanode->snapshot->statusList['completed'] = 'Usable'; $lang->zanode->snapshot->statusList['failed'] = 'Create Failed'; $lang->zanode->snapshot->statusList['restoring'] = 'Restoring'; $lang->zanode->snapshot->statusList['restore_failed'] = 'Restore Failed'; -$lang->zanode->snapshot->statusList['restore_completed'] = 'Restore Completed'; +$lang->zanode->snapshot->statusList['restore_completed'] = 'Usable'; + +$lang->zanode->snapshot->defaultSnapName = 'DefaultSnapshot'; +$lang->zanode->snapshot->defaultSnapUser = 'System'; $lang->zanode->imageNameEmpty = 'Name can not be empty.'; $lang->zanode->snapStatusError = 'Snapshot is not ready.'; @@ -151,8 +160,8 @@ $lang->zanode->init->title = "Initialize Node"; $lang->zanode->init->descTitle = "Follow these steps to complete the initialization on the node:"; $lang->zanode->init->initDesc = "Execute the init script on the node: %s %s
    - Click check service status button."; -$lang->zanode->tips = "The execution node is a virtual machine or container instance created by the host machine, which is a test environment for executing test tasks. After the execution node is configured with the automated test environment, the script can be automatically executed, and the results can be viewed in the execution results of Zen Dao's application cases."; -$lang->zanode->scriptTips = 'Write the directory where the script is located on the execution node.'; -$lang->zanode->shellTips = 'Before running the automated test script on the execution node, you can execute a custom shell command.'; +$lang->zanode->tips = "The execution node is a virtual machine or container instance created by the host machine, which is a test environment for executing test tasks. After the execution node is configured with the automated test environment, the script can be automatically executed, and the results can be viewed in the execution results of Zen Dao's application cases."; +$lang->zanode->scriptTips = 'Write the directory where the script is located on the execution node.'; +$lang->zanode->shellTips = 'Before running the automated test script on the execution node, you can execute a custom shell command.'; $lang->zanode->automationTips = 'Before executing the test task on the execution node, you need to set up the execution node corresponding to the product, the directory of the automated test script, and the custom Shell command to execute.'; $lang->zanode->nameUnique = $lang->zanode->name . 'already exist'; diff --git a/module/zanode/lang/fr.php b/module/zanode/lang/fr.php index 6fb124d62c..2d269e533c 100644 --- a/module/zanode/lang/fr.php +++ b/module/zanode/lang/fr.php @@ -1,6 +1,7 @@ zanode->common = 'ZenAgent Node'; $lang->zanode->browse = 'ZenAgent Node List'; +$lang->zanode->nodeList = 'ZenAgent Node List'; $lang->zanode->create = 'Create ZenAgent Node'; $lang->zanode->edit = 'Edit ZenAgent Node'; $lang->zanode->editAction = 'Edit ZenAgent Node'; @@ -48,6 +49,7 @@ $lang->zanode->confirmReboot = "Are you sure to restart the ZenAgent Node?"; $lang->zanode->confirmShutdown = "Are you sure to shutdown the ZenAgent Node?"; $lang->zanode->confirmSuspend = "Are you sure to suspend the ZenAgent Node?"; $lang->zanode->confirmResume = "Are you sure to resume the ZenAgent Node?"; +$lang->zanode->confirmRestore = "The ZenAgent Node will be restored to this snapshot state, are you sure you want to continue?"; $lang->zanode->actionSuccess = 'Success'; $lang->zanode->deleted = "Deleted"; $lang->zanode->scriptPath = "Script path"; @@ -62,6 +64,9 @@ $lang->zanode->initializing = 'Initializing'; $lang->zanode->showPwd = 'Show Password'; $lang->zanode->hidePwd = 'Hide Password'; +$lang->zanode->typeList['node'] = 'Virtual machine'; +$lang->zanode->typeList['physics'] = 'Physical machine'; + $lang->automation = new stdClass(); $lang->automation->scriptPath = $lang->zanode->scriptPath; $lang->automation->node = $lang->zanode->common; @@ -72,6 +77,7 @@ $lang->zanode->noVncPort = 'Failed to get vnc port'; $lang->zanode->nameValid = "The name can only be letters, numbers, '-', '_', '.', and cannot start with a symbol"; $lang->zanode->empty = 'No zanode is found'; $lang->zanode->runCaseConfirm = 'The system detects the presence of an automation script. Whether to execute?'; +$lang->zanode->netError = 'Unable to connect to the physical machine, please check the network and try again.'; $lang->zanode->createImage = 'Create Image'; $lang->zanode->createImaging = 'Creating'; @@ -85,19 +91,26 @@ $lang->zanode->snapshotName = 'Snapshot Name'; $lang->zanode->browseSnapshot = 'Snapshot List'; $lang->zanode->createSnapshot = 'Create Snapshot'; $lang->zanode->editSnapshot = 'Edit Snapshot'; -$lang->zanode->restoreSnapshot = 'Revert Snapshot'; +$lang->zanode->restoreSnapshot = 'Revert From This Snapshot'; $lang->zanode->deleteSnapshot = 'Delete Snapshot'; $lang->zanode->snapshotEmpty = 'No snapshots'; $lang->zanode->confirmDeleteSnapshot = "The snapshot cannot be restored from the recycle bin after being deleted. Are you sure to continue?"; +$lang->zanode->snapshot = new stdClass(); $lang->zanode->snapshot->statusList['creating'] = 'Creating'; -$lang->zanode->snapshot->statusList['completed'] = 'Create Completed'; +$lang->zanode->snapshot->statusList['inprogress'] = 'Creating'; +$lang->zanode->snapshot->statusList['completed'] = 'Usable'; $lang->zanode->snapshot->statusList['failed'] = 'Create Failed'; $lang->zanode->snapshot->statusList['restoring'] = 'Restoring'; $lang->zanode->snapshot->statusList['restore_failed'] = 'Restore Failed'; -$lang->zanode->snapshot->statusList['restore_completed'] = 'Restore Completed'; +$lang->zanode->snapshot->statusList['restore_completed'] = 'Usable'; -$lang->zanode->imageNameEmpty = 'Name can not be empty.'; +$lang->zanode->snapshot->defaultSnapName = 'DefaultSnapshot'; +$lang->zanode->snapshot->defaultSnapUser = 'System'; + +$lang->zanode->imageNameEmpty = 'Name can not be empty.'; +$lang->zanode->snapStatusError = 'Snapshot is not ready.'; +$lang->zanode->snapRestoring = 'Snapshot is restoring.'; $lang->zanode->runTimeout = 'Network connection timeout, please check the host and execution node status.'; diff --git a/module/zanode/lang/zh-cn.php b/module/zanode/lang/zh-cn.php index 220b61ae5e..abfcbd593d 100644 --- a/module/zanode/lang/zh-cn.php +++ b/module/zanode/lang/zh-cn.php @@ -1,6 +1,7 @@ zanode->common = '执行节点'; $lang->zanode->browse = '执行节点列表'; +$lang->zanode->nodeList = '执行节点列表'; $lang->zanode->create = '创建执行节点'; $lang->zanode->edit = '编辑执行节点'; $lang->zanode->editAction = '编辑执行节点'; @@ -63,6 +64,9 @@ $lang->zanode->initializing = '初始化中'; $lang->zanode->showPwd = '显示密码'; $lang->zanode->hidePwd = '隐藏密码'; +$lang->zanode->typeList['node'] = '虚拟机'; +$lang->zanode->typeList['physics'] = '物理机'; + $lang->automation = new stdClass(); $lang->automation->scriptPath = $lang->zanode->scriptPath; $lang->automation->node = $lang->zanode->common; @@ -73,6 +77,7 @@ $lang->zanode->noVncPort = '无法获取执行节点端口'; $lang->zanode->nameValid = "名称只能是字母、数字,'-','_','.',且不能以符号开头"; $lang->zanode->empty = '暂时没有执行节点'; $lang->zanode->runCaseConfirm = '系统检测到选择的用例存在自动化测试脚本,是否自动执行用例?'; +$lang->zanode->netError = '无法连接到物理机,请检查网络后重试。'; $lang->zanode->createImage = '导出镜像'; $lang->zanode->createImaging = '正在导出镜像'; @@ -86,20 +91,23 @@ $lang->zanode->snapshotName = '快照名称'; $lang->zanode->browseSnapshot = '快照列表'; $lang->zanode->createSnapshot = '创建快照'; $lang->zanode->editSnapshot = '编辑快照'; -$lang->zanode->restoreSnapshot = '还原快照'; +$lang->zanode->restoreSnapshot = '还原到此快照'; $lang->zanode->deleteSnapshot = '删除快照'; $lang->zanode->snapshotEmpty = '无快照'; $lang->zanode->confirmDeleteSnapshot = "快照被删除后无法从回收站中还原,您确定继续么?"; $lang->zanode->snapshot = new stdClass(); $lang->zanode->snapshot->statusList['creating'] = '创建中'; -$lang->zanode->snapshot->statusList['completed'] = '创建完成'; +$lang->zanode->snapshot->statusList['inprogress'] = '创建中'; +$lang->zanode->snapshot->statusList['completed'] = '可使用'; $lang->zanode->snapshot->statusList['failed'] = '创建失败'; $lang->zanode->snapshot->statusList['restoring'] = '还原中'; $lang->zanode->snapshot->statusList['restore_failed'] = '还原失败'; -$lang->zanode->snapshot->statusList['restore_completed'] = '还原成功'; +$lang->zanode->snapshot->statusList['restore_completed'] = '可使用'; + +$lang->zanode->snapshot->defaultSnapName = '初始快照'; +$lang->zanode->snapshot->defaultSnapUser = '系统'; -$lang->zanode->imageNameEmpty = '名称不能为空'; $lang->zanode->imageNameEmpty = '名称不能为空'; $lang->zanode->snapStatusError = '快照不可用'; $lang->zanode->snapRestoring = '快照正在还原中'; @@ -130,7 +138,7 @@ $lang->zanode->statusList['restoring'] = '还原中'; $lang->zanode->initNotice = "保存成功,请初始化执行节点或返回列表。"; $lang->zanode->initButton = "去初始化"; -$lang->zanode->init = new stdclass; +$lang->zanode->init = new stdClass(); $lang->zanode->init->statusTitle = "服务状态"; $lang->zanode->init->checkStatus = "检测服务状态"; $lang->zanode->init->not_install = "未安装"; @@ -152,8 +160,8 @@ $lang->zanode->init->title = "初始化执行节点"; $lang->zanode->init->descTitle = "请根据引导完成执行节点上的初始化: "; $lang->zanode->init->initDesc = "- 在执行节点上执行命令:%s %s
    - 点击检测服务状态。";$lang->zanode->init->statusTitle = "服务状态"; -$lang->zanode->tips = '执行节点是由宿主机创建的虚拟机或容器实例,是执行测试任务的测试环境,在执行节点配置自动化测试环境后可以自动执行脚本,结果可以在禅道对应用例执行结果中查看。'; -$lang->zanode->scriptTips = '填写执行节点上自动化测试脚本所在的目录。'; -$lang->zanode->shellTips = '在执行节点上运行自动化测试脚本前,可以执行自定义的shell命令。'; +$lang->zanode->tips = '执行节点是由宿主机创建的虚拟机或容器实例,是执行测试任务的测试环境,在执行节点配置自动化测试环境后可以自动执行脚本,结果可以在禅道对应用例执行结果中查看。'; +$lang->zanode->scriptTips = '填写执行节点上自动化测试脚本所在的目录。'; +$lang->zanode->shellTips = '在执行节点上运行自动化测试脚本前,可以执行自定义的shell命令。'; $lang->zanode->automationTips = '在执行节点上执行测试任务前,需要设置产品对应的执行节点,自动化测试脚本的目录以及需要执行的自定义Shell命令。'; $lang->zanode->nameUnique = $lang->zanode->name . '已存在'; diff --git a/module/zanode/model.php b/module/zanode/model.php index 8422f1a1a2..313eb4d24b 100644 --- a/module/zanode/model.php +++ b/module/zanode/model.php @@ -53,12 +53,15 @@ class zanodemodel extends model */ public function create() { - $data = fixer::input('post')->get(); + $data = fixer::input('post') + ->setIF($this->post->type == 'physics', 'parent', 0) + ->setIF($this->post->type == 'physics', 'osName', $this->post->osNamePhysics) + ->remove('osNamePhysics') + ->get(); /* Batch check fields. */ - $data->type = 'node'; $this->dao->update(TABLE_ZAHOST)->data($data) - ->batchCheck($this->config->zanode->create->requiredFields, 'notempty'); + ->batchCheck($data->type == 'node' ? $this->config->zanode->create->requiredFields : $this->config->zanode->create->physicsRequiredFields, 'notempty'); if(dao::isError()) return false; @@ -69,47 +72,60 @@ class zanodemodel extends model } /* If name already exists return error. */ - $node = $this->dao->select('*')->from(TABLE_ZAHOST)->where('name')->eq($data->name)->andWhere('type')->eq('node')->fetch(); + $node = $this->dao->select('*')->from(TABLE_ZAHOST)->where('name')->eq($data->name)->andWhere('type')->in('node,physics')->fetch(); if($node) return dao::$errors[] = $this->lang->zanode->nameUnique; - /* Get image. */ - $image = $this->getImageByID($data->image); - - /* Get host info. */ - $host = $this->getHostByID($data->parent); - - /* Prepare create params. */ - $agnetUrl = 'http://' . $host->extranet . ':' . $host->zap; - $param = array( - 'os' => $image->osName, - 'path' => $image->path, - 'name' => $data->name, - 'cpu' => (int)$data->cpuCores, - 'disk' => (int)$data->diskSize, - 'memory' => (int)$data->memory, - ); - - $result = json_decode(commonModel::http($agnetUrl . static::KVM_CREATE_PATH, json_encode($param), null, array("Authorization:$host->tokenSN"))); - - if(empty($result)) + if($data->type == 'physics') { - dao::$errors[] = $this->lang->zanode->notFoundAgent; - return false; + $ping = $this->loadModel('zahost')->checkAddress($data->extranet); + if(!$ping) + { + dao::$errors[] = $this->lang->zanode->netError; + return false; + } } - if($result->code != 'success') + else { - dao::$errors[] = $this->lang->zanode->createVmFail; - return false; + /* Get image. */ + $image = $this->getImageByID($data->image); + + /* Get host info. */ + $host = $this->getHostByID($data->parent); + + /* Prepare create params. */ + $agnetUrl = 'http://' . $host->extranet . ':' . $host->zap; + $param = array( + 'os' => $image->osName, + 'path' => $image->path, + 'name' => $data->name, + 'cpu' => (int)$data->cpuCores, + 'disk' => (int)$data->diskSize, + 'memory' => (int)$data->memory, + ); + + $result = json_decode(commonModel::http($agnetUrl . static::KVM_CREATE_PATH, json_encode($param), null, array("Authorization:$host->tokenSN"))); + + if(empty($result)) + { + dao::$errors[] = $this->lang->zanode->notFoundAgent; + return false; + } + if($result->code != 'success') + { + dao::$errors[] = $this->lang->zanode->createVmFail; + return false; + } + + /* Prepare create ZenAgent Node data. */ + $data->image = $data->image; + $data->parent = $host->id; + $data->mac = $result->data->mac; + $data->vnc = (int)$result->data->vnc; } - /* Prepare create ZenAgent Node data. */ - $data->image = $data->image; - $data->parent = $host->id; - $data->mac = $result->data->mac; $data->status = static::STATUS_RUNNING; $data->createdBy = $this->app->user->account; $data->createdDate = helper::now(); - $data->vnc = (int)$result->data->vnc; /* Save ZenAgent Node. */ $this->dao->insert(TABLE_ZAHOST)->data($data)->autoCheck()->exec(); @@ -231,6 +247,53 @@ class zanodemodel extends model return false; } + public function createDefaultSnapshot($zanodeID = 0) + { + $node = $this->getNodeByID($zanodeID); + if($node->status != 'running') dao::$errors['name'] = $this->lang->zanode->apiError['notRunning']; + if(dao::isError()) return false; + + $newSnapshot = new stdClass(); + $newSnapshot->host = $node->id; + $newSnapshot->name = "defaultSnap"; + $newSnapshot->desc = ""; + $newSnapshot->status = 'creating'; + $newSnapshot->osName = $node->osName; + $newSnapshot->from = 'snapshot'; + $newSnapshot->createdBy = 'system'; + $newSnapshot->createdDate = helper::now(); + + $this->dao->insert(TABLE_IMAGE) + ->data($newSnapshot) + ->autoCheck() + ->exec(); + + if(dao::isError()) return false; + + $newID = $this->dao->lastInsertID(); + + /* Prepare create params. */ + $agnetUrl = 'http://' . $node->ip . ':' . $node->hzap; + $param = array(array( + 'name' => $newSnapshot->name, + 'task' => $newID, + 'type' => 'createSnap', + 'vm' => $node->name + )); + + $result = json_decode(commonModel::http($agnetUrl . static::SNAPSHOT_CREATE_PATH, json_encode($param,JSON_NUMERIC_CHECK), null, array("Authorization:$node->tokenSN"))); + + + if(!empty($result) and $result->code == 'success') + { + return $newID; + } + + $this->dao->delete()->from(TABLE_IMAGE)->where('id')->eq($newID)->exec(); + dao::$errors[] = (!empty($result) and !empty($result->msg)) ? $result->msg : $this->app->lang->fail; + return false; + } + /** * Edit Snapshot. * @@ -507,11 +570,11 @@ class zanodemodel extends model $query = str_replace('`hostID`', 't2.`id`', $query); } - $list = $this->dao->select('t1.*, t2.name as hostName, t2.extranet,t3.osName')->from(TABLE_ZAHOST)->alias('t1') + $list = $this->dao->select("t1.*, t2.name as hostName, if(t1.type='node', t2.extranet, t1.extranet) extranet,if(t1.type='node', t3.osName, t1.osName) osName")->from(TABLE_ZAHOST)->alias('t1') ->leftJoin(TABLE_ZAHOST)->alias('t2')->on('t1.parent = t2.id') ->leftJoin(TABLE_IMAGE)->alias('t3')->on('t3.id = t1.image') ->where('t1.deleted')->eq(0) - ->andWhere("t1.type")->eq("node") + ->andWhere("((t1.type = 'node' and t2.type = 'zahost') or t1.type = 'physics')") ->beginIF($query)->andWhere($query)->fi() ->orderBy($orderBy) ->page($pager) @@ -723,14 +786,14 @@ class zanodemodel extends model */ public function getNodeByID($id) { - $node = $this->dao->select('t1.*, t2.name as hostName, t2.extranet as ip,t2.zap as hzap,t3.osName, t2.tokenSN as tokenSN, t2.secret as secret')->from(TABLE_ZAHOST) + $node = $this->dao->select("t1.*, t2.name as hostName, t2.extranet as ip,t2.zap as hzap,if(t1.type='node', t3.osName, t1.osName) osName, t2.tokenSN as tokenSN, t2.secret as secret")->from(TABLE_ZAHOST) ->alias('t1') ->leftJoin(TABLE_ZAHOST)->alias('t2')->on('t1.parent = t2.id') ->leftJoin(TABLE_IMAGE)->alias('t3')->on('t3.id = t1.image') ->where('t1.id')->eq($id) ->fetch(); - $host = $this->loadModel("zahost")->getByID($node->parent); + $host = $this->loadModel("zahost")->getByID($node->type == 'node' ? $node->parent : $node->id); if($node->status == 'running' || $node->status == 'ready') { if(empty($host) || $host->status != 'online') @@ -756,7 +819,6 @@ class zanodemodel extends model { $node = $this->dao->select('*')->from(TABLE_ZAHOST) ->where('mac')->eq($mac) - ->andWhere("type")->eq('node') ->fetch(); $host = $this->loadModel("zahost")->getByID($node->parent); diff --git a/module/zanode/view/browse.html.php b/module/zanode/view/browse.html.php index ac3db250fa..e586757bfa 100644 --- a/module/zanode/view/browse.html.php +++ b/module/zanode/view/browse.html.php @@ -53,6 +53,7 @@
    + @@ -68,6 +69,7 @@ + @@ -78,16 +80,24 @@ + - +
    story->reviewedBy;?>
    task->story;?> @@ -127,7 +129,7 @@ foreach(explode(',', $config->task->create->requiredFields) as $field)
    lang->custom->scrum->common, implode($lang->comma, $disabledScrumFeatures)) : $this->lang->custom->features[$feature];?>
    idAB); ?> zanode->name); ?> zanode->extranet); ?> zanode->cpuCores); ?> zanode->memory); ?>
    id; ?> inlink('view', "id=$node->id"), $node->name, '', ""); ?> extranet; ?> zanode->os->cpuCores, $node->cpuCores); ?> memory . $this->lang->zahost->unitList['GB']; ?> zanode->suspend}' target='hiddenwin'"; - $suspendAttr .= $node->status != 'running' && $node->status != 'wait' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmSuspend}\")==false) return false;'"; + $suspendAttr .= $node->type == 'physics' || $node->status != 'running' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmSuspend}\")==false) return false;'"; $resumeAttr = "title='{$lang->zanode->resume}' target='hiddenwin'"; - $resumeAttr .= $node->status == 'running' || $node->status == 'wait' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmResume}\")==false) return false;'"; + $resumeAttr .= $node->type == 'physics' || $node->status == 'running' || $node->status == 'wait' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmResume}\")==false) return false;'"; $rebootAttr = "title='{$lang->zanode->reboot}' target='hiddenwin'"; - $rebootAttr .= $node->status == 'shutoff' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmReboot}\")==false) return false;'"; + $rebootAttr .= $node->type == 'physics' || $node->status == 'shutoff' || $node->status == 'wait' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmReboot}\")==false) return false;'"; + + $closeAttr = "title='{$lang->zanode->shutdown}'"; + $closeAttr .= $node->type == 'physics' || $node->status == 'wait' ? ' class="btn disabled"' : ' class="btn iframe"'; + + $startAttr = "title='{$lang->zanode->boot}'"; + $startAttr .= $node->type == 'physics' || $node->status == 'wait' ? ' class="btn disabled"' : ' class="btn iframe"'; $snapshotAttr = "title='{$lang->zanode->createSnapshot}'"; - $snapshotAttr .= $node->status != 'running' ? ' class="btn disabled"' : ' class="btn iframe"'; + $snapshotAttr .= $node->type == 'physics' || $node->status != 'running' ? ' class="btn disabled"' : ' class="btn iframe"'; + + $imageAttr = $node->status != 'running' ? ' class="btn btn-action iframe createImage disabled"' : ' class="btn btn-action iframe createImage"'; common::printLink('zanode', 'getVNC', "id={$node->id}", " ", (in_array($node->status ,array('running', 'launch', 'wait')) ? '_blank' : ''), "title='{$lang->zanode->getVNC}' class='btn desktop " . (in_array($node->status ,array('running', 'launch', 'wait')) ? '':'disabled') . "'", ''); if($node->status == "suspend") @@ -101,11 +111,11 @@ if($node->status == "shutoff") { - common::printLink('zanode', 'start', "zanodeID={$node->id}", " ", '', "class='btn ' title='{$lang->zanode->boot}'"); + common::printLink('zanode', 'start', "zanodeID={$node->id}", " ", '', $startAttr); } else { - common::printLink('zanode', 'close', "zanodeID={$node->id}", " ", '', "class='btn ' title='{$lang->zanode->shutdown}'"); + common::printLink('zanode', 'close', "zanodeID={$node->id}", " ", '', $closeAttr); } common::printLink('zanode', 'reboot', "zanodeID={$node->id}", " ", '', $rebootAttr); @@ -117,7 +127,7 @@ echo ""; echo ""; echo ""; diff --git a/module/zanode/view/browsesnapshot.html.php b/module/zanode/view/browsesnapshot.html.php index d98f24f120..6e0bc97d8f 100644 --- a/module/zanode/view/browsesnapshot.html.php +++ b/module/zanode/view/browsesnapshot.html.php @@ -44,10 +44,20 @@ $deleteAttr = "title='{$lang->zanode->deleteSnapshot}' target='hiddenwin'"; $deleteAttr .= ($snapshot->status == 'restoring' or $snapshot->status == 'creating') ? ' class="btn disabled"' : 'class="btn"'; + + $isDefalut = $snapshot->name == 'defaultSnap' && $snapshot->createdBy == 'system'; + if($isDefalut) $editAttr = $deleteAttr = 'class="btn disabled"'; + $name = $snapshot->localName ? $snapshot->localName : $snapshot->name; + $title = $snapshot->name; + if($snapshot->name == 'defaultSnap' && $snapshot->createdBy == 'system') + { + $name = $lang->zanode->snapshot->defaultSnapName; + $title = $name; + } ?> - localName ? $snapshot->localName : $snapshot->name;?> zanode->snapshot->statusList, $snapshot->status, '');?>createdBy, '')?>name == 'defaultSnap' && $snapshot->createdBy == 'system' ? $lang->zanode->snapshot->defaultSnapUser : zget($users, $snapshot->createdBy, '')?> createdDate;?> ', 'hiddenwin', $editAttr);?> @@ -63,4 +73,3 @@ -getModuleRoot() . 'common/view/footer.html.php';?> diff --git a/module/zanode/view/create.html.php b/module/zanode/view/create.html.php index 46cd460261..19f1a570df 100644 --- a/module/zanode/view/create.html.php +++ b/module/zanode/view/create.html.php @@ -22,6 +22,11 @@
    + + + + + @@ -31,6 +36,10 @@ + + + + @@ -61,7 +70,10 @@ - + diff --git a/module/zanode/view/edit.html.php b/module/zanode/view/edit.html.php index dfba0f6f04..e733b205a0 100644 --- a/module/zanode/view/edit.html.php +++ b/module/zanode/view/edit.html.php @@ -21,19 +21,28 @@
    zanode->hostName;?> zanode->name;?> zanode->nameValid}\"");?>
    zanode->image;?>
    zanode->osName;?> + + +
    zanode->desc ?>
    + type == 'node'):?> + + type == 'node'):?> + + + + + + diff --git a/module/zanode/view/view.html.php b/module/zanode/view/view.html.php index 0c5736e8f2..9a9c9ad15c 100644 --- a/module/zanode/view/view.html.php +++ b/module/zanode/view/view.html.php @@ -44,7 +44,7 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou
    -
    zanode->view; ?>
    +
    zahost->baseInfo; ?>
    @@ -97,11 +97,11 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou
    zanode->defaultPwd; ?>:
    -
    ' . str_repeat('*', strlen($config->zanode->defaultPwd)) . '' . ' ' . "" - . ""; + . ""; ?>
    @@ -116,6 +116,10 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou
    +
    +
    zanode->desc; ?>
    +
    desc) ? htmlspecialchars_decode($zanode->desc) : $lang->noData; ?>
    +
    osName, "windows") ? $config->zanode->defaultWinAccou
    -
    +
      ZenAgent   zanode->initializing; ?>
    -
    +
      ZTF   zanode->initializing; ?>  '>zanode->install ?>
    -
    +
    zanode->init->initSuccessNoticeTitle, "{$lang->zanode->manual}", html::a(helper::createLink('testcase', 'automation', "", '', true), $lang->zanode->automation, '', "class='iframe' title='{$lang->zanode->automation}' data-width='50%'", '')); ?> zanode->init->initFailNoticeTitle . '
    ' . $lang->zanode->init->initFailNoticeDesc;?>
    -
    -
    -
    zanode->desc; ?>
    -
    desc) ? htmlspecialchars_decode($zanode->desc) : $lang->noData; ?>
    -
    -
    @@ -177,13 +175,19 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou deleted)) { $suspendAttr = "title='{$lang->zanode->suspend}' target='hiddenwin'"; - $suspendAttr .= $zanode->status != 'running' && $zanode->status != 'wait' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmSuspend}\")==false) return false;'"; + $suspendAttr .= $zanode->status != 'running' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmSuspend}\")==false) return false;'"; $resumeAttr = "title='{$lang->zanode->resume}' target='hiddenwin'"; - $resumeAttr .= $zanode->status == 'running' || $zanode->status == 'wait' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmResume}\")==false) return false;'"; + $resumeAttr .= $zanode->status == 'running' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmResume}\")==false) return false;'"; $rebootAttr = "title='{$lang->zanode->reboot}' target='hiddenwin'"; - $rebootAttr .= $zanode->status == 'shutoff' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmReboot}\")==false) return false;'"; + $rebootAttr .= $zanode->status == 'shutoff' || $zanode->status == 'wait' ? ' class="btn disabled"' : "class='btn' target='hiddenwin' onclick='if(confirm(\"{$lang->zanode->confirmReboot}\")==false) return false;'"; + + $closeAttr = "title='{$lang->zanode->shutdown}'"; + $closeAttr .= $zanode->status == 'wait' ? ' class="btn disabled"' : ' class="btn iframe"'; + + $startAttr = "title='{$lang->zanode->boot}'"; + $startAttr .= $zanode->status == 'wait' ? ' class="btn disabled"' : ' class="btn iframe"'; $snapshotAttr = "title='{$lang->zanode->createSnapshot}'"; $snapshotAttr .= $zanode->status != 'running' ? ' class="btn disabled"' : ' class="btn iframe"'; @@ -200,11 +204,11 @@ $account = strpos($zanode->osName, "windows") ? $config->zanode->defaultWinAccou if($zanode->status == "shutoff") { - common::printLink('zanode', 'start', "zanodeID={$zanode->id}", " " . $lang->zanode->bootNode, '', "title='{$lang->zanode->boot}' class='btn '"); + common::printLink('zanode', 'start', "zanodeID={$zanode->id}", " " . $lang->zanode->bootNode, '', $startAttr); } else { - common::printLink('zanode', 'close', "zanodeID={$zanode->id}", " " . $lang->zanode->shutdownNode, '', "title='{$lang->zanode->shutdown}' class='btn '"); + common::printLink('zanode', 'close', "zanodeID={$zanode->id}", " " . $lang->zanode->shutdownNode, '', $closeAttr); } common::printLink('zanode', 'reboot', "zanodeID={$zanode->id}", " " . $lang->zanode->rebootNode, '', $rebootAttr); diff --git a/test/class/action.class.php b/test/class/action.class.php index 82a42b1bfc..a66ca41e98 100644 --- a/test/class/action.class.php +++ b/test/class/action.class.php @@ -567,4 +567,24 @@ class actionTest foreach($objects as $object) $count += count($object); return $count; } + + /** + * Test restore stages. + * + * @param array $stageList + * @param array $actionIdList + * @access public + * @return object + */ + public function restoreStagesTest($stageList, $actionIdList) + { + $this->objectModel->restoreStages($stageList); + + if(dao::isError()) return dao::getError(); + + $actionList = array(); + foreach($actionIdList as $actionID) $actionList[$actionID] = $this->objectModel->getByID($actionID); + + return $actionList; + } } diff --git a/test/class/cron.class.php b/test/class/cron.class.php index ae7fefe66d..d65af43a14 100644 --- a/test/class/cron.class.php +++ b/test/class/cron.class.php @@ -77,13 +77,12 @@ class cronTest * Change cron status to running test. * * @param int $cronID - * @param string $lastTime * @access public * @return bool|int */ - public function changeStatusRunningTest($cronID, $lastTime) + public function changeStatusRunningTest($cronID) { - $objects = $this->objectModel->changeStatusRunning($cronID, $lastTime); + $objects = $this->objectModel->changeStatusRunning($cronID); if(dao::isError()) return dao::getError(); diff --git a/test/class/custom.class.php b/test/class/custom.class.php index ed38ded606..8cdf495085 100644 --- a/test/class/custom.class.php +++ b/test/class/custom.class.php @@ -334,4 +334,25 @@ class customTest return $objects; } + + /** + * Check for waterfallplus project data.. + * + * @param string $param deleteproject + * @access public + * @return int + */ + public function hasWaterfallplusDataTest($param = '') + { + if($param == 'deleteproject') + { + global $tester; + $tester->dao->update(TABLE_PROJECT) + ->set('deleted')->eq(1) + ->where('type')->eq('project') + ->andWhere('model')->eq('waterfallplus') + ->exec(); + } + return $this->objectModel->hasWaterfallplusData(); + } } diff --git a/test/class/execution.class.php b/test/class/execution.class.php index 205a472642..5c79afdd64 100644 --- a/test/class/execution.class.php +++ b/test/class/execution.class.php @@ -321,6 +321,127 @@ class executionTest } } + /** + * function batchChangeStatus test by execution + * + * @param array $executionIdList + * @param string $status + * @access public + * @return array + */ + public function batchChangeStatusObject($executionIdList = '', $status = '') + { + $result = $this->executionModel->batchChangeStatus($executionIdList, $status); + + if(dao::isError()) + { + return dao::getError(); + } + else + { + return empty($result) ? 'empty' : $result; + } + } + + /** + * function changeStatus2Wait test by execution + * + * @param int $executionID + * @access public + * @return string|array + */ + public function changeStatus2WaitObject($executionID) + { + global $tester; + + $tester->loadModel('programplan'); + $selfAndChildrenList = $tester->programplan->getSelfAndChildrenList($executionID); + $siblingStages = $tester->programplan->getSiblings($executionID); + + $selfAndChildren = $selfAndChildrenList[$executionID]; + $execution = $selfAndChildren[$executionID]; + $executionType = $execution->type; + + $siblingList = array(); + if($executionType == 'stage') $siblingList = $siblingStages[$executionID]; + + $result = $this->executionModel->changeStatus2Wait($executionID, $selfAndChildren, $siblingList); + + if(dao::isError()) + { + return dao::getError(); + } + else + { + return (empty($result) or $result == "'',") ? 'empty' : $result; + } + } + + /** + * function changeStatus2Doing test by execution + * + * @param int $executionID + * @access public + * @return bool|array + */ + public function changeStatus2DoingObject($executionID) + { + global $tester; + + $tester->loadModel('programplan'); + $selfAndChildrenList = $tester->programplan->getSelfAndChildrenList($executionID); + + $selfAndChildren = $selfAndChildrenList[$executionID]; + $execution = $selfAndChildren[$executionID]; + $executionType = $execution->type; + + $this->executionModel->changeStatus2Doing($executionID, $selfAndChildren); + + if(dao::isError()) + { + return dao::getError(); + } + else + { + return true; + } + } + + /** + * function changeStatus2Inactived test by execution + * + * @param int $executionID + * @param string $status suspended|closed + * @access public + * @return bool|array + */ + public function changeStatus2InactivedObject($executionID, $status) + { + global $tester; + + $tester->loadModel('programplan'); + $selfAndChildrenList = $tester->programplan->getSelfAndChildrenList($executionID); + $siblingStages = $tester->programplan->getSiblings($executionID); + + $selfAndChildren = $selfAndChildrenList[$executionID]; + $execution = $selfAndChildren[$executionID]; + $executionType = $execution->type; + + $siblingList = array(); + if($executionType == 'stage') $siblingList = $siblingStages[$executionID]; + + $result = $this->executionModel->changeStatus2Inactived($executionID, $status, $selfAndChildren, $siblingList); + + if(dao::isError()) + { + return dao::getError(); + } + else + { + return (empty($result) or $result == "'',") ? 'empty' : $result; + } + } + /** * function start test by execution * @@ -2490,34 +2611,6 @@ class executionTest } } - /** - * Test Get lifetime by id list. - * - * @param array $idList - * @access public - * @return void - */ - public function getLifetimeByIdListTest($idList = '') - { - $result = $this->executionModel->getLifetimeByIdList($idList); - - if(dao::isError()) - { - $error = dao::getError(); - return $error; - } - else - { - if(!$result) return 'empty'; - - foreach($result as $id => $lifetime) - { - if(!$lifetime) $result[$id] = 'emptyLifetime'; - } - return $result; - } - } - /** * Test Update user view of execution and it's product. * @@ -2834,4 +2927,56 @@ class executionTest ->andWhere('date')->eq($date) ->orderBy('date DESC, id asc')->fetchGroup('name', 'date'); } + + /** + * Test build execution object by status. + * + * @param string $status + * @access public + * @return object + */ + public function buildExecutionByStatusTest($status) + { + return $this->executionModel->buildExecutionByStatus($status); + } + + /** + * Reset execution sorts. + * + * @param int $projectID + * @param string $type noParent + * @access public + * @return string + */ + public function resetExecutionSortsTest($projectID, $type = '') + { + $executions = array(); + $executionIDList = ''; + $firstGradeExecutions = array(); + if($projectID) + { + $executions = $this->executionModel->dao->select('*')->from(TABLE_EXECUTION) + ->where('deleted')->eq(0) + ->andWhere('project')->eq($projectID) + ->andWhere('type')->in('sprint,stage,kanban') + ->orderBy('order_asc') + ->fetchAll('id'); + + if($type == 'hasParent') + { + foreach($executions as $execution) + { + if($execution->grade == 1) $firstGradeExecutions[$execution->id] = $execution->id; + } + } + } + + $executions = $this->executionModel->resetExecutionSorts($executions, $firstGradeExecutions); + if(!empty($executions)) + { + $executionIDList = array_keys($executions); + $executionIDList = implode(',', $executionIDList); + } + return $executionIDList; + } } diff --git a/test/class/programplan.class.php b/test/class/programplan.class.php index 71cf840caa..0ba204b175 100644 --- a/test/class/programplan.class.php +++ b/test/class/programplan.class.php @@ -336,4 +336,139 @@ class programplanTest return implode(',', $objects); } + + /** + * Test get parent stage's children types. + * + * @param int $parentID + * @access public + * @return string + */ + public function getParentChildrenTypesTest($parentID) + { + $objects = $this->objectModel->getParentChildrenTypes($parentID); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test check code unique. + * + * @param array $codes + * @param array $planIDList + * @access public + * @return string + */ + public function checkCodeUniqueTest($codes, $planIDList = array()) + { + $objects = $this->objectModel->checkCodeUnique($codes, $planIDList); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test check name unique. + * + * @param array $names + * @access public + * @return string + */ + public function checkNameUniqueTest($names) + { + $objects = $this->objectModel->checkNameUnique($names); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test check if the stage is a leaf stage. + * + * @param int $planID + * @access public + * @return string + */ + public function checkLeafStageTest($planID) + { + $objects = $this->objectModel->checkLeafStage($planID); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test check whether it is the top stage. + * + * @param int $planID + * @access public + * @return string + */ + public function checkTopStageTest($planID) + { + $objects = $this->objectModel->checkTopStage($planID); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test update sub-stage attribute. + * + * @param int $planID + * @param string $attribute + * @param int $subStageID + * @access public + * @return string + */ + public function updateSubStageAttrTest($planID, $attribute, $subStageID) + { + global $tester; + + $objects = $this->objectModel->updateSubStageAttr($planID, $attribute); + + if(dao::isError()) return dao::getError(); + + $attribute = $tester->dao->select('attribute')->from(TABLE_EXECUTION)->where('id')->eq($subStageID)->fetch('attribute'); + + return $attribute; + } + + /** + * Test get plan and its children. + * + * @param string|int|array $executionIdList + * @access public + * @return string + */ + public function getSelfAndChildrenListTest($executionIdList) + { + $objects = $this->objectModel->getSelfAndChildrenList($executionIdList); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test get plan's siblings. + * + * @param string|int|array $executionIdList + * @access public + * @return string + */ + public function getSiblingsTest($executionIdList) + { + $objects = $this->objectModel->getSiblings($executionIdList); + + if(dao::isError()) return dao::getError(); + + return $objects; + } } diff --git a/test/class/stage.class.php b/test/class/stage.class.php index 55d04a9e87..13901a41a6 100644 --- a/test/class/stage.class.php +++ b/test/class/stage.class.php @@ -11,20 +11,21 @@ class stageTest * Test create a stage. * * @param object $stage + * @param string $type * @access public * @return object */ - public function createTest($stage) + public function createTest($stage, $type = 'waterfall') { foreach($stage as $key => $value) $_POST[$key] = $value; - $objectID = $this->objectModel->create(); + $objectID = $this->objectModel->create($type); unset($_POST); if(dao::isError()) return dao::getError(); - $object = $this->objectModel->getByID($objectID); + $object = $this->objectModel->getByID($objectID, $type); return $object; } @@ -32,20 +33,21 @@ class stageTest * Test batch create stages. * * @param array $param + * @param string $type * @access public * @return int */ - public function batchCreateTest($param) + public function batchCreateTest($param ,$type = 'waterfall') { foreach($param as $key => $value) $_POST[$key] = $value; - $this->objectModel->batchCreate(); + $this->objectModel->batchCreate($type); unset($_POST); if(dao::isError()) return dao::getError(); - $objects = $this->objectModel->getStages(); + $objects = $this->objectModel->getStages('id_desc', 0, $type); return count($objects); } @@ -116,4 +118,20 @@ class stageTest return $object; } + + /** + * Test get a stage by id. + * + * @param string $projectType + * @access public + * @return object + */ + public function getTotalPercentTest($projectType) + { + $object = $this->objectModel->getTotalPercent($projectType); + + if(dao::isError()) return dao::getError(); + + return $object; + } } diff --git a/test/model/action/restorestages.php b/test/model/action/restorestages.php new file mode 100755 index 0000000000..e072db6f0b --- /dev/null +++ b/test/model/action/restorestages.php @@ -0,0 +1,48 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->deleted->range('0,1{4}'); +$execution->gen(5); + +$action = zdTable('action'); +$action->id->range('1-4'); +$action->objectType->range('execution'); +$action->objectID->range('2,3,4,5'); +$action->project->range('1'); +$action->actor->range('admin'); +$action->action->range('deleted'); +$action->extra->range('1'); +$action->gen(4); + + +/** + +title=测试 actionModel->restoreStages(); +cid=1 +pid=1 + +测试还原id为2和3的阶段 >> 0 + +*/ + +$action = new actionTest(); + +$hasDeleted = $action->restoreStagesTest(array(2 => 2, 3 => 3), array(1, 2)); + +r($hasDeleted[2]) && p('extra') && e('0'); // 测试还原id为2和3的阶段 diff --git a/test/model/cron/changestatusrunning.php b/test/model/cron/changestatusrunning.php index 74fb49228b..286ee65039 100755 --- a/test/model/cron/changestatusrunning.php +++ b/test/model/cron/changestatusrunning.php @@ -18,8 +18,7 @@ pid=1 $cron = new cronTest(); $cronID = 4; -$lastTime = '0000-00-00 00:00:00'; -$result = $cron->changeStatusRunningTest($cronID, $lastTime); +$result = $cron->changeStatusRunningTest($cronID); $cronInfo = $tester->cron->getById($cronID); r($result) && p() && e('1'); // 更新之后查看返回值是否是1 diff --git a/test/model/custom/haswaterfallplusdata.php b/test/model/custom/haswaterfallplusdata.php new file mode 100644 index 0000000000..de02c5d720 --- /dev/null +++ b/test/model/custom/haswaterfallplusdata.php @@ -0,0 +1,34 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$project = zdTable('project'); +$project->id->range('1-3'); +$project->name->range('项目集1,融合瀑布项目1,瀑布项目1'); +$project->type->range('program,project{2}'); +$project->parent->range('0,1{2}'); +$project->status->range('wait'); +$project->model->range('[],waterfallplus,waterfall'); +$project->openedBy->range('admin,user1'); +$project->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$project->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$project->gen(3); + +/** + +title=测试projectModel->hasWaterfallplusData(); +cid=1 +pid=1 + +检查获取所有未删除的融合瀑布项目的数量 >> 1 +检查删除所有融合瀑布模型项目后,获取融合瀑布项目的数量 >> 0 + +*/ + +$customTester = new customTest(); +r($customTester->hasWaterfallplusDataTest()) && p() && e('1'); // 检查获取所有未删除的融合瀑布项目的数量 +r($customTester->hasWaterfallplusDataTest('deleteproject')) && p() && e('0'); // 检查删除所有融合瀑布模型项目后,获取融合瀑布项目的数量 diff --git a/test/model/execution/batchchangestatus.php b/test/model/execution/batchchangestatus.php new file mode 100755 index 0000000000..04189b1f9c --- /dev/null +++ b/test/model/execution/batchchangestatus.php @@ -0,0 +1,38 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('wait{5}'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试executionModel->batchChangeStatus(); +cid=1 +pid=1 + +测试批量修改执行状态为进行中 >> empty +测试批量修改执行状态为未开始 >> empty +测试批量修改执行状态为已挂起 >> empty +测试批量修改执行状态为已关闭 >> 阶段a子1 + +*/ + +$execution = new executionTest(); +r($execution->batchChangeStatusObject(array(4), 'doing')) && p('') && e('empty'); // 测试批量修改执行状态为进行中 +r($execution->batchChangeStatusObject(array(2), 'wait')) && p('') && e('empty'); // 测试批量修改执行状态为未开始 +r($execution->batchChangeStatusObject(array(5), 'suspended')) && p('') && e('empty'); // 测试批量修改执行状态为已挂起 +r($execution->batchChangeStatusObject(array(3), 'closed')) && p('') && e('阶段a子1'); // 测试批量修改执行状态为已关闭 diff --git a/test/model/execution/buildexecutionbystatus.php b/test/model/execution/buildexecutionbystatus.php new file mode 100755 index 0000000000..a7fb400b3b --- /dev/null +++ b/test/model/execution/buildexecutionbystatus.php @@ -0,0 +1,26 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +/** + +title=测试executionModel->buildExecutionByStatus(); +cid=1 +pid=1 + +测试传入未开始状态,返回对象的实际开始时间 >> 0 +测试传入进行中状态,返回对象的状态 >> doing +测试传入已挂起状态,返回对象的状态 >> suspended +测试传入已关闭状态,返回对象的由谁关闭 >> admin + +*/ + +$execution = new executionTest(); +$waitObject = $execution->buildExecutionByStatusTest('wait'); +r($waitObject->realBegan) && p('') && e('0'); // 测试传入未开始状态,返回对象的实际开始时间 +r($execution->buildExecutionByStatusTest('doing')) && p('status') && e("doing"); // 测试传入进行中状态,返回对象的状态 +r($execution->buildExecutionByStatusTest('suspended')) && p('status') && e('suspended'); // 测试传入已挂起状态,返回对象的状态 +r($execution->buildExecutionByStatusTest('closed')) && p('closedBy') && e('admin'); // 测试传入已关闭状态,返回对象的由谁关闭 diff --git a/test/model/execution/changestatus2doing.php b/test/model/execution/changestatus2doing.php new file mode 100755 index 0000000000..7d49031e87 --- /dev/null +++ b/test/model/execution/changestatus2doing.php @@ -0,0 +1,37 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试executionModel->changeStatus2Doing(); +cid=1 +pid=1 + +测试修改顶级父阶段执行状态为进行中 >> 1 +测试修改子阶段执行状态为进行中 >> 1 +测试修改叶子阶段执行状态为进行中 >> 1 + +*/ + +$execution = new executionTest(); +r($execution->changeStatus2DoingObject(2)) && p('') && e('1'); // 测试修改顶级父阶段执行状态为进行中 +r($execution->changeStatus2DoingObject(3)) && p('') && e('1'); // 测试修改子阶段执行状态为进行中 +r($execution->changeStatus2DoingObject(4)) && p('') && e('1'); // 测试修改叶子阶段执行状态为进行中 diff --git a/test/model/execution/changestatus2inactived.php b/test/model/execution/changestatus2inactived.php new file mode 100755 index 0000000000..b374c04277 --- /dev/null +++ b/test/model/execution/changestatus2inactived.php @@ -0,0 +1,37 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试executionModel->changeStatus2Inactived(); +cid=1 +pid=1 + +测试修改顶级父阶段执行状态为已挂起 >> '阶段a', +测试修改子阶段执行状态为已关闭 >> empty +测试修改叶子阶段执行状态为已关闭 >> empty + +*/ + +$execution = new executionTest(); +r($execution->changeStatus2InactivedObject(2, 'suspended')) && p('') && e("'阶段a',"); // 测试修改顶级父阶段执行状态为已挂起 +r($execution->changeStatus2InactivedObject(3, 'closed')) && p('') && e("empty"); // 测试修改子阶段执行状态为已关闭 +r($execution->changeStatus2InactivedObject(4, 'closed')) && p('') && e('empty'); // 测试修改叶子阶段执行状态为已关闭 diff --git a/test/model/execution/changestatus2wait.php b/test/model/execution/changestatus2wait.php new file mode 100755 index 0000000000..41bc3a08cb --- /dev/null +++ b/test/model/execution/changestatus2wait.php @@ -0,0 +1,37 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试executionModel->changeStatus2Wait(); +cid=1 +pid=1 + +测试修改顶级父阶段执行状态为未开始 >> '阶段a', +测试修改子阶段执行状态为未开始 >> '阶段a子1', +测试修改叶子阶段执行状态为未开始 >> empty + +*/ + +$execution = new executionTest(); +r($execution->changeStatus2WaitObject(2)) && p('') && e("'阶段a',"); // 测试修改顶级父阶段执行状态为未开始 +r($execution->changeStatus2WaitObject(3)) && p('') && e("'阶段a子1',"); // 测试修改子阶段执行状态为未开始 +r($execution->changeStatus2WaitObject(4)) && p('') && e('empty'); // 测试修改叶子阶段执行状态为未开始 diff --git a/test/model/execution/generatecol.php b/test/model/execution/generatecol.php new file mode 100755 index 0000000000..9c8187d973 --- /dev/null +++ b/test/model/execution/generatecol.php @@ -0,0 +1,19 @@ +#!/usr/bin/env php +generateCol(); +cid=1 +pid=1 + +*/ + +$executionTester = new executionTest(); + +r($executionTester->generateColTest('id_desc')) && p("0:sortType") && e('down'); // 按ID倒序排,查看获取到的sortType +r($executionTester->generateColTest('id_asc')) && p("0:sortType") && e('up'); // 按ID正序排,查看获取到的sortType +r($executionTester->generateColTest('id_desc')) && p("2:name;2:title") && e('code;执行代号'); // 查看获取到的第三个字段的name和title diff --git a/test/model/execution/generaterow.php b/test/model/execution/generaterow.php new file mode 100755 index 0000000000..c77148a205 --- /dev/null +++ b/test/model/execution/generaterow.php @@ -0,0 +1,30 @@ +#!/usr/bin/env php +id->range('1-5'); +$execution->name->range('1-5')->prefix('执行'); +$execution->type->range('sprint,stage,kanban'); +$execution->status->range('wait{3},suspended,closed,doing'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试 executionModel->generateCol(); +cid=1 +pid=1 + +*/ + +$executionTester = new executionTest(); +$executions = $executionTester->generateRowTest(); + +r(count($executions)) && p('') && e('5'); // 判断执行数量 +r($executions) && p("0:status") && e('已关闭'); // 判断第一个执行的状态 +r($executions) && p("2:begin;2:end") && e('2022-01-12;2022-02-12'); // 查看获取到的第三个执行的开始日期和结束日期 diff --git a/test/model/execution/getlifetimebyidlist.php b/test/model/execution/getlifetimebyidlist.php deleted file mode 100755 index e59565250d..0000000000 --- a/test/model/execution/getlifetimebyidlist.php +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env php -gen(5); -su('admin'); - -$execution = zdTable('project'); -$execution->id->range('1-5'); -$execution->name->range('项目集1,项目1,迭代1,阶段1,看板1'); -$execution->type->range('program,project,sprint,stage,kanban'); -$execution->parent->range('0,1,2{3}'); -$execution->status->range('wait{3},suspended,closed,doing'); -$execution->openedBy->range('admin,user1'); -$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); -$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); -$execution->gen(5); - -/** - -title=测试executionModel->getLifetimeByIdList(); -cid=1 -pid=1 - -查询执行3和4 lifetime >> emptyLifetime -查询空执行 lifetime >> empty - -*/ - -$executionIDList = array(3, 4); - -$executionTester = new executionTest(); -r($executionTester->getLifetimeByIdListTest($executionIDList)) && p('3') && e('emptyLifetime'); // 查询执行3和4 lifetime -r($executionTester->getLifetimeByIdListTest(array('0'))) && p('') && e('empty'); // 查询空执行 lifetime diff --git a/test/model/execution/resetexecutionsorts.php b/test/model/execution/resetexecutionsorts.php new file mode 100644 index 0000000000..d21a387966 --- /dev/null +++ b/test/model/execution/resetexecutionsorts.php @@ -0,0 +1,41 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-8'); +$execution->name->range('项目集1,项目1,需求阶段1,测试阶段1,需求子阶段1,需求子阶段2,需求子阶段1的迭代1,需求子阶段1的看板1'); +$execution->model->range('[],waterfallplus,[]{6}'); +$execution->type->range('program,project,stage{4},sprint,kanban'); +$execution->project->range('0{2},2{6}'); +$execution->parent->range('0,1,2{2},3{2},5{2}'); +$execution->grade->range('1{4},2{2},3{2}'); +$execution->path->range('`,1,`,`,1,2,`,`,1,2,3`,`,1,2,4,`,`,1,2,3,5,`,`,1,2,3,6,`,`,1,2,3,5,7,`,`1,2,3,5,8,`'); +$execution->order->range('5,10,15,20,25,30,35,40'); +$execution->status->range('doing'); +$execution->openedBy->range('admin'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(8); + +/** + +title=测试executionModel->resetExecutionSorts(); +cid=1 +pid=1 + +检查没有执行时的排序 >> 0 +检查有执行时的排序 >> 3,5,7,8,6,4 +检查有执行并且传parenExecutions时的排序 >> 3,5,7,8,6,4 + +*/ + +$projectList = array(0, 2); + +$executionTester = new executionTest(); +r($executionTester->resetExecutionSortsTest($projectList[0])) && p() && e('0'); // 检查没有执行时的排序 +r($executionTester->resetExecutionSortsTest($projectList[1])) && p() && e('3,5,7,8,6,4'); // 检查有执行时的排序 +r($executionTester->resetExecutionSortsTest($projectList[1], 'hasParent')) && p() && e('3,5,7,8,6,4'); // 检查有执行并且传parenExecutions时的排序 diff --git a/test/model/programplan/checkcodeunique.php b/test/model/programplan/checkcodeunique.php new file mode 100644 index 0000000000..a8f5a878bc --- /dev/null +++ b/test/model/programplan/checkcodeunique.php @@ -0,0 +1,41 @@ +#!/usr/bin/env php +id->range('10-15'); +$programplan->code->range('1-5')->prefix('code'); +$programplan->deleted->range('0-1'); +$programplan->gen(5); + +/** + +title=测试 programplanModel->checkCodeUnique(); +cid=1 +pid=1 + +检查'code1', 'code2', 'code3', 'code4', 'code5' 在未删除的数据内编号是否唯一 code1 >> code1 +检查'code1', 'code2', 'code3', 'code4', 'code5' 在未删除的数据内编号是否唯一 code3 >> code3 +检查'code1', 'code2', 'code3', 'code4', 'code5' 在未删除的数据内编号是否唯一 code5 >> code5 +检查'code1', 'code2', 'code3', 'code4', 'code5' 在除了id为'10', '11', '12', '13', '14'外的未删除数据编号是否唯一 >> 1 +检查'code6', 'code7' 在未删除的数据内编号是否唯一 >> 1 +检查'code2', 'code4' 在未删除的数据内编号是否唯一 >> 1 + +*/ + +$codes = array(); +$codes[] = array('code1', 'code2', 'code3', 'code4', 'code5'); +$codes[] = array('code6', 'code7'); +$codes[] = array('code2', 'code4'); +$exclude = array('10', '11', '12', '13', '14'); + +$programplan = new programplanTest(); + +r($programplan->checkCodeUniqueTest($codes[0])) && p('code1') && e('code1'); // 检查'code1', 'code2', 'code3', 'code4', 'code5' 在未删除的数据内编号是否唯一 code1 +r($programplan->checkCodeUniqueTest($codes[0])) && p('code3') && e('code3'); // 检查'code1', 'code2', 'code3', 'code4', 'code5' 在未删除的数据内编号是否唯一 code3 +r($programplan->checkCodeUniqueTest($codes[0])) && p('code5') && e('code5'); // 检查'code1', 'code2', 'code3', 'code4', 'code5' 在未删除的数据内编号是否唯一 code5 +r($programplan->checkCodeUniqueTest($codes[0], $exclude)) && p() && e('1'); // 检查'code1', 'code2', 'code3', 'code4', 'code5' 在除了id为'10', '11', '12', '13', '14'外的未删除数据编号是否唯一 +r($programplan->checkCodeUniqueTest($codes[1])) && p() && e('1'); // 检查'code6', 'code7' 在未删除的数据内编号是否唯一 +r($programplan->checkCodeUniqueTest($codes[2])) && p() && e('1'); // 检查'code2', 'code4' 在未删除的数据内编号是否唯一 diff --git a/test/model/programplan/checkleafstage.php b/test/model/programplan/checkleafstage.php new file mode 100755 index 0000000000..7f18fb14b1 --- /dev/null +++ b/test/model/programplan/checkleafstage.php @@ -0,0 +1,36 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试programplanModel->checkLeafStage(); +cid=1 +pid=1 + +测试id为2判断是否为叶子节点 >> 0 +测试id为5判断是否为叶子节点 >> 1 + +*/ + +$plan = new programplanTest(); + +r($plan->checkLeafStageTest(2)) && p('') && e(0); // 测试id为2判断是否为叶子节点 +r($plan->checkLeafStageTest(5)) && p('') && e(1); // 测试id为5判断是否为叶子节点 diff --git a/test/model/programplan/checknameunique.php b/test/model/programplan/checknameunique.php new file mode 100644 index 0000000000..e67402b25b --- /dev/null +++ b/test/model/programplan/checknameunique.php @@ -0,0 +1,34 @@ +#!/usr/bin/env php +id->range('10-15'); +$programplan->name->range('1-5')->prefix('name'); +$programplan->deleted->range('0-1'); +$programplan->gen(5); + +/** + +title=测试 programplanModel->checkNameUnique(); +cid=1 +pid=1 + +检查'name1', 'name2', 'name1', 'name3', 'name5' 数组的值是否唯一 >> 0 +检查'name6', 'name7' 数组的值是否唯一 >> 1 +检查'name2', 'name2' 数组的值是否唯一 >> 0 + +*/ + +$names = array(); +$names[] = array('name1', 'name2', 'name1', 'name3', 'name5'); +$names[] = array('name6', 'name7'); +$names[] = array('name2', 'name2'); + +$programplan = new programplanTest(); + +r($programplan->checkNameUniqueTest($names[0])) && p() && e('0'); // 检查'name1', 'name2', 'name1', 'name3', 'name5' 数组的值是否唯一 +r($programplan->checkNameUniqueTest($names[1])) && p() && e('1'); // 检查'name6', 'name7' 数组的值是否唯一 +r($programplan->checkNameUniqueTest($names[2])) && p() && e('0'); // 检查'name2', 'name2' 数组的值是否唯一 diff --git a/test/model/programplan/checktopstage.php b/test/model/programplan/checktopstage.php new file mode 100755 index 0000000000..25f46662ad --- /dev/null +++ b/test/model/programplan/checktopstage.php @@ -0,0 +1,38 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试programplanModel->checkTopStage(); +cid=1 +pid=1 + +测试id为2判断是否为顶级阶段 >> 1 +测试id为4判断是否为顶级阶段 >> 0 +测试id为5判断是否为顶级阶段 >> 1 + +*/ + +$plan = new programplanTest(); + +r($plan->checkTopStageTest(2)) && p('') && e(1); // 测试id为2判断是否为顶级阶段 +r($plan->checkTopStageTest(4)) && p('') && e(0); // 测试id为4判断是否为顶级阶段 +r($plan->checkTopStageTest(5)) && p('') && e(1); // 测试id为5判断是否为顶级阶段 diff --git a/test/model/programplan/getparentchildrentypes.php b/test/model/programplan/getparentchildrentypes.php new file mode 100755 index 0000000000..3ec31b3244 --- /dev/null +++ b/test/model/programplan/getparentchildrentypes.php @@ -0,0 +1,50 @@ +#!/usr/bin/env php +id->range('10-20'); +$programplan->parent->range('1-3'); +$programplan->type->range('stage{3},sprint{2},kanban{2},stage{1},sprint{2}'); +$programplan->deleted->range('0-1'); +$programplan->gen(10); + +/** + +title=测试 programplanModel->getParentChildrenTypes(); +cid=1 +pid=1 + +查找父ID为 1 未删除的阶段类型 stage >> stage +查找父ID为 1 未删除的阶段类型 kanban >> kanban +查找父ID为 1 未删除的阶段类型数量 >> 2 +查找父ID为 2 未删除的阶段类型 sprint >> sprint +查找父ID为 2 未删除的阶段类型数量 >> 1 +查找父ID为 3 未删除的阶段类型 stage >> stage +查找父ID为 3 未删除的阶段类型 sprint >> sprint +查找父ID为 3 未删除的阶段类型数量 >> 2 +查找父ID为 1 未删除的阶段类型 stage >> 0 +查找父ID为 1 未删除的阶段类型 sprint >> 0 +查找父ID为 1 未删除的阶段类型 kanban >> 0 +查找父ID为 1 未删除的阶段类型数量 >> 0 + +*/ + +$parentIDList = array(1, 2, 3, 4); + +$programplan = new programplanTest(); + +r($programplan->getParentChildrenTypesTest($parentIDList[0])) && p('stage') && e('stage'); // 查找父ID为 1 未删除的阶段类型 stage +r($programplan->getParentChildrenTypesTest($parentIDList[0])) && p('kanban') && e('kanban'); // 查找父ID为 1 未删除的阶段类型 kanban +r(count($programplan->getParentChildrenTypesTest($parentIDList[0]))) && p() && e('2'); // 查找父ID为 1 未删除的阶段类型数量 +r($programplan->getParentChildrenTypesTest($parentIDList[1])) && p('sprint') && e('sprint'); // 查找父ID为 2 未删除的阶段类型 sprint +r(count($programplan->getParentChildrenTypesTest($parentIDList[1]))) && p() && e('1'); // 查找父ID为 2 未删除的阶段类型数量 +r($programplan->getParentChildrenTypesTest($parentIDList[2])) && p('stage') && e('stage'); // 查找父ID为 3 未删除的阶段类型 stage +r($programplan->getParentChildrenTypesTest($parentIDList[2])) && p('sprint') && e('sprint'); // 查找父ID为 3 未删除的阶段类型 sprint +r(count($programplan->getParentChildrenTypesTest($parentIDList[2]))) && p() && e('2'); // 查找父ID为 3 未删除的阶段类型数量 +r($programplan->getParentChildrenTypesTest($parentIDList[3])) && p('stage') && e('0'); // 查找父ID为 1 未删除的阶段类型 stage +r($programplan->getParentChildrenTypesTest($parentIDList[3])) && p('sprint') && e('0'); // 查找父ID为 1 未删除的阶段类型 sprint +r($programplan->getParentChildrenTypesTest($parentIDList[3])) && p('kanban') && e('0'); // 查找父ID为 1 未删除的阶段类型 kanban +r(count($programplan->getParentChildrenTypesTest($parentIDList[3]))) && p() && e('0'); // 查找父ID为 1 未删除的阶段类型数量 diff --git a/test/model/programplan/getselfandchildrenlist.php b/test/model/programplan/getselfandchildrenlist.php new file mode 100755 index 0000000000..c3df92c33c --- /dev/null +++ b/test/model/programplan/getselfandchildrenlist.php @@ -0,0 +1,38 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试programplanModel->getSelfAndChildrenList(); +cid=1 +pid=1 + +测试id为2时获取自己的状态 >> doing +测试id为2时获取自己某一个后代的状态 >> 2 + +*/ + +$plan = new programplanTest(); +$topPlan = $plan->getSelfAndChildrenListTest(2); +$topPlanCount = count($topPlan[2]); + +r($topPlan[2][2]) && p('status') && e('doing'); // 测试id为2时获取自己的状态 +r($topPlanCount - 1) && p('') && e(2); // 测试id为2时获取自己后代的个数 diff --git a/test/model/programplan/getsiblings.php b/test/model/programplan/getsiblings.php new file mode 100755 index 0000000000..ad9ec76e5d --- /dev/null +++ b/test/model/programplan/getsiblings.php @@ -0,0 +1,43 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试programplanModel->getSiblings(); +cid=1 +pid=1 + +测试id为2时获取兄弟阶段的的名称 >> 阶段b +测试id为2时获取自己兄弟阶段的个数 >> 1 +测试id为4时获取自己兄弟阶段的个数 >> 0 + +*/ + +$plan = new programplanTest(); +$topPlan = $plan->getSiblingsTest(2); +$topPlanCount = count($topPlan[2]); + +$leafPlan = $plan->getSiblingsTest(4); +$leafPlanCount = count($leafPlan[4]); + +r($topPlan[2][5]) && p('name') && e('阶段b'); // 测试id为2时获取兄弟阶段的的名称 +r($topPlanCount - 1) && p('') && e(1); // 测试id为2时获取自己兄弟阶段的个数 +r($leafPlanCount - 1) && p('') && e(0); // 测试id为4时获取自己兄弟阶段的个数 diff --git a/test/model/programplan/updatesubstageattr.php b/test/model/programplan/updatesubstageattr.php new file mode 100755 index 0000000000..6c73e0ae98 --- /dev/null +++ b/test/model/programplan/updatesubstageattr.php @@ -0,0 +1,37 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$execution = zdTable('project'); +$execution->id->range('1-5'); +$execution->name->range('瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b'); +$execution->type->range('project,stage{4}'); +$execution->project->range('0,1{4}'); +$execution->parent->range('0,1,2,3,1'); +$execution->path->range("`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`"); +$execution->status->range('doing,doing,doing,closed,suspended'); +$execution->attribute->range(" ,mix,request,request,review"); +$execution->openedBy->range('admin,user1'); +$execution->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->realBegan->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD'); +$execution->gen(5); + +/** + +title=测试programplanModel->updateSubStageAttr(); +cid=1 +pid=1 + +测试更改id为3的阶段为综合 >> request +测试更改id为2的阶段为设计 >> design + +*/ + +$plan = new programplanTest(); + +r($plan->updateSubStageAttrTest(3, 'mix', 4)) && p('') && e('request'); // 测试更改id为3的阶段为综合 +r($plan->updateSubStageAttrTest(2, 'design', 3)) && p('') && e('design'); // 测试更改id为2的阶段为设计 diff --git a/test/model/stage/batchcreate.php b/test/model/stage/batchcreate.php index e235895fcd..2b5e7cbf09 100755 --- a/test/model/stage/batchcreate.php +++ b/test/model/stage/batchcreate.php @@ -2,19 +2,32 @@ switchDB(); su('admin'); +zdTable('stage')->gen(0); + /** title=测试 stageModel->batchCreate(); cid=1 pid=1 -测试批量创建阶段 1 >> 8 -测试批量创建阶段 2 >> 10 -测试批量创建阶段 3 >> 12 -测试批量创建阶段 4 >> 13 +测试批量创建瀑布项目的阶段 1 >> 2 +测试批量创建瀑布项目的阶段 2 >> 4 +测试批量创建瀑布项目的阶段 3 >> 6 +测试批量创建瀑布项目的阶段 4 >> 7 +测试批量创建瀑布项目的百分比为空的阶段 >> 『工作量占比』不能为空。 +测试批量创建瀑布项目的类型为空的阶段 >> 『阶段类型』不能为空。 +测试批量创建瀑布项目的百分比非法的阶段 >> 『工作量占比』应当是数字,可以是小数。 +测试批量创建瀑布项目的百分比超出100的阶段 >> 工作量占比累计不应当超过100% +测试批量创建融合瀑布项目的阶段 1 >> 2 +测试批量创建融合瀑布项目的阶段 2 >> 4 +测试批量创建融合瀑布项目的阶段 3 >> 6 +测试批量创建融合瀑布项目的阶段 4 >> 7 +测试批量创建融合瀑布项目的百分比为空的阶段 >> 『工作量占比』不能为空。 +测试批量创建融合瀑布项目的类型为空的阶段 >> 『阶段类型』不能为空。 +测试批量创建融合瀑布项目的百分比非法的阶段 >> 『工作量占比』应当是数字,可以是小数。 +测试批量创建融合瀑布项目的百分比超出100的阶段 >> 工作量占比累计不应当超过100% */ $name1 = array('1' => '批量创建的需求', '2' => '批量创建的设计', '3' => '', '4' => '', '5' => '', '6' => '', '7' => '', '8' => '', '9' => '', '10' => ''); @@ -33,15 +46,37 @@ $name4 = array('1' => '', '2' => '批量创建的其他', '3' => '', '4' => ' $percent4 = array('1' => '1', '2' => '7', '3' => '', '4' => '', '5' => '', '6' => '', '7' => '', '8' => '', '9' => '', '10' => ''); $type4 = array('1' => 'request', '2' => 'other', '3' => '', '4' => '', '5' => '', '6' => '', '7' => '', '8' => '', '9' => '', '10' => ''); -$param1 = array('name' => $name1, 'percent' => $percent1, 'type' => $type1); -$param2 = array('name' => $name2, 'percent' => $percent2, 'type' => $type2); -$param3 = array('name' => $name3, 'percent' => $percent3, 'type' => $type3); -$param4 = array('name' => $name4, 'percent' => $percent4, 'type' => $type4); +$emptyPercent = array('1' => '', '2' => '','3' => '', '4' => '', '5' => '', '6' => '', '7' => '', '8' => '', '9' => '', '10' => ''); +$emptyType = array('1' => '', '2' => '','3' => '', '4' => '', '5' => '', '6' => '', '7' => '', '8' => '', '9' => '', '10' => ''); +$IllegalPercent = array('1' => 'a', '2' => 'b','3' => '', '4' => '', '5' => '', '6' => '', '7' => '', '8' => '', '9' => '', '10' => ''); +$percentOver = array('1' => '111', '2' => '2','3' => '', '4' => '', '5' => '', '6' => '', '7' => '', '8' => '', '9' => '', '10' => ''); + + +$param1 = array('name' => $name1, 'percent' => $percent1, 'type' => $type1); +$param2 = array('name' => $name2, 'percent' => $percent2, 'type' => $type2); +$param3 = array('name' => $name3, 'percent' => $percent3, 'type' => $type3); +$param4 = array('name' => $name4, 'percent' => $percent4, 'type' => $type4); +$param5 = array('name' => $name1, 'percent' => $emptyPercent, 'type' => $type1); +$param6 = array('name' => $name1, 'percent' => $percent1, 'type' => $emptyType); +$param7 = array('name' => $name1, 'percent' => $IllegalPercent, 'type' => $type1); +$param8 = array('name' => $name1, 'percent' => $percentOver, 'type' => $type1); + $stage = new stageTest(); -r($stage->batchCreateTest($param1)) && p() && e('8'); // 测试批量创建阶段 1 -r($stage->batchCreateTest($param2)) && p() && e('10'); // 测试批量创建阶段 2 -r($stage->batchCreateTest($param3)) && p() && e('12'); // 测试批量创建阶段 3 -r($stage->batchCreateTest($param4)) && p() && e('13'); // 测试批量创建阶段 4 -$db->restoreDB(); \ No newline at end of file +r($stage->batchCreateTest($param1)) && p() && e('2'); // 测试批量创建瀑布项目的阶段 1 +r($stage->batchCreateTest($param2)) && p() && e('4'); // 测试批量创建瀑布项目的阶段 2 +r($stage->batchCreateTest($param3)) && p() && e('6'); // 测试批量创建瀑布项目的阶段 3 +r($stage->batchCreateTest($param4)) && p() && e('7'); // 测试批量创建瀑布项目的阶段 4 +r($stage->batchCreateTest($param5)) && p('percent:0') && e('『工作量占比』不能为空。'); // 测试批量创建瀑布项目的百分比为空的阶段 +r($stage->batchCreateTest($param6)) && p('type:0') && e('『阶段类型』不能为空。'); // 测试批量创建瀑布项目的类型为空的阶段 +r($stage->batchCreateTest($param7)) && p('percent:0') && e('『工作量占比』应当是数字,可以是小数。'); // 测试批量创建瀑布项目的百分比非法的阶段 +r($stage->batchCreateTest($param8)) && p('message:0') && e('工作量占比累计不应当超过100%'); // 测试批量创建瀑布项目的百分比超出100的阶段 +r($stage->batchCreateTest($param1, 'waterfallplus')) && p() && e('2'); // 测试批量创建融合瀑布项目的阶段 1 +r($stage->batchCreateTest($param2, 'waterfallplus')) && p() && e('4'); // 测试批量创建融合瀑布项目的阶段 2 +r($stage->batchCreateTest($param3, 'waterfallplus')) && p() && e('6'); // 测试批量创建融合瀑布项目的阶段 3 +r($stage->batchCreateTest($param4, 'waterfallplus')) && p() && e('7'); // 测试批量创建融合瀑布项目的阶段 4 +r($stage->batchCreateTest($param5, 'waterfallplus')) && p('percent:0') && e('『工作量占比』不能为空。'); // 测试批量创建融合瀑布项目的百分比为空的阶段 +r($stage->batchCreateTest($param6, 'waterfallplus')) && p('type:0') && e('『阶段类型』不能为空。'); // 测试批量创建融合瀑布项目的类型为空的阶段 +r($stage->batchCreateTest($param7, 'waterfallplus')) && p('percent:0') && e('『工作量占比』应当是数字,可以是小数。'); // 测试批量创建融合瀑布项目的百分比非法的阶段 +r($stage->batchCreateTest($param8, 'waterfallplus')) && p('message:0') && e('工作量占比累计不应当超过100%'); // 测试批量创建融合瀑布项目的百分比超出100的阶段 diff --git a/test/model/stage/create.php b/test/model/stage/create.php index 507cdea273..9272bed8c9 100755 --- a/test/model/stage/create.php +++ b/test/model/stage/create.php @@ -2,67 +2,126 @@ switchDB(); su('admin'); +zdTable('stage')->gen(0); + /** title=测试 stageModel->create(); cid=1 pid=1 -测试新建一个需求阶段 >> 新建的需求,1,request -测试新建一个设计阶段 >> 新建的设计,2,design -测试新建一个开发阶段 >> 新建的开发,3,dev -测试新建一个测试阶段 >> 新建的测试,4,qa -测试新建一个发布阶段 >> 新建的发布,5,release -测试新建一个总结评审阶段 >> 新建的总结评审,6,review -测试新建一个其他阶段 >> 新建的其他,7,other +测试新建瀑布项目一个需求阶段 >> 新建的需求,1,request +测试新建瀑布项目一个设计阶段 >> 新建的设计,2,design +测试新建瀑布项目一个开发阶段 >> 新建的开发,3,dev +测试新建瀑布项目一个测试阶段 >> 新建的测试,4,qa +测试新建瀑布项目一个发布阶段 >> 新建的发布,5,release +测试新建瀑布项目一个总结评审阶段 >> 新建的总结评审,6,review +测试新建瀑布项目一个其他阶段 >> 新建的其他,7,other +测试新建瀑布项目名称为空 >> 『阶段名称』不能为空。 +测试新建瀑布项目类型为空 >> 『工作量占比』不能为空。 +测试新建瀑布项目百分比为空 >> 『阶段类型』不能为空。 +测试新建瀑布项目非数字的百分比 >> 工作量占比应当是数字 +测试新建瀑布项目总百分比超过100 >> 工作量占比累计不应当超过100% +测试新建融合瀑布项目一个需求阶段 >> 新建的需求,1,request +测试新建融合瀑布项目一个设计阶段 >> 新建的设计,2,design +测试新建融合瀑布项目一个开发阶段 >> 新建的开发,3,dev +测试新建融合瀑布项目一个测试阶段 >> 新建的测试,4,qa +测试新建融合瀑布项目一个发布阶段 >> 新建的发布,5,release +测试新建融合瀑布项目一个总结评审阶段 >> 新建的总结评审,6,review +测试新建融合瀑布项目一个其他阶段 >> 新建的其他,7,other +测试新建融合瀑布项目名称为空 >> 『阶段名称』不能为空。 +测试新建融合瀑布项目类型为空 >> 『工作量占比』不能为空。 +测试新建融合瀑布项目百分比为空 >> 『阶段类型』不能为空。 +测试新建融合瀑布项目非数字的百分比 >> 工作量占比应当是数字 +测试新建融合瀑布项目总百分比超过100 >> 工作量占比累计不应当超过100% */ $stage1 = new stdclass(); -$stage1->name = '新建的需求'; +$stage1->name = '新建的需求'; $stage1->percent = 1; $stage1->type = 'request'; $stage2 = new stdclass(); -$stage2->name = '新建的设计'; +$stage2->name = '新建的设计'; $stage2->percent = 2; $stage2->type = 'design'; $stage3 = new stdclass(); -$stage3->name = '新建的开发'; +$stage3->name = '新建的开发'; $stage3->percent = 3; $stage3->type = 'dev'; $stage4 = new stdclass(); -$stage4->name = '新建的测试'; +$stage4->name = '新建的测试'; $stage4->percent = 4; $stage4->type = 'qa'; $stage5 = new stdclass(); -$stage5->name = '新建的发布'; +$stage5->name = '新建的发布'; $stage5->percent = 5; $stage5->type = 'release'; $stage6 = new stdclass(); -$stage6->name = '新建的总结评审'; +$stage6->name = '新建的总结评审'; $stage6->percent = 6; $stage6->type = 'review'; $stage7 = new stdclass(); -$stage7->name = '新建的其他'; +$stage7->name = '新建的其他'; $stage7->percent = 7; $stage7->type = 'other'; +$emptyName = new stdclass(); +$emptyName->name = ''; +$emptyName->percent = 7; +$emptyName->type = 'other'; + +$emptyPercent = new stdclass(); +$emptyPercent->name = '1'; +$emptyPercent->percent = 0; +$emptyPercent->type = 'other'; + +$emptyType = new stdclass(); +$emptyType->name = '1'; +$emptyType->percent = 7; +$emptyType->type = ''; + +$IllegalPercent = new stdclass(); +$IllegalPercent->name = '一个名称'; +$IllegalPercent->percent = 'a'; +$IllegalPercent->type = 'other'; + +$percentOver = new stdclass(); +$percentOver->name = '一个名称'; +$percentOver->percent = 101; +$percentOver->type = 'other'; + $stage = new stageTest(); -r($stage->createTest($stage1)) && p('name,percent,type') && e('新建的需求,1,request'); // 测试新建一个需求阶段 -r($stage->createTest($stage2)) && p('name,percent,type') && e('新建的设计,2,design'); // 测试新建一个设计阶段 -r($stage->createTest($stage3)) && p('name,percent,type') && e('新建的开发,3,dev'); // 测试新建一个开发阶段 -r($stage->createTest($stage4)) && p('name,percent,type') && e('新建的测试,4,qa'); // 测试新建一个测试阶段 -r($stage->createTest($stage5)) && p('name,percent,type') && e('新建的发布,5,release'); // 测试新建一个发布阶段 -r($stage->createTest($stage6)) && p('name,percent,type') && e('新建的总结评审,6,review'); // 测试新建一个总结评审阶段 -r($stage->createTest($stage7)) && p('name,percent,type') && e('新建的其他,7,other'); // 测试新建一个其他阶段 -$db->restoreDB(); \ No newline at end of file +r($stage->createTest($stage1)) && p('name,percent,type') && e('新建的需求,1,request'); // 测试新建瀑布项目一个需求阶段 +r($stage->createTest($stage2)) && p('name,percent,type') && e('新建的设计,2,design'); // 测试新建瀑布项目一个设计阶段 +r($stage->createTest($stage3)) && p('name,percent,type') && e('新建的开发,3,dev'); // 测试新建瀑布项目一个开发阶段 +r($stage->createTest($stage4)) && p('name,percent,type') && e('新建的测试,4,qa'); // 测试新建瀑布项目一个测试阶段 +r($stage->createTest($stage5)) && p('name,percent,type') && e('新建的发布,5,release'); // 测试新建瀑布项目一个发布阶段 +r($stage->createTest($stage6)) && p('name,percent,type') && e('新建的总结评审,6,review'); // 测试新建瀑布项目一个总结评审阶段 +r($stage->createTest($stage7)) && p('name,percent,type') && e('新建的其他,7,other'); // 测试新建瀑布项目一个其他阶段 +r($stage->createTest($emptyName)) && p('name:0') && e('『阶段名称』不能为空。'); // 测试新建瀑布项目名称为空 +r($stage->createTest($emptyPercent)) && p('percent:0') && e('『工作量占比』不能为空。'); // 测试新建瀑布项目类型为空 +r($stage->createTest($emptyType)) && p('type:0') && e('『阶段类型』不能为空。'); // 测试新建瀑布项目百分比为空 +r($stage->createTest($IllegalPercent)) && p('message:0') && e('工作量占比应当是数字'); // 测试新建瀑布项目非数字的百分比 +r($stage->createTest($percentOver)) && p('message:0') && e('工作量占比累计不应当超过100%'); // 测试新建瀑布项目总百分比超过100 +r($stage->createTest($stage1, 'waterfallplus')) && p('name,percent,type') && e('新建的需求,1,request'); // 测试新建融合瀑布项目一个需求阶段 +r($stage->createTest($stage2, 'waterfallplus')) && p('name,percent,type') && e('新建的设计,2,design'); // 测试新建融合瀑布项目一个设计阶段 +r($stage->createTest($stage3, 'waterfallplus')) && p('name,percent,type') && e('新建的开发,3,dev'); // 测试新建融合瀑布项目一个开发阶段 +r($stage->createTest($stage4, 'waterfallplus')) && p('name,percent,type') && e('新建的测试,4,qa'); // 测试新建融合瀑布项目一个测试阶段 +r($stage->createTest($stage5, 'waterfallplus')) && p('name,percent,type') && e('新建的发布,5,release'); // 测试新建融合瀑布项目一个发布阶段 +r($stage->createTest($stage6, 'waterfallplus')) && p('name,percent,type') && e('新建的总结评审,6,review'); // 测试新建融合瀑布项目一个总结评审阶段 +r($stage->createTest($stage7, 'waterfallplus')) && p('name,percent,type') && e('新建的其他,7,other'); // 测试新建融合瀑布项目一个其他阶段 +r($stage->createTest($emptyName, 'waterfallplus')) && p('name:0') && e('『阶段名称』不能为空。'); // 测试新建融合瀑布项目名称为空 +r($stage->createTest($emptyPercent, 'waterfallplus')) && p('percent:0') && e('『工作量占比』不能为空。'); // 测试新建融合瀑布项目类型为空 +r($stage->createTest($emptyType, 'waterfallplus')) && p('type:0') && e('『阶段类型』不能为空。'); // 测试新建融合瀑布项目百分比为空 +r($stage->createTest($IllegalPercent, 'waterfallplus')) && p('message:0') && e('工作量占比应当是数字'); // 测试新建融合瀑布项目非数字的百分比 +r($stage->createTest($percentOver, 'waterfallplus')) && p('message:0') && e('工作量占比累计不应当超过100%'); // 测试新建融合瀑布项目总百分比超过100 diff --git a/test/model/stage/getstages.php b/test/model/stage/getstages.php index a9d94c9d34..e458108db7 100755 --- a/test/model/stage/getstages.php +++ b/test/model/stage/getstages.php @@ -19,6 +19,8 @@ pid=1 */ +zdTable('stage')->gen(10); + $stage = new stageTest(); r($stage->getStagesTest()) && p('1:name,percent,type') && e('需求,10,request'); // 测试获取阶段 1 @@ -26,4 +28,4 @@ r($stage->getStagesTest()) && p('2:name,percent,type') && e('设计,10,design'); r($stage->getStagesTest()) && p('3:name,percent,type') && e('开发,50,dev'); // 测试获取阶段 3 r($stage->getStagesTest()) && p('4:name,percent,type') && e('测试,15,qa'); // 测试获取阶段 4 r($stage->getStagesTest()) && p('5:name,percent,type') && e('发布,10,release'); // 测试获取阶段 5 -r($stage->getStagesTest()) && p('6:name,percent,type') && e('总结评审,5,review'); // 测试获取阶段 6 \ No newline at end of file +r($stage->getStagesTest()) && p('6:name,percent,type') && e('总结评审,5,review'); // 测试获取阶段 6 diff --git a/test/model/stage/gettotalpercent.php b/test/model/stage/gettotalpercent.php new file mode 100644 index 0000000000..2fac62adf4 --- /dev/null +++ b/test/model/stage/gettotalpercent.php @@ -0,0 +1,28 @@ +#!/usr/bin/env php +id->range('1-10'); +$stage->percent->range('10-20'); +$stage->projectType->range('waterfall{5}, waterfallplus{5}'); +$stage->deleted->range('0-1'); +$stage->gen(10); + +/** + +title=测试 stageModel->getTotalPercent(); +cid=1 +pid=1 + +测试获取瀑布项目的总百分比 >> 36 +测试获取融合瀑布项目的总百分比 >> 34 + +*/ + +$stage = new stageTest(); + +r($stage->getTotalPercentTest('waterfall')) && p() && e('36'); // 测试获取瀑布项目的总百分比 +r($stage->getTotalPercentTest('waterfallplus')) && p() && e('34'); // 测试获取融合瀑布项目的总百分比 diff --git a/tools/prepareupdate.php b/tools/prepareupdate.php index e975c9bdea..cae8d0590e 100755 --- a/tools/prepareupdate.php +++ b/tools/prepareupdate.php @@ -112,7 +112,8 @@ class prepareUpdate $stories = array_filter(explode(',', trim($release->stories, ','))); $bugs = array_filter(explode(',', trim($release->bugs, ','))); - if(!empty($stories)) $doneStories .= $title[$product] . "\n"; + if(!empty($stories)) $doneStories .= $title[$product] . "\n"; + if(!empty($bugs)) $fixedBugs .= $title[$product] . "\n"; foreach($stories as $storyID) { $storyTitle = $this->getStoryOrBugTitle('story', $storyID); @@ -265,7 +266,7 @@ class prepareUpdate { `sed -i "s/ \/\/ pms insert position\.$/\\n\\\$lang->upgrade->fromVersions['{$this->internalZT->pmsVersionAB}'] = '{$this->internalZT->pmsVersion}'; \/\/ pms insert position\./" ../module/upgrade/lang/version.php`; `sed -i "s/ \/\/ biz insert position\.$/\\n\\\$lang->upgrade->fromVersions['biz{$this->internalZT->bizVersionAB}'] = 'Biz{$this->internalZT->bizVersion}'; \/\/ biz insert position\./" ../module/upgrade/lang/version.php`; - `sed -i "s/ \/\/ max insert position\.$/\\n\\\$lang->upgrade->fromVersions['max{$this->internalZT->lastMaxVersionAB}'] = 'Max{$this->internalZT->lastMaxVersion}'; \/\/ max insert position\./" ../module/upgrade/lang/version.php`; + `sed -i "s/ \/\/ max insert position\.$/\\n\\\$lang->upgrade->fromVersions['max{$this->internalZT->lastMaxVersionAB}'] = 'Max{$this->internalZT->lastMaxVersion}'; \/\/ max insert position\./" ../module/upgrade/lang/version.php`; } /** @@ -288,7 +289,14 @@ class prepareUpdate */ public function addConfirmedSql() { - `sed -i "s/ \/\/ confirm insert position\.$/\\n case '{$this->internalZT->lastPmsVersionAB}':\\n \\\$confirmContent .= file_get_contents(\\\$this->getUpgradeFile('{$this->internalZT->lastPmsVersion}')); \/\/ confirm insert position\./" ../module/upgrade/model.php`; + if(file_exists("../db/update{$this->internalZT->lastPmsVersion}.sql")) + { + `sed -i "s/ \/\/ confirm insert position\.$/\\n case '{$this->internalZT->lastPmsVersionAB}':\\n \\\$confirmContent .= file_get_contents(\\\$this->getUpgradeFile('{$this->internalZT->lastPmsVersion}')); \/\/ confirm insert position\./" ../module/upgrade/model.php`; + } + else + { + `sed -i "s/ \/\/ confirm insert position\.$/\\n case '{$this->internalZT->lastPmsVersionAB}': \/\/ confirm insert position\./" ../module/upgrade/model.php`; + } } /** @@ -299,13 +307,20 @@ class prepareUpdate */ public function exportStandardSql() { + $updateSqlFile = "../db/update{$this->internalZT->lastPmsVersion}.sql"; + if(!file_exists($updateSqlFile)) + { + `cp ../db/standard/zentao{$this->internalZT->lastPmsVersion}.sql ../db/standard/zentao{$this->internalZT->pmsVersion}.sql`; + return true; + } + $lastStandardSql = file_get_contents("../db/standard/zentao{$this->internalZT->lastPmsVersion}.sql"); - $tmpStandardSql = file_put_contents("/tmp/lastStandard.sql", "SET @@sql_mode='';\n$lastStandardSql"); + file_put_contents("/tmp/lastStandard.sql", "SET @@sql_mode='';\n$lastStandardSql"); `mysql -u{$this->mysqlConfig->account} -p{$this->mysqlConfig->password} -e "DROP DATABASE IF EXISTS {$this->mysqlConfig->databaseName}"`; `mysql -u{$this->mysqlConfig->account} -p{$this->mysqlConfig->password} -e "CREATE DATABASE IF NOT EXISTS {$this->mysqlConfig->databaseName}"`; `mysql -u{$this->mysqlConfig->account} -p{$this->mysqlConfig->password} -D {$this->mysqlConfig->databaseName} < /tmp/lastStandard.sql`; - `mysql -u{$this->mysqlConfig->account} -p{$this->mysqlConfig->password} -D {$this->mysqlConfig->databaseName} < ../db/update{$this->internalZT->lastPmsVersion}.sql`; + `mysql -u{$this->mysqlConfig->account} -p{$this->mysqlConfig->password} -D {$this->mysqlConfig->databaseName} < $updateSqlFile`; `mysqldump -u{$this->mysqlConfig->account} -p{$this->mysqlConfig->password} --compact --no-data {$this->mysqlConfig->databaseName} > ../db/standard/zentao{$this->internalZT->pmsVersion}.sql`; @@ -322,7 +337,10 @@ class prepareUpdate */ public function checkInstallSql() { - $updateSql = file_get_contents("../db/update{$this->internalZT->lastPmsVersion}.sql"); + $updateSqlFile = "../db/update{$this->internalZT->lastPmsVersion}.sql"; + if(!file_exists($updateSqlFile)) return true; + + $updateSql = file_get_contents($updateSqlFile); $sqlList = explode(';', $updateSql); $errorSql = ''; @@ -350,14 +368,16 @@ class prepareUpdate /* Alter table sql. */ foreach(explode(',', $sql) as $option) { + $option = preg_replace('/ AFTER `.*`/', '', $option); + $option = trim($option, ';'); if(stripos($option, 'ADD ') !== false or stripos($option, 'MODIFY ') !== false) { - preg_match("/(ADD|MODIFY) (COLUMN )*(`(.*?)`) (.*)/i", $option, $matches); + preg_match("/(ADD|MODIFY) (COLUMN )*((`(.*?)`) (.*)?)/i", $option, $matches); if(strpos($createTableSql, $matches[3]) === false) $errorSql .= $option . "\n"; } if(stripos($option, 'CHANGE ') !== false) { - preg_match("/CHANGE (COLUMN )*(`(.*?)`) (`(.*?)`) (.*)/i", $option, $matches); + preg_match("/CHANGE (COLUMN )*(`(.*?)`) ((`(.*?)`) (.*)?)/i", $option, $matches); if(strpos($createTableSql, $matches[4]) === false) $errorSql .= $option . "\n"; } if(stripos($option, 'DROP ') !== false) diff --git a/www/js/zui/min.js b/www/js/zui/min.js index 470d2404d9..07fb9eb196 100644 --- a/www/js/zui/min.js +++ b/www/js/zui/min.js @@ -1,8 +1,8 @@ /*! - * ZUI: ZUI for Zentao - v1.10.0 - 2022-11-08 + * ZUI: ZUI for Zentao - v1.10.0 - 2023-02-27 * http://openzui.com * GitHub: https://github.com/easysoft/zui.git - * Copyright (c) 2022 cnezsoft.com; Licensed MIT + * Copyright (c) 2023 cnezsoft.com; Licensed MIT */ !function(t,e,i){"use strict";if("undefined"==typeof t)throw new Error("ZUI requires jQuery");Number.isNaN||"function"!=typeof isNaN||(Number.isNaN=isNaN),Number.parseInt||"function"!=typeof parseInt||(Number.parseInt=parseInt),Number.parseFloat||"function"!=typeof parseFloat||(Number.parseFloat=parseFloat),t.zui||(t.zui=function(e){t.isPlainObject(e)&&t.extend(t.zui,e)});var n={all:-1,left:0,middle:1,right:2},o=0;t.zui({uuid:function(t){var e=1e5*(Date.now()-1580890015292)+10*Math.floor(1e4*Math.random())+o++%10;return t?e:e.toString(36)},callEvent:function(t,e,n){if("function"==typeof t){n!==i&&(t=t.bind(n));var o=t(e);return e&&(e.result=o),!(o!==i&&!o)}return 1},strCode:function(t){var e=0;if("string"!=typeof t&&(t=String(t)),t&&t.length)for(var i=0;i=e.innerWidth?0:t.zui.getScrollbarSize()},fixBodyScrollbar:function(){if(t.zui.checkBodyScrollbar()){var e=t("body"),i=parseInt(e.css("padding-right")||0,10);return t.zui._scrollbarWidth&&e.css({paddingRight:i+t.zui._scrollbarWidth,overflowY:"hidden"}),!0}},resetBodyScrollbar:function(){t("body").css({paddingRight:"",overflowY:""})}}),t.fn.callEvent=function(e,n,o){var a=t(this),s=e.indexOf(".zui."),r=s<0?e:e.substring(0,s),l=t.Event(r,n);if(o===i&&s>0&&(o=a.data(e.substring(s+1))),o&&o.options){var c=o.options[r];"function"==typeof c&&(l.result=t.zui.callEvent(c,l,o))}return a.trigger(l),l},t.fn.callComEvent=function(t,e,n){n===i||Array.isArray(n)||(n=[n]);var o,a=this;a.trigger(e,n);var s=t.options[e];return s&&(o=s.apply(t,n)),o}}(jQuery,window,void 0),function(){"use strict";function t(t,e){return i&&!e?requestAnimationFrame(t):setTimeout(t,e||0)}function e(t){return i?cancelAnimationFrame(t):void clearTimeout(t)}var i="function"==typeof window.requestAnimationFrame;$.zui({asap:t,clearAsap:e})}(),function(t){"use strict";t.fn.fixOlPd=function(e){return e=e||10,this.each(function(){var i=t(this);i.css("paddingLeft",Math.ceil(Math.log10(i.children().length))*e+10)})},t(function(){t(".ol-pd-fix,.article ol").fixOlPd()})}(jQuery),+function(t){"use strict";var e='[data-dismiss="alert"]',i="zui.alert",n=function(i){t(i).on("click",e,this.close)};n.prototype.close=function(e){function n(){s.trigger("closed."+i).remove()}var o=t(this),a=o.attr("data-target");a||(a=o.attr("href"),a=a&&a.replace(/.*(?=#[^\s]*$)/,""));var s=t(a);e&&e.preventDefault(),s.length||(s=o.hasClass("alert")?o:o.parent()),s.trigger(e=t.Event("close."+i)),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one(t.support.transition.end,n).emulateTransitionEnd(150):n())};var o=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var o=t(this),a=o.data(i);a||o.data(i,a=new n(this)),"string"==typeof e&&a[e].call(o)})},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click."+i+".data-api",e,n.prototype.close)}(window.jQuery),function(t,e){"use strict";var i="zui.pager",n={page:1,recTotal:0,recPerPage:10},o={zh_cn:{pageOfText:"第 {0} 页",prev:"上一页",next:"下一页",first:"第一页",last:"最后一页","goto":"跳转",pageOf:"第 {page} 页",totalPage:"共 {totalPage} 页",totalCount:"共 {recTotal} 项",pageSize:"每页 {recPerPage} 项",itemsRange:"第 {start} ~ {end} 项",pageOfTotal:"第 {page}/{totalPage} 页"},zh_tw:{pageOfText:"第 {0} 頁",prev:"上一頁",next:"下一頁",first:"第一頁",last:"最後一頁","goto":"跳轉",pageOf:"第 {page} 頁",totalPage:"共 {totalPage} 頁",totalCount:"共 {recTotal} 項",pageSize:"每頁 {recPerPage} 項",itemsRange:"第 {start} ~ {end} 項",pageOfTotal:"第 {page}/{totalPage} 頁"},en:{pageOfText:"Page {0}",prev:"Prev",next:"Next",first:"First",last:"Last","goto":"Goto",pageOf:"Page {page}",totalPage:"{totalPage} pages",totalCount:"Total: {recTotal} items",pageSize:"{recPerPage} per page",itemsRange:"From {start} to {end}",pageOfTotal:"Page {page} of {totalPage}"}},a=function(e,n){var s=this;s.name=i,s.$=t(e),n=s.options=t.extend({},a.DEFAULTS,this.$.data(),n),s.langName=n.lang||t.zui.clientLang(),s.lang=t.zui.getLangData(i,s.langName,o),s.state={},s.set(n.page,n.recTotal,n.recPerPage,!0),s.$.on("click",".pager-goto-btn",function(){var e=t(this).closest(".pager-goto"),i=parseInt(e.find(".pager-goto-input").val());NaN!==i&&s.set(i)}).on("click",".pager-item",function(){var e=t(this).data("page");"number"==typeof e&&e>0&&s.set(e)}).on("click",".pager-size-menu [data-size]",function(){var e=t(this).data("size");"number"==typeof e&&e>0&&s.set(-1,-1,e)})};a.prototype.set=function(e,i,o,a){var s=this;"object"==typeof e&&null!==e&&(o=e.recPerPage,i=e.recTotal,e=e.page);var r=s.state;r||(r=t.extend({},n));var l=t.extend({},r);return"number"==typeof o&&o>0&&(r.recPerPage=o),"number"==typeof i&&i>=0&&(r.recTotal=i),"number"==typeof e&&e>=0&&(r.page=e),r.totalPage=r.recTotal&&r.recPerPage?Math.ceil(r.recTotal/r.recPerPage):1,r.page=Math.max(0,Math.min(r.page,r.totalPage)),r.pageRecCount=r.recTotal,r.page&&r.recTotal&&(r.page1&&(r.pageRecCount=r.recTotal-r.recPerPage*(r.page-1))),r.skip=r.page>1?(r.page-1)*r.recPerPage:0,r.start=r.skip+1,r.end=r.skip+r.pageRecCount,r.prev=r.page>1?r.page-1:0,r.next=r.page').attr("href",i?a.createLink(i,a.state):"###").html(n);return o||(s=t("
  • ").append(s).toggleClass("active",i===a.state.page).toggleClass("disabled",!i||i===a.state.page)),s},a.prototype.createNavItems=function(t){var i=this,n=i.$,o=i.state,a=o.totalPage,s=o.page,r=function(t,o){if(t===!1)return void n.append(i.createLinkItem(0,o||i.options.navEllipsisItem));o===e&&(o=t);for(var a=t;a<=o;++a)n.append(i.createLinkItem(a))};t===e&&(t=i.options.maxNavCount||10),r(1),a>1&&(a<=t?r(2,a):sa-t+2?(r(!1),r(a-t+2,a)):(r(!1),r(s-Math.ceil((t-4)/2),s+Math.floor((t-4)/2)),r(!1),r(a)))},a.prototype.createGoto=function(){var e=this,i=this.state,n=t('
    ");return n},a.prototype.createSizeMenu=function(){var e=this,i=this.state,n=t(''),o=e.options.pageSizeOptions;"string"==typeof o&&(o=o.split(","));for(var a=0;a'+s+"
  • ").toggleClass("active",s===i.recPerPage);n.append(r)}return t('
    ').addClass(e.options.menuDirection).append(n)},a.prototype.createElement=function(e,i,n){var o=this,a=o.createLinkItem.bind(o),s=o.lang;switch(e){case"prev":return a(n.prev,s.prev);case"prev_icon":return a(n.prev,'');case"next":return a(n.next,s.next);case"next_icon":return a(n.next,'');case"first":return a(1,s.first);case"first_icon":return a(1,'');case"last":return a(n.totalPage,s.last);case"last_icon":return a(n.totalPage,'');case"space":case"|":return t('
  • ');case"nav":case"pages":return void o.createNavItems();case"total_text":return t(('
    '+s.totalCount+"
    ").format(n));case"page_text":return t(('
    '+s.pageOf+"
    ").format(n));case"total_page_text":return t(('
    '+s.totalPage+"
    ").format(n));case"page_of_total_text":return t(('
    '+s.pageOfTotal+"
    ").format(n));case"page_size_text":return t(('
    '+s.pageSize+"
    ").format(n));case"items_range_text":return t(('
    '+s.itemsRange+"
    ").format(n));case"goto":return o.createGoto();case"size_menu":return o.createSizeMenu();default:return t("
  • ").html(e.format(n))}},a.prototype.createLink=function(i,n){i===e&&(i=this.state.page),n===e&&(n=this.state);var o=this.options.linkCreator;return"string"==typeof o?o.format(t.extend({},n,{page:i})):"function"==typeof o?o(i,n):"#page="+i},a.prototype.render=function(e){var i=this,n=i.state,o=i.options.elementCreator||i.createElement,a=t.isPlainObject(o);e=e||i.elements||i.options.elements,"string"==typeof e&&(e=e.split(",")),i.elements=e,i.$.empty();for(var s=0;s").append(c)),i.$.append(c))}var h=null;return i.$.children("li").each(function(){var e=t(this),i=!!e.children(".pager-item").length;h?h.toggleClass("pager-item-right",!i):i&&e.addClass("pager-item-left"),h=i?e:null}),h&&h.addClass("pager-item-right"),i.$.callComEvent(i,"onRender",[n]),i},a.DEFAULTS=t.extend({elements:["first_icon","prev_icon","pages","next_icon","last_icon","page_of_total_text","items_range_text","total_text"],prevIcon:"icon-double-angle-left",nextIcon:"icon-double-angle-right",firstIcon:"icon-step-backward",lastIcon:"icon-step-forward",navEllipsisItem:'',maxNavCount:10,menuDirection:"dropdown",pageSizeOptions:[10,20,30,50,100]},n),t.fn.pager=function(e){return this.each(function(){var n=t(this),o=n.data(i),s="object"==typeof e&&e;o||n.data(i,o=new a(this,s)),"string"==typeof e&&o[e]()})},a.NAME=i,a.LANG=o,t.fn.pager.Constructor=a,t(function(){t('[data-ride="pager"]').pager()})}(jQuery,void 0),+function(t){"use strict";var e="zui.tab",i=function(e){this.element=t(e)};i.prototype.show=function(){var i=this.element,n=i.closest("ul:not(.dropdown-menu)"),o=i.attr("data-target")||i.attr("data-tab");if(o||(o=i.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!i.parent("li").hasClass("active")){var a=n.find(".active:last a")[0],s=t.Event("show."+e,{relatedTarget:a});if(i.trigger(s),!s.isDefaultPrevented()){var r=t(o);this.activate(i.parent("li"),n),this.activate(r,r.parent(),function(){i.trigger({type:"shown."+e,relatedTarget:a})})}}},i.prototype.activate=function(e,i,n){function o(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),e.addClass("active"),s?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu")&&e.closest("li.dropdown").addClass("active"),n&&n()}var a=i.find("> .active"),s=n&&t.support.transition&&a.hasClass("fade");s?a.one(t.support.transition.end,o).emulateTransitionEnd(150):o(),a.removeClass("in")};var n=t.fn.tab;t.fn.tab=function(n){return this.each(function(){var o=t(this),a=o.data(e);a||o.data(e,a=new i(this)),"string"==typeof n&&a[n]()})},t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=n,this},t(document).on("click.zui.tab.data-api",'[data-toggle="tab"], [data-tab]',function(e){e.preventDefault(),t(this).tab("show")})}(window.jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,n=this;t(this).one("bsTransitionEnd",function(){i=!0});var o=function(){i||t(n).trigger(t.support.transition.end)};return setTimeout(o,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(t){"use strict";var e="zui.collapse",i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var i=t.Event("show."+e);if(this.$element.trigger(i),!i.isDefaultPrevented()){var n=this.$parent&&this.$parent.find(".in");if(n&&n.length){var o=n.data(e);if(o&&o.transitioning)return;n.collapse("hide"),o||n.data(e,null)}var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("in")[a]("auto"),this.transitioning=0,this.$element.trigger("shown."+e)};if(!t.support.transition)return s.call(this);var r=t.camelCase(["scroll",a].join("-"));this.$element.one(t.support.transition.end,s.bind(this)).emulateTransitionEnd(350)[a](this.$element[0][r])}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var i=t.Event("hide."+e);if(this.$element.trigger(i),!i.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.trigger("hidden."+e).removeClass("collapsing").addClass("collapse")};return t.support.transition?void this.$element[n](0).one(t.support.transition.end,o.bind(this)).emulateTransitionEnd(350):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var n=t.fn.collapse;t.fn.collapse=function(n){return this.each(function(){var o=t(this),a=o.data(e),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof n&&n);a||o.data(e,a=new i(this,s)),"string"==typeof n&&a[n]()})},t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click."+e+".data-api","[data-toggle=collapse]",function(i){var n,o=t(this),a=o.attr("data-target")||i.preventDefault()||(n=o.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,""),s=t(a),r=s.data(e),l=r?"toggle":o.data(),c=o.attr("data-parent"),h=c&&t(c);r&&r.transitioning||(h&&h.find('[data-toggle=collapse][data-parent="'+c+'"]').not(o).addClass("collapsed"),o[s.hasClass("in")?"addClass":"removeClass"]("collapsed")),s.collapse(l)})}(window.jQuery),function(t,e){"use strict";var i=1200,n=992,o=768,a=e(t),s=function(){var t=a.width();e("html").toggleClass("screen-desktop",t>=n&&t=i).toggleClass("screen-tablet",t>=o&&t=n)},r="",l=navigator.userAgent;l.match(/(iPad|iPhone|iPod)/i)?r+=" os-ios":l.match(/android/i)?r+=" os-android":l.match(/Win/i)?r+=" os-windows":l.match(/Mac/i)?r+=" os-mac":l.match(/Linux/i)?r+=" os-linux":l.match(/X11/i)&&(r+=" os-unix"),"ontouchstart"in document.documentElement&&(r+=" is-touchable"),e("html").addClass(r),a.resize(s),s()}(window,jQuery),function(t){"use strict";var e={zh_cn:'您的浏览器版本过低,无法体验所有功能,建议升级或者更换浏览器。 了解更多...',zh_tw:'您的瀏覽器版本過低,無法體驗所有功能,建議升級或者更换瀏覽器。了解更多...',en:'Your browser is too old, it has been unable to experience the colorful internet. We strongly recommend that you upgrade a better one. Learn more...'},i=function(){for(var t=!1,e=11;e>5;e--)if(this.isIE(e)){t=e;break}this.ie=t,this.cssHelper()};i.prototype.cssHelper=function(){var e=this.ie,i=t("html");i.toggleClass("ie",e).removeClass("ie-6 ie-7 ie-8 ie-9 ie-10"),e&&i.addClass("ie-"+e).toggleClass("gt-ie-7 gte-ie-8 support-ie",e>=8).toggleClass("lte-ie-7 lt-ie-8 outdated-ie",e<8).toggleClass("gt-ie-8 gte-ie-9",e>=9).toggleClass("lte-ie-8 lt-ie-9",e<9).toggleClass("gt-ie-9 gte-ie-10",e>=10).toggleClass("lte-ie-9 lt-ie-10",e<10).toggleClass("gt-ie-10 gte-ie-11",e>=11).toggleClass("lte-ie-10 lt-ie-11",e<11)},i.prototype.tip=function(i){var n=t("#browseHappyTip");n.length||(n=t('
    '),n.prependTo("body")),i||(i=t.zui.getLangData("zui.browser",t.zui.clientLang(),e),"object"==typeof i&&(i=i.tip)),n.find(".content").html(i)},i.prototype.isIE=function(t){if(11===t)return this.isIE11();if(10===t)return this.isIE10();if(!t&&(this.isIE11()||this.isIE10()))return!0;var e=document.createElement("b");return e.innerHTML="",1===e.getElementsByTagName("i").length},i.prototype.isIE10=function(){return navigator.appVersion.indexOf("MSIE 10")!==-1},i.prototype.isIE11=function(){var t=navigator.userAgent;return t.indexOf("Trident")!==-1&&t.indexOf("rv:11")!==-1},t.zui({browser:new i}),t(function(){t("body").hasClass("disabled-browser-tip")||t.zui.browser.ie&&t.zui.browser.ie<8&&t.zui.browser.tip()})}(jQuery),function(t){"use strict";var e=864e5,i=function(t){return t instanceof Date||("number"==typeof t&&t<1e10&&(t*=1e3),t=new Date(t)),t},n=function(t){return i(t).getTime()},o=function(t,e){t=i(t),void 0===e&&(e="yyyy-MM-dd hh:mm:ss");var n={"M+":t.getMonth()+1,"d+":t.getDate(),"h+":t.getHours(),"m+":t.getMinutes(),"s+":t.getSeconds(),"q+":Math.floor((t.getMonth()+3)/3),"S+":t.getMilliseconds()};/(y+)/i.test(e)&&(e=e.replace(RegExp.$1,(t.getFullYear()+"").substr(4-RegExp.$1.length)));for(var o in n)new RegExp("("+o+")").test(e)&&(e=e.replace(RegExp.$1,1==RegExp.$1.length?n[o]:("00"+n[o]).substr((""+n[o]).length)));return e},a=function(t,e){return t.setTime(t.getTime()+e),t},s=function(t,i){return a(t,i*e)},r=function(t){return new Date(i(t).getTime())},l=function(t){return t%4===0&&t%100!==0||t%400===0},c=function(t,e){return[31,l(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]},h=function(t){return c(t.getFullYear(),t.getMonth())},d=function(t){return t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0),t},u=function(t,e){var i=t.getDate();return t.setDate(1),t.setMonth(t.getMonth()+e),t.setDate(Math.min(i,h(t))),t},p=function(t,e){e=e||1;for(var i=new Date(t.getTime());i.getDay()!=e;)i=s(i,-1);return d(i)},f=function(t,e){return t.toDateString()===e.toDateString()},g=function(t,e){var i=p(t),n=s(r(i),7);return e>=i&&e1){var i;if(2==arguments.length&&"object"==typeof e)for(var n in e)void 0!==e[n]&&(i=new RegExp("({"+n+"})","g"),t=t.replace(i,e[n]));else for(var o=1;othis.length)&&(e=this.length),this.substring(e-t.length,e)===t}),String.prototype.startsWith||Object.defineProperty(String.prototype,"startsWith",{value:function(t,e){return e=!e||e<0?0:+e,this.substring(e,e+t.length)===t}}),String.prototype.includes||(String.prototype.includes=function(){return String.prototype.indexOf.apply(this,arguments)!==-1}))}(),/*! * jQuery resize event - v1.1 @@ -75,6 +75,6 @@ function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"= * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ */ function(t){function e(e){if("string"==typeof e.data){var i=e.handler,n=e.data.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!/textarea|select/i.test(e.target.nodeName)&&"text"!==e.target.type){var o="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],a=String.fromCharCode(e.which).toLowerCase(),s="",r={};e.altKey&&"alt"!==o&&(s+="alt+"),e.ctrlKey&&"ctrl"!==o&&(s+="ctrl+"),e.metaKey&&!e.ctrlKey&&"meta"!==o&&(s+="meta+"),e.shiftKey&&"shift"!==o&&(s+="shift+"),o?r[s+o]=!0:(r[s+a]=!0,r[s+t.hotkeys.shiftNums[a]]=!0,"shift+"===s&&(r[t.hotkeys.shiftNums[a]]=!0));for(var l=0,c=n.length;l","/":"?","\\":"|"}},t.each(["keydown","keyup","keypress"],function(){t.event.special[this]={add:e}})}(jQuery),function(t,e,i){"use strict";var n="zui.picker",o={},a={lang:null,remote:null,remoteConverter:null,remoteOnly:!1,onRemoteError:null,disableEmptySearch:!1,textKey:"text",valueKey:"value",keysKey:"keys",multi:"auto",formItem:"auto",list:null,allowSingleDeselect:null,autoSelectFirst:!1,maxSelectedCount:0,maxListCount:100,hideEmptyTextOption:!0,searchValueKey:!0,emptyResultHint:null,hideOnScroll:!0,inheritFormItemClasses:!1,emptySearchResultHint:null,accurateSearchHint:null,remoteErrorHint:null,deleteByBackspace:!0,disableScrollOnShow:!0,maxDropHeight:250,dropDirection:"auto",dropWidth:"100%",maxAutoDropWidth:450,minAutoDropWidth:100,multiValueSplitter:",",multiSelectActions:5,searchDelay:200,autoClearDrop:6e4,fixLabelFor:!0,hotkey:!0,onSelect:null,onDeselect:null,onBeforeChange:null,onChange:null,onReady:null,onNoResults:null,onShowingDrop:null,onHidingDrop:null,onShowedDrop:null,onHiddenDrop:null,valueMustInList:!0},s={zh_cn:{emptyResultHint:"没有可选项",emptySearchResultHint:"没有找到 “{0}”",accurateSearchHint:"请提供更多关键词缩小匹配范围",remoteErrorHint:"无法从服务器获取结果 - {0}",selectAll:"全选",deselectAll:"取消选择"},zh_tw:{emptyResultHint:"沒有可選項",emptySearchResultHint:"沒有找到 “{0}”",accurateSearchHint:"請提供更多關鍵詞縮小匹配範圍",remoteErrorHint:"無法從服務器獲取結果 - {0}",selectAll:"全選",deselectAll:"取消選擇"},en:{emptyResultHint:"No options",emptySearchResultHint:'Cannot found "{0}"',accurateSearchHint:"Suggest to provide more keywords",remoteErrorHint:"Unable to get result from server: {0}",selectAll:"Select all",deselectAll:"Deselect all"}},r=function(o,a){var l=this;l.name=n,l.$=t(o),l.id="pk_"+(l.$.attr("id")||t.zui.uuid()),a=l.options=t.extend({},r.DEFAULTS,this.$.data(),a),void 0!==a.hideOnWindowScroll&&(a.hideOnScroll=a.hideOnWindowScroll);var c=t.zui.clientLang?t.zui.clientLang():"en",h=a.lang||c;l.lang=t.zui.getLangData?t.zui.getLangData(n,h,s):s[h]||s[c];var d,u,p=a.formItem,f='.form-item,input[type="hidden"],select,input[type="text"]';if(d="self"===p?l.$:"auto"!==p&&p?l.$.find(p):l.$.is(f)?l.$:l.$.find(f).first(),!d.length)return console.error&&console.error("Cannot found form item for picker.");if(d.is('input[type="hidden"]'))u="hidden";else if(d.is("select"))u="select";else{if(!d.is('input[type="text"]'))return console.error&&console.error("Unknown form type for picker.");u="text"}a.inheritFormItemClasses&&v.addClass(d.attr("class")),l.formType=u,l.$formItem=d.removeClass("picker").hide(),l.selfFormItem=d.is(l.$);var g=a.multi;g&&"auto"!==g||(g="select"===u&&"multiple"===d.attr("multiple")),g=!!g,l.multi=g,g||(l.options.checkable=!1);var m=a.list;m?l.setList("function"==typeof m?m({search:l.search,limit:a.maxListCount}):m,!0):"select"===u?l.updateFromSelect():l.setList([],!0);var v;v=!l.selfFormItem&&l.$.hasClass("picker")?l.$:t('
    ').insertAfter(l.$),v.addClass("picker").toggleClass("picker-multi",g).toggleClass("picker-single",!g);var y=v.children(".picker-selections");y.length?y.empty():y=t('
    ');var b=l.id+"-search",w=t('').appendTo(y);if(!g){var x=t('
    ');a.allowSingleDeselect&&x.append(''),x.appendTo(y),l.$singleSelection=x}v.toggleClass("picker-input-empty",!w.val().length).append(y),l.$container=v,l.$selections=y,l.$search=w,l.search="";var C=a.placeholder;if(void 0===C&&(C=d.attr("placeholder")),"string"==typeof C&&C.length&&y.append(t('
    ').text(C)),a.placeholder=C,a.fixLabelFor){var _=d.attr("id");_&&t('label[for="'+_+'"]').attr("for",b)}var k=void 0!==a.defaultValue?a.defaultValue:d.val();if(null===k&&(k=""),l.setValue(k,!0),l.setDisabled(),w.on("focus",function(){l.disabled||(l._blurTimer&&(clearTimeout(l._blurTimer),l._blurTimer=0),v.addClass("picker-focus"),l.options.disableEmptySearch&&"string"==typeof l.search&&!l.search.length||l.showDropList())}).on("blur",function(){l.disabled||(l._blurTimer&&clearTimeout(l._blurTimer),l._blurTimer=setTimeout(function(){l._blurTimer=0,w.is(":focus")||v.removeClass("picker-focus")},100))}).on("input change",function(){if(!l.disabled){var t=w.val();if(g&&w.width(14*t.length),v.toggleClass("picker-input-empty",!t.length),l.tryUpdateList(t),a.disableEmptySearch){const e="string"!=typeof t||t.length;!l.dropListShowed&&e?l.showDropList():l.dropListShowed&&!e&&l.hideDropList()}}}),a.hotkey&&w.on("keydown",function(t){if(!l.disabled){var e=t.key||t.which;if(l.dropListShowed){var i=l.activeValue,n="string"==typeof i;if("Enter"===e||13===e)n&&(l.select(i,g),g?(l.$search.val(""),l.tryUpdateList("")):w.blur(),t.preventDefault(),t.stopPropagation());else if("ArrowDown"===e||40===e){var o,s=l.$activeOption;if(s&&(o=s.next(".picker-option"),g))for(;o.length&&o.hasClass("picker-option-selected");)o=o.next(".picker-option");o&&o.length||(o=l.$optionsList.children(g?".picker-option:not(.picker-option-selected)":".picker-option").first()),o.length&&l.activeOption(o),t.preventDefault(),t.stopPropagation()}else if("ArrowUp"===e||30===e){var r,s=l.$activeOption;if(s&&(r=s.prev(".picker-option"),g))for(;r.length&&r.hasClass("picker-option-selected");)r=r.prev(".picker-option");r&&r.length||(r=l.$optionsList.children(g?".picker-option:not(.picker-option-selected)":".picker-option").last()),r.length&&l.activeOption(r),t.preventDefault(),t.stopPropagation()}else"Escape"===e||27===e?l.hideDropList(!0):a.deleteByBackspace&&g&&("Backspace"===e||8===e)&&l.value&&l.value.length&&!w.val().length&&l.deselect(l.value[l.value.length-1])}}}),g){y.on("mousedown",function(t){if(!l.disabled)return l.dropListShowed&&!a.checkable?(t.preventDefault(),void t.stopPropagation()):void 0}).on("mouseup",function(e){l.disabled||y.hasClass("sortable-sorting")||t(e.target).closest(".picker-selection-remove").length||l.dropListShowed&&!a.checkable||l.focus()});var T=a.sortValuesByDnd;if(T&&t.fn.sortable){v.addClass("picker-sortable");var S={selector:".picker-selection",stopPropagation:!0,start:function(){l.hideDropList(!0)},finish:function(e){var i=[];t.each(e.list,function(t,e){i.push(e.item.data("value"))}),l.setValue(i.slice(),!1,!0)}};"object"==typeof T&&t.extend(S,T),y.sortable(S)}}if(y.on("click",".picker-selection-remove",function(e){if(!l.disabled){if(l.multi){var i=t(this).closest(".picker-selection");l.deselect(i.data("value"))}else l.deselect();e.stopPropagation()}}),d.on("chosen:updated",function(){l.updateFromSelect(!1),l.setValue(d.val(),!0),l.setDisabled(),l.updateList()}).on("chosen:activate",l.focus).on("chosen:open",l.showDropList).on("chosen:close",l.hideDropList),v.addClass("picker-ready"),t.zui.asap(function(){l.triggerEvent("ready",{picker:l},"","chosen:ready")}),!a.disableScrollOnShow){var D=a.hideOnScroll;D&&![e,i,!0].includes(D)&&t(D).on("scroll",this.handleParentScroll.bind(this))}};r.prototype.destroy=function(){var e=this,i=e.options;e.hideDropList(!0);var o=e.$search;o.off("focus blur input change"),i.hotkey&&o.off("keydown"),o.remove();var a=e.$selections;a.off("click"),e.multi&&a.off("mousedown mouseup"),a.remove();var s=e.$formItem;e.selectOptionsBackup&&(s.empty(),t.each(e.selectOptionsBackup,function(e,n){var o={value:n[i.valueKey]},a=n[i.keysKey];void 0!==a&&(o["data-"+i.keysKey]=a),s.append(t("
    ");i.$.addClass("load-indicator loading"),s.load(window.location.href+" #"+o,function(r){if(a===o)i.$.empty().html(s.children().html()),i.$.find('[data-ride="pager"]').pager();else{i.$.find("#"+o).empty().html(s.children().html());try{var l=t(r),c=l.find("#"+o).closest('[data-ride="table"],#'+a);if(c.length){var h=c.find(".table-statistic");h.length&&(i.defaultStatistic=h.html());var d=i.$.find('[data-ride="pager"]').data("zui.pager"),u=c.find('[data-ride="pager"]');d&&u.length&&d.set(u.data())}}catch(p){console.error(p)}}i.$.removeClass("load-indicator loading").trigger("beforeTableReload"),delete i.defaultStatistic,i.updateStatistic(),i.initModals(),i.$.datepickerAll();var f=i.$.find("tbody>tr"),g=!1;t.each(i.checkItems,function(t,e){e&&(i.checkRow(f.filter('[data-id="'+t+'"]'),!0,!0),g=!0)}),g&&i.updateCheckUI(),n.nested&&i.initNestedList(),i.$.trigger("tableReload");var m=t("#mainMenu>.btn-toolbar>.btn-active-text>.label");if(m.length){var u=i.$.find(".pager[data-rec-total]"),v=u.length?u.attr("data-rec-total"):i.getTable().find("tbody:first>tr:not(.table-children)").length;m.text(v)}e&&e(),n.afterReload&&n.afterReload()})},r.prototype.initModals=function(){var e=this,i=e.options,n=e.$.find(i.iframeModalTrigger);if(n.length){var o={type:"iframe",onHide:i.replaceId?function(){var n=t.cookie("selfClose");(1==n||i.hot)&&(t("#triggerModal").data("cancel-reload",1),e.reload(function(){t.cookie("selfClose",0)}))}:null};n.modalTrigger(o)}},r.prototype.getTable=function(){var t=this.$;if(this.isDataTable)return t.find("div.datatable");var e=t.is("table")?t:t.find("table:not(.fixed-header-copy)").first();return e.is(".datatable")&&(this.isDataTable=!0,e.data("zui.datatable")||window.initDatatable(e),e=t.find("div.datatable")),e},r.prototype.toggleGroups=function(e){var i=this,n={};i.$.find("tbody>tr").each(function(){var o=t(this).closest("tr").data("id");n[o]||i.toggleRowGroup(o,e)})},r.prototype.toggleRowGroup=function(i,n){var o=this.$.find('tbody>tr[data-id="'+i+'"]'),a=o.filter(".group-summary"),s=n===e?!a.hasClass("hidden"):!!n;o.not(".group-summary").toggleClass("hidden",!s),a.toggleClass("hidden",s),t("body").toggleClass("table-group-collapsed",!this.$.find("tbody>tr.group-summary.hidden").length)},r.prototype.updateStatistic=function(){var i=this,n=i.$.find(".table-statistic");if(n.length){if(i.defaultStatistic===e&&(i.defaultStatistic=n.html()),i.options.statisticCreator)return void n.html(i.options.statisticCreator(i)||i.defaultStatistic);var o=i.statisticCols;if(!o&&o!==!1){o={};var a=!1;i.getTable().find("thead th").each(function(e){var i=t(this),n=i.data("statistic");n&&(a=!0,o[e]={format:n,name:i.text()})}),i.statisticCols=!!a&&o}var s=0;o&&t.each(o,function(t){o[t].total=0,o[t].checkedTotal=0}),i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr").each(function(){var e=t(this),i=e.hasClass("checked"),n=e.children("td");i&&s++,o&&t.each(o,function(t){var e=parseFloat(n.eq(t).text());isNaN(e)&&(e=0),o[t].total+=e,i&&(o[t].checkedTotal+=e)})});var r=[];if(s)r.push(i.lang.selectedItems.format(s));else if(i.defaultStatistic)return void n.html(i.defaultStatistic);o&&t.each(o,function(t){var e=o[t],n=e[s?"checkedTotal":"total"];e.format&&(n=e.format.format(n)),r.push(i.lang.attrTotal.format(e.name,n))}),n.html(r.join(", "))}},r.prototype.updateFixUI=function(e){var i=this,n=(new Date).getTime();if(!e&&(i.lastUpdateCall&&clearTimeout(i.lastUpdateCall),!i.lastUpdateTime||n-i.lastUpdateTime
    ').append(t('
  • zanode->hostName;?> name, "class='form-control' readonly='readonly'");?>
    zanode->name;?> name, "class='form-control' placeholder=\"{$lang->zanode->nameValid}\" readonly='readonly'");?>
    zanode->image;?> name, "class='form-control' readonly='readonly'");?>
    zahost->IP;?>extranet, "class='form-control' readonly='readonly'");?>
    zanode->cpuCores;?> zanode->os->cpuCores, $zanode->cpuCores), "class='form-control' readonly='readonly'");?>
    ').addClass(i.attr("class")).append(n.clone())).insertAfter(i)),h){var d=c[0].getBoundingClientRect();l.css({left:d.left,width:c.width(),overflow:"hidden"}),l.find(".fixed-header-copy").css({left:o.left-d.left,position:"relative",minWidth:i.width()}),a||c.data("fixHeaderScroll")||(c.data("fixHeaderScroll",1),i.width()>c.width()&&c.on("scroll",function(){e.fixHeader()}))}else l.css({left:o.left,width:o.width});var u=l.find("th");n.find("th").each(function(e){u.eq(e).css("width",t(this).outerWidth())})}else l.remove()},r.prototype.fixFooter=function(){var e,i=this,n=i.getTable(),o=i.$.find(".table-footer");if(i.isDataTable)e=n[0].getBoundingClientRect();else{var a=n.find("tbody");if(!a.length)return;e=a[0].getBoundingClientRect()}var s=i.options.fixFooter;o.toggleClass("fixed-footer",!!r);var r="function"==typeof s?s(e,o):e.bottom>window.innerHeight-50-("number"==typeof s?s:i.pageFooterHeight||5);o.toggleClass("fixed-footer",!!r),n.toggleClass("with-footer-fixed",!!r),n.trigger("fixFooter",r);var l=t("body"),c=l.hasClass("body-modal");if(r){var h=n.parent(),d=h.is(".table-responsive");o.css({bottom:i.pageFooterHeight||0,left:d?h[0].getBoundingClientRect().left:e.left,width:d?h.width():e.width}),c&&l.css("padding-bottom",40)}else o.css({width:"",left:0,bottom:0}),c&&l.css("padding-bottom",0)},r.prototype.checkAll=function(e){var i=this,n=i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr");n.each(function(){i.checkRow(t(this),e,!0)}),i.updateCheckUI()},r.prototype.checkRow=function(i,n,o){var a=this,s=a.getTable();a.isDataTable&&!i.is(".datatable-row-left")&&(i=s.find('.datatable-row-left[data-index="'+i.data("index")+'"]'));var r=i.find('input[type="checkbox"]');if(r.length&&!r.is(":disabled")){n===e&&(n=!r.is(":checked")),a.isDataTable?s.find('.datatable-row[data-index="'+i.data("index")+'"]').toggleClass("checked",n):i.toggleClass("checked",n);var l=i.data("id");this.checkItems[l]=n,r.prop("checked",n).trigger("change"),o||(i.hasClass("table-parent")&&s.find((a.isDataTable?".fixed-left ":"")+"tbody>tr.parent-"+l).each(function(){a.checkRow(t(this),n,!0)}),a.updateCheckUI())}},r.prototype.updateCheckUI=function(){var e=this,i=e.getTable(),n=i.find(e.isDataTable?".fixed-left tbody>tr":"tbody>tr").not(".group-summary"),o=!1,a=null,s=0,r=!1,l=n.length;n.each(function(n){var c=t(this),h=c.find('input[type="checkbox"]');if(!h.length)return void l--;r=h.is(":checked");var d=e.isDataTable?i.find('.datatable-row[data-index="'+c.data("index")+'"]'):c;d.toggleClass("checked",r),d.toggleClass("row-check-begin",r&&!o),a&&a.toggleClass("row-check-end",!r&&o),r&&(s+=1),a=d,o=r,l===n+1&&d.toggleClass("row-check-end",r)}),e.$.toggleClass("has-row-checked",s>0).find(".check-all").toggleClass("checked",!(!l||s!==l)),e.updateStatistic(),e.options.onCheckChange&&e.options.onCheckChange(),i.trigger("checkChange")},r.DEFAULTS={checkable:!0,checkOnClickRow:!0,ajaxForm:!1,selectable:!0,fixHeader:!a,fixFooter:!a,iframeWidth:900,replaceId:"self", -nestLevelIndent:20,nested:!1,preserveNested:!0,hot:!1,iframeModalTrigger:".iframe:not(.disabled,[disabled])"},t.fn.table=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new r(this,a)),"string"==typeof e&&o[e]()})},r.NAME=i,t.fn.table.Constructor=r,t(function(){t('[data-ride="table"]').table()})}(jQuery,void 0),function(t,e,i){t.fn._ajaxForm=t.fn.ajaxForm;var n={timeout:e.config?e.config.timeout:0,dataType:"json",method:"post"},o="";t.fn.enableForm=function(e,n,o){return e===i&&(e=!0),this.each(function(){var i=t(this);n||i.find('[type="submit"]').attr("disabled",e?null:"disabled"),!o&&i.hasClass("load-indicator")&&i.toggleClass("loading",!e),i.toggleClass("form-disabled",!e)})},t.enableForm=function(e,i,n,o){"string"==typeof e||e instanceof t?e=t(e):(o=n,n=i,i=e,e=t("form")),e.enableForm(i!==!1,n,o)},t.disableForm=function(e,i,n){t.enableForm(e,!1,i,n)};var a=function(e,i,n){i=i||"show",t.zui.messager?(n?n.html=!0:n={html:!0},e=e.toString().replace(/\n/g,"
    "),t.zui.messager[i](e,n)):alert(e)};t.ajaxForm=function(s,r){var l=t(s);if(l.length>1)return l.each(function(){t.ajaxForm(this,r)});"function"==typeof r&&(r={complete:r}),r=t.extend({},n,l.data(),r);var c=r.beforeSubmit,h=r.error,d=r.success,u=r.finish;delete r.finish,delete r.success,delete r.onError,delete r.beforeSubmit,r=t.extend({beforeSubmit:function(n,a,s){if((c&&c(n,a,s))===!1)return!1;l.removeClass("form-watched").enableForm(!1);var r={},h=a.find('[type="file"]');r.fileapi=h.length&&h[0].files!==i,r.formdata=e.FormData!==i;var d=r.fileapi&&a.find('input[type="file"]:enabled').filter(function(){return""!==t(this).val()}),u=d.length,p="multipart/form-data",f=a.attr("enctype")==p||a.attr("encoding")==p,g=r.fileapi&&r.formdata,m=u&&!g||f&&!r.formdata;m&&(""==o&&(o=s.url),s.url!=o&&(s.url=o),s.url=s.url.indexOf("&")>=0?s.url+"&HTTP_X_REQUESTED_WITH=XMLHttpRequest":s.url+"?HTTP_X_REQUESTED_WITH=XMLHttpRequest")},success:function(i,n,o){if((d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(s){}if(null===i||"object"!=typeof i)return i?alert(i):a("No response.","danger");var c=r.responser?t(r.responser):l.find(".form-responser");c.length||(c=t("#responser"));var h=i.message,p=function(){var n=i.callback;if(n)if("object"==typeof n){var o=n.target?e[n.target]:e,a=o[n.name];a.apply(l,Array.isArray(n.params)?n.params:[n.params])}else{var s=n.indexOf("("),r=(s>0?n.substr(0,s):n).split("."),c=e,h=r[0];r.length>1&&(h=r[1],"top"===r[0]?c=e.top:"parent"===r[0]&&(c=e.parent));var a=c[h];if("function"==typeof a){var d=[];return s>0&&")"==n[n.length-1]&&(d=t.parseJSON("["+n.substring(s+1,n.length-1)+"]")),d.push(i),a.apply(l,d)}}};if("success"===i.result){var f=r.locate||i.locate,g=r.closeModal||i.closeModal,m=r.ajaxReload||i.ajaxReload;if(l.enableForm(!0,!!(f||g||m)),h){var v=l.find('[type="submit"]').first(),y=!1;v.length&&(v.popover({container:"body",trigger:"manual",content:h,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||v.data("placement")||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){v.popover("destroy")},r.popoverTime||2e3),y=!0),c.length&&(c.html(''+h+"").show().delay(3e3).fadeOut(100),y=!0),y||a(h,"success")}if(u)return u(i,!0,l);if(g&&setTimeout(t.zui.closeModal,"number"==typeof g?g:r.closeModalTime||2e3),p()===!1)return;if(f)if("loadInModal"==f){var b=t(".modal");setTimeout(function(){b.load(b.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else"parent"===f||"top"===f?e[f]&&setTimeout(function(){e[f].location.reload()},1200):"reload"===f?setTimeout(function(){e.location.href=e.location.href},1200):setTimeout(function(){t.apps?t.apps.open(f):e.location.href=f},1200);if(m){var w=t(m);w.length&&w.load(e.location.href+" "+m,function(){w.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof h)c.length?c.html(''+h+"").show().delay(3e3).fadeOut(100):a(h,"danger");else if("object"==typeof h){var x=!1,C=[];t.each(h,function(e,i){var n=t.isArray(i)?i.join(""):i,o=t("#"+e);if(!o.length)return void C.push(n);var a=e+"Label",s=t("#"+a);if(!s.length){var r=o.closest(".input-group").length,l=o.closest("td").length;s=t('
    ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}s.empty().append(n),o.addClass("has-error");var c=function(){var e=t("#"+a);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",c);var h=t("#"+e+"_chosen");if(h.length&&h.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){c()===!0&&t(this).removeClass("has-error")}),!x&&!o.data("datetimepicker")){var d=o[0];if(o.hasClass("chosen"))o.trigger("chosen:activate").trigger("chosen:open"),d=o.parent().find(".chosen-container")[0];else if(o.is("textarea")&&o.data("keditor")){var u=o.data("keditor");u.focus(),u.edit.doc.body.focus(),d=o.parent().find(".ke-container")[0]}else o.focus();d.scrollIntoView&&d.scrollIntoView(),x=!0}}),C.length&&a(C.join(""),"danger")}if(u)return u(i,!1,l);if(p()===!1)return}}},error:function(t,i,n){if((h&&h(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;a(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.setAjaxForm=function(e,i,n){t.ajaxForm(e,t.isPlainObject(i)?i:{finish:i,beforeSubmit:n})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
    ').append(s)),i.$menu.append(s),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
    '+(n.errorText||window.lang&&window.lang.timeout)+"
    "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoViewIfNeeded&&t[0].scrollIntoViewIfNeeded({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e;n.$.toggleClass("has-search-text",!o);var a=n.getItems().removeClass("active");if(o)a.removeClass("hidden");else{var s=e.trim().split(" ");a.each(function(){var e=t(this),n=(e.text()+" "+(e.data("key")||e.data("filter")||"")).trim();e.toggleClass("hidden",!i(s,n))})}n.scrollTo(a.not(".hidden").first().addClass("active")),n.$.trigger("onSearchComplete",e)},n.DEFAULTS={selector:".list-group a:not(.not-list-item)",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof i&&i;a||o.data(e,a=new n(this,s)),"string"==typeof i&&a[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var a=this;a.name=e,a.$=t(n),o=a.options=t.extend({},i.DEFAULTS,this.$.data(),o),a.$.hide(),a.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
    ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var a=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},s=(""===o.value||"0"===o.value)&&!o.label,r=t(i.labelTemplate||'');i.labelClass&&!s&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),s?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",a===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof n&&n;a||o.data(e,a=new i(this,s)),"string"==typeof n&&a[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ti.fileMaxSize||e.push(s)}t.length!=e.length&&(window.bootbox||window).alert(i.fileSizeError.format(n(i.fileMaxSize))),e.forEach(function(t){o.add(t)})})};r.prototype.add=function(t){var e=this,i=e.options,n=e.$template.clone();"before"===i.appendWay?e.$.prepend(n):e.$.append(n),n.fileInput({file:t,fileMaxSize:i.eachFileMaxSize,fileSizeError:i.fileSizeError,onDelete:function(t){t.$.remove(),e.options.onDelete&&e.options.onDelete(t,e)},onSelect:function(t,i){e.options.onSelect&&e.options.onSelect(t,i,e)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(s),o="object"==typeof e&&e;n||i.data(s,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=s,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(e,n,o,a,s,r,l,c){if("object"==typeof e)return t.createLink(e.moduleName,e.methodName,e.vars,e.viewType,e.isOnlyBody,e.hash,e.tid,e.params);if(c&&(c.tid&!l&&(l=c.tid),void 0!==c.isOnlyBody&&void 0===s&&(s=c.isOnlyBody)),t.tabSession&&!l&&(l=t.tabSession.getTid()),a||(a=config.defaultView),s||(s=!1),o)for("string"==typeof o&&(o=o.split("&")),i=0;i'+d+"")}}t.val()||(time=e(a.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var s=t(this),r=t.extend({},i,s.data()),l=s.find('[name="begin"],.control-time-begin'),c=s.find('[name="end"],.control-time-end'),h=function(){var t=l.val();if(s.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);c.find('option[value="'+i+'"]').length&&c.val(i),r.onChange&&r.onChange(c,i)}};if(s.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");c.find('option[value="'+u+'"]').length&&c.val(u),r.onChange&&r.onChange(c,u)}}else l.on("change",h),a(l,r.begin),a(c,r.end),s.data("timeSpanControlInit",!0);r.end||h()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:a,createTime:o};var s=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var a=o.find('a[data-value="'+e+'"]'),s=a.text();a.parent().addClass("selected"),t("#searchTypeName").text(s),i||t("#searchInput").focus()};t.gotoObject=function(e,i){if(e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e)if(i=i.replace(/[^\d]/g,"")){var n=e.split("-");e=n[0];var o=n.length>1?n[1]:"testsuite"===e?"library":"view",a=t.createLink(e,o,"id="+i);t.apps?t.apps.open(a):window.location.href=a}else{var s={zh_cn:"请输入数字ID进行搜索",zh_tw:"請輸入數值ID行搜索"};alert(lang.searchTip||s[t.zui.clientLang()]||"Please enter a numberic id to search")}t("#searchInput").val(i).focus()},t(function(){s(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(t){t?window.top.location.reload():window.location.reload()},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage(1)},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage(1)},t.zui.Picker&&(t.extend(t.zui.Picker.DEFAULTS,{optionRender:function(e,i,n){if("user"===n.options.type){var o=n.options.users;if(!o)return;var a=o[i.value];if(!a)return;if(e.find(".picker-option-text").text(a.realname||a.account),e.hasClass("picker-user-option"))return;return e.prepend(t('
    ').avatar({user:a})),a.deptName&&e.append(t('').text(a.deptName)),a.roleName&&e.append(t('').text(a.roleName)),e.addClass("picker-user-option")}},checkable:!0,maxListCount:500,disableScrollOnShow:!1}),t.zui.setUserPickerInfos=function(e){t.zui.Picker.DEFAULTS.users=t.extend({},t.zui.Picker.DEFAULTS.users,e)},t(function(){t(".picker-select[data-pickertype!='remote']").picker({chosenMode:!0}),t("[data-pickertype='remote']").each(function(){var e=t(this).attr("data-pickerremote");t(this).picker({chosenMode:!0,remote:e})}),window.pickerUsers&&t.zui.setUserPickerInfos(window.pickerUsers),t(".user-picker").picker({type:"user"})})),t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,max_drop_width:500,max_drop_height:245,no_wrap:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;e.css("position","relative");var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),a=n.outerHeight();return o.top>=a&&o.top+31+a>e.outerHeight()&&(i="up"),this.drop_directionFixed=i,i}return"auto"}},t.chosenSimpleOptions=t.extend({},t.chosenDefaultOptions,{disable_search_threshold:6}),t.fn._chosen=t.fn.chosen,t.fn.chosen=function(e){return"string"==typeof e?this._chosen(e):this.each(function(){var i=t(this).addClass("chosen-controled");return i._chosen(t.extend({},i.hasClass("chosen-simple")?t.chosenSimpleOptions:t.chosenDefaultOptions,i.data(),e))})},t.fn.chosen.Constructor=t.fn._chosen.Constructor,t(function(){t(".chosen,.chosen-simple").each(function(){var e=t(this);e.closest(".template").length||e.chosen()})}),t.extend(t.fn.pager.Constructor.DEFAULTS,{maxNavCount:8,prevIcon:"icon-angle-left",nextIcon:"icon-angle-right",firstIcon:"icon-first-page",lastIcon:"icon-last-page",navEllipsisItem:"…",menuDirection:"dropup",pageSizeOptions:[5,10,15,20,25,30,35,40,45,50,100,200,500,1e3,2e3],elements:["total_text","size_menu","first_icon","prev_icon",'
    {page}/{totalPage}
    ',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.extend(!0,t.zui.Messager.DEFAULTS,{cssClass:"messagger-zt",icons:{success:"check-circle",info:"chat-line",warning:"exclamation-sign",danger:"exclamation-sign"}}),t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);if(!n.data("historiesInited")){n.data("historiesInited",1),i=t.extend({},n.data(),i);var o=n.find(".histories-list"),a=!0,s=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),a=!a,t(this).find(".icon").toggleClass("icon-arrow-up",a).toggleClass("icon-arrow-down",!a);var e="#lastComment",i=t(e);i.length&&window.KindEditor&&(window.KindEditor.remove(e),i.kindeditor())}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");s=!s,e.toggleClass("icon-plus",!s).toggleClass("icon-minus",s),o.children("li").toggleClass("show-changes",s)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})}};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,c=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(c,e);var o=i.children(".cell"),a={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(a={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(a)}};var h=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;c="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");if(i.length){i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(c,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=e.find(".sidebar-toggle");if(o.length){var a=function(){var e=o[0].getBoundingClientRect(),i=t(window).height(),n=Math.max(0,Math.floor(Math.min(i-40,e.top+e.height)-Math.max(e.top,0))/2)+(e.top<0?0-e.top:0);o.removeClass("fade").find(".icon").css("top",n+(t.zui.browser.isIE()?(i-80)/2:0))};a(),e.data("init",1).on("sidebar.toggle",a);var s=t.zui.browser.isIE()?1500:0,r=0,l=null,h=function(){var t=Date.now();return l&&(clearTimeout(l),l=null),t-rtr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static"}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.is("[disabled],.disabled")&&!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),a=null,s=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var s=e.width();if(o.length){if(a!==s){a=s;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
    ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",s).on("resize",s),s()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var d,u,p,f,g,m=function(){d||(d=t("#subNavbar"),u=t("#pageNav"),p=t("#pageActions"),f=d.children(".nav"),g=f.outerWidth());var e=d.outerWidth(),i=u.outerWidth()||0,n=p.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void f.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),a=Math.min(o,g),s=(e-a)/2,r=i&&s.btn-toolbar");if(e.length){var i,n,o=e.children(),a=o.length,s=!1,r=null;if(a)for(o.each(function(e){i=t(this),n=i.is(".divider"),n&&!r&&i.hide(),s||n||(s=!0),r=n?null:i,!n||e!==a-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();s||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(), -x()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])}),t(function(){var e=t(".table-responsive"),i=t.fixTableResponsive=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(t(window).on("resize",i),setTimeout(i,100))});var C=function(){var e=this,i=t(e),n=i.closest("tr").find("textarea");if(n.length){var o=32;n.each(function(){var e=t(this).closest("td"),i=e.css("height");e.css("height",this.style.height),this.style.height="auto";var n=this.value?this.scrollHeight+2:32;o=Math.max(o,n),e.css("height",i)}),n.css("height",o)}else{e.style.height="auto";var a=e.value?e.scrollHeight+2:32;e.style.height=a+"px"}};t.autoResizeTextarea=function(e){t(e).each(C)},t(function(){t("textarea.autosize").each(C),t(document).on("input paste change","textarea.autosize",C)}),t(function(){var e=t("#dropMenu,.drop-menu");e.length&&e.on("click",".toggle-right-col",function(e){t(this).closest("#dropMenu,.drop-menu").toggleClass("show-right-col"),e.stopPropagation(),e.preventDefault()})});var _="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=_,t("html").toggleClass("is-firefox",_).toggleClass("not-firefox",!_),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions");if(i.length){var n=i.prev();if(i.length&&n.length){t('
    ').css("height",i.outerHeight()).insertAfter(i);var o=0,a=function(){var e=n[0].getBoundingClientRect(),s=e.top+e.height+120>t(window).height();if(t("body").toggleClass("main-actions-fixed",s),s){var r=n.width();r?i.width(r):o<10&&setTimeout(a,1e3)}o++};t.resetToolbarPosition=a,a(),t(window).on("resize scroll",a)}}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")}).on("loaded.zui.modal",function(e){t("body").removeClass("hide-modal-close")}),t(function(){var e=t(".dropdown-menu.with-search");e.length&&(e.find(".menu-search").on("click",function(t){return t.stopPropagation(),!1}),e.on("keyup change paste","input",function(){var e=t(this),i=e.closest(".dropdown-menu.with-search"),n=e.val().toLowerCase(),o=i.find(".option");""==n?o.removeClass("hide"):o.each(function(){var e=t(this);e.toggleClass("hide",e.text().toString().toLowerCase().indexOf(n)<0&&e.data("key").toString().toLowerCase().indexOf(n)<0)})}),e.parents(".dropdown-submenu").one("mouseenter",function(){var e=t(this).find(".dropdown-list")[0];e&&e.getBoundingClientRect&&setTimeout(function(){var i=270,n=e.getBoundingClientRect();n.top<0&&(i=Math.min(270,n.height)+n.top),e.style.maxHeight=Math.min(270,i,t(window).height()-28)+"px"},50)})),t(".dropdown-menu.with-search .menu-search").on("click",function(t){return t.stopPropagation(),!1})})}(jQuery),function(t){function e(){if(!config.skipRedirect&&!window.skipRedirect){var e=window.parent,i=config.currentModule,n=config.currentMethod;if("file"!==i||"download"!==n){var o="index"===i&&"index"===n,a="#_single"===location.hash||/(\?|\&)_single/.test(location.search)||o||!t("#mainHeader,#editorNav").length||"tutorial"===i||"install"===i||"upgrade"===i||"user"===i&&("login"===n||"deny"===n)||"my"===i&&"changepassword"===n||t("body").hasClass("allow-self-open"),s=location.href;if(e===window&&!a){var r=location.pathname+location.search+location.hash;return void(location.href=t.createLink("index","index","")+"#app="+encodeURIComponent(r))}if(e!==window&&e.$.apps){o&&e.location.reload();var l=window.name;if(0===l.indexOf("app-")){t.apps=window.apps=e.$.apps;var c=l.substring(4);t.appCode=c,t(document).on("click",function(t){var i=e.document.getElementById(window.name);if(i){var n=e.document.getElementById(i.name)||i;if(n){var o;"function"==typeof Event?o=new Event(t.type,{bubbles:!0}):(o=document.createEvent("Event"),o.initEvent(t.type,!0,!0)),n.dispatchEvent(o)}}}).on("click","a,.open-in-app,.show-in-app",function(e){var i=t(this);if(!i.is("[data-modal],[data-toggle],[data-ride],[data-tab],.iframe,.not-in-app,[target]")&&!i.data("zui.modaltrigger")){var n=i.hasClass("show-in-app")?"":i.attr("href")||(i.is("a")?"":i.data("url")),o=i.data("app")||i.data("group");if(n){if(0===n.indexOf("javascript:")||"#"===n[0])return;var a=t.parseLink(n);if(a.external||"file"===a.moduleName&&"download"===a.methodName)return;if("index"===a.moduleName&&"index"===a.methodName)return window.location.reload(),void e.preventDefault()}else if(!o)return;o||(o=t.apps.getAppCode(n)),o&&("help"===o&&(t.apps.appsMap.help.text=i.text(),t.apps.appsMap.help.url||(t.apps.appsMap.help.url=n)),t.apps.open(n,o)&&e.preventDefault())}}),t.apps.updateUrl(c,s,document.title)}}}}}function i(){var e=t("#navbar>.nav");if(e.length){var i=t("#heading"),n=+i.css("left").replace("px",""),o=i.outerWidth(),a=e.width(),s=t("#mainHeader>.container").width()-2*n,r=Math.floor((s-a)/2);e.css("marginLeft",r>>0;if(0===o)return!1;for(var a=0|e,s=Math.max(a>=0?a:o-Math.abs(a),0);s1&&("?"===e[0]&&(e=e.substr(1)),e.split("&").forEach(function(t){var e=t.split("=",2);if(e.length>1)try{i[e[0]]=decodeURIComponent(e[1])}catch(n){i[e[0]]=""}else i[e[0]]=""})),t?i[t]:i},t.parseLink=function(e){if(!e)return{};var i=0===e.indexOf("http:")||0===e.indexOf("https:");if(i){var n=window.location.origin;if(e.indexOf(n)<0)return{external:!0,url:e};e=e.substr((n+config.webRoot).length)}var o=e.split("#"),a=o[0].split("?"),s=a[1],r=s?t.getSearchParam("",s):{},l=a[0],c={url:e,isOnlyBody:"yes"===r.onlybody,vars:[],hash:o[1]||"",params:r,tid:r.tid||""};if("GET"===config.requestType){c.moduleName=r[config.moduleVar]||"index",c.methodName=r[config.methodVar]||"index",c.viewType=r[config.viewVar]||config.defaultView;for(var h in r)h!==config.moduleVar&&h!==config.methodVar&&h!==config.viewVar&&"onlybody"!==h&&"tid"!==h&&c.vars.push([h,r[h]])}else{var d=l.lastIndexOf("/");d===l.length-1&&(l=l.substr(0,d),d=l.lastIndexOf("/")),d>=0&&(l=l.substr(d+1));var u=l.lastIndexOf(".");u>=0?(c.viewType=l.substr(u+1),l=l.substr(0,u)):c.viewType=config.defaultView;var p=l.split(config.requestFix);if(c.moduleName=p[0]||"index",c.methodName=p[1]||"index",p.length>2)for(var f=2;f.nav>li").length>10&&(i(),t(window).on("resize",i)),setTimeout(n,1e3)}),parent!==window&&parent.$.apps){var o=window.name;if(o&&0===o.indexOf("app-")){var a=o.substring(4),s=parent.$.apps.openedApps[a];s&&s.$app.removeClass("loading")}}}(jQuery),function(t){"use strict";function e(e,i){"object"!=typeof i&&(i={user:i});var n=t(e);i=t.extend({},n.data(),i);var o=i.user;"string"==typeof o&&(o={account:o});var a={},s=i.size;s&&(a.width=s,a.height=s,a.lineHeight=s,Number.isNaN(+s)||n.addClass("size-"+s));var r=!!o.avatar;if(n.toggleClass("has-image",r).toggleClass("has-text",!r),n.empty(),r)n.append(t("").attr("src",o.avatar));else{var l=t.zui.strCode(o.account)*(i.hueDistance||43)%360;a.background="hsl("+l+","+(i.saturation||"40%")+","+(i.lightness||"60%")+")",Number.isNaN(+s)||(a.fontSize=Math.round(s/2)+"px");var c=o.name||o.realname||o.account;c=/^[\u4e00-\u9fa5\s]+$/.test(c)?c.length<=2?c:c.substring(c.length-2):/^[A-Za-z\d\s]+$/.test(c)?c[0].toUpperCase():c.length<=2?c:c.substring(0,2),n.append(t('').text(c))}return n.css(a)}t.fn.avatar=function(t){return this.each(function(){e(this,t)})}}(jQuery),$.zui.lang("de",{"zui.pager":{pageOfText:"Seite {0}",prev:"Zurück",next:"Nächste Seite",first:"Erste Seite",last:"Letzte Seite","goto":"Goto",pageOf:"Seite {page}",totalPage:"{totalPage} Seiten",totalCount:"Total: {recTotal} Artikel",pageSize:"{recPerPage} Artikel pro Seite",itemsRange:"Seiten {start} bis {end}",pageOfTotal:"Seite {page}/{totalPage}"},"zui.boards":{append2end:"Gehen Sie zum Ende"},"zui.browser":{tip:"Online. Sorgenfrei. Aktualisiere deinen Browser noch heute!"},"zui.calendar":{weekNames:["Son","Mon","Die","Mit","Don","Fri","Sam"],monthNames:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",year:"{0}Jahr",month:"{0}Monat",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Kein Icon]",commonIcons:"Gemeinsame Symbole",webIcons:"Web-Symbol",editorIcons:"Editor-Symbol",directionalIcons:"Pfeil Zusammenfluss",otherIcons:"Andere Symbole"},"zui.colorPicker":{errorTip:"Kein gültiger Farbwert"},"zui.datagrid":{errorCannotGetDataFromRemote:"Daten vom Remote-Server ({0}) können nicht abgerufen werden.",errorCannotHandleRemoteData:"Die vom Remote-Server zurückgegebenen Daten können nicht verarbeitet werden."},"zui.guideViewer":{prevStep:"Vorheriger Schritt",nextStep:"Nächster Schritt"},"zui.tabs":{reload:"Neu laden",close:"Schliessen",closeOthers:"Schließen Sie andere Registerkarten",closeRight:"Schließen Sie die rechte Registerkarte",reopenLast:"Letzten geschlossenen Tab wiederherstellen",errorCannotFetchFromRemote:"Inhalt kann nicht vom Remote-Server abgerufen werden ({0})."},"zui.uploader":{},datetimepicker:{days:["Sonntag","Montag","Diensteg","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fri","Sam"],daysMin:["Son","Mon","Die","Mit","Don","Fri","Sam"],months:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",suffix:[],meridiem:[]},chosen:{no_results_text:"Nicht gefunden"},bootbox:{OK:"OK",CANCEL:"Stornieren",CONFIRM:"Bestätigen"}}),$.zui.lang("fr",{"zui.pager":{pageOfText:"Page {0}",prev:"Prev",next:"Suivant",first:"First",last:"Last","goto":"Goto",pageOf:"Page {page}",totalPage:"{totalPage} pages",totalCount:"Total: {recTotal} items",pageSize:"{recPerPage} per page",itemsRange:"De {start} à {end}",pageOfTotal:"Page {page} de {totalPage}"},"zui.boards":{append2end:"Aller jusqu'au bout"},"zui.browser":{tip:"Naviguez sans crainte sur Internet. Mettez votre navigateur à jour dès aujourd'hui!"},"zui.calendar":{weekNames:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],monthNames:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",year:"{0} Année",month:"{0} Mois",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Aucune icône]",commonIcons:"Icônes communes",webIcons:"Icône Web",editorIcons:"Icône de l'éditeur",directionalIcons:"Flèche confluence",otherIcons:"Autres icônes"},"zui.colorPicker":{errorTip:"Pas une valeur de couleur valide"},"zui.datagrid":{errorCannotGetDataFromRemote:"Impossible d'obtenir les données du serveur distant ({0}).",errorCannotHandleRemoteData:"Impossible de traiter les données renvoyées par le serveur distant."},"zui.guideViewer":{prevStep:"Étape précédente",nextStep:"Prochaine étape"},"zui.tabs":{reload:"Recharger",close:"Fermer",closeOthers:"Fermez les autres onglets",closeRight:"Fermer l'onglet de droite",reopenLast:"Restaurer le dernier onglet fermé",errorCannotFetchFromRemote:"Impossible d'obtenir le contenu du serveur distant ({0})."},"zui.uploader":{},datetimepicker:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],daysMin:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",suffix:[],meridiem:[]},chosen:{no_results_text:"Pas trouvé"},bootbox:{OK:"D'accord",CANCEL:"Annuler",CONFIRM:"Confirmer"}}); \ No newline at end of file +i.is("a")&&e.preventDefault()}).on("click",".tree-action",function(){var e=t(this),i=e.data();if(i.action&&(i=i.action),"sort"!==i.type){var n=e.closest("li:not(.tree-action-item)");a.callEvent("action",{action:i,target:this,$item:n,item:n.data()})}})},a.prototype.preserve=function(e,i,n){if(this.isPreserve)if(e)i=i||e.data("id"),n=void 0===n&&e.hasClass("open"),n?this.store[i]=n:delete this.store[i],this.store.time=(new Date).getTime(),t.zui.store[this.options.name?"set":"pageSet"](this.selector,this.store);else{var o=this;this.store={},this.$.find("li").each(function(){o.preserve(t(this))})}},a.prototype.expandSelect=function(t){this.show(t,!0)},a.prototype.expand=function(t,e,i){t?(t.addClass("open"),!e&&this.options.animate?setTimeout(function(){t.addClass("in")},10):t.addClass("in")):t=this.$.find("li.has-list").addClass("open in"),i||this.preserve(t),this.callEvent("expand",t,this)},a.prototype.show=function(e,i,n){var o=this;e instanceof t||(e=o.$.find("li").filter(e)),e.each(function(){var e=t(this);if(o.expand(e,i,n),e)for(var a=e.parent("ul");a&&a.length&&!a.hasClass("tree");){var s=a.parent("li");s.length?(o.expand(s,i,n),a=s.parent("ul")):a=!1}})},a.prototype.collapse=function(t,e,i){t?!e&&this.options.animate?(t.removeClass("in"),setTimeout(function(){t.removeClass("open")},300)):t.removeClass("open in"):t=this.$.find("li.has-list").removeClass("open in"),i||this.preserve(t),this.callEvent("collapse",t,this)},a.prototype.toggle=function(t){var e=t&&t.hasClass("open")||t===!1||void 0===t&&this.$.find("li.has-list.open").length;this[e?"collapse":"expand"](t)},a.prototype.getOptions=function(e){this.options=t.extend({},a.DEFAULTS,this.$.data(),e),null===this.options.animate&&this.$.hasClass("tree-animate")&&(this.options.animate=!0)},a.prototype.toData=function(e,i){"function"==typeof e&&(i=e,e=null),e=e||this.$;var n=this;return e.children("li:not(.tree-action-item)").map(function(){var e=t(this),o=e.data();delete o["zui.droppable"];var a=e.children("ul");return a.length&&(o.children=n.toData(a)),"function"==typeof i?i(o,e):o}).get()},a.prototype.callEvent=function(e,i){var n;return"function"==typeof this.options[e]&&(n=this.options[e](i,this)),this.$.trigger(t.Event(e+"."+this.name,i)),n},t.fn.tree=function(e,i){return this.each(function(){var o=t(this),s=o.data(n),r="object"==typeof e&&e;s||o.data(n,s=new a(this,r)),"string"==typeof e&&s[e](i)})},t.fn.tree.Constructor=a,t(function(){t('[data-ride="tree"]').tree()})}(jQuery),function(t){"use strict";var e="zui.colorPicker",i='
    ',n={zh_cn:{errorTip:"不是有效的颜色值"},zh_tw:{errorTip:"不是有效的顏色值"},en:{errorTip:"Not a valid color value"}},o=function(i,n){this.name=e,this.$=t(i),this.getOptions(n),this.init()};o.prototype.init=function(){var e=this,n=e.options,o=e.$,a=o.parent(),s=!1;a.hasClass("colorpicker")?e.$picker=a:(e.$picker=t(n.template||i),s=!0),e.$picker.addClass(n.wrapper).find(".cp-title").toggle(void 0!==n.title).text(n.title),e.$menu=e.$picker.find(".dropdown-menu").toggleClass("pull-right",n.pullMenuRight),e.$btn=e.$picker.find(".btn.dropdown-toggle"),e.$btn.find(".ic").addClass("icon-"+n.icon),n.btnTip&&e.$picker.attr("data-toggle","tooltip").tooltip({title:n.btnTip,placement:n.tooltip,container:"body"}),o.attr("data-provide",null),s&&o.after(e.$picker),e.colors={},t.each(n.colors,function(i,n){if(t.zui.Color.isColor(n)){var o=new t.zui.Color(n);e.colors[o.toCssStr()]=o}}),e.updateColors(),e.$picker.on("click",".cp-tile",function(){e.setValue(t(this).data("color"))});var r=function(){var i=o.val(),a=t.zui.Color.isColor(i);o.parent().toggleClass("has-error",!(a||n.optional&&""===i)),a?e.setValue(i,!0):n.optional&&""===i?o.tooltip("hide"):o.is(":focus")||o.tooltip("show",n.errorTip)};o.is("input:not([type=hidden])")?(n.tooltip&&o.attr("data-toggle","tooltip").tooltip({trigger:"manual",placement:n.tooltip,tipClass:"tooltip-danger",container:"body"}),o.on("keyup paste input change",r)):o.appendTo(e.$picker),r()},o.prototype.addColor=function(e){e instanceof t.zui.Color||(e=new t.zui.Color(e));var i=e.toCssStr(),n=this.options;this.colors[i]||(this.colors[i]=e);var o=t('',{titile:e}).data("color",e).css({color:e.contrast().toCssStr(),background:i,"border-color":e.luma()>.43?"#ccc":"transparent"}).attr("data-color",i);this.$menu.append(t("
  • ").css({width:n.tileSize,height:n.tileSize}).append(o)),n.optional&&this.$menu.find(".cp-tile.empty").parent().detach().appendTo(this.$menu)},o.prototype.updateColors=function(e){var i=this.$menu,n=this.options,e=e||this.colors,o=this,a=0;if(i.children("li:not(.heading)").remove(),t.each(e,function(t,e){o.addColor(e),a++}),n.optional){var s=t('
  • ').css({width:n.tileSize,height:n.tileSize});this.$menu.append(s),a++}i.css("width",Math.min(a,n.lineCount)*n.tileSize+6)},o.prototype.setValue=function(e,i){var n=this,o=n.options,a=n.$btn,s="";n.$menu.find(".cp-tile.active").removeClass("active");var r=o.updateBtn;if("auto"===r){var l=a.find(".color-bar");r=!l.length||function(t){l.css("background",t||"")}}if(e){var c=new t.zui.Color(e);s=c.toCssStr().toLowerCase(),r&&("function"==typeof r?r(s,a,n):a.css({background:s,color:c.contrast().toCssStr(),borderColor:c.luma()>.43?"#ccc":s})),n.colors[s]||n.addColor(c),i||n.$.val().toLowerCase()===s||n.$.val(s).trigger("change"),n.$menu.find('.cp-tile[data-color="'+s+'"]').addClass("active"),n.$.tooltip("hide"),n.$.trigger("colorchange",c)}else r&&("function"==typeof r?r(null,a,n):a.attr("style",null)),i||""===n.$.val()||n.$.val(s).trigger("change"),o.optional&&n.$.tooltip("hide"),n.$menu.find(".cp-tile.empty").addClass("active"),n.$.trigger("colorchange",null);o.updateBorder&&t(o.updateBorder).css("border-color",s),o.updateBackground&&t(o.updateBackground).css("background-color",s),o.updateColor&&t(o.updateColor).css("color",s),o.updateText&&t(o.updateText).text(s)},o.prototype.getOptions=function(i){var a=t.extend({},o.DEFAULTS,this.$.data(),i);"string"==typeof a.colors&&(a.colors=a.colors.split(","));var s=a.lang||t.zui.clientLang(),r=this.lang=t.zui.getLangData?t.zui.getLangData(e,s,n):n[s]||n.en;a.errorTip||(a.errorTip=r.errorTip),t.fn.tooltip||(a.btnTip=!1),this.options=a},o.DEFAULTS={colors:["#00BCD4","#388E3C","#3280fc","#3F51B5","#9C27B0","#795548","#F57C00","#F44336","#E91E63"],pullMenuRight:!0,wrapper:"btn-wrapper",tileSize:30,lineCount:5,optional:!0,tooltip:"top",icon:"caret-down",updateBtn:"auto"},o.LANG=n,t.fn.colorPicker=function(e){return this.each(function(){var i=t(this),n=i.data(name),a="object"==typeof e&&e;n||i.data(name,n=new o(this,a)),"string"==typeof e&&n[e]()})},t.fn.colorPicker.Constructor=o,t(function(){t('[data-provide="colorpicker"]').colorPicker()})}(jQuery),function(t,e){function i(t){return t===e&&(t=o+=1),a[t%a.length]}function n(e,i){var n=t(e);i=t.extend({percent:0,size:20,backColor:"#eee",color:"#00da88",borderColor:"#ccc",borderSize:1,rotate:-90,doughnut:8},n.data(),i);var o=i.percent,a=i.size;"string"==typeof o&&(o=Number.parseFloat(o,10)),"string"==typeof a&&(a=Number.parseFloat(a,10)),a=Math.floor(a);var s=a/2,r=3.14*s,l="http://www.w3.org/2000/svg",c=document.createElementNS(l,"svg"),h=document.createElementNS(l,"circle"),d=document.createElementNS(l,"circle"),u=document.createElementNS(l,"circle");d.setAttribute("r",s),d.setAttribute("cx",s),d.setAttribute("cy",s),d.setAttribute("fill",i.backColor),d.setAttribute("stroke",i.borderColor),d.setAttribute("stroke-width",i.borderSize),u.setAttribute("r",i.doughnut),u.setAttribute("cx",s),u.setAttribute("cy",s),u.setAttribute("fill",i.backColor),h.setAttribute("r",s/2),h.setAttribute("cx",s),h.setAttribute("cy",s),h.setAttribute("fill","transparent"),h.setAttribute("stroke-dasharray",(o*r/100).toFixed(1)+" "+r),h.setAttribute("stroke-width",s),h.setAttribute("stroke",i.color),h.setAttribute("transform","rotate(-90) translate(-"+a+")"),c.setAttribute("viewBox","0 0 "+a+" "+a),c.setAttribute("width",a),c.setAttribute("height",a),c.setAttribute("transform","rotate(180)"),c.appendChild(d),c.appendChild(h),c.appendChild(u),n[0].appendChild(c);var p={width:a,height:a};"inline"===n.css("display")&&(p.display="inline-block",p.verticalAlign="middle"),n.css(p)}var o=0,a=["#00a9fc","#ff5d5d","#fdc137","#00da88","#7ec5ff","#8666b8","#bd7b46","#ff9100","#ff3d00","#f57f17","#00e5ff","#00b0ff","#2979ff","#3d5afe","#651fff","#d500f9","#f50057","#ff1744"];jQuery.fn.tableChart=function(){t(this).each(function(){var e=t(this),n=e.data(),o=n.chart||"pie",a=t(n.target);if(a.length){var s=null;if("pie"===o){n=t.extend({scaleShowLabels:!0,scaleLabel:"<%=label%>: <%=value%>"},n);var r=[],l=e.find("tbody > tr").each(function(e){var n=t(this),o=n.data("color")||i();n.attr("data-id",e).find(".chart-color-dot").css("background",o),r.push({label:n.find(".chart-label").text(),value:parseFloat(n.data("value")||n.find(".chart-value").text()),color:o,id:e})});r.length>1?n.scaleLabelPlacement="outside":1===r.length&&(n.scaleLabelPlacement="inside",r.push({label:"",value:r[0].value/2e3,color:"#fff",showLabel:!1})),s=a.pieChart(r,n),a.on("mousemove",function(t){var e=s.getSegmentsAtEvent(t);l.removeClass("active"),e.length&&l.filter('[data-id="'+e[0].id+'"]').addClass("active")})}else if("bar"===o){var c=n.color||i(),h=[],d={label:e.find("thead .chart-label").text(),color:c,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);h.push(i.find(".chart-label").text()),d.data.push(i.data("value")||parseFloat(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",c)}),r={labels:h,datasets:[d]};h.length&&(n.barValueSpacing=5),s=a.barChart(r,n)}else if("line"===o){var c=n.color||i(),h=[],d={label:e.find("thead .chart-label").text(),color:c,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);h.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",c)}),r={labels:h,datasets:[d]};h.length&&(n.barValueSpacing=5),s=a.lineChart(r,n)}null!==s&&e.data("zui.chart",s)}})},t(".table-chart").tableChart();var s=function(i,n){var o=t(i);if(!o.data("pieChart")){var a=o.is("canvas")?o:o.find("canvas"),s=t.extend({value:0,color:t.getThemeColor("primary")||"#006af1",backColor:t.getThemeColor("pale")||"#E9F2FB",doughnut:!0,doughnutSize:85,width:20,height:20,showTip:!1,name:"",tipTemplate:"<%=value%>%",animation:"auto",realValue:parseFloat(o.find(".progress-value").text())},o.data(),n),r=a.length;r||(a=t("").appendTo(o)),a.attr("width")!==e?s.width=a.width():a.attr("width",s.width),a.attr("height")!==e?s.height=a.height():a.attr("height",s.height),r||8!=t.zui.browser.ie||G_vmlCanvasManager.initElement(a[0]),"auto"===s.animation&&(s.animation=s.width>30),o.addClass("progress-pie-"+s.width).css({width:s.width,height:s.height}),s.value=Math.max(0,Math.min(100,s.value));var l=[{value:s.value,label:s.name,color:s.color,circleBeginEnd:!0},{value:100-s.value,label:"",color:s.backColor}],c=a[s.doughnut?"doughnutChart":"pieChart"](l,t.extend({segmentShowStroke:!1,animation:s.animation,showTooltips:s.showTip,tooltipTemplate:s.tipTemplate,percentageInnerCutout:s.doughnutSize,reverseDrawOrder:!0,animationEasing:"easeInOutQuart",onAnimationProgress:s.realValue?function(t){o.find(".progress-value").text(Math.floor(s.realValue*t))}:e,onAnimationComplete:s.realValue?function(t){o.find(".progress-value").text(s.realValue)}:e},s.chartOptions));o.data("pieChart",c)}};jQuery.fn.progressPie=function(e){t(this).each(function(){var i=t(this);if(!i.closest(".hidden,.datatable-origin").length){var n=i.closest(".tab-pane");n.length&&!n.hasClass("active")?t('[data-toggle="tab"][data-target="#'+n.attr("id")+'"]').one("shown.zui.tab",function(){s(i,e)}):s(this,e)}})},t.fn.pieIcon=function(e){t(this).each(function(){n(this,e)})},t(function(){t(".table-chart").tableChart();var e=t(".progress-pie:visible");e.length<100&&t(".progress-pie:visible").progressPie(),setTimeout(function(){t(".progress-pie:visible").progressPie()},e.length>100?1e3:50),t(".pie-icon:visible").pieIcon()})}(jQuery,void 0),function(t){jQuery.fn.sparkline=function(e){t(this).each(function(){var i=t(this),n=t.extend({values:i.attr("values"),width:i.width()-4,height:i.height()-4},i.data(),e),o=n.height,a=[],s=n.width,r=n.values.split(","),l=0;for(var c in r){var h=parseFloat(r[c]);isNaN(h)?h=null:l=Math.max(h,l),a.push(h)}var d=Math.min(s,Math.max(20,a.length*s/30)),d=s,u=i.children("canvas");u.length||(i.append(''),u=i.children("canvas")),u.attr("width",d).attr("height",o);var p={labels:a,datasets:[{strokeColor:"#ccc",pointColor:"#ccc",data:a.map(function(){return 0})},{fillColor:t.getThemeColor("pale")||"rgba(0,0,255,0.05)",strokeColor:t.getThemeColor("primary")||"#0054EC",pointColor:t.getThemeColor("secondary")||"rgba(255,136,0,1)",pointStrokeColor:"#fff",data:a}]},f={animation:!0,scaleOverride:!0,scaleStepWidth:Math.ceil(l/10),scaleSteps:10,scaleStartValue:0,showScale:!1,showTooltips:!1,pointDot:!1,scaleShowGridLines:!1,datasetStrokeWidth:1},g=t(u).lineChart(p,f);i.data("sparklineChart",g)})},t(function(){t(".sparkline").sparkline()})}(jQuery),function(t){t.fn.fixedDate=function(){return t(this).each(function(){var e=t(this).attr("autocomplete","off");"0000-00-00"==e.val()&&e.focus(function(){"0000-00-00"==e.val()&&e.val("").datetimepicker("update")}).blur(function(){""==e.val()&&e.val("0000-00-00")})})},window.datepickerOptions={language:t("html").attr("lang"),weekStart:1,todayBtn:1,autoclose:1,todayHighlight:1,startView:2,forceParse:0,showMeridian:1,format:"yyyy-mm-dd hh:ii",startDate:"1970-1-1"},t.extend(t.fn.datetimepicker.defaults,window.datepickerOptions),t(function(){var e={minView:2,format:"yyyy-mm-dd"},i={startView:1,minView:0,maxView:1,format:"hh:ii"},n={minView:3,startView:3,format:"yyyy-mm"};t(".datepicker-wrapper").click(function(){t(this).find(".form-date, .form-datetime, .form-time, .form-month").datetimepicker("show").focus()}),t.fn.datepicker=function(i){return this.datetimepicker(t.extend({},e,i))},t.fn.timepicker=function(e){return this.datetimepicker(t.extend({},i,e))},t.fn.monthpicker=function(e){return this.datetimepicker(t.extend({},n,e))},t.fn.datepickerAll=function(){return this.find(".form-datetime").fixedDate().datetimepicker(),this.find(".form-date").fixedDate().datepicker(),this.find(".form-time").fixedDate().timepicker(),this.find(".form-month").fixedDate().monthpicker(),this},t("body").datepickerAll()})}(jQuery),function(t){var e=function(e,i){i=t.extend({idStart:0,idEnd:9,chosen:!0,datetimepicker:!0,colorPicker:!0,hotkeys:!0},i,e.data());var n=e.find(".template");!n.length&&i.template&&(n=t(i.template));var o=0,a=0,s=function(t){t.is("select.chosen")?t.next(".chosen-container").find("input").focus():t.focus()},r=function(t){var i=e.find("[data-ctrl-index]:focus,.chosen-container-active").first();if(i.length){if(i.is(".chosen-container-active")){if(i.hasClass("chosen-with-drop")&&("down"===t||"up"===t))return;i=i.prev("select.chosen")}var n=i.data("ctrlIndex"),r=i.closest("tr").data("row");"down"===t?r0?r-=1:r=a-1:"left"===t?n>0?n-=1:n=o-1:"right"===t&&(n").html(s);return r.attr("data-row",e).addClass(n.attr("class")).removeClass("template"),i.rowCreator&&i.rowCreator(r,e,i),o?o.after(r):c.append(r),h(r),r};t.extend(l,{createRow:u,template:d});for(var p=i.idStart;p<=i.idEnd;++p)u(p)}else h(e);e.on("click",".btn-copy",function(){var e=t(this),i=t(e.data("copyFrom")).val(),n=t(e.data("copyTo")).val(i).addClass("highlight");setTimeout(function(){n.removeClass("highlight")},2e3)}),i.hotkeys&&t(document).on("keydown",function(t){var e={"Ctrl+#37":"left","Ctrl+#39":"right","#38":"up","#40":"down","Ctrl+#38":"up","Ctrl+#40":"down"},i=[];t.ctrlKey&&i.push("Ctrl"),i.push("#"+t.keyCode);var n=e[i.join("+")];n&&(r(n),t.ctrlKey&&(t.stopPropagation(),t.preventDefault()))}),e.data("zui.batchActionForm",l),setTimeout(t.fixTableResponsive,0)};t.fn.batchActionForm=function(i){return this.each(function(){e(t(this),i)})}}(jQuery),function(t,e){"use strict";var i="zui.table",n={zh_cn:{selectedItems:"已选择 {0} 项",attrTotal:"{0}总计 {1}"},zh_tw:{selectedItems:"已选择 {0} 项",attrTotal:"{0}总计 {1}"},en:{selectedItems:"Seleted {0} items",attrTotal:"{0} total {1}"},de:{selectedItems:"{0} ausgewählt",attrTotal:"{0} insgesamt {1}"},fr:{selectedItems:"{0} sélectionnés",attrTotal:"{0} total {1}"}},o=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),a=t.zui.browser.isIE(),s=a?200:100,r=function(e,o){var a=this;a.name=i;var s=a.$=t(e);o=a.options=t.extend({},r.DEFAULTS,this.$.data(),o),a.langName=o.lang||t.zui.clientLang(),a.lang=t.zui.getLangData(i,a.langName,n),a.id=s.attr("id"),a.id||(a.id=o.id||"table-"+t.zui.uuid(),a.noID=!0,s.attr("id",a.id),o.hot&&console.warn("ZUI: table hot replace id not defined, the element id attribute should be set.")),s.attr("data-ride")||s.attr("data-ride","table");var l=a.getTable();if(l.length){l.find("thead>tr>th").each(function(){var e=t(this);if(!e.attr("title")){var i=t.trim(e.find("a:first").text()||e.text()||"");i.length&&e.attr("title",i)}}),a.$.toggleClass("no-animation",l.find("tbody>tr").length>=30),o.nested&&a.initNestedList(),o.checkable&&(s.on("click",".check-all",function(){a.checkAll(!t(this).hasClass("checked"))}),o.checkOnClickRow&&s.on("click","tbody>tr",function(e){t(e.target).closest('.btn,a,.not-check,.form-control,input[type="text"],.table-nest-toggle,.chosen-container').length||a.checkRow(t(this))}),s.on("click",'tbody input[type="checkbox"],tbody label[for]',function(e){e.stopPropagation();var i=t(this);i.is("label")&&(i=i.closest(".checkbox-primary").find('input[type="checkbox"]')),a.checkRow(i.closest("tr"),i.is(":checked"))}),o.selectable&&s.selectable(t.extend({},{selector:a.isDataTable?".fixed-left tbody>tr":"tbody>tr",selectClass:"",trigger:"td.c-id",clickBehavior:"multi",listenClick:!1,start:function(){this.syncSelectionsFromClass()},select:function(e){a.checkRow(e.target,!0),t.cookie("ajax_dragSelected")||(t.cookie("ajax_dragSelected","on",{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("dragSelected"))},unselect:function(t){a.checkRow(t.target,!1)},rangeStyle:{border:"1px solid #006af1",backgroundColor:"rgba(50,128,252,0.2)",borderRadius:"2px"}},t.isPlainObject(o.selectable)?o.selectable:null)));var c=a.$form=s.is("form")?s:s.find("form");c.length&&(o.ajaxForm?c.ajaxForm(t.isPlainObject(o.ajaxForm)?o.ajaxForm:null):c.on("click","[data-form-action]",function(){c.attr("action",t(this).data("formAction")).submit()})),(o.fixFooter||o.fixHeader)&&(a.pageFooterHeight=t("#footer").outerHeight(),a.updateFixUI(!0),a.updateFixUITimer=0,t(window).on("scroll resize",function(){a.updateFixUITimer&&t.zui.clearAsap(a.updateFixUITimer),a.updateFixUITimer=t.zui.asap(function(){a.updateFixUI(),a.updateFixUITimer=0})}).on("sidebar.toggle",function(){setTimeout(function(){a.updateFixUI()},200)})),o.group&&(s.on("click",".group-toggle",function(){a.toggleRowGroup(t(this).closest("tr").data("id"))}),t(document).on("click",".group-collapse-all",function(){a.toggleGroups(!1)}).on("click",".group-expand-all",function(){a.toggleGroups(!0)})),a.defaultStatistic=s.find(".table-statistic").html(),a.updateStatistic(),a.initModals(),a.checkItems={},a.updateCheckUI()}};r.prototype.initNestedList=function(){var e=this,i=e.options,n=e.getTable().addClass("table-nested"),o=n.find("tbody"),a=o.children("tr[data-id]"),s={},r=[],l=i.preserveNested,c=i.enableEmptyNestedRow;n.toggleClass("disable-empty-nest-row",!c),a.each(function(e){var i=t(this),n=i.data();n.realOrder=e,n.$row=i,n.nestPath?(n.nestPathList=n.nestPath.split(","),n.nestPathList[0]||n.nestPathList.shift(),n.nestPathList[n.nestPathList.length-1]||n.nestPathList.pop(),n.nestPathLevel=n.nestPathList.length,i.attr("data-level",n.nestPathLevel)):(n.nestPath=","+n.id+",",n.nestPathList=[n.id],n.nestPathLevel=1),s[n.id]=n,delete n.children,r.push(n)});var h=[];t.each(r,function(t,n){return n.nestParent&&(n.parent=s[n.nestParent],n.parent)?(n.parent.children?n.parent.children.push(n):n.parent.children=[n],void(i.expandNestChild||e._initedNestedList||(n.$row.addClass("table-nest-hide"),n.parent.$row.addClass("table-nest-child-hide")))):(n.$row.removeClass("table-nest-hide"),void h.push(n))}),e.nestRowsMap=s,e.$nestBody=o;var d=function(e){for(var n=0;n
    ').prependTo(s)),r.toggleClass("table-nest-toggle",!!a.children||c&&a.nested).css("marginLeft",(a.nestPathLevel-1)*i.nestLevelIndent),delete a.$row}};d(h),e.nestConfigStoreName="/"+window.config.currentModule+"/"+window.config.currentMethod+"/table."+e.id+".nestConfig",e.nestConfig=l?t.zui.store.get(e.nestConfigStoreName,{}):{},e.nestState={},e.updateNestState(),e._initedNestedList||(o.on("click",".table-nest-toggle",function(){e.toggleNestedRows(t(this).closest("tr").data("id"))}),o.on("mouseenter","tr.has-nest-child",function(){o.find(".table-nest-hover").removeClass("table-nest-hover"),o.find(".table-nest-child-hover").removeClass("table-nest-child-hover");var e=t(this).addClass("table-nest-hover"),i=e.closest("tr").data("id");o.find('[data-nest-path*=",'+i+',"]').addClass("table-nest-child-hover")}).on("mouseleave","tr.table-nest-hover",function(){o.find(".table-nest-hover").removeClass("table-nest-hover"),o.find(".table-nest-child-hover").removeClass("table-nest-child-hover")}),e.$.on("click",".table-nest-toggle-global",function(){for(var t=e.$.hasClass("table-nest-collapsed"),n=0;n
    ");i.$.addClass("load-indicator loading"),s.load(window.location.href+" #"+o,function(r){if(a===o)i.$.empty().html(s.children().html()),i.$.find('[data-ride="pager"]').pager();else{i.$.find("#"+o).empty().html(s.children().html());try{var l=t(r),c=l.find("#"+o).closest('[data-ride="table"],#'+a);if(c.length){var h=c.find(".table-statistic");h.length&&(i.defaultStatistic=h.html());var d=i.$.find('[data-ride="pager"]').data("zui.pager"),u=c.find('[data-ride="pager"]');d&&u.length&&d.set(u.data())}}catch(p){console.error(p)}}i.$.removeClass("load-indicator loading").trigger("beforeTableReload"),delete i.defaultStatistic,i.updateStatistic(),i.initModals(),i.$.datepickerAll();var f=i.$.find("tbody>tr"),g=!1;t.each(i.checkItems,function(t,e){e&&(i.checkRow(f.filter('[data-id="'+t+'"]'),!0,!0),g=!0)}),g&&i.updateCheckUI(),n.nested&&i.initNestedList(),i.$.trigger("tableReload");var m=t("#mainMenu>.btn-toolbar>.btn-active-text>.label");if(m.length){var u=i.$.find(".pager[data-rec-total]"),v=u.length?u.attr("data-rec-total"):i.getTable().find("tbody:first>tr:not(.table-children)").length;m.text(v)}e&&e(),n.afterReload&&n.afterReload()})},r.prototype.initModals=function(){var e=this,i=e.options,n=e.$.find(i.iframeModalTrigger);if(n.length){var o={type:"iframe",onHide:i.replaceId?function(){var n=t.cookie("selfClose");(1==n||i.hot)&&(t("#triggerModal").data("cancel-reload",1),e.reload(function(){t.cookie("selfClose",0)}))}:null};n.modalTrigger(o)}},r.prototype.getTable=function(){var t=this.$;if(this.isDataTable)return t.find("div.datatable");var e=t.is("table")?t:t.find("table:not(.fixed-header-copy)").first();return e.is(".datatable")&&(this.isDataTable=!0,e.data("zui.datatable")||window.initDatatable(e),e=t.find("div.datatable")),e},r.prototype.toggleGroups=function(e){var i=this,n={};i.$.find("tbody>tr").each(function(){var o=t(this).closest("tr").data("id");n[o]||i.toggleRowGroup(o,e)})},r.prototype.toggleRowGroup=function(i,n){var o=this.$.find('tbody>tr[data-id="'+i+'"]'),a=o.filter(".group-summary"),s=n===e?!a.hasClass("hidden"):!!n;o.not(".group-summary").toggleClass("hidden",!s),a.toggleClass("hidden",s),t("body").toggleClass("table-group-collapsed",!this.$.find("tbody>tr.group-summary.hidden").length)},r.prototype.updateStatistic=function(){var i=this,n=i.$.find(".table-statistic");if(n.length){if(i.defaultStatistic===e&&(i.defaultStatistic=n.html()),i.options.statisticCreator)return void n.html(i.options.statisticCreator(i)||i.defaultStatistic);var o=i.statisticCols;if(!o&&o!==!1){o={};var a=!1;i.getTable().find("thead th").each(function(e){var i=t(this),n=i.data("statistic");n&&(a=!0,o[e]={format:n,name:i.text()})}),i.statisticCols=!!a&&o}var s=0;o&&t.each(o,function(t){o[t].total=0,o[t].checkedTotal=0}),i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr").each(function(){var e=t(this),i=e.hasClass("checked"),n=e.children("td");i&&s++,o&&t.each(o,function(t){var e=parseFloat(n.eq(t).text());isNaN(e)&&(e=0),o[t].total+=e,i&&(o[t].checkedTotal+=e)})});var r=[];if(s)r.push(i.lang.selectedItems.format(s));else if(i.defaultStatistic)return void n.html(i.defaultStatistic);o&&t.each(o,function(t){var e=o[t],n=e[s?"checkedTotal":"total"];e.format&&(n=e.format.format(n)),r.push(i.lang.attrTotal.format(e.name,n))}),n.html(r.join(", "))}},r.prototype.updateFixUI=function(e){var i=this,n=(new Date).getTime();if(!e&&(i.lastUpdateCall&&clearTimeout(i.lastUpdateCall),!i.lastUpdateTime||n-i.lastUpdateTime').append(t('
    ').addClass(i.attr("class")).append(n.clone())).insertAfter(i)),h){var d=c[0].getBoundingClientRect();l.css({left:d.left,width:c.width(),overflow:"hidden"}),l.find(".fixed-header-copy").css({left:o.left-d.left,position:"relative",minWidth:i.width()}),a||c.data("fixHeaderScroll")||(c.data("fixHeaderScroll",1),i.width()>c.width()&&c.on("scroll",function(){e.fixHeader()}))}else l.css({left:o.left,width:o.width});var u=l.find("th");n.find("th").each(function(e){u.eq(e).css("width",t(this).outerWidth())})}else l.remove()},r.prototype.fixFooter=function(){var e,i=this,n=i.getTable(),o=i.$.find(".table-footer");if(i.isDataTable)e=n[0].getBoundingClientRect();else{var a=n.find("tbody");if(!a.length)return;e=a[0].getBoundingClientRect()}var s=i.options.fixFooter;o.toggleClass("fixed-footer",!!r);var r="function"==typeof s?s(e,o):e.bottom>window.innerHeight-50-("number"==typeof s?s:i.pageFooterHeight||5);o.toggleClass("fixed-footer",!!r),n.toggleClass("with-footer-fixed",!!r),n.trigger("fixFooter",r);var l=t("body"),c=l.hasClass("body-modal");if(r){var h=n.parent(),d=h.is(".table-responsive");o.css({bottom:i.pageFooterHeight||0,left:d?h[0].getBoundingClientRect().left:e.left,width:d?h.width():e.width}),c&&l.css("padding-bottom",40)}else o.css({width:"",left:0,bottom:0}),c&&l.css("padding-bottom",0)},r.prototype.checkAll=function(e){var i=this,n=i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr");n.each(function(){i.checkRow(t(this),e,!0)}),i.updateCheckUI()},r.prototype.checkRow=function(i,n,o){var a=this,s=a.getTable();a.isDataTable&&!i.is(".datatable-row-left")&&(i=s.find('.datatable-row-left[data-index="'+i.data("index")+'"]'));var r=i.find('input[type="checkbox"]');if(r.length&&!r.is(":disabled")){n===e&&(n=!r.is(":checked")),a.isDataTable?s.find('.datatable-row[data-index="'+i.data("index")+'"]').toggleClass("checked",n):i.toggleClass("checked",n);var l=i.data("id");this.checkItems[l]=n,r.prop("checked",n).trigger("change"),o||(i.hasClass("table-parent")&&s.find((a.isDataTable?".fixed-left ":"")+"tbody>tr.parent-"+l).each(function(){a.checkRow(t(this),n,!0)}),a.updateCheckUI())}},r.prototype.updateCheckUI=function(){var e=this,i=e.getTable(),n=i.find(e.isDataTable?".fixed-left tbody>tr":"tbody>tr").not(".group-summary"),o=!1,a=null,s=0,r=!1,l=n.length;n.each(function(n){var c=t(this),h=c.find('input[type="checkbox"]');if(!h.length)return void l--;r=h.is(":checked");var d=e.isDataTable?i.find('.datatable-row[data-index="'+c.data("index")+'"]'):c;d.toggleClass("checked",r),d.toggleClass("row-check-begin",r&&!o),a&&a.toggleClass("row-check-end",!r&&o),r&&(s+=1),a=d,o=r,l===n+1&&d.toggleClass("row-check-end",r)}),e.$.toggleClass("has-row-checked",s>0).find(".check-all").toggleClass("checked",!(!l||s!==l)),e.updateStatistic(),e.options.onCheckChange&&e.options.onCheckChange(),i.trigger("checkChange")},r.DEFAULTS={checkable:!0,checkOnClickRow:!0,ajaxForm:!1,selectable:!0,fixHeader:!a,fixFooter:!a,iframeWidth:900,replaceId:"self", +nestLevelIndent:20,nested:!1,preserveNested:!0,hot:!1,iframeModalTrigger:".iframe:not(.disabled,[disabled])"},t.fn.table=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new r(this,a)),"string"==typeof e&&o[e]()})},r.NAME=i,t.fn.table.Constructor=r,t(function(){t('[data-ride="table"]').table()})}(jQuery,void 0),function(t,e,i){t.fn._ajaxForm=t.fn.ajaxForm;var n={timeout:e.config?e.config.timeout:0,dataType:"json",method:"post"},o="";t.fn.enableForm=function(e,n,o){return e===i&&(e=!0),this.each(function(){var i=t(this);n||i.find('[type="submit"]').attr("disabled",e?null:"disabled"),!o&&i.hasClass("load-indicator")&&i.toggleClass("loading",!e),i.toggleClass("form-disabled",!e)})},t.enableForm=function(e,i,n,o){"string"==typeof e||e instanceof t?e=t(e):(o=n,n=i,i=e,e=t("form")),e.enableForm(i!==!1,n,o)},t.disableForm=function(e,i,n){t.enableForm(e,!1,i,n)};var a=function(e,i,n){i=i||"show",t.zui.messager?(n?n.html=!0:n={html:!0},e=e.toString().replace(/\n/g,"
    "),t.zui.messager[i](e,n)):alert(e)};t.ajaxForm=function(s,r){var l=t(s);if(l.length>1)return l.each(function(){t.ajaxForm(this,r)});"function"==typeof r&&(r={complete:r}),r=t.extend({},n,l.data(),r);var c=r.beforeSubmit,h=r.error,d=r.success,u=r.finish;delete r.finish,delete r.success,delete r.onError,delete r.beforeSubmit,r=t.extend({beforeSubmit:function(n,a,s){if((c&&c(n,a,s))===!1)return!1;l.removeClass("form-watched").enableForm(!1);var r={},h=a.find('[type="file"]');r.fileapi=h.length&&h[0].files!==i,r.formdata=e.FormData!==i;var d=r.fileapi&&a.find('input[type="file"]:enabled').filter(function(){return""!==t(this).val()}),u=d.length,p="multipart/form-data",f=a.attr("enctype")==p||a.attr("encoding")==p,g=r.fileapi&&r.formdata,m=u&&!g||f&&!r.formdata;m&&(""==o&&(o=s.url),s.url!=o&&(s.url=o),s.url=s.url.indexOf("&")>=0?s.url+"&HTTP_X_REQUESTED_WITH=XMLHttpRequest":s.url+"?HTTP_X_REQUESTED_WITH=XMLHttpRequest")},success:function(i,n,o){if(l.trigger("success.form.zui",[i,n,o,l]),(d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(s){}if(null===i||"object"!=typeof i)return i?alert(i):a("No response.","danger");var c=r.responser?t(r.responser):l.find(".form-responser");c.length||(c=t("#responser"));var h=i.message,p=function(){var n=i.callback;if(n)if("object"==typeof n){var o=n.target?e[n.target]:e,a=o[n.name];a.apply(l,Array.isArray(n.params)?n.params:[n.params])}else{var s=n.indexOf("("),r=(s>0?n.substr(0,s):n).split("."),c=e,h=r[0];r.length>1&&(h=r[1],"top"===r[0]?c=e.top:"parent"===r[0]&&(c=e.parent));var a=c[h];if("function"==typeof a){var d=[];return s>0&&")"==n[n.length-1]&&(d=t.parseJSON("["+n.substring(s+1,n.length-1)+"]")),d.push(i),a.apply(l,d)}}};if("success"===i.result){var f=r.locate||i.locate,g=r.closeModal||i.closeModal,m=r.ajaxReload||i.ajaxReload;if(l.enableForm(!0,!!(f||g||m)),h){var v=l.find('[type="submit"]').first(),y=!1;v.length&&(v.popover({container:"body",trigger:"manual",content:h,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||v.data("placement")||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){v.popover("destroy")},r.popoverTime||2e3),y=!0),c.length&&(c.html(''+h+"").show().delay(3e3).fadeOut(100),y=!0),y||a(h,"success")}if(u)return u(i,!0,l);if(g&&setTimeout(t.zui.closeModal,"number"==typeof g?g:r.closeModalTime||2e3),p()===!1)return;if(f)if("loadInModal"==f){var b=t(".modal");setTimeout(function(){b.load(b.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else"parent"===f||"top"===f?e[f]&&setTimeout(function(){e[f].location.reload()},1200):"reload"===f?setTimeout(function(){e.location.href=e.location.href},1200):setTimeout(function(){t.apps?t.apps.open(f):e.location.href=f},1200);if(m){var w=t(m);w.length&&w.load(e.location.href+" "+m,function(){w.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof h)c.length?c.html(''+h+"").show().delay(3e3).fadeOut(100):a(h,"danger");else if("object"==typeof h){var x=!1,C=[];t.each(h,function(e,i){var n=t.isArray(i)?i.join(""):i,o=t("#"+e);if(!o.length)return void C.push(n);var a=e+"Label",s=t("#"+a);if(!s.length){var r=o.closest(".input-group").length,l=o.closest("td").length;s=t('
    ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}s.empty().append(n),o.addClass("has-error");var c=function(){var e=t("#"+a);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",c);var h=t("#"+e+"_chosen");if(h.length&&h.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){c()===!0&&t(this).removeClass("has-error")}),!x&&!o.data("datetimepicker")){var d=o[0];if(o.hasClass("chosen"))o.trigger("chosen:activate").trigger("chosen:open"),d=o.parent().find(".chosen-container")[0];else if(o.is("textarea")&&o.data("keditor")){var u=o.data("keditor");u.focus(),u.edit.doc.body.focus(),d=o.parent().find(".ke-container")[0]}else o.focus();d.scrollIntoView&&d.scrollIntoView(),x=!0}}),C.length&&a(C.join(""),"danger")}if(u)return u(i,!1,l);if(p()===!1)return}}},error:function(t,i,n){if(l.trigger("error.form.zui",[t,i,n,l]),(h&&h(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;a(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.setAjaxForm=function(e,i,n){t.ajaxForm(e,t.isPlainObject(i)?i:{finish:i,beforeSubmit:n})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
    ').append(s)),i.$menu.append(s),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
    '+(n.errorText||window.lang&&window.lang.timeout)+"
    "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoViewIfNeeded&&t[0].scrollIntoViewIfNeeded({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e;n.$.toggleClass("has-search-text",!o);var a=n.getItems().removeClass("active");if(o)a.removeClass("hidden");else{var s=e.trim().split(" ");a.each(function(){var e=t(this),n=(e.text()+" "+(e.data("key")||e.data("filter")||"")).trim();e.toggleClass("hidden",!i(s,n))})}n.scrollTo(a.not(".hidden").first().addClass("active")),n.$.trigger("onSearchComplete",e)},n.DEFAULTS={selector:".list-group a:not(.not-list-item)",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof i&&i;a||o.data(e,a=new n(this,s)),"string"==typeof i&&a[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var a=this;a.name=e,a.$=t(n),o=a.options=t.extend({},i.DEFAULTS,this.$.data(),o),a.$.hide(),a.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
    ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var a=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},s=(""===o.value||"0"===o.value)&&!o.label,r=t(i.labelTemplate||'');i.labelClass&&!s&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),s?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",a===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof n&&n;a||o.data(e,a=new i(this,s)),"string"==typeof n&&a[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=tt.options.fileMaxSize||(e.toggleClass("normal",!o).toggleClass("empty",o),i?(t.oldName=i.name,e.find(".file-title").text(i.name).attr("title",i.name),e.find(".file-size").text(n(i.size)),e.find(".file-editbox").val(i.name).attr("size",i.name.length),t.options.onSelect&&t.options.onSelect(i,t)):e.find(".file-editbox").val(""))},a.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),s="object"==typeof i&&i;o||n.data(e,o=new a(this,s)),"string"==typeof i&&o[i]()})},a.NAME=e,t.fn.fileInput.Constructor=a;var s="zui.fileInputList",r=function(e,i){var o=this;o.name=s;var a=o.$=t(e),l=a.find("#file-input-multiple");a.on("click",".file-input-btn",function(){l.trigger("click")}),o.$template=a.find(".file-input").detach(),i=o.options=t.extend({},r.DEFAULTS,o.$.data(),i),l.on("change",function(){for(var t=l.prop("files"),e=[],a=0;ai.fileMaxSize||e.push(s)}t.length!=e.length&&(window.bootbox||window).alert(i.fileSizeError.format(n(i.fileMaxSize))),e.forEach(function(t){o.add(t)})})};r.prototype.add=function(t){var e=this,i=e.options,n=e.$template.clone();"before"===i.appendWay?e.$.prepend(n):e.$.append(n),n.fileInput({file:t,fileMaxSize:i.eachFileMaxSize,fileSizeError:i.fileSizeError,onDelete:function(t){t.$.remove(),e.options.onDelete&&e.options.onDelete(t,e)},onSelect:function(t,i){e.options.onSelect&&e.options.onSelect(t,i,e)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(s),o="object"==typeof e&&e;n||i.data(s,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=s,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(e,n,o,a,s,r,l,c){if("object"==typeof e)return t.createLink(e.moduleName,e.methodName,e.vars,e.viewType,e.isOnlyBody,e.hash,e.tid,e.params);if(c&&(c.tid&!l&&(l=c.tid),void 0!==c.isOnlyBody&&void 0===s&&(s=c.isOnlyBody)),t.tabSession&&!l&&(l=t.tabSession.getTid()),a||(a=config.defaultView),s||(s=!1),o)for("string"==typeof o&&(o=o.split("&")),i=0;i'+d+"")}}t.val()||(time=e(a.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var s=t(this),r=t.extend({},i,s.data()),l=s.find('[name="begin"],.control-time-begin'),c=s.find('[name="end"],.control-time-end'),h=function(){var t=l.val();if(s.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);c.find('option[value="'+i+'"]').length&&c.val(i),r.onChange&&r.onChange(c,i)}};if(s.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");c.find('option[value="'+u+'"]').length&&c.val(u),r.onChange&&r.onChange(c,u)}}else l.on("change",h),a(l,r.begin),a(c,r.end),s.data("timeSpanControlInit",!0);r.end||h()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:a,createTime:o};var s=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var a=o.find('a[data-value="'+e+'"]'),s=a.text();a.parent().addClass("selected"),t("#searchTypeName").text(s),i||t("#searchInput").focus()};t.gotoObject=function(e,i){if(e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e)if(i=i.replace(/[^\d]/g,"")){var n=e.split("-");e=n[0];var o=n.length>1?n[1]:"testsuite"===e?"library":"view",a=t.createLink(e,o,"id="+i);t.apps?t.apps.open(a):window.location.href=a}else{var s={zh_cn:"请输入数字ID进行搜索",zh_tw:"請輸入數值ID行搜索"};alert(lang.searchTip||s[t.zui.clientLang()]||"Please enter a numberic id to search")}t("#searchInput").val(i).focus()},t(function(){s(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(t){t?window.top.location.reload():window.location.reload()},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage(1)},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage(1)},t.zui.Picker&&(t.extend(t.zui.Picker.DEFAULTS,{optionRender:function(e,i,n){if("user"===n.options.type){var o=n.options.users;if(!o)return;var a=o[i.value];if(!a)return;if(e.find(".picker-option-text").text(a.realname||a.account),e.hasClass("picker-user-option"))return;return e.prepend(t('
    ').avatar({user:a})),a.deptName&&e.append(t('').text(a.deptName)),a.roleName&&e.append(t('').text(a.roleName)),e.addClass("picker-user-option")}},checkable:!0,maxListCount:500,disableScrollOnShow:!1}),t.zui.setUserPickerInfos=function(e){t.zui.Picker.DEFAULTS.users=t.extend({},t.zui.Picker.DEFAULTS.users,e)},t(function(){t(".picker-select[data-pickertype!='remote']").picker({chosenMode:!0}),t("[data-pickertype='remote']").each(function(){var e=t(this).attr("data-pickerremote");t(this).picker({chosenMode:!0,remote:e})}),window.pickerUsers&&t.zui.setUserPickerInfos(window.pickerUsers),t(".user-picker").picker({type:"user"})})),t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,max_drop_width:500,max_drop_height:245,no_wrap:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;e.css("position","relative");var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),a=n.outerHeight();return o.top>=a&&o.top+31+a>e.outerHeight()&&(i="up"),this.drop_directionFixed=i,i}return"auto"}},t.chosenSimpleOptions=t.extend({},t.chosenDefaultOptions,{disable_search_threshold:6}),t.fn._chosen=t.fn.chosen,t.fn.chosen=function(e){return"string"==typeof e?this._chosen(e):this.each(function(){var i=t(this).addClass("chosen-controled");return i._chosen(t.extend({},i.hasClass("chosen-simple")?t.chosenSimpleOptions:t.chosenDefaultOptions,i.data(),e))})},t.fn.chosen.Constructor=t.fn._chosen.Constructor,t(function(){t(".chosen,.chosen-simple").each(function(){var e=t(this);e.closest(".template").length||e.chosen()})}),t.extend(t.fn.pager.Constructor.DEFAULTS,{maxNavCount:8,prevIcon:"icon-angle-left",nextIcon:"icon-angle-right",firstIcon:"icon-first-page",lastIcon:"icon-last-page",navEllipsisItem:"…",menuDirection:"dropup",pageSizeOptions:[5,10,15,20,25,30,35,40,45,50,100,200,500,1e3,2e3],elements:["total_text","size_menu","first_icon","prev_icon",'
    {page}/{totalPage}
    ',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.extend(!0,t.zui.Messager.DEFAULTS,{cssClass:"messagger-zt",icons:{success:"check-circle",info:"chat-line",warning:"exclamation-sign",danger:"exclamation-sign"}}),t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);if(!n.data("historiesInited")){n.data("historiesInited",1),i=t.extend({},n.data(),i);var o=n.find(".histories-list"),a=!0,s=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),a=!a,t(this).find(".icon").toggleClass("icon-arrow-up",a).toggleClass("icon-arrow-down",!a);var e="#lastComment",i=t(e);i.length&&window.KindEditor&&(window.KindEditor.remove(e),i.kindeditor())}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");s=!s,e.toggleClass("icon-plus",!s).toggleClass("icon-minus",s),o.children("li").toggleClass("show-changes",s)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})}};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,c=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(c,e);var o=i.children(".cell"),a={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(a={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(a)}};var h=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;c="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");if(i.length){i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(c,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=e.find(".sidebar-toggle");if(o.length){var a=function(){var e=o[0].getBoundingClientRect(),i=t(window).height(),n=Math.max(0,Math.floor(Math.min(i-40,e.top+e.height)-Math.max(e.top,0))/2)+(e.top<0?0-e.top:0);o.removeClass("fade").find(".icon").css("top",n+(t.zui.browser.isIE()?(i-80)/2:0))};a(),e.data("init",1).on("sidebar.toggle",a);var s=t.zui.browser.isIE()?1500:0,r=0,l=null,h=function(){var t=Date.now();return l&&(clearTimeout(l),l=null),t-rtr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static"}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.is("[disabled],.disabled")&&!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),a=null,s=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var s=e.width();if(o.length){if(a!==s){a=s;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
    ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",s).on("resize",s),s()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var d,u,p,f,g,m=function(){d||(d=t("#subNavbar"),u=t("#pageNav"),p=t("#pageActions"),f=d.children(".nav"),g=f.outerWidth());var e=d.outerWidth(),i=u.outerWidth()||0,n=p.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void f.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),a=Math.min(o,g),s=(e-a)/2,r=i&&s.btn-toolbar");if(e.length){var i,n,o=e.children(),a=o.length,s=!1,r=null;if(a)for(o.each(function(e){i=t(this),n=i.is(".divider"),n&&!r&&i.hide(),s||n||(s=!0), +r=n?null:i,!n||e!==a-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();s||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),x()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])}),t(function(){var e=t(".table-responsive"),i=t.fixTableResponsive=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(t(window).on("resize",i),setTimeout(i,100))});var C=function(){var e=this,i=t(e),n=i.closest("tr").find("textarea");if(n.length){var o=32;n.each(function(){var e=t(this).closest("td"),i=e.css("height");e.css("height",this.style.height),this.style.height="auto";var n=this.value?this.scrollHeight+2:32;o=Math.max(o,n),e.css("height",i)}),n.css("height",o)}else{e.style.height="auto";var a=e.value?e.scrollHeight+2:32;e.style.height=a+"px"}};t.autoResizeTextarea=function(e){t(e).each(C)},t(function(){t("textarea.autosize").each(C),t(document).on("input paste change","textarea.autosize",C)}),t(function(){var e=t("#dropMenu,.drop-menu");e.length&&e.on("click",".toggle-right-col",function(e){t(this).closest("#dropMenu,.drop-menu").toggleClass("show-right-col"),e.stopPropagation(),e.preventDefault()})});var _="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=_,t("html").toggleClass("is-firefox",_).toggleClass("not-firefox",!_),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions");if(i.length){var n=i.prev();if(i.length&&n.length){t('
    ').css("height",i.outerHeight()).insertAfter(i);var o=0,a=function(){var e=n[0].getBoundingClientRect(),s=e.top+e.height+120>t(window).height();if(t("body").toggleClass("main-actions-fixed",s),s){var r=n.width();r?i.width(r):o<10&&setTimeout(a,1e3)}o++};t.resetToolbarPosition=a,a(),t(window).on("resize scroll",a)}}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")}).on("loaded.zui.modal",function(e){t("body").removeClass("hide-modal-close")}),t(function(){var e=t(".dropdown-menu.with-search");e.length&&(e.find(".menu-search").on("click",function(t){return t.stopPropagation(),!1}),e.on("keyup change paste","input",function(){var e=t(this),i=e.closest(".dropdown-menu.with-search"),n=e.val().toLowerCase(),o=i.find(".option");""==n?o.removeClass("hide"):o.each(function(){var e=t(this);e.toggleClass("hide",e.text().toString().toLowerCase().indexOf(n)<0&&e.data("key").toString().toLowerCase().indexOf(n)<0)})}),e.parents(".dropdown-submenu").one("mouseenter",function(){var e=t(this).find(".dropdown-list")[0];e&&e.getBoundingClientRect&&setTimeout(function(){var i=270,n=e.getBoundingClientRect();n.top<0&&(i=Math.min(270,n.height)+n.top),e.style.maxHeight=Math.min(270,i,t(window).height()-28)+"px"},50)})),t(".dropdown-menu.with-search .menu-search").on("click",function(t){return t.stopPropagation(),!1})})}(jQuery),function(t){function e(){if(!config.skipRedirect&&!window.skipRedirect){var e=window.parent,i=config.currentModule,n=config.currentMethod;if("file"!==i||"download"!==n){var o="index"===i&&"index"===n,a="#_single"===location.hash||/(\?|\&)_single/.test(location.search)||o||!t("#mainHeader,#editorNav").length||"tutorial"===i||"install"===i||"upgrade"===i||"user"===i&&("login"===n||"deny"===n)||"my"===i&&"changepassword"===n||t("body").hasClass("allow-self-open"),s=location.href;if(e===window&&!a){var r=location.pathname+location.search+location.hash;return void(location.href=t.createLink("index","index","")+"#app="+encodeURIComponent(r))}if(e!==window&&e.$.apps){o&&e.location.reload();var l=window.name;if(0===l.indexOf("app-")){t.apps=window.apps=e.$.apps;var c=l.substring(4);t.appCode=c,t(document).on("click",function(t){var i=e.document.getElementById(window.name);if(i){var n=e.document.getElementById(i.name)||i;if(n){var o;"function"==typeof Event?o=new Event(t.type,{bubbles:!0}):(o=document.createEvent("Event"),o.initEvent(t.type,!0,!0)),n.dispatchEvent(o)}}}).on("click","a,.open-in-app,.show-in-app",function(e){var i=t(this);if(!i.is("[data-modal],[data-toggle],[data-ride],[data-tab],.iframe,.not-in-app,[target]")&&!i.data("zui.modaltrigger")){var n=i.hasClass("show-in-app")?"":i.attr("href")||(i.is("a")?"":i.data("url")),o=i.data("app")||i.data("group");if(n){if(0===n.indexOf("javascript:")||"#"===n[0])return;var a=t.parseLink(n);if(a.external||"file"===a.moduleName&&"download"===a.methodName)return;if("index"===a.moduleName&&"index"===a.methodName)return window.location.reload(),void e.preventDefault()}else if(!o)return;o||(o=t.apps.getAppCode(n)),o&&("help"===o&&(t.apps.appsMap.help.text=i.text(),t.apps.appsMap.help.url||(t.apps.appsMap.help.url=n)),t.apps.open(n,o)&&e.preventDefault())}}),t.apps.updateUrl(c,s,document.title)}}}}}function i(){var e=t("#navbar>.nav");if(e.length){var i=t("#heading"),n=+i.css("left").replace("px",""),o=i.outerWidth(),a=e.width(),s=t("#mainHeader>.container").width()-2*n,r=Math.floor((s-a)/2);e.css("marginLeft",r>>0;if(0===o)return!1;for(var a=0|e,s=Math.max(a>=0?a:o-Math.abs(a),0);s1&&("?"===e[0]&&(e=e.substr(1)),e.split("&").forEach(function(t){var e=t.split("=",2);if(e.length>1)try{i[e[0]]=decodeURIComponent(e[1])}catch(n){i[e[0]]=""}else i[e[0]]=""})),t?i[t]:i},t.parseLink=function(e){if(!e)return{};var i=0===e.indexOf("http:")||0===e.indexOf("https:");if(i){var n=window.location.origin;if(e.indexOf(n)<0)return{external:!0,url:e};e=e.substr((n+config.webRoot).length)}var o=e.split("#"),a=o[0].split("?"),s=a[1],r=s?t.getSearchParam("",s):{},l=a[0],c={url:e,isOnlyBody:"yes"===r.onlybody,vars:[],hash:o[1]||"",params:r,tid:r.tid||""};if("GET"===config.requestType){c.moduleName=r[config.moduleVar]||"index",c.methodName=r[config.methodVar]||"index",c.viewType=r[config.viewVar]||config.defaultView;for(var h in r)h!==config.moduleVar&&h!==config.methodVar&&h!==config.viewVar&&"onlybody"!==h&&"tid"!==h&&c.vars.push([h,r[h]])}else{var d=l.lastIndexOf("/");d===l.length-1&&(l=l.substr(0,d),d=l.lastIndexOf("/")),d>=0&&(l=l.substr(d+1));var u=l.lastIndexOf(".");u>=0?(c.viewType=l.substr(u+1),l=l.substr(0,u)):c.viewType=config.defaultView;var p=l.split(config.requestFix);if(c.moduleName=p[0]||"index",c.methodName=p[1]||"index",p.length>2)for(var f=2;f.nav>li").length>10&&(i(),t(window).on("resize",i)),setTimeout(n,1e3)}),parent!==window&&parent.$.apps){var o=window.name;if(o&&0===o.indexOf("app-")){var a=o.substring(4),s=parent.$.apps.openedApps[a];s&&s.$app.removeClass("loading")}}}(jQuery),function(t){"use strict";function e(e,i){"object"!=typeof i&&(i={user:i});var n=t(e);i=t.extend({},n.data(),i);var o=i.user;"string"==typeof o&&(o={account:o});var a={},s=i.size;s&&(a.width=s,a.height=s,a.lineHeight=s,Number.isNaN(+s)||n.addClass("size-"+s));var r=!!o.avatar;if(n.toggleClass("has-image",r).toggleClass("has-text",!r),n.empty(),r)n.append(t("").attr("src",o.avatar));else{var l=t.zui.strCode(o.account)*(i.hueDistance||43)%360;a.background="hsl("+l+","+(i.saturation||"40%")+","+(i.lightness||"60%")+")",Number.isNaN(+s)||(a.fontSize=Math.round(s/2)+"px");var c=o.name||o.realname||o.account;c=/^[\u4e00-\u9fa5\s]+$/.test(c)?c.length<=2?c:c.substring(c.length-2):/^[A-Za-z\d\s]+$/.test(c)?c[0].toUpperCase():c.length<=2?c:c.substring(0,2),n.append(t('').text(c))}return n.css(a)}t.fn.avatar=function(t){return this.each(function(){e(this,t)})}}(jQuery),$.zui.lang("de",{"zui.pager":{pageOfText:"Seite {0}",prev:"Zurück",next:"Nächste Seite",first:"Erste Seite",last:"Letzte Seite","goto":"Goto",pageOf:"Seite {page}",totalPage:"{totalPage} Seiten",totalCount:"Total: {recTotal} Artikel",pageSize:"{recPerPage} Artikel pro Seite",itemsRange:"Seiten {start} bis {end}",pageOfTotal:"Seite {page}/{totalPage}"},"zui.boards":{append2end:"Gehen Sie zum Ende"},"zui.browser":{tip:"Online. Sorgenfrei. Aktualisiere deinen Browser noch heute!"},"zui.calendar":{weekNames:["Son","Mon","Die","Mit","Don","Fri","Sam"],monthNames:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",year:"{0}Jahr",month:"{0}Monat",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Kein Icon]",commonIcons:"Gemeinsame Symbole",webIcons:"Web-Symbol",editorIcons:"Editor-Symbol",directionalIcons:"Pfeil Zusammenfluss",otherIcons:"Andere Symbole"},"zui.colorPicker":{errorTip:"Kein gültiger Farbwert"},"zui.datagrid":{errorCannotGetDataFromRemote:"Daten vom Remote-Server ({0}) können nicht abgerufen werden.",errorCannotHandleRemoteData:"Die vom Remote-Server zurückgegebenen Daten können nicht verarbeitet werden."},"zui.guideViewer":{prevStep:"Vorheriger Schritt",nextStep:"Nächster Schritt"},"zui.tabs":{reload:"Neu laden",close:"Schliessen",closeOthers:"Schließen Sie andere Registerkarten",closeRight:"Schließen Sie die rechte Registerkarte",reopenLast:"Letzten geschlossenen Tab wiederherstellen",errorCannotFetchFromRemote:"Inhalt kann nicht vom Remote-Server abgerufen werden ({0})."},"zui.uploader":{},datetimepicker:{days:["Sonntag","Montag","Diensteg","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fri","Sam"],daysMin:["Son","Mon","Die","Mit","Don","Fri","Sam"],months:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",suffix:[],meridiem:[]},chosen:{no_results_text:"Nicht gefunden"},bootbox:{OK:"OK",CANCEL:"Stornieren",CONFIRM:"Bestätigen"}}),$.zui.lang("fr",{"zui.pager":{pageOfText:"Page {0}",prev:"Prev",next:"Suivant",first:"First",last:"Last","goto":"Goto",pageOf:"Page {page}",totalPage:"{totalPage} pages",totalCount:"Total: {recTotal} items",pageSize:"{recPerPage} per page",itemsRange:"De {start} à {end}",pageOfTotal:"Page {page} de {totalPage}"},"zui.boards":{append2end:"Aller jusqu'au bout"},"zui.browser":{tip:"Naviguez sans crainte sur Internet. Mettez votre navigateur à jour dès aujourd'hui!"},"zui.calendar":{weekNames:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],monthNames:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",year:"{0} Année",month:"{0} Mois",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Aucune icône]",commonIcons:"Icônes communes",webIcons:"Icône Web",editorIcons:"Icône de l'éditeur",directionalIcons:"Flèche confluence",otherIcons:"Autres icônes"},"zui.colorPicker":{errorTip:"Pas une valeur de couleur valide"},"zui.datagrid":{errorCannotGetDataFromRemote:"Impossible d'obtenir les données du serveur distant ({0}).",errorCannotHandleRemoteData:"Impossible de traiter les données renvoyées par le serveur distant."},"zui.guideViewer":{prevStep:"Étape précédente",nextStep:"Prochaine étape"},"zui.tabs":{reload:"Recharger",close:"Fermer",closeOthers:"Fermez les autres onglets",closeRight:"Fermer l'onglet de droite",reopenLast:"Restaurer le dernier onglet fermé",errorCannotFetchFromRemote:"Impossible d'obtenir le contenu du serveur distant ({0})."},"zui.uploader":{},datetimepicker:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],daysMin:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",suffix:[],meridiem:[]},chosen:{no_results_text:"Pas trouvé"},bootbox:{OK:"D'accord",CANCEL:"Annuler",CONFIRM:"Confirmer"}}); diff --git a/www/static/svg/admin-company.svg b/www/static/svg/admin-company.svg new file mode 100644 index 0000000000..7e57ae999c --- /dev/null +++ b/www/static/svg/admin-company.svg @@ -0,0 +1,4 @@ + + + + diff --git a/www/static/svg/admin-switch.svg b/www/static/svg/admin-switch.svg index 88d99b7b0d..4689088c72 100644 --- a/www/static/svg/admin-switch.svg +++ b/www/static/svg/admin-switch.svg @@ -1,4 +1,4 @@ - - + + diff --git a/www/static/svg/admin-user.svg b/www/static/svg/admin-user.svg deleted file mode 100644 index cb1ae851e4..0000000000 --- a/www/static/svg/admin-user.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/www/theme/blackberry/style.css b/www/theme/blackberry/style.css index 698ed6aeff..963cca0f44 100644 --- a/www/theme/blackberry/style.css +++ b/www/theme/blackberry/style.css @@ -1,6 +1,6 @@ /*! - * ZUI: Zentao Theme - blackberry - v1.10.0 - 2023-02-09 + * ZUI: Zentao Theme - blackberry - v1.10.0 - 2023-02-24 * http://openzui.com - * GitHub: https://github.com/easysoft/zui.git + * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2023 cnezsoft.com; Licensed MIT - */a{color:#313c52}a:focus,a:hover{color:#23304d}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#23304d;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#161f31;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b0f18;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#23304d;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#161f31;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b0f18;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#23304d;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#23304d;background-color:#ebf1f9;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#23304d;background-color:#ccdbf0;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#b0c8e7;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ebf1f9;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#23304d;background-color:#ccdbf0;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#b0c8e7;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ebf1f9;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#23304d}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#23304d}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#131a2a}.label-primary.label-outline{color:#23304d;background:0 0;border:1px solid #23304d}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#131a2a}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#435c93}.text-primary{color:#23304d}.text-primary:hover{color:#131a2a}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#23304d}a.bg-primary:hover{background-color:#131a2a}.hl-primary{background-color:#ebf1f9}a.hl-primary:hover{background-color:#c4d6ed}.progress{background-color:#ebf1f9;border-radius:3px}.progress-bar{color:#fff;background-color:#23304d;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#23304d;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)}.form-control:focus{border-color:#23304d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#23304d;border-color:#23304d}.switch input:focus+label{color:#23304d}.switch input:focus+label:before{border-color:#23304d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #23304d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #23304d}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#23304d;border-color:#23304d}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#23304d;-webkit-box-shadow:0 0 8px #23304d;box-shadow:0 0 8px #23304d}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#23304d}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#23304d}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#304269}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#ebf1f9}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#23304d;border-color:#23304d}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#304269;border-color:#202c46}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#283758}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#3a4f7e}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#40588c}.navbar-inverse .navbar-toggle{border-color:#40588c}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#283758}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#253351}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#40588c}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#202c46}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#3a4f7e}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#40588c}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #40588c;-webkit-box-shadow:inset 0 -1px 0 #202c46;box-shadow:inset 0 -1px 0 #202c46}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#23304d}.nav>li>a:focus,.nav>li>a:hover{color:#23304d}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#23304d}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#23304d;border-color:#23304d}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#23304d;border-bottom-color:#23304d}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #23304d;box-shadow:inset 2px 0 0 #23304d}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#23304d;border-color:#23304d}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#23304d}.panel-primary>.panel-heading{color:#fff;background-color:#23304d;border-color:#23304d}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#23304d}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#23304d}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#ebf1f9}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#23304d!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#23304d!important;border-bottom-left-radius:#23304d!important}.chosen-container .chosen-results li.highlighted{background-color:#23304d!important}.chosen-container-active .chosen-single{border-color:#23304d!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#23304d!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#23304d!important;border-bottom-left-radius:#23304d!important}.chosen-container.chosen-highlight-selected .result-selected{color:#23304d;background:#ebf1f9}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#23304d;border-color:#23304d}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#23304d}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#23304d}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#23304d}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#23304d!important;border-color:#131a2a!important}.datetimepicker td.day.active:hover{background-color:#131a2a!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#23304d!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)!important}.ke-menu-item-on{background-color:#23304d!important}.ke-colorpicker-cell-on{background-color:#23304d!important}.ke-input-text:focus{border-color:#23304d!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#23304d}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#ebf1f9}.alert-primary hr{border-top-color:#d0def1}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#23304d;border-color:#23304d}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#ebf1f9}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#23304d}.tree-drag-holder{background-color:#ebf1f9}.tree-menu li.active>a{color:#fff;background-color:#23304d;border-color:#23304d}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#304269}a.text-primary{color:#23304d}.nav-primary>li.active>a{color:#0b0f18}.nav-primary>li.active>a:hover{color:#0b0f18}.bg-primary,.m-user-login{background:#304269 -webkit-gradient(linear,right top,left top,from(#23304d),to(#304269))!important;background:#304269 -webkit-linear-gradient(right,#23304d 0,#304269 100%)!important;background:#304269 -o-linear-gradient(right,#23304d 0,#304269 100%)!important;background:#304269 linear-gradient(-90deg,#23304d 0,#304269 100%)!important}.bg-primary-pure{color:#fff;background-color:#23304d}.bg-primary-pale{color:#23304d;background-color:#ebf1f9}.bg-secondary{background:#304269}.alert-info{color:#23304d;background:#ebf1f9}.btn-primary{color:#fff;background-color:#23304d;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(35,48,77,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1b253b;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:#23304d;border-color:transparent}.btn-secondary{color:#fff;background-color:#304269;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(48,66,105,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#283758;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:#304269;border-color:transparent}.btn-info{color:#23304d;background-color:#ebf1f9;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#23304d;background-color:rgba(235,241,249,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d7e3f3;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(35,48,77,.3);background-color:#ebf1f9;border-color:transparent}.btn-icon-left>.icon{color:#304269;background:#ebf1f9}.btn-active-line{color:#23304d}.btn-active-line:after{border-bottom-color:#23304d}.btn-active-line:hover{color:#23304d}.btn-active-text .text{color:#0b0f18}.btn-active-text .text:after{border-bottom-color:#0b0f18}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(35,48,77,.8)}.label-primary{background:#23304d!important}.label-pale{background:#c4d6ed!important}.label-outline.label-primary{background:#ebf1f9!important;border-color:rgba(35,48,77,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#23304d;border-color:#23304d}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#23304d;-webkit-box-shadow:0 0 0 3px rgba(35,48,77,.2);box-shadow:0 0 0 3px rgba(35,48,77,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#23304d}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#23304d!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#23304d!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#23304d!important}.nav-tabs>li.active>a:before{background:#23304d}.nav-tabs-primary>li.active>a{color:#23304d!important}.panel-actions .btn.text-primary{color:#23304d}.picker-focus .picker-selections{border-color:#23304d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)}.status-bars .bar{background:#23304d}.status-bars-h .bar{background:#23304d}.messagger-zt .messager-content>.icon{color:#23304d}.tree li.active>a{color:#23304d}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#23304d}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#304269}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#ebf1f9}.dropdown-submenu:hover>a:after{border-left-color:#23304d}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#304269}.timeline>li>a:after,.timeline>li>div:after{background-color:#23304d}.timeline>li.active:before{background-color:rgba(35,48,77,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#23304d!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#23304d!important}#mainHeader{background:#3b5182;border-top-color:#23304d;border-bottom-color:#ebf1f9}#searchGo{background-color:#304269}#searchGo:hover{background-color:#23304d}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#23304d}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#23304d}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#23304d}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#23304d}.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 #23304d}.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 #23304d}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #23304d}#sidebarHeader .title{color:#23304d}#sidebar>.sidebar-toggle>.icon{background:#506eaf}#main .querybox-toggle.querybox-opened{color:#23304d}#contentNav .nav>li.active>a{color:#23304d}#contentNav .nav>li.active>a:before{background:#23304d}td.c-actions .btn{color:#304269}td.c-actions .btn:hover{color:#23304d;background-color:#d7e3f3}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#23304d;background:#ebf1f9}.main-table table .btn-icon-left:hover>.icon{background:#ebf1f9}.main-table tbody>tr:hover{background:#ebf1f9}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#23304d}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f3f6fb}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f3f6fb}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#304269}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#5773b2}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#23304d}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#23304d}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#23304d}.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:#ebf1f9}.table-nest-toggle:hover{color:#23304d}.table-footer .checkbox-primary.checked label:after{border-color:#23304d!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#334670!important;border-color:#334670!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#23304d}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#23304d;border-color:#23304d}.article-content a{color:#23304d}.article-content a:focus,.article-content a:hover{color:#304269}.list-group{overflow-y:auto}.list-group>a.selected{color:#ebf1f9;background-color:#23304d}.list-group>a.active{color:#23304d;background-color:#ebf1f9}.list-group>a.active:hover,.list-group>a:hover{background-color:#23304d}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#23304d}#swapper #dropMenu .tree li>.selected{color:#23304d!important;background:#ebf1f9!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#23304d!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#23304d!important;background:#ebf1f9!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#23304d!important}.release-line>li>a:hover:before{background-color:#ebf1f9}.release-line>li>a:hover .title{color:#23304d}.release-line>li.active>a:before{border-color:#23304d}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#304269}#poweredBy .icon-zentao{color:#304269}#poweredBy a:hover{color:#23304d}#poweredBy a:hover .icon-zentao{color:#23304d}#poweredBy a.text-primary{color:#23304d}#poweredBy a.text-primary:hover{color:#304269}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#23304d!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#304269!important}.dynamic.active .dynamic-date:before{background-color:#304269!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#23304d!important}.table td.has-child>.task-toggle:hover{color:#23304d!important}#openTaskPage.open:hover,#task .task-nav{color:#23304d!important;background:#ebf1f9!important}#tasksProgress>.progress-bar{background:#23304d!important}#tasksProgress .progress-text{color:#23304d!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#23304d!important;background:#ebf1f9!important;border-left-color:#23304d!important;-webkit-box-shadow:inset 4px 0 0 #23304d!important;box-shadow:inset 4px 0 0 #23304d!important}#copyProjectModal a:hover{border-color:#304269!important}#zeroTaskStory.checked{background:#ebf1f9!important;border-color:#304269!important}.cols-list .col:hover{background:#ebf1f9!important}.files-grid .actions,.files-grid .col:hover .file{background:#ebf1f9!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#304269!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#304269!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#23304d!important}#bars>li.active:after{background:#ebf1f9!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#0b0f18;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#23304d}td.c-actions .btn{color:#23304d}.main-table tbody>tr:hover{background:rgba(235,241,249,.8)}.main-table tbody>tr>td.c-name a{color:#000}.main-table tbody>tr>td.c-name a:hover{color:#0b0f18}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#23304d!important}.assigned-none{color:#0b0f18!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#0b0f18!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#0b0f18!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#3b5182}#assigntomeBlock .nav>li.active>a{color:#0b0f18}.consumedTotally{color:#23304d;background:#ebf1f9}#toggleFoldIcon .icon-border{border:1px solid #7a90c2}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#23304d}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#304269}.nav-steps>ul>li.active>a:focus{background-color:#23304d}.nav-steps>ul>li.active+li:after{border-left-color:#304269}.nav-steps>ul>li.active:hover+li:after{border-left-color:#23304d}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#23304d}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #23304d;box-shadow:0 0 1px 1px #23304d}.border-primary-hover:hover{border:1px solid #23304d}.menu-hover-primary>li>a:hover{color:#0b0f18!important;background-color:#7a90c2!important}.menu-active-primary>li.active>a{color:#23304d!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#7a90c2!important}#mainHeader{background:#304269 -webkit-gradient(linear,right top,left top,from(#23304d),to(#304269));background:#304269 -webkit-linear-gradient(right,#23304d 0,#304269 100%);background:#304269 -o-linear-gradient(right,#23304d 0,#304269 100%);background:#304269 linear-gradient(-90deg,#23304d 0,#304269 100%);background-color:#304269} + */a{color:#313c52}a:focus,a:hover{color:#23304d}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#23304d;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#161f31;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b0f18;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#23304d;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#161f31;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b0f18;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#23304d;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#23304d;background-color:#ebf1f9;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#23304d;background-color:#ccdbf0;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#b0c8e7;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ebf1f9;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#23304d;background-color:#ccdbf0;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#b0c8e7;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ebf1f9;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#23304d}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#23304d}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#131a2a}.label-primary.label-outline{color:#23304d;background:0 0;border:1px solid #23304d}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#131a2a}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#435c93}.text-primary{color:#23304d}.text-primary:hover{color:#131a2a}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#23304d}a.bg-primary:hover{background-color:#131a2a}.hl-primary{background-color:#ebf1f9}a.hl-primary:hover{background-color:#c4d6ed}.progress{background-color:#ebf1f9;border-radius:3px}.progress-bar{color:#fff;background-color:#23304d;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#23304d;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)}.form-control:focus{border-color:#23304d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#23304d;border-color:#23304d}.switch input:focus+label{color:#23304d}.switch input:focus+label:before{border-color:#23304d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #23304d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #23304d}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#23304d;border-color:#23304d}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#23304d;-webkit-box-shadow:0 0 8px #23304d;box-shadow:0 0 8px #23304d}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#23304d}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#23304d}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#304269}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#ebf1f9}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#23304d;border-color:#23304d}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#304269;border-color:#202c46}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#283758}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#3a4f7e}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#40588c}.navbar-inverse .navbar-toggle{border-color:#40588c}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#283758}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#253351}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#40588c}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#202c46}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#3a4f7e}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#40588c}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #40588c;-webkit-box-shadow:inset 0 -1px 0 #202c46;box-shadow:inset 0 -1px 0 #202c46}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#23304d}.nav>li>a:focus,.nav>li>a:hover{color:#23304d}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#23304d}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#23304d;border-color:#23304d}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#23304d;border-bottom-color:#23304d}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #23304d;box-shadow:inset 2px 0 0 #23304d}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#23304d;border-color:#23304d}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#23304d}.panel-primary>.panel-heading{color:#fff;background-color:#23304d;border-color:#23304d}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#23304d}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#23304d}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#ebf1f9}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#23304d!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#23304d!important;border-bottom-left-radius:#23304d!important}.chosen-container .chosen-results li.highlighted{background-color:#23304d!important}.chosen-container-active .chosen-single{border-color:#23304d!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#23304d!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#23304d!important;border-bottom-left-radius:#23304d!important}.chosen-container.chosen-highlight-selected .result-selected{color:#23304d;background:#ebf1f9}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#23304d;border-color:#23304d}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#23304d}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#23304d}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#23304d}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#23304d!important;border-color:#131a2a!important}.datetimepicker td.day.active:hover{background-color:#131a2a!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#23304d!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)!important}.ke-menu-item-on{background-color:#23304d!important}.ke-colorpicker-cell-on{background-color:#23304d!important}.ke-input-text:focus{border-color:#23304d!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#23304d}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#ebf1f9}.alert-primary hr{border-top-color:#d0def1}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#23304d;border-color:#23304d}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#ebf1f9}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#23304d}.tree-drag-holder{background-color:#ebf1f9}.tree-menu li.active>a{color:#fff;background-color:#23304d;border-color:#23304d}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#304269}a.text-primary{color:#23304d}.nav-primary>li.active>a{color:#0b0f18}.nav-primary>li.active>a:hover{color:#0b0f18}.bg-primary,.m-user-login{background:#304269 -webkit-gradient(linear,right top,left top,from(#23304d),to(#304269))!important;background:#304269 -webkit-linear-gradient(right,#23304d 0,#304269 100%)!important;background:#304269 -o-linear-gradient(right,#23304d 0,#304269 100%)!important;background:#304269 linear-gradient(-90deg,#23304d 0,#304269 100%)!important}.bg-primary-pure{color:#fff;background-color:#23304d}.bg-primary-pale{color:#23304d;background-color:#ebf1f9}.bg-secondary{background:#304269}.alert-info{color:#23304d;background:#ebf1f9}.btn-primary{color:#fff;background-color:#23304d;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(35,48,77,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1b253b;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:#23304d;border-color:transparent}.btn-secondary{color:#fff;background-color:#304269;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(48,66,105,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#283758;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:#304269;border-color:transparent}.btn-info{color:#23304d;background-color:#ebf1f9;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#23304d;background-color:rgba(235,241,249,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d7e3f3;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(35,48,77,.3);background-color:#ebf1f9;border-color:transparent}.btn-icon-left>.icon{color:#304269;background:#ebf1f9}.btn-active-line{color:#23304d}.btn-active-line:after{border-bottom-color:#23304d}.btn-active-line:hover{color:#23304d}.btn-active-text .text{color:#0b0f18}.btn-active-text .text:after{border-bottom-color:#0b0f18}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(35,48,77,.8)}.label-primary{background:#23304d!important}.label-pale{background:#c4d6ed!important}.label-outline.label-primary{background:#ebf1f9!important;border-color:rgba(35,48,77,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#23304d;border-color:#23304d}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#23304d;-webkit-box-shadow:0 0 0 3px rgba(35,48,77,.2);box-shadow:0 0 0 3px rgba(35,48,77,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#23304d}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#23304d!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#23304d!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#23304d!important}.nav-tabs>li.active>a:before{background:#23304d}.nav-tabs-primary>li.active>a{color:#23304d!important}.panel-actions .btn.text-primary{color:#23304d}.picker-focus .picker-selections{border-color:#23304d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(35,48,77,.6)}.status-bars .bar{background:#23304d}.status-bars-h .bar{background:#23304d}.messagger-zt .messager-content>.icon{color:#23304d}.tree li.active>a{color:#23304d}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#23304d}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#304269}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#ebf1f9}.dropdown-submenu:hover>a:after{border-left-color:#23304d}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#304269}.timeline>li>a:after,.timeline>li>div:after{background-color:#23304d}.timeline>li.active:before{background-color:rgba(35,48,77,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#23304d!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#23304d!important}#mainHeader{background:#3b5182;border-top-color:#23304d;border-bottom-color:#ebf1f9}#searchGo{background-color:#304269}#searchGo:hover{background-color:#23304d}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#23304d}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#23304d}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#23304d}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#23304d}.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 #23304d}.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 #23304d}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #23304d}#sidebarHeader .title{color:#23304d}#sidebar>.sidebar-toggle>.icon{background:#506eaf}#main .querybox-toggle.querybox-opened{color:#23304d}#contentNav .nav>li.active>a{color:#23304d}#contentNav .nav>li.active>a:before{background:#23304d}td.c-actions .btn{color:#304269}td.c-actions .btn:hover{color:#23304d;background-color:#d7e3f3}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#23304d;background:#ebf1f9}.main-table table .btn-icon-left:hover>.icon{background:#ebf1f9}.main-table tbody>tr:hover{background:#ebf1f9}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#23304d}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f3f6fb}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f3f6fb}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#304269}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#5773b2}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#23304d}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#23304d}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#23304d}.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:#ebf1f9}.table-nest-toggle:hover{color:#23304d}.table-footer .checkbox-primary.checked label:after{border-color:#23304d!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#334670!important;border-color:#334670!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#23304d}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#23304d;border-color:#23304d}.article-content a{color:#23304d}.article-content a:focus,.article-content a:hover{color:#304269}.list-group{overflow-y:auto}.list-group>a.selected{color:#ebf1f9;background-color:#23304d}.list-group>a.active{color:#23304d;background-color:#ebf1f9}.list-group>a.active:hover,.list-group>a:hover{background-color:#23304d}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#23304d}#swapper #dropMenu .tree li>.selected{color:#23304d!important;background:#ebf1f9!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#23304d!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#23304d!important;background:#ebf1f9!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#23304d!important}.release-line>li>a:hover:before{background-color:#ebf1f9}.release-line>li>a:hover .title{color:#23304d}.release-line>li.active>a:before{border-color:#23304d}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#304269}#poweredBy .icon-zentao{color:#304269}#poweredBy a:hover{color:#23304d}#poweredBy a:hover .icon-zentao{color:#23304d}#poweredBy a.text-primary{color:#23304d}#poweredBy a.text-primary:hover{color:#304269}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#23304d!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#304269!important}.dynamic.active .dynamic-date:before{background-color:#304269!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#23304d!important}.table td.has-child>.task-toggle:hover{color:#23304d!important}#openTaskPage.open:hover,#task .task-nav{color:#23304d!important;background:#ebf1f9!important}#tasksProgress>.progress-bar{background:#23304d!important}#tasksProgress .progress-text{color:#23304d!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#23304d!important;background:#ebf1f9!important;border-left-color:#23304d!important;-webkit-box-shadow:inset 4px 0 0 #23304d!important;box-shadow:inset 4px 0 0 #23304d!important}#copyProjectModal a:hover{border-color:#304269!important}#zeroTaskStory.checked{background:#ebf1f9!important;border-color:#304269!important}.cols-list .col:hover{background:#ebf1f9!important}.files-grid .actions,.files-grid .col:hover .file{background:#ebf1f9!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#304269!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#304269!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#23304d!important}#bars>li.active:after{background:#ebf1f9!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#0b0f18;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#23304d}td.c-actions .btn{color:#23304d}.main-table tbody>tr:hover{background:rgba(235,241,249,.8)}.main-table tbody>tr>td.c-name a{color:#000}.main-table tbody>tr>td.c-name a:hover{color:#0b0f18}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#23304d!important}.assigned-none{color:#0b0f18!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#0b0f18!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#0b0f18!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#3b5182}#assigntomeBlock .nav>li.active>a{color:#0b0f18}.consumedTotally{color:#23304d;background:#ebf1f9}#toggleFoldIcon .icon-border{border:1px solid #7a90c2}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#23304d}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#304269}.nav-steps>ul>li.active>a:focus{background-color:#23304d}.nav-steps>ul>li.active+li:after{border-left-color:#304269}.nav-steps>ul>li.active:hover+li:after{border-left-color:#23304d}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#23304d}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #23304d;box-shadow:0 0 1px 1px #23304d}.border-primary-hover:hover{border:1px solid #23304d}.menu-hover-primary>li>a:hover{color:#0b0f18!important;background-color:#7a90c2!important}.menu-active-primary>li.active>a{color:#23304d!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#7a90c2!important}.form-active-primary .active .label,.form-active-primary .hover .label{color:#23304d!important}.form-active-primary .active .form-control,.form-active-primary .hover .form-control{-webkit-box-shadow:0 0 1px 1px #23304d;box-shadow:0 0 1px 1px #23304d}#mainHeader{background:#304269 -webkit-gradient(linear,right top,left top,from(#23304d),to(#304269));background:#304269 -webkit-linear-gradient(right,#23304d 0,#304269 100%);background:#304269 -o-linear-gradient(right,#23304d 0,#304269 100%);background:#304269 linear-gradient(-90deg,#23304d 0,#304269 100%);background-color:#304269} \ No newline at end of file diff --git a/www/theme/blue/style.css b/www/theme/blue/style.css index c7a0c62791..d99c65d0c0 100644 --- a/www/theme/blue/style.css +++ b/www/theme/blue/style.css @@ -1,6 +1,6 @@ /*! - * ZUI: Zentao Theme - blue - v1.10.0 - 2023-02-09 + * ZUI: Zentao Theme - blue - v1.10.0 - 2023-02-24 * http://openzui.com - * GitHub: https://github.com/easysoft/zui.git + * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2023 cnezsoft.com; Licensed MIT - */a{color:#313c52}a:focus,a:hover{color:#0d88f8}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#0d88f8;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#0673d6;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0560b3;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#0d88f8;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#0673d6;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0560b3;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#0d88f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#0d88f8;background-color:#eaf5ff;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0d88f8;background-color:#c1e2ff;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#9dd1ff;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#eaf5ff;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0d88f8;background-color:#c1e2ff;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#9dd1ff;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#eaf5ff;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#0d88f8}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#0d88f8}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#066ecc}.label-primary.label-outline{color:#0d88f8;background:0 0;border:1px solid #0d88f8}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#066ecc}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#70b9fb}.text-primary{color:#0d88f8}.text-primary:hover{color:#066ecc}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#0d88f8}a.bg-primary:hover{background-color:#066ecc}.hl-primary{background-color:#eaf5ff}a.hl-primary:hover{background-color:#b7ddff}.progress{background-color:#eaf5ff;border-radius:3px}.progress-bar{color:#fff;background-color:#0d88f8;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#0d88f8;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)}.form-control:focus{border-color:#0d88f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#0d88f8;border-color:#0d88f8}.switch input:focus+label{color:#0d88f8}.switch input:focus+label:before{border-color:#0d88f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #0d88f8;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #0d88f8}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#0d88f8;border-color:#0d88f8}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#0d88f8;-webkit-box-shadow:0 0 8px #0d88f8;box-shadow:0 0 8px #0d88f8}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#0d88f8}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#0d88f8}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#23c8ec}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#eaf5ff}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#23c8ec;border-color:#11a9cb}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#14bde2}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#3fcfee}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#52d4f0}.navbar-inverse .navbar-toggle{border-color:#52d4f0}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#14bde2}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#13b5d9}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#52d4f0}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#11a9cb}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#3fcfee}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#52d4f0}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #52d4f0;-webkit-box-shadow:inset 0 -1px 0 #11a9cb;box-shadow:inset 0 -1px 0 #11a9cb}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#12b1d4}.nav>li>a:focus,.nav>li>a:hover{color:#0d88f8}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#0d88f8}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#0d88f8;border-bottom-color:#0d88f8}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #0d88f8;box-shadow:inset 2px 0 0 #0d88f8}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#0d88f8}.panel-primary>.panel-heading{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#0d88f8}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#0d88f8}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#eaf5ff}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#0d88f8!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#0d88f8!important;border-bottom-left-radius:#0d88f8!important}.chosen-container .chosen-results li.highlighted{background-color:#0d88f8!important}.chosen-container-active .chosen-single{border-color:#0d88f8!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#0d88f8!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#0d88f8!important;border-bottom-left-radius:#0d88f8!important}.chosen-container.chosen-highlight-selected .result-selected{color:#0d88f8;background:#eaf5ff}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#0d88f8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#0d88f8}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#0d88f8}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#0d88f8!important;border-color:#066ecc!important}.datetimepicker td.day.active:hover{background-color:#066ecc!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#0d88f8!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)!important}.ke-menu-item-on{background-color:#0d88f8!important}.ke-colorpicker-cell-on{background-color:#0d88f8!important}.ke-input-text:focus{border-color:#0d88f8!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#0d88f8}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#eaf5ff}.alert-primary hr{border-top-color:#c6e4ff}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#eaf5ff}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#0d88f8}.tree-drag-holder{background-color:#eaf5ff}.tree-menu li.active>a{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#23c8ec}a.text-primary{color:#0d88f8}.nav-primary>li.active>a{color:#0080f9}.nav-primary>li.active>a:hover{color:#0080f9}.bg-primary,.m-user-login{background:#23c8ec -webkit-gradient(linear,right top,left top,from(#0d88f8),to(#23c8ec))!important;background:#23c8ec -webkit-linear-gradient(right,#0d88f8 0,#23c8ec 100%)!important;background:#23c8ec -o-linear-gradient(right,#0d88f8 0,#23c8ec 100%)!important;background:#23c8ec linear-gradient(-90deg,#0d88f8 0,#23c8ec 100%)!important}.bg-primary-pure{color:#fff;background-color:#0d88f8}.bg-primary-pale{color:#0d88f8;background-color:#eaf5ff}.bg-secondary{background:#23c8ec}.alert-info{color:#0d88f8;background:#eaf5ff}.btn-primary{color:#fff;background-color:#0d88f8;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(13,136,248,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#077be5;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:#0d88f8;border-color:transparent}.btn-secondary{color:#fff;background-color:#23c8ec;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(35,200,236,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#14bde2;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:#23c8ec;border-color:transparent}.btn-info{color:#0d88f8;background-color:#eaf5ff;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0d88f8;background-color:rgba(234,245,255,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d0e9ff;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(13,136,248,.3);background-color:#eaf5ff;border-color:transparent}.btn-icon-left>.icon{color:#23c8ec;background:#eaf5ff}.btn-active-line{color:#0d88f8}.btn-active-line:after{border-bottom-color:#0d88f8}.btn-active-line:hover{color:#0d88f8}.btn-active-text .text{color:#0080f9}.btn-active-text .text:after{border-bottom-color:#0080f9}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(13,136,248,.8)}.label-primary{background:#0d88f8!important}.label-pale{background:#b7ddff!important}.label-outline.label-primary{background:#eaf5ff!important;border-color:rgba(13,136,248,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#0d88f8;border-color:#0d88f8}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#0d88f8;-webkit-box-shadow:0 0 0 3px rgba(13,136,248,.2);box-shadow:0 0 0 3px rgba(13,136,248,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#0d88f8}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#0d88f8!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#0d88f8!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#0d88f8!important}.nav-tabs>li.active>a:before{background:#0d88f8}.nav-tabs-primary>li.active>a{color:#0d88f8!important}.panel-actions .btn.text-primary{color:#0d88f8}.picker-focus .picker-selections{border-color:#0d88f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)}.status-bars .bar{background:#0d88f8}.status-bars-h .bar{background:#0d88f8}.messagger-zt .messager-content>.icon{color:#0d88f8}.tree li.active>a{color:#0d88f8}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0d88f8}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#23c8ec}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#eaf5ff}.dropdown-submenu:hover>a:after{border-left-color:#0d88f8}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#23c8ec}.timeline>li>a:after,.timeline>li>div:after{background-color:#0d88f8}.timeline>li.active:before{background-color:rgba(13,136,248,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#0d88f8!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#0d88f8!important}#mainHeader{background:#2294fb;border-top-color:#0d88f8;border-bottom-color:#eaf5ff}#searchGo{background-color:#23c8ec}#searchGo:hover{background-color:#0d88f8}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#0d88f8}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#0d88f8}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0d88f8}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0d88f8}.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 #0d88f8}.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 #0d88f8}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #0d88f8}#sidebarHeader .title{color:#0d88f8}#sidebar>.sidebar-toggle>.icon{background:#81dff4}#main .querybox-toggle.querybox-opened{color:#0d88f8}#contentNav .nav>li.active>a{color:#0d88f8}#contentNav .nav>li.active>a:before{background:#0d88f8}td.c-actions .btn{color:#23c8ec}td.c-actions .btn:hover{color:#0d88f8;background-color:#d0e9ff}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#0d88f8;background:#eaf5ff}.main-table table .btn-icon-left:hover>.icon{background:#eaf5ff}.main-table tbody>tr:hover{background:#eaf5ff}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#0d88f8}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f4faff}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f4faff}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#033869}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0d88f8}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#0d88f8}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0d88f8}.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:#eaf5ff}.table-nest-toggle:hover{color:#0d88f8}.table-footer .checkbox-primary.checked label:after{border-color:#0d88f8!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#3fa0f9!important;border-color:#3fa0f9!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#0d88f8}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0d88f8;border-color:#0d88f8}.article-content a{color:#0d88f8}.article-content a:focus,.article-content a:hover{color:#23c8ec}.list-group{overflow-y:auto}.list-group>a.selected{color:#eaf5ff;background-color:#0d88f8}.list-group>a.active{color:#0d88f8;background-color:#eaf5ff}.list-group>a.active:hover,.list-group>a:hover{background-color:#0d88f8}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#0d88f8}#swapper #dropMenu .tree li>.selected{color:#0d88f8!important;background:#eaf5ff!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#0d88f8!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#0d88f8!important;background:#eaf5ff!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#0d88f8!important}.release-line>li>a:hover:before{background-color:#eaf5ff}.release-line>li>a:hover .title{color:#0d88f8}.release-line>li.active>a:before{border-color:#0d88f8}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#23c8ec}#poweredBy .icon-zentao{color:#23c8ec}#poweredBy a:hover{color:#0d88f8}#poweredBy a:hover .icon-zentao{color:#0d88f8}#poweredBy a.text-primary{color:#0d88f8}#poweredBy a.text-primary:hover{color:#23c8ec}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#0d88f8!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#23c8ec!important}.dynamic.active .dynamic-date:before{background-color:#23c8ec!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#0d88f8!important}.table td.has-child>.task-toggle:hover{color:#0d88f8!important}#openTaskPage.open:hover,#task .task-nav{color:#0d88f8!important;background:#eaf5ff!important}#tasksProgress>.progress-bar{background:#0d88f8!important}#tasksProgress .progress-text{color:#0d88f8!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#0d88f8!important;background:#eaf5ff!important;border-left-color:#0d88f8!important;-webkit-box-shadow:inset 4px 0 0 #0d88f8!important;box-shadow:inset 4px 0 0 #0d88f8!important}#copyProjectModal a:hover{border-color:#23c8ec!important}#zeroTaskStory.checked{background:#eaf5ff!important;border-color:#23c8ec!important}.cols-list .col:hover{background:#eaf5ff!important}.files-grid .actions,.files-grid .col:hover .file{background:#eaf5ff!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#23c8ec!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#23c8ec!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#0d88f8!important}#bars>li.active:after{background:#eaf5ff!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#0080f9;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#0d88f8}td.c-actions .btn{color:#0d88f8}.main-table tbody>tr:hover{background:rgba(234,245,255,.8)}.main-table tbody>tr>td.c-name a{color:#0071db}.main-table tbody>tr>td.c-name a:hover{color:#0080f9}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#0d88f8!important}.assigned-none{color:#0080f9!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#0080f9!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#0080f9!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#2294fb}#assigntomeBlock .nav>li.active>a{color:#0080f9}.consumedTotally{color:#0d88f8;background:#eaf5ff}#toggleFoldIcon .icon-border{border:1px solid #cfe7fe}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#0d88f8}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#23c8ec}.nav-steps>ul>li.active>a:focus{background-color:#0d88f8}.nav-steps>ul>li.active+li:after{border-left-color:#23c8ec}.nav-steps>ul>li.active:hover+li:after{border-left-color:#0d88f8}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#0d88f8}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #0d88f8;box-shadow:0 0 1px 1px #0d88f8}.border-primary-hover:hover{border:1px solid #0d88f8}.menu-hover-primary>li>a:hover{color:#0080f9!important;background-color:#cfe7fe!important}.menu-active-primary>li.active>a{color:#0d88f8!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#cfe7fe!important}body{background-color:#f4f5f7}#mainHeader{font-size:14px;background:#fff;border-bottom:1px solid #e3e1e1;-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.04);box-shadow:0 4px 8px 0 rgba(0,0,0,.04)}#heading .header-btn .btn,#navbar .nav>li>a{color:#3c4353}.header-btn+.header-btn:before{color:#3c4353}#navbar .nav>li.active>a{position:relative;font-weight:400;color:#0d88f8;background:0 0}#navbar .nav>li.active>a:before{position:absolute;right:10px;bottom:0;left:10px;display:block;height:2px;content:' ';background-color:#0d88f8}#navbar .nav>li>a.active:hover,#navbar .nav>li>a:hover{background-color:rgba(0,0,0,.1)}#navbar .nav>li.divider{background-color:#f1f1f1}#userNav>li>a{color:#3c4353}#visionSwitcher .dropdown-toggle>div,#visionSwitcher>div{background-color:rgba(0,0,0,.1)}#subNavbar{font-size:14px}#subHeader{margin-top:-1px;border-top:1px solid #efefef;border-bottom:1px solid #e3e1e1;-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.04);box-shadow:0 4px 8px 0 rgba(0,0,0,.04)}.main-content>.cell,.main-content>.panel{border:none}.body-modal #mainContent{border:none}.dropdown-menu{border:1px solid #f2f2f2;-webkit-box-shadow:0 4px 10px 0 rgba(0,0,0,.09);box-shadow:0 4px 10px 0 rgba(0,0,0,.09)}.btn.btn-action,.c-actions .btn{width:26px;height:26px;padding:0}.btn.btn-action>i,.c-actions .btn>i{top:3px}.btn.btn-action+.btn,.c-actions .btn+.btn{margin-left:-3px}.btn.btn-action.disabled,.c-actions .btn.disabled{border-color:transparent}.btn.btn-action:hover,.c-actions .btn:hover{border-color:rgba(0,0,0,.1)}.c-actions button.btn>i,button.btn.btn-action>i{top:0}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{opacity:.2}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #e5e5e5}.calendar-view .table-bordered,.calendar-view .table-bordered th{border:none}.main-table table tr{border-color:#f2f4f7!important}.main-table tbody>tr.checked{background:#fff3e0!important}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:3px 8px;line-height:30px}.main-table thead>tr>th{border-color:#e5e5e5}.main-table tbody>tr>td{border-bottom:none!important}.main-table .table-nested>tbody>tr[data-parent="0"]{background:0 0}.main-table .table-nested>tbody>tr[data-parent="0"]+.is-nest-child{border-top:1px solid #e5e5e5}.main-table .table-nested>tbody>tr:hover{background:#ebf3fe!important}.main-table tbody>tr.checked.row-check-begin>td:first-child:before,.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-radius:0}#sidebar>.cell>.panel{border:none}#queryBox{border-width:0}#queryBox.show{border-width:1px}.checkbox-primary>label:after,.radio-primary>label:after{border-color:#d9dbe1}body.m-index-index{height:100vh;background-color:#0d88f8!important;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAAJYBAMAAACuq3YLAAAAG1BMVEUAAAD////////////////////////////////rTT7CAAAACXRSTlMAJhQfBgsPGhdNj7JjAAAHm0lEQVR42uTNQQ0DQAhFwQ0BhCAFCUjAv4iee9tL+5L9Y2COGj933onjQPLceSe2c+eduA9kzp134j2QOneeiV0uDipOudjk4qbikYuXikstdioOuTip2Ki45eKh4qXiUoudikMuTio2Km65eKh4qbjUYqfioOKkYpOLm4qHipeKSy12Kg4qTio2uXjk4qXigmKn4qDipGKTi5uKh4qXiguKnYqDipOKjYqbioeKl4pLLQ652OTikYtLLQ652OTioeKl4oJip+Kg4qRio+Km4qHipeKCYqfioGKj4qbioeKl4oJip+KkYqPipuKh4qXiguKg4qRio+Km4qXigmKn4qBi+2P8pal4qLig2Kk4qNiouKl4qLig2Kk4qNiouKl4qLig2Kk4qNiouKl4qbig2Kk4qdioeKh4odgLioOKjYqbipeKC4qDiu3H8Yd4OraBIISBKLpCQE4JmIBNaYESKIEOtgQ6v/QSbAJG8xt40lje1lnwZMFCggMLdiy4s+DJgoUEBxbsWHBnwZMEeyHBgQU7FjxYsJBgz4IjC+4seLLgnfs+2MIOrg82t4PLg22wYNmVH2ieBcctvB5ofQt/D7S5hduDzAsJjns4Pcg6ATZO/Cow9MRVgaEnLlC4s+C5hzMS9rJvIeGowB8S7grckPBU4ASEvRBg68SvAkNPXJDwJMDmiTMQjhq8gHDX4A8Ii1bDwYEFOxVOOHho7guERavg4MiCuwpnHDxV+IPBXtQaDHY6nGDwYMD20hUGRx0uMLjrcIbBordQcDDgDwU7A24oeBpwAsHecKsCQ5cuKHgYcAbBXowWCI4W3EDwsOCkwMilXwWGLl02MGTp/zIG9mK1MHA04YaBhwknBUYu/SowdOmiwNClMwT2YrYgsLPhBoGHDScFRi5dFRi6dIHA04YXAg5i1xBwF7uEgMWuIuAodgUBD7FbANjLQQ0AuxM4AeApdhUABzmoAOB+Aq/7sJeT2n3YHcHpPjyPTnwfDnJSvg+PI/i7Dns5Kl2H+5Fb78NyVL4OxzP4uw7PM7jdhsOZ+6b/EL/048UObiUHgSiKShZmXyE0LOwtKbCYAAiBDByCNYnPZqS/+hK3de2XwNErCtrqX1JtOJW13DbcF+EGYLPwGTK8LcLVhstiLhneVuGQ4VX3kOG8Cn9keH55xPFW4RIANgtXAKuFPy48l+EGYLPwGSpcllNVOK/DlwqX9YQJ93W3mnAq67lNuAM4RHgHbjXhAeBbhHMBaSI8gXuEB/cC8vHgVEiaBw/inqHBeyH5ePBEcNPgP8g9woJTQbk1uDO4WfDO3BoWPOGkLXgrLCHBCbrVgjuELwneoXuGBA86aQnOBaZJ8NQKx6ObVS4HTkVbrYhHC38ceC80zYEHdWsocC40lwNP6p6hwFuh+ThwwWkK3LFbw4CTXTgeLGzAfuF4qvARBrwXnEuBh184Xi78k2cKnwFgs/ANYLewAWenMIenUpjDueBcADYLHwHg1wvHE4UB/H7h0AvXWIteuCnweKxwyK/02RR46I/lT9zCRyjw8K/ST9TCNRS4Y7gpcHI2i8OdbxaJWPhy4I1vlgNP6J7hwJkPmsUqXANG+3uYRnotmwQnPGgJ7vTpsGA6aAvO9I224AkP2IJ3eMAa3BHcNDjBp1KDN3bAHjzRAXvwjr7fRbijxfLghBZLhPO6+zdMeLzjxveTrqHCHVwkFQYXSYUzuEgqPN5y47vVukKGM7hIKjzARTLhBC6SCuf33MCTPpsD40lLbtBvnjukwEnXsMImfYYWttPtEXiAA1ZhcMAqnMEBq3AHB6zC4CdJhXfwRKtwB4NW4Qk22oQT2GgVzmDQKtzBoFV4gkGbcAJfsyq8gUGr8ACbpcKvF46F9zL+5x/3dWzDIBRDUdRCQP9GSAVz/BH+CGyQEdg85S2sSGm4Rd4CR/a3TfIEvDhf/w4Pd5WAL3WVgFd3soB3d5WAh1sw8HQLBnYLBt7cgoF3t2Dg4RYMPN2Cgd2CgVe3YODdLRh4cf6zdHi4nyXgKX6HydehfuXZMNTSaAFv7i4B727BwIu7S8DD+U3b4enuEvDl7hKwO1rAqztawJs8WsBup4F392oBL+4HEXh0OI8HuHf6qQC7owU85XMJ7J5L4EvuNLDbaWC508Dy9QC2Ow3sXw9gv9MdjpWSOw2s//YA9s9Wh49oKf1sAfvL1OF4KXmZgO0nBvaXqcMRU/4Td/iOmNKfuMNnzJT+xB2+Y6b0J+5w1AAfUVP2oe7wO16A9dkCPuOm9PMB7M8WsD9bwFEDfEROybMFbM8WsD9bwP7dAo6d8oca2B9q4Dt2Sp2tDkcN8Bk9pc8WsH8wge/oqR+H+t/gqAE+4qfkbQK2twnY3ybgd/yUuE0djhrgM/FTP27Tf8GfdurYBkAYiKHoreARIgpoGS0jsDkTIFxEOsX6f4FX2UMNVdOaVOaasmAZRcGnOipzxlHwkFEUPNVRmf8RBctqPXyppTKPKwk+5JQEDzklwY+ckuCplsq8auAFsKyC4Es91SmrIPiQFfDG8JAV8MbwI6sgeMoqCL5lBQwMDAyskhcwMDAwMPBnwMDAwMDAnwEDA//2AvAZt8geDw8jAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:left bottom;-webkit-background-size:120px 300px;background-size:120px 300px}.m-index-index #menu{background:0 0!important}.m-index-index #apps{overflow:hidden}.m-index-index #appsBar{border-color:#e2e2e2}.m-index-index #menu .nav>li>a{opacity:.75}.m-index-index #menu .nav>li.active>a,.m-index-index #menu .nav>li>a:focus,.m-index-index #menu .nav>li>a:hover{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.2)),to(rgba(0,0,0,0)))!important;background:-webkit-linear-gradient(left,rgba(0,0,0,.2) 0,rgba(0,0,0,0) 100%)!important;background:-o-linear-gradient(left,rgba(0,0,0,.2) 0,rgba(0,0,0,0) 100%)!important;background:linear-gradient(90deg,rgba(0,0,0,.2) 0,rgba(0,0,0,0) 100%)!important;border-radius:4px;opacity:1}.m-index-index #menu .nav>li.active>a:hover{background-color:#0d88f8!important}.m-index-index.menu-hide #menu .nav>li.active>a,.m-index-index.menu-hide #menu .nav>li>a:focus,.m-index-index.menu-hide #menu .nav>li>a:hover{background:rgba(0,0,0,.12)!important}.m-index-index #bars>li>a{color:#838a9d}.m-index-index #bars>li>a:hover{color:#fff!important;background-color:#0d88f8!important}.m-index-index #bars>li.active>a:active>span,.m-index-index #bars>li.active>a:focus>span,.m-index-index #bars>li.active>a>span{font-weight:400;border-color:#23c8ec}.m-index-index #bars>li.active>a{color:#3c4353}.m-index-index #bars>li.active>a:hover{color:#fff!important}.m-project-browse #cards{padding:0;margin:0 -10px;background:0 0;border:0;-webkit-box-shadow:none;box-shadow:none}.m-project-browse #cards .pager .btn{background-color:transparent}.m-product-all #productList>thead>tr{border-top:1px solid #ededed}.m-product-all #productList>thead>tr>th{border-color:#ededed!important}.m-product-all #productList>thead>tr:first-child>th:first-child{border-left:none}.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(10),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(11),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(12),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(2),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(3),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(8){border-right:1px solid #ededed}.m-repo-browse #logForm,.m-repo-browse .main-table{border:1px solid #ededed}#userNav>li>a>.icon{color:#23c8ec;filter:none;-webkit-filter:none}#mainMenu>.btn-toobar .btn-link:active,#mainMenu>.btn-toolBar .btn-link:active,#mainMenu>.btn-toolbar .btn-link:active{background:#e6eaf1}#mainHeader #headerActions .btn-group>.btn{color:#313c52!important}.table-actions .btn:hover{color:#fff}#programTableList>tr:hover{background:#eaf5ffcc}#programTableList>tr:hover>.c-name>a{color:#0080f9!important}#programTableList>tr[data-type=project]>.c-name>a{color:#0071db!important}.m-product-all #mainMenu>div.btn-toolbar.pull-right>a.btn.btn-link.iframe{color:#00c0e9!important} + */a{color:#313c52}a:focus,a:hover{color:#0d88f8}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#0d88f8;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#0673d6;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0560b3;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#0d88f8;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#0673d6;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0560b3;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#0d88f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#0d88f8;background-color:#eaf5ff;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0d88f8;background-color:#c1e2ff;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#9dd1ff;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#eaf5ff;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0d88f8;background-color:#c1e2ff;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#9dd1ff;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#eaf5ff;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#0d88f8}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#0d88f8}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#066ecc}.label-primary.label-outline{color:#0d88f8;background:0 0;border:1px solid #0d88f8}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#066ecc}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#70b9fb}.text-primary{color:#0d88f8}.text-primary:hover{color:#066ecc}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#0d88f8}a.bg-primary:hover{background-color:#066ecc}.hl-primary{background-color:#eaf5ff}a.hl-primary:hover{background-color:#b7ddff}.progress{background-color:#eaf5ff;border-radius:3px}.progress-bar{color:#fff;background-color:#0d88f8;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#0d88f8;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)}.form-control:focus{border-color:#0d88f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#0d88f8;border-color:#0d88f8}.switch input:focus+label{color:#0d88f8}.switch input:focus+label:before{border-color:#0d88f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #0d88f8;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #0d88f8}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#0d88f8;border-color:#0d88f8}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#0d88f8;-webkit-box-shadow:0 0 8px #0d88f8;box-shadow:0 0 8px #0d88f8}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#0d88f8}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#0d88f8}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#23c8ec}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#eaf5ff}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#23c8ec;border-color:#11a9cb}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#14bde2}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#3fcfee}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#52d4f0}.navbar-inverse .navbar-toggle{border-color:#52d4f0}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#14bde2}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#13b5d9}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#52d4f0}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#11a9cb}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#3fcfee}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#52d4f0}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #52d4f0;-webkit-box-shadow:inset 0 -1px 0 #11a9cb;box-shadow:inset 0 -1px 0 #11a9cb}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#12b1d4}.nav>li>a:focus,.nav>li>a:hover{color:#0d88f8}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#0d88f8}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#0d88f8;border-bottom-color:#0d88f8}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #0d88f8;box-shadow:inset 2px 0 0 #0d88f8}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#0d88f8}.panel-primary>.panel-heading{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#0d88f8}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#0d88f8}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#eaf5ff}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#0d88f8!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#0d88f8!important;border-bottom-left-radius:#0d88f8!important}.chosen-container .chosen-results li.highlighted{background-color:#0d88f8!important}.chosen-container-active .chosen-single{border-color:#0d88f8!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#0d88f8!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#0d88f8!important;border-bottom-left-radius:#0d88f8!important}.chosen-container.chosen-highlight-selected .result-selected{color:#0d88f8;background:#eaf5ff}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#0d88f8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#0d88f8}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#0d88f8}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#0d88f8!important;border-color:#066ecc!important}.datetimepicker td.day.active:hover{background-color:#066ecc!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#0d88f8!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)!important}.ke-menu-item-on{background-color:#0d88f8!important}.ke-colorpicker-cell-on{background-color:#0d88f8!important}.ke-input-text:focus{border-color:#0d88f8!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#0d88f8}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#eaf5ff}.alert-primary hr{border-top-color:#c6e4ff}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#eaf5ff}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#0d88f8}.tree-drag-holder{background-color:#eaf5ff}.tree-menu li.active>a{color:#fff;background-color:#0d88f8;border-color:#0d88f8}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#23c8ec}a.text-primary{color:#0d88f8}.nav-primary>li.active>a{color:#0080f9}.nav-primary>li.active>a:hover{color:#0080f9}.bg-primary,.m-user-login{background:#23c8ec -webkit-gradient(linear,right top,left top,from(#0d88f8),to(#23c8ec))!important;background:#23c8ec -webkit-linear-gradient(right,#0d88f8 0,#23c8ec 100%)!important;background:#23c8ec -o-linear-gradient(right,#0d88f8 0,#23c8ec 100%)!important;background:#23c8ec linear-gradient(-90deg,#0d88f8 0,#23c8ec 100%)!important}.bg-primary-pure{color:#fff;background-color:#0d88f8}.bg-primary-pale{color:#0d88f8;background-color:#eaf5ff}.bg-secondary{background:#23c8ec}.alert-info{color:#0d88f8;background:#eaf5ff}.btn-primary{color:#fff;background-color:#0d88f8;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(13,136,248,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#077be5;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:#0d88f8;border-color:transparent}.btn-secondary{color:#fff;background-color:#23c8ec;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(35,200,236,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#14bde2;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:#23c8ec;border-color:transparent}.btn-info{color:#0d88f8;background-color:#eaf5ff;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0d88f8;background-color:rgba(234,245,255,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d0e9ff;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(13,136,248,.3);background-color:#eaf5ff;border-color:transparent}.btn-icon-left>.icon{color:#23c8ec;background:#eaf5ff}.btn-active-line{color:#0d88f8}.btn-active-line:after{border-bottom-color:#0d88f8}.btn-active-line:hover{color:#0d88f8}.btn-active-text .text{color:#0080f9}.btn-active-text .text:after{border-bottom-color:#0080f9}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(13,136,248,.8)}.label-primary{background:#0d88f8!important}.label-pale{background:#b7ddff!important}.label-outline.label-primary{background:#eaf5ff!important;border-color:rgba(13,136,248,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#0d88f8;border-color:#0d88f8}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#0d88f8;-webkit-box-shadow:0 0 0 3px rgba(13,136,248,.2);box-shadow:0 0 0 3px rgba(13,136,248,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#0d88f8}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#0d88f8!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#0d88f8!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#0d88f8!important}.nav-tabs>li.active>a:before{background:#0d88f8}.nav-tabs-primary>li.active>a{color:#0d88f8!important}.panel-actions .btn.text-primary{color:#0d88f8}.picker-focus .picker-selections{border-color:#0d88f8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(13,136,248,.6)}.status-bars .bar{background:#0d88f8}.status-bars-h .bar{background:#0d88f8}.messagger-zt .messager-content>.icon{color:#0d88f8}.tree li.active>a{color:#0d88f8}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0d88f8}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#23c8ec}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#eaf5ff}.dropdown-submenu:hover>a:after{border-left-color:#0d88f8}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#23c8ec}.timeline>li>a:after,.timeline>li>div:after{background-color:#0d88f8}.timeline>li.active:before{background-color:rgba(13,136,248,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#0d88f8!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#0d88f8!important}#mainHeader{background:#2294fb;border-top-color:#0d88f8;border-bottom-color:#eaf5ff}#searchGo{background-color:#23c8ec}#searchGo:hover{background-color:#0d88f8}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#0d88f8}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#0d88f8}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0d88f8}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0d88f8}.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 #0d88f8}.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 #0d88f8}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #0d88f8}#sidebarHeader .title{color:#0d88f8}#sidebar>.sidebar-toggle>.icon{background:#81dff4}#main .querybox-toggle.querybox-opened{color:#0d88f8}#contentNav .nav>li.active>a{color:#0d88f8}#contentNav .nav>li.active>a:before{background:#0d88f8}td.c-actions .btn{color:#23c8ec}td.c-actions .btn:hover{color:#0d88f8;background-color:#d0e9ff}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#0d88f8;background:#eaf5ff}.main-table table .btn-icon-left:hover>.icon{background:#eaf5ff}.main-table tbody>tr:hover{background:#eaf5ff}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#0d88f8}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f4faff}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f4faff}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#033869}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0d88f8}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#0d88f8}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0d88f8}.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:#eaf5ff}.table-nest-toggle:hover{color:#0d88f8}.table-footer .checkbox-primary.checked label:after{border-color:#0d88f8!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#3fa0f9!important;border-color:#3fa0f9!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#0d88f8}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0d88f8;border-color:#0d88f8}.article-content a{color:#0d88f8}.article-content a:focus,.article-content a:hover{color:#23c8ec}.list-group{overflow-y:auto}.list-group>a.selected{color:#eaf5ff;background-color:#0d88f8}.list-group>a.active{color:#0d88f8;background-color:#eaf5ff}.list-group>a.active:hover,.list-group>a:hover{background-color:#0d88f8}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#0d88f8}#swapper #dropMenu .tree li>.selected{color:#0d88f8!important;background:#eaf5ff!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#0d88f8!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#0d88f8!important;background:#eaf5ff!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#0d88f8!important}.release-line>li>a:hover:before{background-color:#eaf5ff}.release-line>li>a:hover .title{color:#0d88f8}.release-line>li.active>a:before{border-color:#0d88f8}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#23c8ec}#poweredBy .icon-zentao{color:#23c8ec}#poweredBy a:hover{color:#0d88f8}#poweredBy a:hover .icon-zentao{color:#0d88f8}#poweredBy a.text-primary{color:#0d88f8}#poweredBy a.text-primary:hover{color:#23c8ec}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#0d88f8!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#23c8ec!important}.dynamic.active .dynamic-date:before{background-color:#23c8ec!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#0d88f8!important}.table td.has-child>.task-toggle:hover{color:#0d88f8!important}#openTaskPage.open:hover,#task .task-nav{color:#0d88f8!important;background:#eaf5ff!important}#tasksProgress>.progress-bar{background:#0d88f8!important}#tasksProgress .progress-text{color:#0d88f8!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#0d88f8!important;background:#eaf5ff!important;border-left-color:#0d88f8!important;-webkit-box-shadow:inset 4px 0 0 #0d88f8!important;box-shadow:inset 4px 0 0 #0d88f8!important}#copyProjectModal a:hover{border-color:#23c8ec!important}#zeroTaskStory.checked{background:#eaf5ff!important;border-color:#23c8ec!important}.cols-list .col:hover{background:#eaf5ff!important}.files-grid .actions,.files-grid .col:hover .file{background:#eaf5ff!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#23c8ec!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#23c8ec!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#0d88f8!important}#bars>li.active:after{background:#eaf5ff!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#0080f9;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#0d88f8}td.c-actions .btn{color:#0d88f8}.main-table tbody>tr:hover{background:rgba(234,245,255,.8)}.main-table tbody>tr>td.c-name a{color:#0071db}.main-table tbody>tr>td.c-name a:hover{color:#0080f9}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#0d88f8!important}.assigned-none{color:#0080f9!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#0080f9!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#0080f9!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#2294fb}#assigntomeBlock .nav>li.active>a{color:#0080f9}.consumedTotally{color:#0d88f8;background:#eaf5ff}#toggleFoldIcon .icon-border{border:1px solid #cfe7fe}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#0d88f8}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#23c8ec}.nav-steps>ul>li.active>a:focus{background-color:#0d88f8}.nav-steps>ul>li.active+li:after{border-left-color:#23c8ec}.nav-steps>ul>li.active:hover+li:after{border-left-color:#0d88f8}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#0d88f8}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #0d88f8;box-shadow:0 0 1px 1px #0d88f8}.border-primary-hover:hover{border:1px solid #0d88f8}.menu-hover-primary>li>a:hover{color:#0080f9!important;background-color:#cfe7fe!important}.menu-active-primary>li.active>a{color:#0d88f8!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#cfe7fe!important}.form-active-primary .active .label,.form-active-primary .hover .label{color:#0d88f8!important}.form-active-primary .active .form-control,.form-active-primary .hover .form-control{-webkit-box-shadow:0 0 1px 1px #0d88f8;box-shadow:0 0 1px 1px #0d88f8}body{background-color:#f4f5f7}#mainHeader{font-size:14px;background:#fff;border-bottom:1px solid #e3e1e1;-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.04);box-shadow:0 4px 8px 0 rgba(0,0,0,.04)}#heading .header-btn .btn,#navbar .nav>li>a{color:#3c4353}.header-btn+.header-btn:before{color:#3c4353}#navbar .nav>li.active>a{position:relative;font-weight:400;color:#0d88f8;background:0 0}#navbar .nav>li.active>a:before{position:absolute;right:10px;bottom:0;left:10px;display:block;height:2px;content:' ';background-color:#0d88f8}#navbar .nav>li>a.active:hover,#navbar .nav>li>a:hover{background-color:rgba(0,0,0,.1)}#navbar .nav>li.divider{background-color:#f1f1f1}#userNav>li>a{color:#3c4353}#visionSwitcher .dropdown-toggle>div,#visionSwitcher>div{background-color:rgba(0,0,0,.1)}#subNavbar{font-size:14px}#subHeader{margin-top:-1px;border-top:1px solid #efefef}.main-content>.cell,.main-content>.panel{border:none}.body-modal #mainContent{border:none}.dropdown-menu{border:1px solid #f2f2f2;-webkit-box-shadow:0 4px 10px 0 rgba(0,0,0,.09);box-shadow:0 4px 10px 0 rgba(0,0,0,.09)}.btn.btn-action,.c-actions .btn{width:26px;height:26px;padding:0}.btn.btn-action>i,.c-actions .btn>i{top:3px}.btn.btn-action+.btn,.c-actions .btn+.btn{margin-left:-3px}.btn.btn-action.disabled,.c-actions .btn.disabled{border-color:transparent}.btn.btn-action:hover,.c-actions .btn:hover{border-color:rgba(0,0,0,.1)}.c-actions button.btn>i,button.btn.btn-action>i{top:0}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{opacity:.2}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #e5e5e5}.calendar-view .table-bordered,.calendar-view .table-bordered th{border:none}.main-table table tr{border-color:#f2f4f7!important}.main-table tbody>tr.checked{background:#fff3e0!important}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:3px 8px;line-height:30px}.main-table thead>tr>th{border-color:#e5e5e5}.main-table tbody>tr>td{border-bottom:none!important}.main-table .table-nested>tbody>tr[data-parent="0"]{background:0 0}.main-table .table-nested>tbody>tr[data-parent="0"]+.is-nest-child{border-top:1px solid #e5e5e5}.main-table .table-nested>tbody>tr:hover{background:#ebf3fe!important}.main-table tbody>tr.checked.row-check-begin>td:first-child:before,.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-radius:0}#sidebar>.cell>.panel{border:none}#queryBox{border-width:0}#queryBox.show{border-width:1px}.checkbox-primary>label:after,.radio-primary>label:after{border-color:#d9dbe1}body.m-index-index{height:100vh;background-color:#0d88f8!important;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAAJYBAMAAACuq3YLAAAAG1BMVEUAAAD////////////////////////////////rTT7CAAAACXRSTlMAJhQfBgsPGhdNj7JjAAAHm0lEQVR42uTNQQ0DQAhFwQ0BhCAFCUjAv4iee9tL+5L9Y2COGj933onjQPLceSe2c+eduA9kzp134j2QOneeiV0uDipOudjk4qbikYuXikstdioOuTip2Ki45eKh4qXiUoudikMuTio2Km65eKh4qbjUYqfioOKkYpOLm4qHipeKSy12Kg4qTio2uXjk4qXigmKn4qDipGKTi5uKh4qXiguKnYqDipOKjYqbioeKl4pLLQ652OTikYtLLQ652OTioeKl4oJip+Kg4qRio+Km4qHipeKCYqfioGKj4qbioeKl4oJip+KkYqPipuKh4qXiguKg4qRio+Km4qXigmKn4qBi+2P8pal4qLig2Kk4qNiouKl4qLig2Kk4qNiouKl4qLig2Kk4qNiouKl4qbig2Kk4qdioeKh4odgLioOKjYqbipeKC4qDiu3H8Yd4OraBIISBKLpCQE4JmIBNaYESKIEOtgQ6v/QSbAJG8xt40lje1lnwZMFCggMLdiy4s+DJgoUEBxbsWHBnwZMEeyHBgQU7FjxYsJBgz4IjC+4seLLgnfs+2MIOrg82t4PLg22wYNmVH2ieBcctvB5ofQt/D7S5hduDzAsJjns4Pcg6ATZO/Cow9MRVgaEnLlC4s+C5hzMS9rJvIeGowB8S7grckPBU4ASEvRBg68SvAkNPXJDwJMDmiTMQjhq8gHDX4A8Ii1bDwYEFOxVOOHho7guERavg4MiCuwpnHDxV+IPBXtQaDHY6nGDwYMD20hUGRx0uMLjrcIbBordQcDDgDwU7A24oeBpwAsHecKsCQ5cuKHgYcAbBXowWCI4W3EDwsOCkwMilXwWGLl02MGTp/zIG9mK1MHA04YaBhwknBUYu/SowdOmiwNClMwT2YrYgsLPhBoGHDScFRi5dFRi6dIHA04YXAg5i1xBwF7uEgMWuIuAodgUBD7FbANjLQQ0AuxM4AeApdhUABzmoAOB+Aq/7sJeT2n3YHcHpPjyPTnwfDnJSvg+PI/i7Dns5Kl2H+5Fb78NyVL4OxzP4uw7PM7jdhsOZ+6b/EL/048UObiUHgSiKShZmXyE0LOwtKbCYAAiBDByCNYnPZqS/+hK3de2XwNErCtrqX1JtOJW13DbcF+EGYLPwGTK8LcLVhstiLhneVuGQ4VX3kOG8Cn9keH55xPFW4RIANgtXAKuFPy48l+EGYLPwGSpcllNVOK/DlwqX9YQJ93W3mnAq67lNuAM4RHgHbjXhAeBbhHMBaSI8gXuEB/cC8vHgVEiaBw/inqHBeyH5ePBEcNPgP8g9woJTQbk1uDO4WfDO3BoWPOGkLXgrLCHBCbrVgjuELwneoXuGBA86aQnOBaZJ8NQKx6ObVS4HTkVbrYhHC38ceC80zYEHdWsocC40lwNP6p6hwFuh+ThwwWkK3LFbw4CTXTgeLGzAfuF4qvARBrwXnEuBh184Xi78k2cKnwFgs/ANYLewAWenMIenUpjDueBcADYLHwHg1wvHE4UB/H7h0AvXWIteuCnweKxwyK/02RR46I/lT9zCRyjw8K/ST9TCNRS4Y7gpcHI2i8OdbxaJWPhy4I1vlgNP6J7hwJkPmsUqXANG+3uYRnotmwQnPGgJ7vTpsGA6aAvO9I224AkP2IJ3eMAa3BHcNDjBp1KDN3bAHjzRAXvwjr7fRbijxfLghBZLhPO6+zdMeLzjxveTrqHCHVwkFQYXSYUzuEgqPN5y47vVukKGM7hIKjzARTLhBC6SCuf33MCTPpsD40lLbtBvnjukwEnXsMImfYYWttPtEXiAA1ZhcMAqnMEBq3AHB6zC4CdJhXfwRKtwB4NW4Qk22oQT2GgVzmDQKtzBoFV4gkGbcAJfsyq8gUGr8ACbpcKvF46F9zL+5x/3dWzDIBRDUdRCQP9GSAVz/BH+CGyQEdg85S2sSGm4Rd4CR/a3TfIEvDhf/w4Pd5WAL3WVgFd3soB3d5WAh1sw8HQLBnYLBt7cgoF3t2Dg4RYMPN2Cgd2CgVe3YODdLRh4cf6zdHi4nyXgKX6HydehfuXZMNTSaAFv7i4B727BwIu7S8DD+U3b4enuEvDl7hKwO1rAqztawJs8WsBup4F392oBL+4HEXh0OI8HuHf6qQC7owU85XMJ7J5L4EvuNLDbaWC508Dy9QC2Ow3sXw9gv9MdjpWSOw2s//YA9s9Wh49oKf1sAfvL1OF4KXmZgO0nBvaXqcMRU/4Td/iOmNKfuMNnzJT+xB2+Y6b0J+5w1AAfUVP2oe7wO16A9dkCPuOm9PMB7M8WsD9bwFEDfEROybMFbM8WsD9bwP7dAo6d8oca2B9q4Dt2Sp2tDkcN8Bk9pc8WsH8wge/oqR+H+t/gqAE+4qfkbQK2twnY3ybgd/yUuE0djhrgM/FTP27Tf8GfdurYBkAYiKHoreARIgpoGS0jsDkTIFxEOsX6f4FX2UMNVdOaVOaasmAZRcGnOipzxlHwkFEUPNVRmf8RBctqPXyppTKPKwk+5JQEDzklwY+ckuCplsq8auAFsKyC4Es91SmrIPiQFfDG8JAV8MbwI6sgeMoqCL5lBQwMDAyskhcwMDAwMPBnwMDAwMDAnwEDA//2AvAZt8geDw8jAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:left bottom;-webkit-background-size:120px 300px;background-size:120px 300px}.m-index-index #menu{background:0 0!important}.m-index-index #apps{overflow:hidden}.m-index-index #appsBar{border-color:#e2e2e2}.m-index-index #menu .nav>li>a{opacity:.75}.m-index-index #menu .nav>li.active>a,.m-index-index #menu .nav>li>a:focus,.m-index-index #menu .nav>li>a:hover{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.2)),to(rgba(0,0,0,0)))!important;background:-webkit-linear-gradient(left,rgba(0,0,0,.2) 0,rgba(0,0,0,0) 100%)!important;background:-o-linear-gradient(left,rgba(0,0,0,.2) 0,rgba(0,0,0,0) 100%)!important;background:linear-gradient(90deg,rgba(0,0,0,.2) 0,rgba(0,0,0,0) 100%)!important;border-radius:4px;opacity:1}.m-index-index #menu .nav>li.active>a:hover{background-color:#0d88f8!important}.m-index-index.menu-hide #menu .nav>li.active>a,.m-index-index.menu-hide #menu .nav>li>a:focus,.m-index-index.menu-hide #menu .nav>li>a:hover{background:rgba(0,0,0,.12)!important}.m-index-index #bars>li>a{color:#838a9d}.m-index-index #bars>li>a:hover{color:#fff!important;background-color:#0d88f8!important}.m-index-index #bars>li.active>a:active>span,.m-index-index #bars>li.active>a:focus>span,.m-index-index #bars>li.active>a>span{font-weight:400;border-color:#23c8ec}.m-index-index #bars>li.active>a{color:#3c4353}.m-index-index #bars>li.active>a:hover{color:#fff!important}.m-project-browse #cards{padding:0;margin:0 -10px;background:0 0;border:0;-webkit-box-shadow:none;box-shadow:none}.m-project-browse #cards .pager .btn{background-color:transparent}.m-product-all #productList>thead>tr{border-top:1px solid #ededed}.m-product-all #productList>thead>tr>th{border-color:#ededed!important}.m-product-all #productList>thead>tr:first-child>th:first-child{border-left:none}.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(10),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(11),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(12),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(2),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(3),.m-product-all #productTableList>tr[data-parent="0"]>td:nth-child(8){border-right:1px solid #ededed}.m-repo-browse #logForm,.m-repo-browse .main-table{border:1px solid #ededed}#userNav>li>a>.icon{color:#23c8ec;filter:none;-webkit-filter:none}#mainMenu>.btn-toobar .btn-link:active,#mainMenu>.btn-toolBar .btn-link:active,#mainMenu>.btn-toolbar .btn-link:active{background:#e6eaf1}#mainHeader #headerActions .btn-group>.btn{color:#313c52!important}.table-actions .btn:hover{color:#fff}#programTableList>tr:hover{background:#eaf5ffcc}#programTableList>tr:hover>.c-name>a{color:#0080f9!important}#programTableList>tr[data-type=project]>.c-name>a{color:#0071db!important}.m-product-all #mainMenu>div.btn-toolbar.pull-right>a.btn.btn-link.iframe{color:#00c0e9!important} \ No newline at end of file diff --git a/www/theme/classic/style.css b/www/theme/classic/style.css index 6d57d7d89c..f8fe52784a 100644 --- a/www/theme/classic/style.css +++ b/www/theme/classic/style.css @@ -1,6 +1,6 @@ /*! - * ZUI: Zentao Theme - classic - v1.10.0 - 2023-02-09 + * ZUI: Zentao Theme - classic - v1.10.0 - 2023-02-24 * http://openzui.com - * GitHub: https://github.com/easysoft/zui.git + * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2023 cnezsoft.com; Licensed MIT - */a{color:#313c52}a:focus,a:hover{color:#036}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:0}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#036;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#001f3d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#000d1a;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#036;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#001f3d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#000d1a;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#036;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#036;background-color:#edf3fe;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#036;background-color:#c6d9fc;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#a5c3fa;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#edf3fe;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#036;background-color:#c6d9fc;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#a5c3fa;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#edf3fe;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#036}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:0}.label{border-radius:0}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#036}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#001933}.label-primary.label-outline{color:#036;background:0 0;border:1px solid #036}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#001933}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#06c}.text-primary{color:#036}.text-primary:hover{color:#001933}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#036}a.bg-primary:hover{background-color:#001933}.hl-primary{background-color:#edf3fe}a.hl-primary:hover{background-color:#bdd3fb}.progress{background-color:#edf3fe;border-radius:3px}.progress-bar{color:#fff;background-color:#036;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#036;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)}.form-control:focus{border-color:#036;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:0}.switch>input:checked+label:before{background-color:#036;border-color:#036}.switch input:focus+label{color:#036}.switch input:focus+label:before{border-color:#036;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #036;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #036}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#036;border-color:#036}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#036;-webkit-box-shadow:0 0 8px #036;box-shadow:0 0 8px #036}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#036}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#036}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#114f8e}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:0}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#edf3fe}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#036;border-color:#036}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:0}@media (min-width:768px){.navbar{border-radius:0}}.navbar-inverse{background-color:#114f8e;border-color:#0c3660}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#0e4277}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#145ea9}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#1668bc}.navbar-inverse .navbar-toggle{border-color:#1668bc}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#0e4277}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#0d3d6e}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#1668bc}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#0c3660}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#145ea9}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#1668bc}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #1668bc;-webkit-box-shadow:inset 0 -1px 0 #0c3660;box-shadow:inset 0 -1px 0 #0c3660}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#0d3b6a}.nav>li>a:focus,.nav>li>a:hover{color:#036}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#036}.nav-primary>li:first-child>a{border-top-left-radius:0;border-bottom-left-radius:0}.nav-primary>li:last-child>a{border-top-right-radius:0;border-bottom-right-radius:0}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#036;border-color:#036}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#036;border-bottom-color:#036}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:0;border-top-right-radius:0}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #036;box-shadow:inset 2px 0 0 #036}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:0}.pager{border-radius:0}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:0;border-bottom-left-radius:0}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:0;border-bottom-right-radius:0}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#036;border-color:#036}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:0}.panel>.panel-heading{background-image:none;border-top-left-radius:0;border-top-right-radius:0}.panel-group .panel{border-radius:0}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#036}.panel-primary>.panel-heading{color:#fff;background-color:#036;border-color:#036}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#036}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#036}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#edf3fe}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#036!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#036!important;border-bottom-left-radius:#036!important}.chosen-container .chosen-results li.highlighted{background-color:#036!important}.chosen-container-active .chosen-single{border-color:#036!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#036!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#036!important;border-bottom-left-radius:#036!important}.chosen-container.chosen-highlight-selected .result-selected{color:#036;background:#edf3fe}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#036;border-color:#036}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:0;border-top-right-radius:0}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:0}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#036}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#036}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#036}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#036!important;border-color:#001933!important}.datetimepicker td.day.active:hover{background-color:#001933!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:0!important}.ke-container.focus{border-color:#036!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)!important}.ke-menu-item-on{background-color:#036!important}.ke-colorpicker-cell-on{background-color:#036!important}.ke-input-text:focus{border-color:#036!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)!important}.messager{border-radius:0}.messager-primary{background-color:#036}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:0}.alert-primary{color:#273042;background-color:#edf3fe}.alert-primary hr{border-top-color:#cbdcfc}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#036;border-color:#036}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:0}.card{border-radius:0;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:0}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#edf3fe}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#036}.tree-drag-holder{background-color:#edf3fe}.tree-menu li.active>a{color:#fff;background-color:#036;border-color:#036}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#114f8e}a.text-primary{color:#036}.nav-primary>li.active>a{color:#000d1a}.nav-primary>li.active>a:hover{color:#000d1a}.bg-primary,.m-user-login{background:#114f8e -webkit-gradient(linear,right top,left top,from(#036),to(#114f8e))!important;background:#114f8e -webkit-linear-gradient(right,#036 0,#114f8e 100%)!important;background:#114f8e -o-linear-gradient(right,#036 0,#114f8e 100%)!important;background:#114f8e linear-gradient(-90deg,#036 0,#114f8e 100%)!important}.bg-primary-pure{color:#fff;background-color:#036}.bg-primary-pale{color:#036;background-color:#edf3fe}.bg-secondary{background:#114f8e}.alert-info{color:#036;background:#edf3fe}.btn-primary{color:#fff;background-color:#036;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(0,51,102,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#00264d;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:#036;border-color:transparent}.btn-secondary{color:#fff;background-color:#114f8e;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(17,79,142,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#0e4277;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:#114f8e;border-color:transparent}.btn-info{color:#036;background-color:#edf3fe;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#036;background-color:rgba(237,243,254,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d5e3fd;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(0,51,102,.3);background-color:#edf3fe;border-color:transparent}.btn-icon-left>.icon{color:#114f8e;background:#edf3fe}.btn-active-line{color:#036}.btn-active-line:after{border-bottom-color:#036}.btn-active-line:hover{color:#036}.btn-active-text .text{color:#000d1a}.btn-active-text .text:after{border-bottom-color:#000d1a}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(0,51,102,.8)}.label-primary{background:#036!important}.label-pale{background:#bdd3fb!important}.label-outline.label-primary{background:#edf3fe!important;border-color:rgba(0,51,102,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#114f8e;border-color:#114f8e}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#114f8e;-webkit-box-shadow:0 0 0 3px rgba(17,79,142,.2);box-shadow:0 0 0 3px rgba(17,79,142,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#114f8e}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#114f8e!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#114f8e!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#114f8e!important}.nav-tabs>li.active>a:before{background:#036}.nav-tabs-primary>li.active>a{color:#036!important}.panel-actions .btn.text-primary{color:#036}.picker-focus .picker-selections{border-color:#036;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)}.status-bars .bar{background:#036}.status-bars-h .bar{background:#036}.messagger-zt .messager-content>.icon{color:#036}.tree li.active>a{color:#036}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#036}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#114f8e}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#edf3fe}.dropdown-submenu:hover>a:after{border-left-color:#036}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#114f8e}.timeline>li>a:after,.timeline>li>div:after{background-color:#036}.timeline>li.active:before{background-color:rgba(0,51,102,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#036!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#036!important}#mainHeader{background:#0059b3;border-top-color:#036;border-bottom-color:#edf3fe}#searchGo{background-color:#114f8e}#searchGo:hover{background-color:#036}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#036}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#036}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#036}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#036}.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 #036}.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 #036}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #036}#sidebarHeader .title{color:#036}#sidebar>.sidebar-toggle>.icon{background:#2182e4}#main .querybox-toggle.querybox-opened{color:#036}#contentNav .nav>li.active>a{color:#036}#contentNav .nav>li.active>a:before{background:#036}td.c-actions .btn{color:#114f8e}td.c-actions .btn:hover{color:#036;background-color:#d5e3fd}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#036;background:#edf3fe}.main-table table .btn-icon-left:hover>.icon{background:#edf3fe}.main-table tbody>tr:hover{background:#edf3fe}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#036}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f7f9ff}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f7f9ff}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#03c}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#000}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#1a53ff}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#036}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#036}.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:#edf3fe}.table-nest-toggle:hover{color:#036}.table-footer .checkbox-primary.checked label:after{border-color:#114f8e!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#1668bc!important;border-color:#1668bc!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#036}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#036;border-color:#036}.article-content a{color:#036}.article-content a:focus,.article-content a:hover{color:#114f8e}.list-group{overflow-y:auto}.list-group>a.selected{color:#edf3fe;background-color:#036}.list-group>a.active{color:#036;background-color:#edf3fe}.list-group>a.active:hover,.list-group>a:hover{background-color:#036}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#036}#swapper #dropMenu .tree li>.selected{color:#036!important;background:#edf3fe!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#036!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#036!important;background:#edf3fe!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#036!important}.release-line>li>a:hover:before{background-color:#edf3fe}.release-line>li>a:hover .title{color:#036}.release-line>li.active>a:before{border-color:#036}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#114f8e}#poweredBy .icon-zentao{color:#114f8e}#poweredBy a:hover{color:#036}#poweredBy a:hover .icon-zentao{color:#036}#poweredBy a.text-primary{color:#036}#poweredBy a.text-primary:hover{color:#114f8e}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#036!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#114f8e!important}.dynamic.active .dynamic-date:before{background-color:#114f8e!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#036!important}.table td.has-child>.task-toggle:hover{color:#036!important}#openTaskPage.open:hover,#task .task-nav{color:#036!important;background:#edf3fe!important}#tasksProgress>.progress-bar{background:#036!important}#tasksProgress .progress-text{color:#036!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#036!important;background:#edf3fe!important;border-left-color:#036!important;-webkit-box-shadow:inset 4px 0 0 #036!important;box-shadow:inset 4px 0 0 #036!important}#copyProjectModal a:hover{border-color:#114f8e!important}#zeroTaskStory.checked{background:#edf3fe!important;border-color:#114f8e!important}.cols-list .col:hover{background:#edf3fe!important}.files-grid .actions,.files-grid .col:hover .file{background:#edf3fe!important}.dashboard .panel,.panel-default{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.08),0 1px 1px 0 rgba(0,0,0,.05),0 2px 1px -1px rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.08),0 1px 1px 0 rgba(0,0,0,.05),0 2px 1px -1px rgba(0,0,0,.06)}#menu .nav>li.active>a{background:#114f8e!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#114f8e!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#036!important}#bars>li.active:after{background:#edf3fe!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#000d1a;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#036}td.c-actions .btn{color:#036}.main-table tbody>tr:hover{background:rgba(237,243,254,.8)}.main-table tbody>tr>td.c-name a{color:#000}.main-table tbody>tr>td.c-name a:hover{color:#000d1a}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#036!important}.assigned-none{color:#000d1a!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#000d1a!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#000d1a!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#0059b3}#assigntomeBlock .nav>li.active>a{color:#000d1a}.consumedTotally{color:#036;background:#edf3fe}#toggleFoldIcon .icon-border{border:1px solid #39f}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#036}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#114f8e}.nav-steps>ul>li.active>a:focus{background-color:#036}.nav-steps>ul>li.active+li:after{border-left-color:#114f8e}.nav-steps>ul>li.active:hover+li:after{border-left-color:#036}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#036}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #036;box-shadow:0 0 1px 1px #036}.border-primary-hover:hover{border:1px solid #036}.menu-hover-primary>li>a:hover{color:#000d1a!important;background-color:#39f!important}.menu-active-primary>li.active>a{color:#036!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#39f!important}#loginPanel,#productsBox .product,#sidebarHeader,#task .task-desc>ul>li[data-target]:after,.block-todoes .todoes-form,.btn,.btn>.label-icon,.cell,.checkbox-primary>label:after,.chosen-container .chosen-results>li,.chosen-container-multi .chosen-choices li.search-choice,.chosen-container-single .chosen-drop,.chosen-container-single .chosen-search input[type=text],.datetimepicker td,.datetimepicker th,.dropdown-menu,.dropdown-menu>li>a,.files-grid .actions,.files-grid .file,.form-control,.ke-container,.list-group>a,.main-actions .btn-toolbar,.main-content,.main-table,.main-table tbody>tr.checked.row-check-begin>td:first-child:before,.main-table tbody>tr.checked.row-check-end>td:first-child:before,.modal-dialog,.modal-iframe .modal-body>iframe,.nav>li>a,.panel,.progress,.progress-bar,.radio-primary>label:after,.search-box-circle .input-control-icon-left,.search-box-circle .input-control-icon-right,.search-box-circle>.form-control,.table,.table-footer{border-radius:0!important}#header,#mainMenu+#mainContent.main-row .cell,#sidebarHeader,.cell,.main-content,.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive,.panel{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.08),0 1px 1px 0 rgba(0,0,0,.05),0 2px 1px -1px rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.08),0 1px 1px 0 rgba(0,0,0,.05),0 2px 1px -1px rgba(0,0,0,.06)}#footer{border-top-color:transparent;-webkit-box-shadow:0 -1px 3px 0 rgba(0,0,0,.08),0 -1px 1px 0 rgba(0,0,0,.05),0 -2px 1px -1px rgba(0,0,0,.06);box-shadow:0 -1px 3px 0 rgba(0,0,0,.08),0 -1px 1px 0 rgba(0,0,0,.05),0 -2px 1px -1px rgba(0,0,0,.06)}.block-statistic .nav-stacked,.main-table thead>tr>th,.table-footer{border-color:#e5e5e5;border-top-width:1px;border-bottom-width:1px}td.c-actions .btn{opacity:.85}td.c-actions .btn:hover{opacity:1}.main-table tbody>tr.checked{background:#fff4ea;-webkit-box-shadow:none!important;box-shadow:none!important}.main-table tbody>tr.checked:hover{background:#ffe7d0}.main-table td.c-actions .btn.disabled{opacity:.5}#mainHeader{background:#114f8e -webkit-gradient(linear,right top,left top,from(#036),to(#114f8e));background:#114f8e -webkit-linear-gradient(right,#036 0,#114f8e 100%);background:#114f8e -o-linear-gradient(right,#036 0,#114f8e 100%);background:#114f8e linear-gradient(-90deg,#036 0,#114f8e 100%);background-color:#114f8e} + */a{color:#313c52}a:focus,a:hover{color:#036}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:0}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#036;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#001f3d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#000d1a;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#036;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#001f3d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#000d1a;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#036;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#036;background-color:#edf3fe;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#036;background-color:#c6d9fc;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#a5c3fa;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#edf3fe;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#036;background-color:#c6d9fc;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#a5c3fa;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#edf3fe;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#036}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:0}.label{border-radius:0}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#036}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#001933}.label-primary.label-outline{color:#036;background:0 0;border:1px solid #036}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#001933}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#06c}.text-primary{color:#036}.text-primary:hover{color:#001933}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#036}a.bg-primary:hover{background-color:#001933}.hl-primary{background-color:#edf3fe}a.hl-primary:hover{background-color:#bdd3fb}.progress{background-color:#edf3fe;border-radius:3px}.progress-bar{color:#fff;background-color:#036;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#036;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)}.form-control:focus{border-color:#036;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:0}.switch>input:checked+label:before{background-color:#036;border-color:#036}.switch input:focus+label{color:#036}.switch input:focus+label:before{border-color:#036;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #036;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #036}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#036;border-color:#036}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#036;-webkit-box-shadow:0 0 8px #036;box-shadow:0 0 8px #036}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#036}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#036}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#114f8e}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:0}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#edf3fe}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#036;border-color:#036}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:0}@media (min-width:768px){.navbar{border-radius:0}}.navbar-inverse{background-color:#114f8e;border-color:#0c3660}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#0e4277}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#145ea9}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#1668bc}.navbar-inverse .navbar-toggle{border-color:#1668bc}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#0e4277}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#0d3d6e}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#1668bc}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#0c3660}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#145ea9}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#1668bc}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #1668bc;-webkit-box-shadow:inset 0 -1px 0 #0c3660;box-shadow:inset 0 -1px 0 #0c3660}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#0d3b6a}.nav>li>a:focus,.nav>li>a:hover{color:#036}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#036}.nav-primary>li:first-child>a{border-top-left-radius:0;border-bottom-left-radius:0}.nav-primary>li:last-child>a{border-top-right-radius:0;border-bottom-right-radius:0}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#036;border-color:#036}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#036;border-bottom-color:#036}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:0;border-top-right-radius:0}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #036;box-shadow:inset 2px 0 0 #036}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:0}.pager{border-radius:0}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:0;border-bottom-left-radius:0}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:0;border-bottom-right-radius:0}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#036;border-color:#036}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:0}.panel>.panel-heading{background-image:none;border-top-left-radius:0;border-top-right-radius:0}.panel-group .panel{border-radius:0}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#036}.panel-primary>.panel-heading{color:#fff;background-color:#036;border-color:#036}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#036}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#036}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#edf3fe}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#036!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#036!important;border-bottom-left-radius:#036!important}.chosen-container .chosen-results li.highlighted{background-color:#036!important}.chosen-container-active .chosen-single{border-color:#036!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#036!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#036!important;border-bottom-left-radius:#036!important}.chosen-container.chosen-highlight-selected .result-selected{color:#036;background:#edf3fe}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#036;border-color:#036}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:0;border-top-right-radius:0}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:0}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#036}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#036}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#036}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#036!important;border-color:#001933!important}.datetimepicker td.day.active:hover{background-color:#001933!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:0!important}.ke-container.focus{border-color:#036!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)!important}.ke-menu-item-on{background-color:#036!important}.ke-colorpicker-cell-on{background-color:#036!important}.ke-input-text:focus{border-color:#036!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)!important}.messager{border-radius:0}.messager-primary{background-color:#036}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:0}.alert-primary{color:#273042;background-color:#edf3fe}.alert-primary hr{border-top-color:#cbdcfc}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#036;border-color:#036}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:0}.card{border-radius:0;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:0}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#edf3fe}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#036}.tree-drag-holder{background-color:#edf3fe}.tree-menu li.active>a{color:#fff;background-color:#036;border-color:#036}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#114f8e}a.text-primary{color:#036}.nav-primary>li.active>a{color:#000d1a}.nav-primary>li.active>a:hover{color:#000d1a}.bg-primary,.m-user-login{background:#114f8e -webkit-gradient(linear,right top,left top,from(#036),to(#114f8e))!important;background:#114f8e -webkit-linear-gradient(right,#036 0,#114f8e 100%)!important;background:#114f8e -o-linear-gradient(right,#036 0,#114f8e 100%)!important;background:#114f8e linear-gradient(-90deg,#036 0,#114f8e 100%)!important}.bg-primary-pure{color:#fff;background-color:#036}.bg-primary-pale{color:#036;background-color:#edf3fe}.bg-secondary{background:#114f8e}.alert-info{color:#036;background:#edf3fe}.btn-primary{color:#fff;background-color:#036;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(0,51,102,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#00264d;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:#036;border-color:transparent}.btn-secondary{color:#fff;background-color:#114f8e;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(17,79,142,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#0e4277;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:#114f8e;border-color:transparent}.btn-info{color:#036;background-color:#edf3fe;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#036;background-color:rgba(237,243,254,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d5e3fd;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(0,51,102,.3);background-color:#edf3fe;border-color:transparent}.btn-icon-left>.icon{color:#114f8e;background:#edf3fe}.btn-active-line{color:#036}.btn-active-line:after{border-bottom-color:#036}.btn-active-line:hover{color:#036}.btn-active-text .text{color:#000d1a}.btn-active-text .text:after{border-bottom-color:#000d1a}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(0,51,102,.8)}.label-primary{background:#036!important}.label-pale{background:#bdd3fb!important}.label-outline.label-primary{background:#edf3fe!important;border-color:rgba(0,51,102,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#114f8e;border-color:#114f8e}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#114f8e;-webkit-box-shadow:0 0 0 3px rgba(17,79,142,.2);box-shadow:0 0 0 3px rgba(17,79,142,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#114f8e}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#114f8e!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#114f8e!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#114f8e!important}.nav-tabs>li.active>a:before{background:#036}.nav-tabs-primary>li.active>a{color:#036!important}.panel-actions .btn.text-primary{color:#036}.picker-focus .picker-selections{border-color:#036;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,51,102,.6)}.status-bars .bar{background:#036}.status-bars-h .bar{background:#036}.messagger-zt .messager-content>.icon{color:#036}.tree li.active>a{color:#036}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#036}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#114f8e}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#edf3fe}.dropdown-submenu:hover>a:after{border-left-color:#036}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#114f8e}.timeline>li>a:after,.timeline>li>div:after{background-color:#036}.timeline>li.active:before{background-color:rgba(0,51,102,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#036!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#036!important}#mainHeader{background:#0059b3;border-top-color:#036;border-bottom-color:#edf3fe}#searchGo{background-color:#114f8e}#searchGo:hover{background-color:#036}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#036}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#036}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#036}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#036}.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 #036}.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 #036}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #036}#sidebarHeader .title{color:#036}#sidebar>.sidebar-toggle>.icon{background:#2182e4}#main .querybox-toggle.querybox-opened{color:#036}#contentNav .nav>li.active>a{color:#036}#contentNav .nav>li.active>a:before{background:#036}td.c-actions .btn{color:#114f8e}td.c-actions .btn:hover{color:#036;background-color:#d5e3fd}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#036;background:#edf3fe}.main-table table .btn-icon-left:hover>.icon{background:#edf3fe}.main-table tbody>tr:hover{background:#edf3fe}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#036}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f7f9ff}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f7f9ff}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#03c}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#000}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#1a53ff}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#036}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#036}.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:#edf3fe}.table-nest-toggle:hover{color:#036}.table-footer .checkbox-primary.checked label:after{border-color:#114f8e!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#1668bc!important;border-color:#1668bc!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#036}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#036;border-color:#036}.article-content a{color:#036}.article-content a:focus,.article-content a:hover{color:#114f8e}.list-group{overflow-y:auto}.list-group>a.selected{color:#edf3fe;background-color:#036}.list-group>a.active{color:#036;background-color:#edf3fe}.list-group>a.active:hover,.list-group>a:hover{background-color:#036}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#036}#swapper #dropMenu .tree li>.selected{color:#036!important;background:#edf3fe!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#036!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#036!important;background:#edf3fe!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#036!important}.release-line>li>a:hover:before{background-color:#edf3fe}.release-line>li>a:hover .title{color:#036}.release-line>li.active>a:before{border-color:#036}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#114f8e}#poweredBy .icon-zentao{color:#114f8e}#poweredBy a:hover{color:#036}#poweredBy a:hover .icon-zentao{color:#036}#poweredBy a.text-primary{color:#036}#poweredBy a.text-primary:hover{color:#114f8e}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#036!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#114f8e!important}.dynamic.active .dynamic-date:before{background-color:#114f8e!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#036!important}.table td.has-child>.task-toggle:hover{color:#036!important}#openTaskPage.open:hover,#task .task-nav{color:#036!important;background:#edf3fe!important}#tasksProgress>.progress-bar{background:#036!important}#tasksProgress .progress-text{color:#036!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#036!important;background:#edf3fe!important;border-left-color:#036!important;-webkit-box-shadow:inset 4px 0 0 #036!important;box-shadow:inset 4px 0 0 #036!important}#copyProjectModal a:hover{border-color:#114f8e!important}#zeroTaskStory.checked{background:#edf3fe!important;border-color:#114f8e!important}.cols-list .col:hover{background:#edf3fe!important}.files-grid .actions,.files-grid .col:hover .file{background:#edf3fe!important}.dashboard .panel,.panel-default{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.08),0 1px 1px 0 rgba(0,0,0,.05),0 2px 1px -1px rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.08),0 1px 1px 0 rgba(0,0,0,.05),0 2px 1px -1px rgba(0,0,0,.06)}#menu .nav>li.active>a{background:#114f8e!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#114f8e!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#036!important}#bars>li.active:after{background:#edf3fe!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#000d1a;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#036}td.c-actions .btn{color:#036}.main-table tbody>tr:hover{background:rgba(237,243,254,.8)}.main-table tbody>tr>td.c-name a{color:#000}.main-table tbody>tr>td.c-name a:hover{color:#000d1a}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#036!important}.assigned-none{color:#000d1a!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#000d1a!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#000d1a!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#0059b3}#assigntomeBlock .nav>li.active>a{color:#000d1a}.consumedTotally{color:#036;background:#edf3fe}#toggleFoldIcon .icon-border{border:1px solid #39f}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#036}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#114f8e}.nav-steps>ul>li.active>a:focus{background-color:#036}.nav-steps>ul>li.active+li:after{border-left-color:#114f8e}.nav-steps>ul>li.active:hover+li:after{border-left-color:#036}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#036}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #036;box-shadow:0 0 1px 1px #036}.border-primary-hover:hover{border:1px solid #036}.menu-hover-primary>li>a:hover{color:#000d1a!important;background-color:#39f!important}.menu-active-primary>li.active>a{color:#036!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#39f!important}.form-active-primary .active .label,.form-active-primary .hover .label{color:#036!important}.form-active-primary .active .form-control,.form-active-primary .hover .form-control{-webkit-box-shadow:0 0 1px 1px #036;box-shadow:0 0 1px 1px #036}#loginPanel,#productsBox .product,#sidebarHeader,#task .task-desc>ul>li[data-target]:after,.block-todoes .todoes-form,.btn,.btn>.label-icon,.cell,.checkbox-primary>label:after,.chosen-container .chosen-results>li,.chosen-container-multi .chosen-choices li.search-choice,.chosen-container-single .chosen-drop,.chosen-container-single .chosen-search input[type=text],.datetimepicker td,.datetimepicker th,.dropdown-menu,.dropdown-menu>li>a,.files-grid .actions,.files-grid .file,.form-control,.ke-container,.list-group>a,.main-actions .btn-toolbar,.main-content,.main-table,.main-table tbody>tr.checked.row-check-begin>td:first-child:before,.main-table tbody>tr.checked.row-check-end>td:first-child:before,.modal-dialog,.modal-iframe .modal-body>iframe,.nav>li>a,.panel,.progress,.progress-bar,.radio-primary>label:after,.search-box-circle .input-control-icon-left,.search-box-circle .input-control-icon-right,.search-box-circle>.form-control,.table,.table-footer{border-radius:0!important}#mainMenu+#mainContent.main-row .cell,#sidebarHeader,.cell,.main-content,.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive,.panel{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.08),0 1px 1px 0 rgba(0,0,0,.05),0 2px 1px -1px rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.08),0 1px 1px 0 rgba(0,0,0,.05),0 2px 1px -1px rgba(0,0,0,.06)}#footer{border-top-color:transparent;-webkit-box-shadow:0 -1px 3px 0 rgba(0,0,0,.08),0 -1px 1px 0 rgba(0,0,0,.05),0 -2px 1px -1px rgba(0,0,0,.06);box-shadow:0 -1px 3px 0 rgba(0,0,0,.08),0 -1px 1px 0 rgba(0,0,0,.05),0 -2px 1px -1px rgba(0,0,0,.06)}.block-statistic .nav-stacked,.main-table thead>tr>th,.table-footer{border-color:#e5e5e5;border-top-width:1px;border-bottom-width:1px}td.c-actions .btn{opacity:.85}td.c-actions .btn:hover{opacity:1}.main-table tbody>tr.checked{background:#fff4ea;-webkit-box-shadow:none!important;box-shadow:none!important}.main-table tbody>tr.checked:hover{background:#ffe7d0}.main-table td.c-actions .btn.disabled{opacity:.5}#mainHeader{background:#114f8e -webkit-gradient(linear,right top,left top,from(#036),to(#114f8e));background:#114f8e -webkit-linear-gradient(right,#036 0,#114f8e 100%);background:#114f8e -o-linear-gradient(right,#036 0,#114f8e 100%);background:#114f8e linear-gradient(-90deg,#036 0,#114f8e 100%);background-color:#114f8e} \ No newline at end of file diff --git a/www/theme/default/images/main/weixin.jpg b/www/theme/default/images/main/weixin.jpg index 8ce38e4b86..df0c55442e 100644 Binary files a/www/theme/default/images/main/weixin.jpg and b/www/theme/default/images/main/weixin.jpg differ diff --git a/www/theme/green/style.css b/www/theme/green/style.css index 2e2d9bc3a6..8003b7c4b1 100644 --- a/www/theme/green/style.css +++ b/www/theme/green/style.css @@ -1,6 +1,6 @@ /*! - * ZUI: Zentao Theme - Green - v1.10.0 - 2023-02-09 + * ZUI: Zentao Theme - Green - v1.10.0 - 2023-03-01 * http://openzui.com - * GitHub: https://github.com/easysoft/zui.git + * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2023 cnezsoft.com; Licensed MIT - */a{color:#313c52}a:focus,a:hover{color:#29aa93}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#29aa93;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#218977;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1a6c5e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#29aa93;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#218977;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1a6c5e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#29aa93;border-color:transparent}.btn-warning{color:#fff;background-color:#ffba34;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ffac0b;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e69800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ffba34;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ffac0b;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e69800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ffba34;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#29aa93;background-color:#f0fdfb;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#29aa93;background-color:#ccf8f1;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#acf4e9;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#f0fdfb;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#29aa93;background-color:#ccf8f1;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#acf4e9;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#f0fdfb;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#29aa93}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#29aa93}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#1f816f}.label-primary.label-outline{color:#29aa93;background:0 0;border:1px solid #29aa93}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#1f816f}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ffba34}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ffa901}.label-warning.label-outline{color:#ffba34;background:0 0;border:1px solid #ffba34}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ffa901}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#60d9c3}.text-primary{color:#29aa93}.text-primary:hover{color:#1f816f}.text-warning{color:#ffba34}.text-warning:hover{color:#ffa901}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#29aa93}a.bg-primary:hover{background-color:#1f816f}.hl-primary{background-color:#f0fdfb}a.hl-primary:hover{background-color:#c3f7ef}.progress{background-color:#f0fdfb;border-radius:3px}.progress-bar{color:#fff;background-color:#29aa93;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#29aa93;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)}.form-control:focus{border-color:#29aa93;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#29aa93;border-color:#29aa93}.switch input:focus+label{color:#29aa93}.switch input:focus+label:before{border-color:#29aa93;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #29aa93;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #29aa93}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#29aa93;border-color:#29aa93}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#29aa93;-webkit-box-shadow:0 0 8px #29aa93;box-shadow:0 0 8px #29aa93}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#29aa93}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#29aa93}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#23c8ec}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#f0fdfb}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#29aa93;border-color:#29aa93}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#23c8ec;border-color:#11a9cb}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#14bde2}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#3fcfee}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#52d4f0}.navbar-inverse .navbar-toggle{border-color:#52d4f0}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#14bde2}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#13b5d9}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#52d4f0}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#11a9cb}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#3fcfee}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#52d4f0}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #52d4f0;-webkit-box-shadow:inset 0 -1px 0 #11a9cb;box-shadow:inset 0 -1px 0 #11a9cb}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#12b1d4}.nav>li>a:focus,.nav>li>a:hover{color:#29aa93}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#29aa93}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#29aa93;border-color:#29aa93}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#29aa93;border-bottom-color:#29aa93}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #29aa93;box-shadow:inset 2px 0 0 #29aa93}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#29aa93;border-color:#29aa93}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#29aa93}.panel-primary>.panel-heading{color:#fff;background-color:#29aa93;border-color:#29aa93}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#29aa93}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#29aa93}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f0fdfb}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#29aa93!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#29aa93!important;border-bottom-left-radius:#29aa93!important}.chosen-container .chosen-results li.highlighted{background-color:#29aa93!important}.chosen-container-active .chosen-single{border-color:#29aa93!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#29aa93!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#29aa93!important;border-bottom-left-radius:#29aa93!important}.chosen-container.chosen-highlight-selected .result-selected{color:#29aa93;background:#f0fdfb}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#29aa93;border-color:#29aa93}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#29aa93}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#29aa93}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#29aa93}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ffba34!important;border-color:#ffba34!important}.datetimepicker td.day.active{background-color:#29aa93!important;border-color:#1f816f!important}.datetimepicker td.day.active:hover{background-color:#1f816f!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ffa901!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#29aa93!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)!important}.ke-menu-item-on{background-color:#29aa93!important}.ke-colorpicker-cell-on{background-color:#29aa93!important}.ke-input-text:focus{border-color:#29aa93!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#29aa93}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ffba34}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#f0fdfb}.alert-primary hr{border-top-color:#d1f9f3}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ffb11a;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#f6a200}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#29aa93;border-color:#29aa93}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#f0fdfb}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#29aa93}.tree-drag-holder{background-color:#f0fdfb}.tree-menu li.active>a{color:#fff;background-color:#29aa93;border-color:#29aa93}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#23c8ec}a.text-primary{color:#29aa93}.nav-primary>li.active>a{color:#27988a}.nav-primary>li.active>a:hover{color:#27988a}.bg-primary,.m-user-login{background:#23c8ec -webkit-gradient(linear,right top,left top,from(#29aa93),to(#23c8ec))!important;background:#23c8ec -webkit-linear-gradient(right,#29aa93 0,#23c8ec 100%)!important;background:#23c8ec -o-linear-gradient(right,#29aa93 0,#23c8ec 100%)!important;background:#23c8ec linear-gradient(-90deg,#29aa93 0,#23c8ec 100%)!important}.bg-primary-pure{color:#fff;background-color:#29aa93}.bg-primary-pale{color:#29aa93;background-color:#f0fdfb}.bg-secondary{background:#23c8ec}.alert-info{color:#29aa93;background:#f0fdfb}.btn-primary{color:#fff;background-color:#29aa93;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(41,170,147,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#249581;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:#29aa93;border-color:transparent}.btn-secondary{color:#fff;background-color:#23c8ec;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(35,200,236,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#14bde2;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:#23c8ec;border-color:transparent}.btn-info{color:#29aa93;background-color:#f0fdfb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#29aa93;background-color:rgba(240,253,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#dafaf5;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(41,170,147,.3);background-color:#f0fdfb;border-color:transparent}.btn-icon-left>.icon{color:#23c8ec;background:#f0fdfb}.btn-active-line{color:#29aa93}.btn-active-line:after{border-bottom-color:#29aa93}.btn-active-line:hover{color:#29aa93}.btn-active-text .text{color:#27988a}.btn-active-text .text:after{border-bottom-color:#27988a}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(41,170,147,.8)}.label-primary{background:#29aa93!important}.label-pale{background:#c3f7ef!important}.label-outline.label-primary{background:#f0fdfb!important;border-color:rgba(41,170,147,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#29aa93;border-color:#29aa93}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#29aa93;-webkit-box-shadow:0 0 0 3px rgba(41,170,147,.2);box-shadow:0 0 0 3px rgba(41,170,147,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#29aa93}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#29aa93!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#29aa93!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#29aa93!important}.nav-tabs>li.active>a:before{background:#29aa93}.nav-tabs-primary>li.active>a{color:#29aa93!important}.panel-actions .btn.text-primary{color:#29aa93}.picker-focus .picker-selections{border-color:#29aa93;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)}.status-bars .bar{background:#29aa93}.status-bars-h .bar{background:#29aa93}.messagger-zt .messager-content>.icon{color:#29aa93}.tree li.active>a{color:#29aa93}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#29aa93}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#23c8ec}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#f0fdfb}.dropdown-submenu:hover>a:after{border-left-color:#29aa93}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#23c8ec}.timeline>li>a:after,.timeline>li>div:after{background-color:#29aa93}.timeline>li.active:before{background-color:rgba(41,170,147,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#29aa93!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#29aa93!important}#mainHeader{background:#33c6ab;border-top-color:#29aa93;border-bottom-color:#f0fdfb}#searchGo{background-color:#23c8ec}#searchGo:hover{background-color:#29aa93}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#29aa93}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#29aa93}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#29aa93}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#29aa93}.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 #29aa93}.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 #29aa93}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #29aa93}#sidebarHeader .title{color:#29aa93}#sidebar>.sidebar-toggle>.icon{background:#81dff4}#main .querybox-toggle.querybox-opened{color:#29aa93}#contentNav .nav>li.active>a{color:#29aa93}#contentNav .nav>li.active>a:before{background:#29aa93}td.c-actions .btn{color:#23c8ec}td.c-actions .btn:hover{color:#29aa93;background-color:#dafaf5}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#29aa93;background:#f0fdfb}.main-table table .btn-icon-left:hover>.icon{background:#f0fdfb}.main-table tbody>tr:hover{background:#f0fdfb}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#29aa93}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f9fefd}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f9fefd}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#2f8a8f}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#0b2f28}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#29aa93}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#29aa93}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#29aa93}.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:#f0fdfb}.table-nest-toggle:hover{color:#29aa93}.table-footer .checkbox-primary.checked label:after{border-color:#29aa93!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#37cfb4!important;border-color:#37cfb4!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#29aa93}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#29aa93;border-color:#29aa93}.article-content a{color:#29aa93}.article-content a:focus,.article-content a:hover{color:#23c8ec}.list-group{overflow-y:auto}.list-group>a.selected{color:#f0fdfb;background-color:#29aa93}.list-group>a.active{color:#29aa93;background-color:#f0fdfb}.list-group>a.active:hover,.list-group>a:hover{background-color:#29aa93}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#29aa93}#swapper #dropMenu .tree li>.selected{color:#29aa93!important;background:#f0fdfb!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#29aa93!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#29aa93!important;background:#f0fdfb!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#29aa93!important}.release-line>li>a:hover:before{background-color:#f0fdfb}.release-line>li>a:hover .title{color:#29aa93}.release-line>li.active>a:before{border-color:#29aa93}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#23c8ec}#poweredBy .icon-zentao{color:#23c8ec}#poweredBy a:hover{color:#29aa93}#poweredBy a:hover .icon-zentao{color:#29aa93}#poweredBy a.text-primary{color:#29aa93}#poweredBy a.text-primary:hover{color:#23c8ec}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#29aa93!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#23c8ec!important}.dynamic.active .dynamic-date:before{background-color:#23c8ec!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#29aa93!important}.table td.has-child>.task-toggle:hover{color:#29aa93!important}#openTaskPage.open:hover,#task .task-nav{color:#29aa93!important;background:#f0fdfb!important}#tasksProgress>.progress-bar{background:#29aa93!important}#tasksProgress .progress-text{color:#29aa93!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#29aa93!important;background:#f0fdfb!important;border-left-color:#29aa93!important;-webkit-box-shadow:inset 4px 0 0 #29aa93!important;box-shadow:inset 4px 0 0 #29aa93!important}#copyProjectModal a:hover{border-color:#23c8ec!important}#zeroTaskStory.checked{background:#f0fdfb!important;border-color:#23c8ec!important}.cols-list .col:hover{background:#f0fdfb!important}.files-grid .actions,.files-grid .col:hover .file{background:#f0fdfb!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#23c8ec!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#23c8ec!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#29aa93!important}#bars>li.active:after{background:#f0fdfb!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#27988a;background:#e7eded}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#29aa93}td.c-actions .btn{color:#29aa93}.main-table tbody>tr:hover{background:rgba(240,253,251,.8)}.main-table tbody>tr>td.c-name a{color:#2f8a8f}.main-table tbody>tr>td.c-name a:hover{color:#27988a}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#29aa93!important}.assigned-none{color:#27988a!important}.assigned-current{color:#faae1a!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#27988a!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#27988a!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#33c6ab}#assigntomeBlock .nav>li.active>a{color:#27988a}.consumedTotally{color:#29aa93;background:#f0fdfb}#toggleFoldIcon .icon-border{border:1px solid #d4eee9}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#29aa93}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#23c8ec}.nav-steps>ul>li.active>a:focus{background-color:#29aa93}.nav-steps>ul>li.active+li:after{border-left-color:#23c8ec}.nav-steps>ul>li.active:hover+li:after{border-left-color:#29aa93}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#29aa93}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #29aa93;box-shadow:0 0 1px 1px #29aa93}.border-primary-hover:hover{border:1px solid #29aa93}.menu-hover-primary>li>a:hover{color:#27988a!important;background-color:#d4eee9!important}.menu-active-primary>li.active>a{color:#29aa93!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#d4eee9!important}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#faae1a;border-color:#faae1a}#mainHeader{color:#313c52;background:#fff;border-bottom:1px solid #eee}#heading .header-btn .btn,#navbar .nav>li>a,#userNav>li>a{color:#313c52}#navbar .nav>li.active>a{position:relative;font-weight:500;color:#27988a;background:0 0}#navbar .nav>li.active>a:before{position:absolute;right:10px;bottom:0;left:10px;display:block;height:2px;content:' ';background-color:#27988a}#navbar .nav>li>a.active:hover,#navbar .nav>li>a:hover{background-color:rgba(0,0,0,.1)}#navbar .nav>li.divider{background-color:#f1f1f1}#visionSwitcher .dropdown-toggle>div,#visionSwitcher>div{background-color:rgba(0,0,0,.1)}#menu{position:relative;background:#248f83!important}#menu::after{position:absolute;bottom:0;left:0;z-index:-1;width:100%;height:108px;content:'';background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABsCAYAAACVWrdDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA7dSURBVHgB7V1Nc9vGGV4QBL8pSjLp2LUddWK3jWvVOdjptMk4Mzl0euk1/gnN78ifyEzPuSk9J9PpIZlm6saTpJ00VJQ2jhJaiiOLFKkvghS/0H2ABQ1RILEgdkEi1ePBQCJpgXiffT/33YVCBMMwjAQ9pemR0Ikex2sZkhnQ0wkORVFa5BxDKEQQqOCz9JSjQo9N+hwlo0dPx+dEWAhMABvxeSr4hJ//R4kAAQeUCIP8HyMQAVT4C1TwWTIlKAnQhCP2txTzJUKS9NCgScx0denR+rFqzFQEUGGp9FSgQkqSgKBCPqAnmK3sJPPFTFedEtEnPyL4JoCZnILtYMMEyKIE6ExblujRpL+fkAjDlxDhaKngF8js0GPCX2Y+J0l/P6IkHJOIgosAdtP5IPZeEJJkxOHTn/P0+5GokuBpgpi9X/Qb5YQNap4iqQkTCSiXy4nSTzNLMSXGnGOWZBCnmMHK/CGKJIwlgI58CJ2aqHXy9GlfSyRy8XrnOBlXNWgEyZpMgJD5IoOSUI+SY54mClIbjc3cvJJhEGOQJdlaVMLVqRMxEFGtrqd1JZZ3vg4yMpkSmSWQZVMC9kkEIKIUoW4frhf6ndippGzWRNCrVykJPTLnEFaM290t50a1AZgVEVFxyMIIALa2ttL91NGi23thExEVMxQjAnHt2rWW2s673nRT10m1ViEhIhJVVqEaYGOSJgBhaAO9wm4UIiGhGmADmpAxBkfj3oc26HqVyAIVvh6VMFQKAcDFi6vHamIwNiGSbJJOzR3QSC1w2VwWpBEAXF24dWAYg4m2WDQJAzLo09Hfwc8ondMDldNlep7L+olUAmAGaPnUMxQECTrVCBHIkVyLCltjgr9gTxrRc4HNZcwVpBIAvP32n3UvLQCa1CcIIgHTmcUxs3UFVlqfG4TyZb7e+3hBGyxwzSWUiitEJpzz0PMA6RoAnPyQa/N+VnauQDUjN0+mKBQCbt265SskDCFhy5E5QSgEvPXWW76zUpkkwD9QLUiTOUBoDmnroLw8WjH1gsyMGW0u1BfIywY5EYoGADw5wSisjFlMeDoKtNXMgxaERgBygr3H7b1ev+vLHzR1qYN05gQINUEsxo6xv4szWgv7zv5PTOA8qj/Mxvu5jKLEuK8vKzylpmjPzpxlYW1tTX3jjZKyvZ3U6tpRTI0lzPvuDzp8SQkTLOZ/NXZ2HjZiZLxGDXs86dGBNuBvbm9vp+icSaaX9A4Ls9QXyJhzFp0XWPf1j1QzNYgbJ1qipxnxk1ZnrKVRxv0RYvWeaOwQ3YbY2zneIc4qxUm763kNGVqA2lFeye+SAIC81tc/zJJCMtHu97gDDa2n9hWXP4ZRvUzEC/0MarUaaRJ+Gy8rKpp27gCm5YU7SzmiJqdSzefU+L6bkAskBOEDxWIR4Qi3o0VUJKnzBffLTQBG/MNH7+fjWm7qVs1+vNO5dvW11hnb9OjRw55O5IR+bihmiqZ954WkBI07GiyX1xL/2vmoGET4wE+MjO564Rs3HjepPTNqenjzt35JkJUbeOHzz/+SbecuXaDTTIEsBGz/tWuvmJNGZwhQlPv9WHt779tv141KbYOEBZDA23MqITfwND8PttbS3UJaSGt+bjk5nCl0Vb27d9/svnyrWT14stXfqHxEoA1hjLrS7LTAk4Br5CoRhReWNofh3/j4lGrC7dsHe4Pj+Eml8hUBERXJVUrE+bymSJQWdEm3zRMBvff0CyFddksLaBi4P7zeROeDD66uvlInagdJFKlVvyKyHbRlivgQVAuQAxRI4dDtPcP4II4w0/79TWoVBkY/cK9Ra2nzVMMAn/c/+uFgMLAuXql8Jp2EMLQAGTCdP66Ojn5EOeWtB8ufVdTSC7++dPHTb/5asInIxJOBShYIPVeV+6f+BnctBhFAVzNMJwRTsbJyBzdBZIE3ACgVQRb/92Dt6w23+s/HX7+34BZe0iJ6r01z91g7pwUJP1MrO3ujBHDHvy+99Hta3kiaNROovmxN4NUCXW8SP1CIgnsuOEvRSKww6scJF2Fnon9psZC+oJEp4Tb6AV/l6NXV14/DIoHXFzSn8AOYC6DHIhX8IswLEiueGk6zdzL1XHL2St214Od7PgAkaF3lED5hSIKkELWU4Su+Td/m+KRz496l5aCJlRcQ+biNfiDACpk19YsvMgudeDyF34ul581qpWi/wFuw818p1cl/djZ6soUP3FnZ2XWGnk4EnpDBSsqmupNXjV7CqtdTCrJF0zmKIgMaVjVH+XhN8+uMK5UNEkbNK5XpH61efH1sd6DA7WrW1M3NpVzjpG8tZJUQKdX02tjQ00+pGgW9WrNGZAM1n5duvDpxrkHYnDBU7Pr13x2cdtJia0lwzOP8Aq8zDkv4wO3r3+95feYUAQjH6GF2C7Ajy4406zT2tJdw0ktJ1ZSGTkcsDpGAZo0jwTsYoEanGU4l9bKGjUXue5Y44mz6EfFvgmf7mabRhFmBR0dtBOfOaDb5zjt/P/rD/d+YtqdSrZCbK/zlBR6YNSNScjFHyAnGm7xKpRKa3b9y8S7XhRQq0MskICghKK8OJ9zxWrn8YLkdOzQJvXnznpSs2SoOnr7PcdEQQtVK9TERAdSEYh3S02MtJaPl4vg9mU4MkqrR6hUXT1aVVe6ShZAQjGmOKWyqUSCi9fDh+734AuuEg4wkVC1Qvq6emThyv1gqk8LAUIkAxBRViS0Q5d6lNC1pvBaoSiq8MYuSkcaKlOu/+uUwra9Kml1zK1+PK03kyHP7KTUubA8J5A8o2JXLHwRq9A2lM64mSPXdMFqyOB0NWZFY/fBbbJfZ6WtHwjfxaOfUPCqm0y78kEZAJnO6riU6GnLCvXCnD53u00Y9+c8f/lZSa1e6RAI0I0NN7btTydLVB1jhXNNqjnWJGuBQrcQnS8Yb94xpIuzQUEY05Pw+TsODa5pLnhzfHSajnatfIBKgXi/sK8qrUy2LZQTopu2sYpQ2iWeohvdr7I4z2YwpALdSAN6zCYAGYG65mBHf3Qai4w2lgxZHdGD3BwcDmmwJcbheMEsNPqKeUSjfVb+8jORERHwMgSNJsns4zdCPzicP35c7kYPtL+EQjz578mGWdNWpa/e84Ck1eCGGtFxUcgIiK9UNNpulm7UZZ0OtLndxtinwRmMzEYbwEfvzlBq8IMUJg4gNGn1A2CVapnYCEZEkhwxz2tvv6ikSAi7Hk1ylBi/EctnYsZZqHT63Et/HAZuG1zCFFrQLANpVrdbOtJVDSySUBEybX281pIfWkI/d2RYUnrFr2Sgn0o12+rh+kuzG+9M5NpciGSZwVoo3iUB0G41Gd/Ow7MvBZEjR9F2AzmOOT/rdu794XZgKe1c3LQ9vevmtrQfp+omR900ENGCEBCs5o05ZXM+/0SCbXB80o7bSypkkzqwsNR8PSbGCk2eyhtO9/fOdBhEIX7UgpnatqYhwJeErGjVht0Uh+UGn1ex4Ot9i9vmxpNutkcP32ddCULF7/NTo7m/Q2s+bQrfBmcpeggiEX/AXJCA2xE3qd7w6GzCyJ2mcGSa7vI9MuxevHty588cemx/JsXPgXCOQw8JcJyacoZpc/2HM6gr0nQYkgV7/3YlVySC5R2qQ6v/26htoSblEDzSn5dn5IsggASBsTri8+0Gurat5rg+PEXax9OK0PuFofX29M1pqKGatdQe2rUdofHNFqOMfXn/aHRqFhWzQBu2gdcj14TGaAJ8wxZoELIM9rmY/Gd4L7PydlXtmlOV0tKWStH3q8tNuCCV8q4JPP/2Tpi2uLnE56DGa4KNkgTzFbLBFYNBPLS46SyFnL6fL3l7Z95pjKXtFoEXl399cucAdJY01SUVWW3KNkiB83LBZYt7f318qFAqhZMETgPXQvvatlrZZxzQkQNBuZQqMWsTlWfq+WV+yNAM7Ix5Y1zK7tmf9cAkbmPyp835Y6m4pfkmwnaZZyzfbR0Y1AwmURYK9wJo9v2yWj1Vxg/msG54PSt+uBiR88l2phIlsns8XzbZGvkgIC6yJlS6FtukIJ2CKdnmekSb9i5urLvf+y122tbrWvAcPNIBY9f95Ez5gPpaL94PSgVWX3CEqsRqovGAQAwTMo/BtZHkm6kO7Aayw4c2YUQLzmrjJ42FKhPhbHhMuIFvPBR2hPoxNbRf2u5wT4zBF41rOmfnB8lI6yAy0moSxNTHsOQi3WzIHozbesV+SHXR4dmGEvonpuIVwbkC4ueJSOsDDGYg1eAx2lrkNJcjel7WpUyidA05cvfCz7s9ffj5JBjHPa3fpv2xCI5p2mi8Nm+NaBTF7AylZQH1nX+ZO7DPZxtdvfmAV0DKm6YmRmMo0gK/w5/OrESuEBFph7LA7kyjC3Abh+vd7vE65WrPa0HMkt0eFj/8jy+bDru+yI5TtjWcWxtkk8DTMYjaKPUkVwh+QZ6NUNEKXx1zsJI5K5hNFz6i9xClnqqXUfqK33H/xyouGXV+hkQZ29IKgRBfeQG7DLu6Fhbnayt3c/I6sm/O6X5Iv+/eplrCNtvHs4F0WdiL7ReQDAkR9fwh/bxaPPQn9ocyTwOLqzshrHRZfa+w9CCnFfhbhCzDiG7N65sw8p/JOQNi2eQJJiJ5E9PrbZmdmD/yJIgF2DSiorbYndGb6tKWoEID03+75sSMgCM6vFoA0u9TamodHXc2VD5gAaECM9eHY9Rf4BWSq8ANtdvZyygabRTsgc4JIaAAVmrkJOD0S7GcbpjOmr8GO77DXkECBEJA2948zjIoGADAfdukCgoVJgl8wTQp7AjjQcvbosAgK96mQOQu7gSgR4FznOyDPdnO3O+IUx3tDsNA21OTKD6LihAEI0emIMXgGjjKxSQ7PPOw8IUoEYKQ7NSBNno1+4ng9UogSARBubKQj2Zk1414iNfqByBDgiNlh6+2fnQTg9XMNkAwIXhv53YYzR4gMokYAbP4wlKRaMeoDIvEQZyeiqAF218GosM81ICRA0Cg7uBFwrgGSYc8FAG5Lks6dsGTAxIz7znafUKQQNQImjXDcy7kJkoxJI/w8DwgBrgJ2ZMfnJihEjCZhZB5muPzifzvaxdIXFrNVAAAAAElFTkSuQmCC) no-repeat}#userNav>li>a>.icon{color:#23c8ec}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:-webkit-gradient(linear,left top,right top,from(rgba(229,244,169,.4)),to(rgba(237,254,171,.036)))!important;background:-webkit-linear-gradient(left,rgba(229,244,169,.4) 0,rgba(237,254,171,.036) 100%)!important;background:-o-linear-gradient(left,rgba(229,244,169,.4) 0,rgba(237,254,171,.036) 100%)!important;background:linear-gradient(90deg,rgba(229,244,169,.4) 0,rgba(237,254,171,.036) 100%)!important;border-radius:4px;opacity:1}#featurebar .nav li.active a{color:#27988a!important}#featurebar .nav li.active a:after{border-bottom:2px solid #27988a!important}.btn.btn-action,.c-actions .btn,td.c-name a{color:#29aa93}#logForm .table .versions a,#mainMenu .page-title strong a,#readOnlyOfKanban i{color:#29aa93!important}.picker-drop-menu .picker-option-list .picker-option.picker-option-active,.picker-drop-menu .picker-option-list .picker-single .picker-option.picker-option-selected.picker-option-active{color:#fff;background:#29aa93}.table-actions .btn{background:#29aa93!important;border-color:#29aa93!important}.table-actions .btn:hover{color:#fff;background:#27988a;border-color:#27988a}.table-actions>.btn-group:first-child>.btn:first-child{border-right:1px solid rgba(255,255,255,.2)!important}a.programName:focus,a.programName:hover{background:#29aa93!important}#guideDialog .project-type-img:hover,#guideDialog .project-type.active img,.kanbans .panel:hover{border-color:#29aa93!important}.btn.btn-action:hover,.c-actions .btn:hover{color:#29aa93;background:#f0fdfb}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.main-table table tr{border-color:#f2f6f8!important}#mainHeader #headerActions .btn-group>.btn{color:#313c52!important}.c-manager .avatar.avatar-top{border-color:#faae1a}#programTableList>tr:hover{background:#f0fdfbcc}#programTableList>tr:hover>.c-name>a{color:#27988a!important}#programTableList>tr[data-type=project]>.c-name>a{color:#2f8a8f!important}.m-product-all #mainMenu>div.btn-toolbar.pull-right>a.btn.btn-link.iframe{color:#00c4d0!important}#featuresNav.nav-simple>li.active>a,.nav-simple>li.active>a,.nav-simple>li.active>a:focus,.nav-simple>li.active>a:hover{color:#29aa93}#featuresCarousel .carousel-indicators .active{background-color:#29aa93!important;border-color:#29aa93!important}#dashboard .block-welcome .progress{background:#eee} + */a{color:#313c52}a:focus,a:hover{color:#29aa93}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#29aa93;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#218977;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1a6c5e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#29aa93;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#218977;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1a6c5e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#29aa93;border-color:transparent}.btn-warning{color:#fff;background-color:#ffba34;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ffac0b;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e69800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ffba34;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ffac0b;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e69800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ffba34;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#29aa93;background-color:#f0fdfb;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#29aa93;background-color:#ccf8f1;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#acf4e9;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#f0fdfb;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#29aa93;background-color:#ccf8f1;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#acf4e9;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#f0fdfb;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#29aa93}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#29aa93}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#1f816f}.label-primary.label-outline{color:#29aa93;background:0 0;border:1px solid #29aa93}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#1f816f}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ffba34}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ffa901}.label-warning.label-outline{color:#ffba34;background:0 0;border:1px solid #ffba34}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ffa901}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#60d9c3}.text-primary{color:#29aa93}.text-primary:hover{color:#1f816f}.text-warning{color:#ffba34}.text-warning:hover{color:#ffa901}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#29aa93}a.bg-primary:hover{background-color:#1f816f}.hl-primary{background-color:#f0fdfb}a.hl-primary:hover{background-color:#c3f7ef}.progress{background-color:#f0fdfb;border-radius:3px}.progress-bar{color:#fff;background-color:#29aa93;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#29aa93;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)}.form-control:focus{border-color:#29aa93;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#29aa93;border-color:#29aa93}.switch input:focus+label{color:#29aa93}.switch input:focus+label:before{border-color:#29aa93;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #29aa93;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #29aa93}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#29aa93;border-color:#29aa93}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#29aa93;-webkit-box-shadow:0 0 8px #29aa93;box-shadow:0 0 8px #29aa93}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#29aa93}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#29aa93}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#23c8ec}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#f0fdfb}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#29aa93;border-color:#29aa93}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#23c8ec;border-color:#11a9cb}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#14bde2}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#3fcfee}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#52d4f0}.navbar-inverse .navbar-toggle{border-color:#52d4f0}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#14bde2}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#13b5d9}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#52d4f0}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#11a9cb}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#3fcfee}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#52d4f0}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #52d4f0;-webkit-box-shadow:inset 0 -1px 0 #11a9cb;box-shadow:inset 0 -1px 0 #11a9cb}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#12b1d4}.nav>li>a:focus,.nav>li>a:hover{color:#29aa93}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#29aa93}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#29aa93;border-color:#29aa93}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#29aa93;border-bottom-color:#29aa93}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #29aa93;box-shadow:inset 2px 0 0 #29aa93}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#29aa93;border-color:#29aa93}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#29aa93}.panel-primary>.panel-heading{color:#fff;background-color:#29aa93;border-color:#29aa93}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#29aa93}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#29aa93}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f0fdfb}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#29aa93!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#29aa93!important;border-bottom-left-radius:#29aa93!important}.chosen-container .chosen-results li.highlighted{background-color:#29aa93!important}.chosen-container-active .chosen-single{border-color:#29aa93!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#29aa93!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#29aa93!important;border-bottom-left-radius:#29aa93!important}.chosen-container.chosen-highlight-selected .result-selected{color:#29aa93;background:#f0fdfb}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#29aa93;border-color:#29aa93}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#29aa93}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#29aa93}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#29aa93}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ffba34!important;border-color:#ffba34!important}.datetimepicker td.day.active{background-color:#29aa93!important;border-color:#1f816f!important}.datetimepicker td.day.active:hover{background-color:#1f816f!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ffa901!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#29aa93!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)!important}.ke-menu-item-on{background-color:#29aa93!important}.ke-colorpicker-cell-on{background-color:#29aa93!important}.ke-input-text:focus{border-color:#29aa93!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#29aa93}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ffba34}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#f0fdfb}.alert-primary hr{border-top-color:#d1f9f3}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ffb11a;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#f6a200}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#29aa93;border-color:#29aa93}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#f0fdfb}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#29aa93}.tree-drag-holder{background-color:#f0fdfb}.tree-menu li.active>a{color:#fff;background-color:#29aa93;border-color:#29aa93}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#23c8ec}a.text-primary{color:#29aa93}.nav-primary>li.active>a{color:#27988a}.nav-primary>li.active>a:hover{color:#27988a}.bg-primary,.m-user-login{background:#23c8ec -webkit-gradient(linear,right top,left top,from(#29aa93),to(#23c8ec))!important;background:#23c8ec -webkit-linear-gradient(right,#29aa93 0,#23c8ec 100%)!important;background:#23c8ec -o-linear-gradient(right,#29aa93 0,#23c8ec 100%)!important;background:#23c8ec linear-gradient(-90deg,#29aa93 0,#23c8ec 100%)!important}.bg-primary-pure{color:#fff;background-color:#29aa93}.bg-primary-pale{color:#29aa93;background-color:#f0fdfb}.bg-secondary{background:#23c8ec}.alert-info{color:#29aa93;background:#f0fdfb}.btn-primary{color:#fff;background-color:#29aa93;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(41,170,147,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#249581;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:#29aa93;border-color:transparent}.btn-secondary{color:#fff;background-color:#23c8ec;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(35,200,236,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#14bde2;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:#23c8ec;border-color:transparent}.btn-info{color:#29aa93;background-color:#f0fdfb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#29aa93;background-color:rgba(240,253,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#dafaf5;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(41,170,147,.3);background-color:#f0fdfb;border-color:transparent}.btn-icon-left>.icon{color:#23c8ec;background:#f0fdfb}.btn-active-line{color:#29aa93}.btn-active-line:after{border-bottom-color:#29aa93}.btn-active-line:hover{color:#29aa93}.btn-active-text .text{color:#27988a}.btn-active-text .text:after{border-bottom-color:#27988a}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(41,170,147,.8)}.label-primary{background:#29aa93!important}.label-pale{background:#c3f7ef!important}.label-outline.label-primary{background:#f0fdfb!important;border-color:rgba(41,170,147,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#29aa93;border-color:#29aa93}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#29aa93;-webkit-box-shadow:0 0 0 3px rgba(41,170,147,.2);box-shadow:0 0 0 3px rgba(41,170,147,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#29aa93}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#29aa93!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#29aa93!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#29aa93!important}.nav-tabs>li.active>a:before{background:#29aa93}.nav-tabs-primary>li.active>a{color:#29aa93!important}.panel-actions .btn.text-primary{color:#29aa93}.picker-focus .picker-selections{border-color:#29aa93;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(41,170,147,.6)}.status-bars .bar{background:#29aa93}.status-bars-h .bar{background:#29aa93}.messagger-zt .messager-content>.icon{color:#29aa93}.tree li.active>a{color:#29aa93}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#29aa93}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#23c8ec}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#f0fdfb}.dropdown-submenu:hover>a:after{border-left-color:#29aa93}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#23c8ec}.timeline>li>a:after,.timeline>li>div:after{background-color:#29aa93}.timeline>li.active:before{background-color:rgba(41,170,147,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#29aa93!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#29aa93!important}#mainHeader{background:#33c6ab;border-top-color:#29aa93;border-bottom-color:#f0fdfb}#searchGo{background-color:#23c8ec}#searchGo:hover{background-color:#29aa93}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#29aa93}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#29aa93}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#29aa93}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#29aa93}.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 #29aa93}.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 #29aa93}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #29aa93}#sidebarHeader .title{color:#29aa93}#sidebar>.sidebar-toggle>.icon{background:#81dff4}#main .querybox-toggle.querybox-opened{color:#29aa93}#contentNav .nav>li.active>a{color:#29aa93}#contentNav .nav>li.active>a:before{background:#29aa93}td.c-actions .btn{color:#23c8ec}td.c-actions .btn:hover{color:#29aa93;background-color:#dafaf5}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#29aa93;background:#f0fdfb}.main-table table .btn-icon-left:hover>.icon{background:#f0fdfb}.main-table tbody>tr:hover{background:#f0fdfb}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#29aa93}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f9fefd}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f9fefd}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#2f8a8f}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#0b2f28}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#29aa93}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#29aa93}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#29aa93}.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:#f0fdfb}.table-nest-toggle:hover{color:#29aa93}.table-footer .checkbox-primary.checked label:after{border-color:#29aa93!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#37cfb4!important;border-color:#37cfb4!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#29aa93}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#29aa93;border-color:#29aa93}.article-content a{color:#29aa93}.article-content a:focus,.article-content a:hover{color:#23c8ec}.list-group{overflow-y:auto}.list-group>a.selected{color:#f0fdfb;background-color:#29aa93}.list-group>a.active{color:#29aa93;background-color:#f0fdfb}.list-group>a.active:hover,.list-group>a:hover{background-color:#29aa93}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#29aa93}#swapper #dropMenu .tree li>.selected{color:#29aa93!important;background:#f0fdfb!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#29aa93!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#29aa93!important;background:#f0fdfb!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#29aa93!important}.release-line>li>a:hover:before{background-color:#f0fdfb}.release-line>li>a:hover .title{color:#29aa93}.release-line>li.active>a:before{border-color:#29aa93}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#23c8ec}#poweredBy .icon-zentao{color:#23c8ec}#poweredBy a:hover{color:#29aa93}#poweredBy a:hover .icon-zentao{color:#29aa93}#poweredBy a.text-primary{color:#29aa93}#poweredBy a.text-primary:hover{color:#23c8ec}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#29aa93!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#23c8ec!important}.dynamic.active .dynamic-date:before{background-color:#23c8ec!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#29aa93!important}.table td.has-child>.task-toggle:hover{color:#29aa93!important}#openTaskPage.open:hover,#task .task-nav{color:#29aa93!important;background:#f0fdfb!important}#tasksProgress>.progress-bar{background:#29aa93!important}#tasksProgress .progress-text{color:#29aa93!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#29aa93!important;background:#f0fdfb!important;border-left-color:#29aa93!important;-webkit-box-shadow:inset 4px 0 0 #29aa93!important;box-shadow:inset 4px 0 0 #29aa93!important}#copyProjectModal a:hover{border-color:#23c8ec!important}#zeroTaskStory.checked{background:#f0fdfb!important;border-color:#23c8ec!important}.cols-list .col:hover{background:#f0fdfb!important}.files-grid .actions,.files-grid .col:hover .file{background:#f0fdfb!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#23c8ec!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#23c8ec!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#29aa93!important}#bars>li.active:after{background:#f0fdfb!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#27988a;background:#e7eded}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#29aa93}td.c-actions .btn{color:#29aa93}.main-table tbody>tr:hover{background:rgba(240,253,251,.8)}.main-table tbody>tr>td.c-name a{color:#2f8a8f}.main-table tbody>tr>td.c-name a:hover{color:#27988a}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#29aa93!important}.assigned-none{color:#27988a!important}.assigned-current{color:#faae1a!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#27988a!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#27988a!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#33c6ab}#assigntomeBlock .nav>li.active>a{color:#27988a}.consumedTotally{color:#29aa93;background:#f0fdfb}#toggleFoldIcon .icon-border{border:1px solid #d4eee9}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#29aa93}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#23c8ec}.nav-steps>ul>li.active>a:focus{background-color:#29aa93}.nav-steps>ul>li.active+li:after{border-left-color:#23c8ec}.nav-steps>ul>li.active:hover+li:after{border-left-color:#29aa93}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#29aa93}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #29aa93;box-shadow:0 0 1px 1px #29aa93}.border-primary-hover:hover{border:1px solid #29aa93}.menu-hover-primary>li>a:hover{color:#27988a!important;background-color:#d4eee9!important}.menu-active-primary>li.active>a{color:#29aa93!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#d4eee9!important}.form-active-primary .active .label,.form-active-primary .hover .label{color:#29aa93!important}.form-active-primary .active .form-control,.form-active-primary .hover .form-control{-webkit-box-shadow:0 0 1px 1px #29aa93;box-shadow:0 0 1px 1px #29aa93}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#faae1a;border-color:#faae1a}#mainHeader{color:#313c52;background:#fff;border-bottom:1px solid #eee}#heading .header-btn .btn,#navbar .nav>li>a,#userNav>li>a{color:#313c52}#navbar .nav>li.active>a{position:relative;font-weight:500;color:#27988a;background:0 0}#navbar .nav>li.active>a:before{position:absolute;right:10px;bottom:0;left:10px;display:block;height:2px;content:' ';background-color:#27988a}#navbar .nav>li>a.active:hover,#navbar .nav>li>a:hover{background-color:rgba(0,0,0,.1)}#navbar .nav>li.divider{background-color:#f1f1f1}#visionSwitcher .dropdown-toggle>div,#visionSwitcher>div{background-color:rgba(0,0,0,.1)}#menu{position:relative;background:#248f83!important}#menu::after{position:absolute;bottom:0;left:0;z-index:-1;width:100%;height:108px;content:'';background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABsCAYAAACVWrdDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA7dSURBVHgB7V1Nc9vGGV4QBL8pSjLp2LUddWK3jWvVOdjptMk4Mzl0euk1/gnN78ifyEzPuSk9J9PpIZlm6saTpJ00VJQ2jhJaiiOLFKkvghS/0H2ABQ1RILEgdkEi1ePBQCJpgXiffT/33YVCBMMwjAQ9pemR0Ikex2sZkhnQ0wkORVFa5BxDKEQQqOCz9JSjQo9N+hwlo0dPx+dEWAhMABvxeSr4hJ//R4kAAQeUCIP8HyMQAVT4C1TwWTIlKAnQhCP2txTzJUKS9NCgScx0denR+rFqzFQEUGGp9FSgQkqSgKBCPqAnmK3sJPPFTFedEtEnPyL4JoCZnILtYMMEyKIE6ExblujRpL+fkAjDlxDhaKngF8js0GPCX2Y+J0l/P6IkHJOIgosAdtP5IPZeEJJkxOHTn/P0+5GokuBpgpi9X/Qb5YQNap4iqQkTCSiXy4nSTzNLMSXGnGOWZBCnmMHK/CGKJIwlgI58CJ2aqHXy9GlfSyRy8XrnOBlXNWgEyZpMgJD5IoOSUI+SY54mClIbjc3cvJJhEGOQJdlaVMLVqRMxEFGtrqd1JZZ3vg4yMpkSmSWQZVMC9kkEIKIUoW4frhf6ndippGzWRNCrVykJPTLnEFaM290t50a1AZgVEVFxyMIIALa2ttL91NGi23thExEVMxQjAnHt2rWW2s673nRT10m1ViEhIhJVVqEaYGOSJgBhaAO9wm4UIiGhGmADmpAxBkfj3oc26HqVyAIVvh6VMFQKAcDFi6vHamIwNiGSbJJOzR3QSC1w2VwWpBEAXF24dWAYg4m2WDQJAzLo09Hfwc8ondMDldNlep7L+olUAmAGaPnUMxQECTrVCBHIkVyLCltjgr9gTxrRc4HNZcwVpBIAvP32n3UvLQCa1CcIIgHTmcUxs3UFVlqfG4TyZb7e+3hBGyxwzSWUiitEJpzz0PMA6RoAnPyQa/N+VnauQDUjN0+mKBQCbt265SskDCFhy5E5QSgEvPXWW76zUpkkwD9QLUiTOUBoDmnroLw8WjH1gsyMGW0u1BfIywY5EYoGADw5wSisjFlMeDoKtNXMgxaERgBygr3H7b1ev+vLHzR1qYN05gQINUEsxo6xv4szWgv7zv5PTOA8qj/Mxvu5jKLEuK8vKzylpmjPzpxlYW1tTX3jjZKyvZ3U6tpRTI0lzPvuDzp8SQkTLOZ/NXZ2HjZiZLxGDXs86dGBNuBvbm9vp+icSaaX9A4Ls9QXyJhzFp0XWPf1j1QzNYgbJ1qipxnxk1ZnrKVRxv0RYvWeaOwQ3YbY2zneIc4qxUm763kNGVqA2lFeye+SAIC81tc/zJJCMtHu97gDDa2n9hWXP4ZRvUzEC/0MarUaaRJ+Gy8rKpp27gCm5YU7SzmiJqdSzefU+L6bkAskBOEDxWIR4Qi3o0VUJKnzBffLTQBG/MNH7+fjWm7qVs1+vNO5dvW11hnb9OjRw55O5IR+bihmiqZ954WkBI07GiyX1xL/2vmoGET4wE+MjO564Rs3HjepPTNqenjzt35JkJUbeOHzz/+SbecuXaDTTIEsBGz/tWuvmJNGZwhQlPv9WHt779tv141KbYOEBZDA23MqITfwND8PttbS3UJaSGt+bjk5nCl0Vb27d9/svnyrWT14stXfqHxEoA1hjLrS7LTAk4Br5CoRhReWNofh3/j4lGrC7dsHe4Pj+Eml8hUBERXJVUrE+bymSJQWdEm3zRMBvff0CyFddksLaBi4P7zeROeDD66uvlInagdJFKlVvyKyHbRlivgQVAuQAxRI4dDtPcP4II4w0/79TWoVBkY/cK9Ra2nzVMMAn/c/+uFgMLAuXql8Jp2EMLQAGTCdP66Ojn5EOeWtB8ufVdTSC7++dPHTb/5asInIxJOBShYIPVeV+6f+BnctBhFAVzNMJwRTsbJyBzdBZIE3ACgVQRb/92Dt6w23+s/HX7+34BZe0iJ6r01z91g7pwUJP1MrO3ujBHDHvy+99Hta3kiaNROovmxN4NUCXW8SP1CIgnsuOEvRSKww6scJF2Fnon9psZC+oJEp4Tb6AV/l6NXV14/DIoHXFzSn8AOYC6DHIhX8IswLEiueGk6zdzL1XHL2St214Od7PgAkaF3lED5hSIKkELWU4Su+Td/m+KRz496l5aCJlRcQ+biNfiDACpk19YsvMgudeDyF34ul581qpWi/wFuw818p1cl/djZ6soUP3FnZ2XWGnk4EnpDBSsqmupNXjV7CqtdTCrJF0zmKIgMaVjVH+XhN8+uMK5UNEkbNK5XpH61efH1sd6DA7WrW1M3NpVzjpG8tZJUQKdX02tjQ00+pGgW9WrNGZAM1n5duvDpxrkHYnDBU7Pr13x2cdtJia0lwzOP8Aq8zDkv4wO3r3+95feYUAQjH6GF2C7Ajy4406zT2tJdw0ktJ1ZSGTkcsDpGAZo0jwTsYoEanGU4l9bKGjUXue5Y44mz6EfFvgmf7mabRhFmBR0dtBOfOaDb5zjt/P/rD/d+YtqdSrZCbK/zlBR6YNSNScjFHyAnGm7xKpRKa3b9y8S7XhRQq0MskICghKK8OJ9zxWrn8YLkdOzQJvXnznpSs2SoOnr7PcdEQQtVK9TERAdSEYh3S02MtJaPl4vg9mU4MkqrR6hUXT1aVVe6ShZAQjGmOKWyqUSCi9fDh+734AuuEg4wkVC1Qvq6emThyv1gqk8LAUIkAxBRViS0Q5d6lNC1pvBaoSiq8MYuSkcaKlOu/+uUwra9Kml1zK1+PK03kyHP7KTUubA8J5A8o2JXLHwRq9A2lM64mSPXdMFqyOB0NWZFY/fBbbJfZ6WtHwjfxaOfUPCqm0y78kEZAJnO6riU6GnLCvXCnD53u00Y9+c8f/lZSa1e6RAI0I0NN7btTydLVB1jhXNNqjnWJGuBQrcQnS8Yb94xpIuzQUEY05Pw+TsODa5pLnhzfHSajnatfIBKgXi/sK8qrUy2LZQTopu2sYpQ2iWeohvdr7I4z2YwpALdSAN6zCYAGYG65mBHf3Qai4w2lgxZHdGD3BwcDmmwJcbheMEsNPqKeUSjfVb+8jORERHwMgSNJsns4zdCPzicP35c7kYPtL+EQjz578mGWdNWpa/e84Ck1eCGGtFxUcgIiK9UNNpulm7UZZ0OtLndxtinwRmMzEYbwEfvzlBq8IMUJg4gNGn1A2CVapnYCEZEkhwxz2tvv6ikSAi7Hk1ylBi/EctnYsZZqHT63Et/HAZuG1zCFFrQLANpVrdbOtJVDSySUBEybX281pIfWkI/d2RYUnrFr2Sgn0o12+rh+kuzG+9M5NpciGSZwVoo3iUB0G41Gd/Ow7MvBZEjR9F2AzmOOT/rdu794XZgKe1c3LQ9vevmtrQfp+omR900ENGCEBCs5o05ZXM+/0SCbXB80o7bSypkkzqwsNR8PSbGCk2eyhtO9/fOdBhEIX7UgpnatqYhwJeErGjVht0Uh+UGn1ex4Ot9i9vmxpNutkcP32ddCULF7/NTo7m/Q2s+bQrfBmcpeggiEX/AXJCA2xE3qd7w6GzCyJ2mcGSa7vI9MuxevHty588cemx/JsXPgXCOQw8JcJyacoZpc/2HM6gr0nQYkgV7/3YlVySC5R2qQ6v/26htoSblEDzSn5dn5IsggASBsTri8+0Gurat5rg+PEXax9OK0PuFofX29M1pqKGatdQe2rUdofHNFqOMfXn/aHRqFhWzQBu2gdcj14TGaAJ8wxZoELIM9rmY/Gd4L7PydlXtmlOV0tKWStH3q8tNuCCV8q4JPP/2Tpi2uLnE56DGa4KNkgTzFbLBFYNBPLS46SyFnL6fL3l7Z95pjKXtFoEXl399cucAdJY01SUVWW3KNkiB83LBZYt7f318qFAqhZMETgPXQvvatlrZZxzQkQNBuZQqMWsTlWfq+WV+yNAM7Ix5Y1zK7tmf9cAkbmPyp835Y6m4pfkmwnaZZyzfbR0Y1AwmURYK9wJo9v2yWj1Vxg/msG54PSt+uBiR88l2phIlsns8XzbZGvkgIC6yJlS6FtukIJ2CKdnmekSb9i5urLvf+y122tbrWvAcPNIBY9f95Ez5gPpaL94PSgVWX3CEqsRqovGAQAwTMo/BtZHkm6kO7Aayw4c2YUQLzmrjJ42FKhPhbHhMuIFvPBR2hPoxNbRf2u5wT4zBF41rOmfnB8lI6yAy0moSxNTHsOQi3WzIHozbesV+SHXR4dmGEvonpuIVwbkC4ueJSOsDDGYg1eAx2lrkNJcjel7WpUyidA05cvfCz7s9ffj5JBjHPa3fpv2xCI5p2mi8Nm+NaBTF7AylZQH1nX+ZO7DPZxtdvfmAV0DKm6YmRmMo0gK/w5/OrESuEBFph7LA7kyjC3Abh+vd7vE65WrPa0HMkt0eFj/8jy+bDru+yI5TtjWcWxtkk8DTMYjaKPUkVwh+QZ6NUNEKXx1zsJI5K5hNFz6i9xClnqqXUfqK33H/xyouGXV+hkQZ29IKgRBfeQG7DLu6Fhbnayt3c/I6sm/O6X5Iv+/eplrCNtvHs4F0WdiL7ReQDAkR9fwh/bxaPPQn9ocyTwOLqzshrHRZfa+w9CCnFfhbhCzDiG7N65sw8p/JOQNi2eQJJiJ5E9PrbZmdmD/yJIgF2DSiorbYndGb6tKWoEID03+75sSMgCM6vFoA0u9TamodHXc2VD5gAaECM9eHY9Rf4BWSq8ANtdvZyygabRTsgc4JIaAAVmrkJOD0S7GcbpjOmr8GO77DXkECBEJA2948zjIoGADAfdukCgoVJgl8wTQp7AjjQcvbosAgK96mQOQu7gSgR4FznOyDPdnO3O+IUx3tDsNA21OTKD6LihAEI0emIMXgGjjKxSQ7PPOw8IUoEYKQ7NSBNno1+4ng9UogSARBubKQj2Zk1414iNfqByBDgiNlh6+2fnQTg9XMNkAwIXhv53YYzR4gMokYAbP4wlKRaMeoDIvEQZyeiqAF218GosM81ICRA0Cg7uBFwrgGSYc8FAG5Lks6dsGTAxIz7znafUKQQNQImjXDcy7kJkoxJI/w8DwgBrgJ2ZMfnJihEjCZhZB5muPzifzvaxdIXFrNVAAAAAElFTkSuQmCC) no-repeat}#userNav>li>a>.icon{color:#23c8ec}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:-webkit-gradient(linear,left top,right top,from(rgba(229,244,169,.4)),to(rgba(237,254,171,.036)))!important;background:-webkit-linear-gradient(left,rgba(229,244,169,.4) 0,rgba(237,254,171,.036) 100%)!important;background:-o-linear-gradient(left,rgba(229,244,169,.4) 0,rgba(237,254,171,.036) 100%)!important;background:linear-gradient(90deg,rgba(229,244,169,.4) 0,rgba(237,254,171,.036) 100%)!important;border-radius:4px;opacity:1}#featurebar .nav li.active a{color:#27988a!important}#featurebar .nav li.active a:after{border-bottom:2px solid #27988a!important}.btn.btn-action,.c-actions .btn,td.c-name a{color:#29aa93}#logForm .table .versions a,#mainMenu .page-title strong a,#readOnlyOfKanban i{color:#29aa93!important}.picker-drop-menu .picker-option-list .picker-option.picker-option-active,.picker-drop-menu .picker-option-list .picker-single .picker-option.picker-option-selected.picker-option-active{color:#29aa93}.table-actions .btn{background:#29aa93!important;border-color:#29aa93!important}.table-actions .btn:hover{color:#fff;background:#27988a;border-color:#27988a}.table-actions>.btn-group:first-child>.btn:first-child{border-right:1px solid rgba(255,255,255,.2)!important}a.programName:focus,a.programName:hover{background:#29aa93!important}#guideDialog .project-type-img:hover,#guideDialog .project-type.active img,.kanbans .panel:hover{border-color:#29aa93!important}.btn.btn-action:hover,.c-actions .btn:hover{color:#29aa93;background:#f0fdfb}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.main-table table tr{border-color:#f2f6f8!important}#mainHeader #headerActions .btn-group>.btn{color:#313c52!important}.c-manager .avatar.avatar-top{border-color:#faae1a}#programTableList>tr:hover{background:#f0fdfbcc}#programTableList>tr:hover>.c-name>a{color:#27988a!important}#programTableList>tr[data-type=project]>.c-name>a{color:#2f8a8f!important}.m-product-all #mainMenu>div.btn-toolbar.pull-right>a.btn.btn-link.iframe{color:#00c4d0!important}#featuresNav.nav-simple>li.active>a,.nav-simple>li.active>a,.nav-simple>li.active>a:focus,.nav-simple>li.active>a:hover{color:#29aa93}#featuresCarousel .carousel-indicators .active{background-color:#29aa93!important;border-color:#29aa93!important}#dashboard .block-welcome .progress{background:#eee} \ No newline at end of file diff --git a/www/theme/pink/style.css b/www/theme/pink/style.css index 0b600c188f..1ecdfb1b21 100644 --- a/www/theme/pink/style.css +++ b/www/theme/pink/style.css @@ -1,6 +1,6 @@ /*! - * ZUI: Zentao Theme - pink - v1.10.0 - 2023-02-09 + * ZUI: Zentao Theme - pink - v1.10.0 - 2023-02-24 * http://openzui.com - * GitHub: https://github.com/easysoft/zui.git + * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2023 cnezsoft.com; Licensed MIT - */a{color:#313c52}a:focus,a:hover{color:#a050d7}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#a050d7;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#8e2fcf;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#7a29b2;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#a050d7;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#8e2fcf;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#7a29b2;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#a050d7;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#a050d7;background-color:#ffebf8;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#a050d7;background-color:#ffc2ea;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#ff9edd;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ffebf8;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#a050d7;background-color:#ffc2ea;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#ff9edd;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ffebf8;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#a050d7}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#a050d7}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#882dc7}.label-primary.label-outline{color:#a050d7;background:0 0;border:1px solid #a050d7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#882dc7}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#cda3ea}.text-primary{color:#a050d7}.text-primary:hover{color:#882dc7}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#a050d7}a.bg-primary:hover{background-color:#882dc7}.hl-primary{background-color:#ffebf8}a.hl-primary:hover{background-color:#ffb8e6}.progress{background-color:#ffebf8;border-radius:3px}.progress-bar{color:#fff;background-color:#a050d7;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#a050d7;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)}.form-control:focus{border-color:#a050d7;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#a050d7;border-color:#a050d7}.switch input:focus+label{color:#a050d7}.switch input:focus+label:before{border-color:#a050d7;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #a050d7;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #a050d7}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#a050d7;border-color:#a050d7}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#a050d7;-webkit-box-shadow:0 0 8px #a050d7;box-shadow:0 0 8px #a050d7}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#a050d7}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#a050d7}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#f7889c}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#ffebf8}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#a050d7;border-color:#a050d7}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#f7889c;border-color:#f45874}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#f57088}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#f9a5b4}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#fab8c4}.navbar-inverse .navbar-toggle{border-color:#fab8c4}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#f57088}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#f56780}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#fab8c4}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#f45874}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#f9a5b4}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#fab8c4}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #fab8c4;-webkit-box-shadow:inset 0 -1px 0 #f45874;box-shadow:inset 0 -1px 0 #f45874}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#f4627c}.nav>li>a:focus,.nav>li>a:hover{color:#a050d7}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#a050d7}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#a050d7;border-color:#a050d7}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#a050d7;border-bottom-color:#a050d7}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #a050d7;box-shadow:inset 2px 0 0 #a050d7}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#a050d7;border-color:#a050d7}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#a050d7}.panel-primary>.panel-heading{color:#fff;background-color:#a050d7;border-color:#a050d7}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#a050d7}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#a050d7}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#ffebf8}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#a050d7!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#a050d7!important;border-bottom-left-radius:#a050d7!important}.chosen-container .chosen-results li.highlighted{background-color:#a050d7!important}.chosen-container-active .chosen-single{border-color:#a050d7!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#a050d7!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#a050d7!important;border-bottom-left-radius:#a050d7!important}.chosen-container.chosen-highlight-selected .result-selected{color:#a050d7;background:#ffebf8}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#a050d7;border-color:#a050d7}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#a050d7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#a050d7}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#a050d7}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#a050d7!important;border-color:#882dc7!important}.datetimepicker td.day.active:hover{background-color:#882dc7!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#a050d7!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)!important}.ke-menu-item-on{background-color:#a050d7!important}.ke-colorpicker-cell-on{background-color:#a050d7!important}.ke-input-text:focus{border-color:#a050d7!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#a050d7}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#ffebf8}.alert-primary hr{border-top-color:#ffc7ec}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#a050d7;border-color:#a050d7}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#ffebf8}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#a050d7}.tree-drag-holder{background-color:#ffebf8}.tree-menu li.active>a{color:#fff;background-color:#a050d7;border-color:#a050d7}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#f7889c}a.text-primary{color:#a050d7}.nav-primary>li.active>a{color:#c92d79}.nav-primary>li.active>a:hover{color:#c92d79}.bg-primary,.m-user-login{background:#f7889c -webkit-gradient(linear,right top,left top,from(#a050d7),to(#f7889c))!important;background:#f7889c -webkit-linear-gradient(right,#a050d7 0,#f7889c 100%)!important;background:#f7889c -o-linear-gradient(right,#a050d7 0,#f7889c 100%)!important;background:#f7889c linear-gradient(-90deg,#a050d7 0,#f7889c 100%)!important}.bg-primary-pure{color:#fff;background-color:#a050d7}.bg-primary-pale{color:#a050d7;background-color:#ffebf8}.bg-secondary{background:#f7889c}.alert-info{color:#a050d7;background:#ffebf8}.btn-primary{color:#fff;background-color:#a050d7;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(160,80,215,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#953bd2;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:#a050d7;border-color:transparent}.btn-secondary{color:#fff;background-color:#f7889c;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(247,136,156,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#f57088;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:#f7889c;border-color:transparent}.btn-info{color:#a050d7;background-color:#ffebf8;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#a050d7;background-color:rgba(255,235,248,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#ffd1ef;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(160,80,215,.3);background-color:#ffebf8;border-color:transparent}.btn-icon-left>.icon{color:#f7889c;background:#ffebf8}.btn-active-line{color:#a050d7}.btn-active-line:after{border-bottom-color:#a050d7}.btn-active-line:hover{color:#a050d7}.btn-active-text .text{color:#c92d79}.btn-active-text .text:after{border-bottom-color:#c92d79}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(160,80,215,.8)}.label-primary{background:#a050d7!important}.label-pale{background:#ffb8e6!important}.label-outline.label-primary{background:#ffebf8!important;border-color:rgba(160,80,215,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#a050d7;border-color:#a050d7}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#a050d7;-webkit-box-shadow:0 0 0 3px rgba(160,80,215,.2);box-shadow:0 0 0 3px rgba(160,80,215,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#a050d7}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#a050d7!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#a050d7!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#a050d7!important}.nav-tabs>li.active>a:before{background:#a050d7}.nav-tabs-primary>li.active>a{color:#a050d7!important}.panel-actions .btn.text-primary{color:#a050d7}.picker-focus .picker-selections{border-color:#a050d7;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)}.status-bars .bar{background:#a050d7}.status-bars-h .bar{background:#a050d7}.messagger-zt .messager-content>.icon{color:#a050d7}.tree li.active>a{color:#a050d7}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#a050d7}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#f7889c}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#ffebf8}.dropdown-submenu:hover>a:after{border-left-color:#a050d7}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#f7889c}.timeline>li>a:after,.timeline>li>div:after{background-color:#a050d7}.timeline>li.active:before{background-color:rgba(160,80,215,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#a050d7!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#a050d7!important}#mainHeader{background:#eb599f;border-top-color:#a050d7;border-bottom-color:#ffebf8}#searchGo{background-color:#f7889c}#searchGo:hover{background-color:#a050d7}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#a050d7}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#a050d7}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#a050d7}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#a050d7}.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 #a050d7}.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 #a050d7}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #a050d7}#sidebarHeader .title{color:#a050d7}#sidebar>.sidebar-toggle>.icon{background:#fde8ec}#main .querybox-toggle.querybox-opened{color:#a050d7}#contentNav .nav>li.active>a{color:#a050d7}#contentNav .nav>li.active>a:before{background:#a050d7}td.c-actions .btn{color:#f7889c}td.c-actions .btn:hover{color:#a050d7;background-color:#ffd1ef}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#a050d7;background:#ffebf8}.main-table table .btn-icon-left:hover>.icon{background:#ffebf8}.main-table tbody>tr:hover{background:#ffebf8}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#a050d7}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#fff5fc}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#fff5fc}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#a01c5d}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#4f1a74}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#a050d7}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#a050d7}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#a050d7}.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:#ffebf8}.table-nest-toggle:hover{color:#a050d7}.table-footer .checkbox-primary.checked label:after{border-color:#a050d7!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#b77ae0!important;border-color:#b77ae0!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#a050d7}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#a050d7;border-color:#a050d7}.article-content a{color:#a050d7}.article-content a:focus,.article-content a:hover{color:#f7889c}.list-group{overflow-y:auto}.list-group>a.selected{color:#ffebf8;background-color:#a050d7}.list-group>a.active{color:#a050d7;background-color:#ffebf8}.list-group>a.active:hover,.list-group>a:hover{background-color:#a050d7}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#a050d7}#swapper #dropMenu .tree li>.selected{color:#a050d7!important;background:#ffebf8!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#a050d7!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#a050d7!important;background:#ffebf8!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#a050d7!important}.release-line>li>a:hover:before{background-color:#ffebf8}.release-line>li>a:hover .title{color:#a050d7}.release-line>li.active>a:before{border-color:#a050d7}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#f7889c}#poweredBy .icon-zentao{color:#f7889c}#poweredBy a:hover{color:#a050d7}#poweredBy a:hover .icon-zentao{color:#a050d7}#poweredBy a.text-primary{color:#a050d7}#poweredBy a.text-primary:hover{color:#f7889c}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#a050d7!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#f7889c!important}.dynamic.active .dynamic-date:before{background-color:#f7889c!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#a050d7!important}.table td.has-child>.task-toggle:hover{color:#a050d7!important}#openTaskPage.open:hover,#task .task-nav{color:#a050d7!important;background:#ffebf8!important}#tasksProgress>.progress-bar{background:#a050d7!important}#tasksProgress .progress-text{color:#a050d7!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#a050d7!important;background:#ffebf8!important;border-left-color:#a050d7!important;-webkit-box-shadow:inset 4px 0 0 #a050d7!important;box-shadow:inset 4px 0 0 #a050d7!important}#copyProjectModal a:hover{border-color:#f7889c!important}#zeroTaskStory.checked{background:#ffebf8!important;border-color:#f7889c!important}.cols-list .col:hover{background:#ffebf8!important}.files-grid .actions,.files-grid .col:hover .file{background:#ffebf8!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#f7889c!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#f7889c!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#a050d7!important}#bars>li.active:after{background:#ffebf8!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#c92d79;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#a050d7}td.c-actions .btn{color:#a050d7}.main-table tbody>tr:hover{background:rgba(255,235,248,.8)}.main-table tbody>tr>td.c-name a{color:#a01c5d}.main-table tbody>tr>td.c-name a:hover{color:#c92d79}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#a050d7!important}.assigned-none{color:#c92d79!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#c92d79!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#c92d79!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#eb599f}#assigntomeBlock .nav>li.active>a{color:#c92d79}.consumedTotally{color:#a050d7;background:#ffebf8}#toggleFoldIcon .icon-border{border:1px solid #fbdeec}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#a050d7}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#f7889c}.nav-steps>ul>li.active>a:focus{background-color:#a050d7}.nav-steps>ul>li.active+li:after{border-left-color:#f7889c}.nav-steps>ul>li.active:hover+li:after{border-left-color:#a050d7}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#a050d7}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #a050d7;box-shadow:0 0 1px 1px #a050d7}.border-primary-hover:hover{border:1px solid #a050d7}.menu-hover-primary>li>a:hover{color:#c92d79!important;background-color:#fbdeec!important}.menu-active-primary>li.active>a{color:#a050d7!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#fbdeec!important}#mainHeader{background:#f7889c -webkit-gradient(linear,right top,left top,from(#a050d7),to(#f7889c));background:#f7889c -webkit-linear-gradient(right,#a050d7 0,#f7889c 100%);background:#f7889c -o-linear-gradient(right,#a050d7 0,#f7889c 100%);background:#f7889c linear-gradient(-90deg,#a050d7 0,#f7889c 100%);background-color:#f7889c} + */a{color:#313c52}a:focus,a:hover{color:#a050d7}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#a050d7;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#8e2fcf;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#7a29b2;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#a050d7;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#8e2fcf;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#7a29b2;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#a050d7;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#a050d7;background-color:#ffebf8;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#a050d7;background-color:#ffc2ea;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#ff9edd;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ffebf8;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#a050d7;background-color:#ffc2ea;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#ff9edd;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ffebf8;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#a050d7}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#a050d7}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#882dc7}.label-primary.label-outline{color:#a050d7;background:0 0;border:1px solid #a050d7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#882dc7}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#cda3ea}.text-primary{color:#a050d7}.text-primary:hover{color:#882dc7}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#a050d7}a.bg-primary:hover{background-color:#882dc7}.hl-primary{background-color:#ffebf8}a.hl-primary:hover{background-color:#ffb8e6}.progress{background-color:#ffebf8;border-radius:3px}.progress-bar{color:#fff;background-color:#a050d7;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#a050d7;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)}.form-control:focus{border-color:#a050d7;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#a050d7;border-color:#a050d7}.switch input:focus+label{color:#a050d7}.switch input:focus+label:before{border-color:#a050d7;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #a050d7;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #a050d7}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#a050d7;border-color:#a050d7}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#a050d7;-webkit-box-shadow:0 0 8px #a050d7;box-shadow:0 0 8px #a050d7}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#a050d7}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#a050d7}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#f7889c}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#ffebf8}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#a050d7;border-color:#a050d7}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#f7889c;border-color:#f45874}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#f57088}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#f9a5b4}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#fab8c4}.navbar-inverse .navbar-toggle{border-color:#fab8c4}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#f57088}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#f56780}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#fab8c4}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#f45874}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#f9a5b4}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#fab8c4}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #fab8c4;-webkit-box-shadow:inset 0 -1px 0 #f45874;box-shadow:inset 0 -1px 0 #f45874}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#f4627c}.nav>li>a:focus,.nav>li>a:hover{color:#a050d7}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#a050d7}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#a050d7;border-color:#a050d7}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#a050d7;border-bottom-color:#a050d7}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #a050d7;box-shadow:inset 2px 0 0 #a050d7}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#a050d7;border-color:#a050d7}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#a050d7}.panel-primary>.panel-heading{color:#fff;background-color:#a050d7;border-color:#a050d7}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#a050d7}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#a050d7}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#ffebf8}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#a050d7!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#a050d7!important;border-bottom-left-radius:#a050d7!important}.chosen-container .chosen-results li.highlighted{background-color:#a050d7!important}.chosen-container-active .chosen-single{border-color:#a050d7!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#a050d7!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#a050d7!important;border-bottom-left-radius:#a050d7!important}.chosen-container.chosen-highlight-selected .result-selected{color:#a050d7;background:#ffebf8}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#a050d7;border-color:#a050d7}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#a050d7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#a050d7}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#a050d7}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#a050d7!important;border-color:#882dc7!important}.datetimepicker td.day.active:hover{background-color:#882dc7!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#a050d7!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)!important}.ke-menu-item-on{background-color:#a050d7!important}.ke-colorpicker-cell-on{background-color:#a050d7!important}.ke-input-text:focus{border-color:#a050d7!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#a050d7}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#ffebf8}.alert-primary hr{border-top-color:#ffc7ec}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#a050d7;border-color:#a050d7}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#ffebf8}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#a050d7}.tree-drag-holder{background-color:#ffebf8}.tree-menu li.active>a{color:#fff;background-color:#a050d7;border-color:#a050d7}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#f7889c}a.text-primary{color:#a050d7}.nav-primary>li.active>a{color:#c92d79}.nav-primary>li.active>a:hover{color:#c92d79}.bg-primary,.m-user-login{background:#f7889c -webkit-gradient(linear,right top,left top,from(#a050d7),to(#f7889c))!important;background:#f7889c -webkit-linear-gradient(right,#a050d7 0,#f7889c 100%)!important;background:#f7889c -o-linear-gradient(right,#a050d7 0,#f7889c 100%)!important;background:#f7889c linear-gradient(-90deg,#a050d7 0,#f7889c 100%)!important}.bg-primary-pure{color:#fff;background-color:#a050d7}.bg-primary-pale{color:#a050d7;background-color:#ffebf8}.bg-secondary{background:#f7889c}.alert-info{color:#a050d7;background:#ffebf8}.btn-primary{color:#fff;background-color:#a050d7;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(160,80,215,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#953bd2;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:#a050d7;border-color:transparent}.btn-secondary{color:#fff;background-color:#f7889c;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(247,136,156,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#f57088;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:#f7889c;border-color:transparent}.btn-info{color:#a050d7;background-color:#ffebf8;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#a050d7;background-color:rgba(255,235,248,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#ffd1ef;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(160,80,215,.3);background-color:#ffebf8;border-color:transparent}.btn-icon-left>.icon{color:#f7889c;background:#ffebf8}.btn-active-line{color:#a050d7}.btn-active-line:after{border-bottom-color:#a050d7}.btn-active-line:hover{color:#a050d7}.btn-active-text .text{color:#c92d79}.btn-active-text .text:after{border-bottom-color:#c92d79}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(160,80,215,.8)}.label-primary{background:#a050d7!important}.label-pale{background:#ffb8e6!important}.label-outline.label-primary{background:#ffebf8!important;border-color:rgba(160,80,215,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#a050d7;border-color:#a050d7}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#a050d7;-webkit-box-shadow:0 0 0 3px rgba(160,80,215,.2);box-shadow:0 0 0 3px rgba(160,80,215,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#a050d7}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#a050d7!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#a050d7!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#a050d7!important}.nav-tabs>li.active>a:before{background:#a050d7}.nav-tabs-primary>li.active>a{color:#a050d7!important}.panel-actions .btn.text-primary{color:#a050d7}.picker-focus .picker-selections{border-color:#a050d7;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(160,80,215,.6)}.status-bars .bar{background:#a050d7}.status-bars-h .bar{background:#a050d7}.messagger-zt .messager-content>.icon{color:#a050d7}.tree li.active>a{color:#a050d7}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#a050d7}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#f7889c}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#ffebf8}.dropdown-submenu:hover>a:after{border-left-color:#a050d7}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#f7889c}.timeline>li>a:after,.timeline>li>div:after{background-color:#a050d7}.timeline>li.active:before{background-color:rgba(160,80,215,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#a050d7!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#a050d7!important}#mainHeader{background:#eb599f;border-top-color:#a050d7;border-bottom-color:#ffebf8}#searchGo{background-color:#f7889c}#searchGo:hover{background-color:#a050d7}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#a050d7}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#a050d7}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#a050d7}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#a050d7}.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 #a050d7}.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 #a050d7}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #a050d7}#sidebarHeader .title{color:#a050d7}#sidebar>.sidebar-toggle>.icon{background:#fde8ec}#main .querybox-toggle.querybox-opened{color:#a050d7}#contentNav .nav>li.active>a{color:#a050d7}#contentNav .nav>li.active>a:before{background:#a050d7}td.c-actions .btn{color:#f7889c}td.c-actions .btn:hover{color:#a050d7;background-color:#ffd1ef}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#a050d7;background:#ffebf8}.main-table table .btn-icon-left:hover>.icon{background:#ffebf8}.main-table tbody>tr:hover{background:#ffebf8}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#a050d7}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#fff5fc}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#fff5fc}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#a01c5d}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#4f1a74}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#a050d7}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#a050d7}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#a050d7}.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:#ffebf8}.table-nest-toggle:hover{color:#a050d7}.table-footer .checkbox-primary.checked label:after{border-color:#a050d7!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#b77ae0!important;border-color:#b77ae0!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#a050d7}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#a050d7;border-color:#a050d7}.article-content a{color:#a050d7}.article-content a:focus,.article-content a:hover{color:#f7889c}.list-group{overflow-y:auto}.list-group>a.selected{color:#ffebf8;background-color:#a050d7}.list-group>a.active{color:#a050d7;background-color:#ffebf8}.list-group>a.active:hover,.list-group>a:hover{background-color:#a050d7}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#a050d7}#swapper #dropMenu .tree li>.selected{color:#a050d7!important;background:#ffebf8!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#a050d7!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#a050d7!important;background:#ffebf8!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#a050d7!important}.release-line>li>a:hover:before{background-color:#ffebf8}.release-line>li>a:hover .title{color:#a050d7}.release-line>li.active>a:before{border-color:#a050d7}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#f7889c}#poweredBy .icon-zentao{color:#f7889c}#poweredBy a:hover{color:#a050d7}#poweredBy a:hover .icon-zentao{color:#a050d7}#poweredBy a.text-primary{color:#a050d7}#poweredBy a.text-primary:hover{color:#f7889c}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#a050d7!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#f7889c!important}.dynamic.active .dynamic-date:before{background-color:#f7889c!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#a050d7!important}.table td.has-child>.task-toggle:hover{color:#a050d7!important}#openTaskPage.open:hover,#task .task-nav{color:#a050d7!important;background:#ffebf8!important}#tasksProgress>.progress-bar{background:#a050d7!important}#tasksProgress .progress-text{color:#a050d7!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#a050d7!important;background:#ffebf8!important;border-left-color:#a050d7!important;-webkit-box-shadow:inset 4px 0 0 #a050d7!important;box-shadow:inset 4px 0 0 #a050d7!important}#copyProjectModal a:hover{border-color:#f7889c!important}#zeroTaskStory.checked{background:#ffebf8!important;border-color:#f7889c!important}.cols-list .col:hover{background:#ffebf8!important}.files-grid .actions,.files-grid .col:hover .file{background:#ffebf8!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#f7889c!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#f7889c!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#a050d7!important}#bars>li.active:after{background:#ffebf8!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#c92d79;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#a050d7}td.c-actions .btn{color:#a050d7}.main-table tbody>tr:hover{background:rgba(255,235,248,.8)}.main-table tbody>tr>td.c-name a{color:#a01c5d}.main-table tbody>tr>td.c-name a:hover{color:#c92d79}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#a050d7!important}.assigned-none{color:#c92d79!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#c92d79!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#c92d79!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#eb599f}#assigntomeBlock .nav>li.active>a{color:#c92d79}.consumedTotally{color:#a050d7;background:#ffebf8}#toggleFoldIcon .icon-border{border:1px solid #fbdeec}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#a050d7}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#f7889c}.nav-steps>ul>li.active>a:focus{background-color:#a050d7}.nav-steps>ul>li.active+li:after{border-left-color:#f7889c}.nav-steps>ul>li.active:hover+li:after{border-left-color:#a050d7}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#a050d7}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #a050d7;box-shadow:0 0 1px 1px #a050d7}.border-primary-hover:hover{border:1px solid #a050d7}.menu-hover-primary>li>a:hover{color:#c92d79!important;background-color:#fbdeec!important}.menu-active-primary>li.active>a{color:#a050d7!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#fbdeec!important}.form-active-primary .active .label,.form-active-primary .hover .label{color:#a050d7!important}.form-active-primary .active .form-control,.form-active-primary .hover .form-control{-webkit-box-shadow:0 0 1px 1px #a050d7;box-shadow:0 0 1px 1px #a050d7}#mainHeader{background:#f7889c -webkit-gradient(linear,right top,left top,from(#a050d7),to(#f7889c));background:#f7889c -webkit-linear-gradient(right,#a050d7 0,#f7889c 100%);background:#f7889c -o-linear-gradient(right,#a050d7 0,#f7889c 100%);background:#f7889c linear-gradient(-90deg,#a050d7 0,#f7889c 100%);background-color:#f7889c} \ No newline at end of file diff --git a/www/theme/purple/style.css b/www/theme/purple/style.css index 5d8620464d..9ee49423ec 100644 --- a/www/theme/purple/style.css +++ b/www/theme/purple/style.css @@ -1,6 +1,6 @@ /*! - * ZUI: Zentao Theme - purple - v1.10.0 - 2023-02-09 + * ZUI: Zentao Theme - purple - v1.10.0 - 2023-02-24 * http://openzui.com - * GitHub: https://github.com/easysoft/zui.git + * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2023 cnezsoft.com; Licensed MIT - */a{color:#313c52}a:focus,a:hover{color:#3123ae}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#3123ae;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#271c8c;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1f166e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#3123ae;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#271c8c;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1f166e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#3123ae;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#3123ae;background-color:#f2eafc;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#3123ae;background-color:#dcc6f7;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#c9a7f2;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#f2eafc;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#3123ae;background-color:#dcc6f7;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#c9a7f2;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#f2eafc;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#3123ae}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#3123ae}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#251a84}.label-primary.label-outline{color:#3123ae;background:0 0;border:1px solid #3123ae}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#251a84}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#6759de}.text-primary{color:#3123ae}.text-primary:hover{color:#251a84}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#3123ae}a.bg-primary:hover{background-color:#251a84}.hl-primary{background-color:#f2eafc}a.hl-primary:hover{background-color:#d6bdf6}.progress{background-color:#f2eafc;border-radius:3px}.progress-bar{color:#fff;background-color:#3123ae;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#3123ae;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)}.form-control:focus{border-color:#3123ae;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#3123ae;border-color:#3123ae}.switch input:focus+label{color:#3123ae}.switch input:focus+label:before{border-color:#3123ae;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #3123ae;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #3123ae}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#3123ae;border-color:#3123ae}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#3123ae;-webkit-box-shadow:0 0 8px #3123ae;box-shadow:0 0 8px #3123ae}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#3123ae}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#3123ae}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#9958dc}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#f2eafc}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#3123ae;border-color:#3123ae}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#9958dc;border-color:#7f2ed3}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#8c43d8}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#a871e1}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#b382e5}.navbar-inverse .navbar-toggle{border-color:#b382e5}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#8c43d8}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#873ad6}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#b382e5}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#7f2ed3}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#a871e1}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#b382e5}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #b382e5;-webkit-box-shadow:inset 0 -1px 0 #7f2ed3;box-shadow:inset 0 -1px 0 #7f2ed3}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#8436d5}.nav>li>a:focus,.nav>li>a:hover{color:#3123ae}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#3123ae}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#3123ae;border-color:#3123ae}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#3123ae;border-bottom-color:#3123ae}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #3123ae;box-shadow:inset 2px 0 0 #3123ae}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#3123ae;border-color:#3123ae}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#3123ae}.panel-primary>.panel-heading{color:#fff;background-color:#3123ae;border-color:#3123ae}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#3123ae}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#3123ae}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f2eafc}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#3123ae!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#3123ae!important;border-bottom-left-radius:#3123ae!important}.chosen-container .chosen-results li.highlighted{background-color:#3123ae!important}.chosen-container-active .chosen-single{border-color:#3123ae!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#3123ae!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#3123ae!important;border-bottom-left-radius:#3123ae!important}.chosen-container.chosen-highlight-selected .result-selected{color:#3123ae;background:#f2eafc}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#3123ae;border-color:#3123ae}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#3123ae}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#3123ae}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#3123ae}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#3123ae!important;border-color:#251a84!important}.datetimepicker td.day.active:hover{background-color:#251a84!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#3123ae!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)!important}.ke-menu-item-on{background-color:#3123ae!important}.ke-colorpicker-cell-on{background-color:#3123ae!important}.ke-input-text:focus{border-color:#3123ae!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#3123ae}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#f2eafc}.alert-primary hr{border-top-color:#dfcbf8}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#3123ae;border-color:#3123ae}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#f2eafc}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#3123ae}.tree-drag-holder{background-color:#f2eafc}.tree-menu li.active>a{color:#fff;background-color:#3123ae;border-color:#3123ae}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#9958dc}a.text-primary{color:#3123ae}.nav-primary>li.active>a{color:#7055df}.nav-primary>li.active>a:hover{color:#7055df}.bg-primary,.m-user-login{background:#9958dc -webkit-gradient(linear,right top,left top,from(#3123ae),to(#9958dc))!important;background:#9958dc -webkit-linear-gradient(right,#3123ae 0,#9958dc 100%)!important;background:#9958dc -o-linear-gradient(right,#3123ae 0,#9958dc 100%)!important;background:#9958dc linear-gradient(-90deg,#3123ae 0,#9958dc 100%)!important}.bg-primary-pure{color:#fff;background-color:#3123ae}.bg-primary-pale{color:#3123ae;background-color:#f2eafc}.bg-secondary{background:#9958dc}.alert-info{color:#3123ae;background:#f2eafc}.btn-primary{color:#fff;background-color:#3123ae;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(49,35,174,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#2b1f99;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:#3123ae;border-color:transparent}.btn-secondary{color:#fff;background-color:#9958dc;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(153,88,220,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#8c43d8;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:#9958dc;border-color:transparent}.btn-info{color:#3123ae;background-color:#f2eafc;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#3123ae;background-color:rgba(242,234,252,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#e4d4f9;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(49,35,174,.3);background-color:#f2eafc;border-color:transparent}.btn-icon-left>.icon{color:#9958dc;background:#f2eafc}.btn-active-line{color:#3123ae}.btn-active-line:after{border-bottom-color:#3123ae}.btn-active-line:hover{color:#3123ae}.btn-active-text .text{color:#7055df}.btn-active-text .text:after{border-bottom-color:#7055df}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(49,35,174,.8)}.label-primary{background:#3123ae!important}.label-pale{background:#d6bdf6!important}.label-outline.label-primary{background:#f2eafc!important;border-color:rgba(49,35,174,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#3123ae;border-color:#3123ae}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#3123ae;-webkit-box-shadow:0 0 0 3px rgba(49,35,174,.2);box-shadow:0 0 0 3px rgba(49,35,174,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#3123ae}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#3123ae!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#3123ae!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#3123ae!important}.nav-tabs>li.active>a:before{background:#3123ae}.nav-tabs-primary>li.active>a{color:#3123ae!important}.panel-actions .btn.text-primary{color:#3123ae}.picker-focus .picker-selections{border-color:#3123ae;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)}.status-bars .bar{background:#3123ae}.status-bars-h .bar{background:#3123ae}.messagger-zt .messager-content>.icon{color:#3123ae}.tree li.active>a{color:#3123ae}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#3123ae}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#9958dc}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#f2eafc}.dropdown-submenu:hover>a:after{border-left-color:#3123ae}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#9958dc}.timeline>li>a:after,.timeline>li>div:after{background-color:#3123ae}.timeline>li.active:before{background-color:rgba(49,35,174,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#3123ae!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#3123ae!important}#mainHeader{background:#8a6ff5;border-top-color:#3123ae;border-bottom-color:#f2eafc}#searchGo{background-color:#9958dc}#searchGo:hover{background-color:#3123ae}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#3123ae}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#3123ae}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#3123ae}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#3123ae}.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 #3123ae}.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 #3123ae}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #3123ae}#sidebarHeader .title{color:#3123ae}#sidebar>.sidebar-toggle>.icon{background:#cdacee}#main .querybox-toggle.querybox-opened{color:#3123ae}#contentNav .nav>li.active>a{color:#3123ae}#contentNav .nav>li.active>a:before{background:#3123ae}td.c-actions .btn{color:#9958dc}td.c-actions .btn:hover{color:#3123ae;background-color:#e4d4f9}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#3123ae;background:#f2eafc}.main-table table .btn-icon-left:hover>.icon{background:#f2eafc}.main-table tbody>tr:hover{background:#f2eafc}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#3123ae}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f8f3fd}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f8f3fd}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#513baa}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#0d092f}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#3123ae}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#3123ae}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#3123ae}.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:#f2eafc}.table-nest-toggle:hover{color:#3123ae}.table-footer .checkbox-primary.checked label:after{border-color:#3123ae!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#402fd5!important;border-color:#402fd5!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#3123ae}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#3123ae;border-color:#3123ae}.article-content a{color:#3123ae}.article-content a:focus,.article-content a:hover{color:#9958dc}.list-group{overflow-y:auto}.list-group>a.selected{color:#f2eafc;background-color:#3123ae}.list-group>a.active{color:#3123ae;background-color:#f2eafc}.list-group>a.active:hover,.list-group>a:hover{background-color:#3123ae}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#3123ae}#swapper #dropMenu .tree li>.selected{color:#3123ae!important;background:#f2eafc!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#3123ae!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#3123ae!important;background:#f2eafc!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#3123ae!important}.release-line>li>a:hover:before{background-color:#f2eafc}.release-line>li>a:hover .title{color:#3123ae}.release-line>li.active>a:before{border-color:#3123ae}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#9958dc}#poweredBy .icon-zentao{color:#9958dc}#poweredBy a:hover{color:#3123ae}#poweredBy a:hover .icon-zentao{color:#3123ae}#poweredBy a.text-primary{color:#3123ae}#poweredBy a.text-primary:hover{color:#9958dc}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#3123ae!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#9958dc!important}.dynamic.active .dynamic-date:before{background-color:#9958dc!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#3123ae!important}.table td.has-child>.task-toggle:hover{color:#3123ae!important}#openTaskPage.open:hover,#task .task-nav{color:#3123ae!important;background:#f2eafc!important}#tasksProgress>.progress-bar{background:#3123ae!important}#tasksProgress .progress-text{color:#3123ae!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#3123ae!important;background:#f2eafc!important;border-left-color:#3123ae!important;-webkit-box-shadow:inset 4px 0 0 #3123ae!important;box-shadow:inset 4px 0 0 #3123ae!important}#copyProjectModal a:hover{border-color:#9958dc!important}#zeroTaskStory.checked{background:#f2eafc!important;border-color:#9958dc!important}.cols-list .col:hover{background:#f2eafc!important}.files-grid .actions,.files-grid .col:hover .file{background:#f2eafc!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#9958dc!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#9958dc!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#3123ae!important}#bars>li.active:after{background:#f2eafc!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#7055df;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#3123ae}td.c-actions .btn{color:#3123ae}.main-table tbody>tr:hover{background:rgba(242,234,252,.8)}.main-table tbody>tr>td.c-name a{color:#513baa}.main-table tbody>tr>td.c-name a:hover{color:#7055df}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#3123ae!important}.assigned-none{color:#7055df!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#7055df!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#7055df!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#8a6ff5}#assigntomeBlock .nav>li.active>a{color:#7055df}.consumedTotally{color:#3123ae;background:#f2eafc}#toggleFoldIcon .icon-border{border:1px solid #e4dff7}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#3123ae}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#9958dc}.nav-steps>ul>li.active>a:focus{background-color:#3123ae}.nav-steps>ul>li.active+li:after{border-left-color:#9958dc}.nav-steps>ul>li.active:hover+li:after{border-left-color:#3123ae}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#3123ae}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #3123ae;box-shadow:0 0 1px 1px #3123ae}.border-primary-hover:hover{border:1px solid #3123ae}.menu-hover-primary>li>a:hover{color:#7055df!important;background-color:#e4dff7!important}.menu-active-primary>li.active>a{color:#3123ae!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#e4dff7!important}#mainHeader{background:#9958dc -webkit-gradient(linear,right top,left top,from(#3123ae),to(#9958dc));background:#9958dc -webkit-linear-gradient(right,#3123ae 0,#9958dc 100%);background:#9958dc -o-linear-gradient(right,#3123ae 0,#9958dc 100%);background:#9958dc linear-gradient(-90deg,#3123ae 0,#9958dc 100%);background-color:#9958dc} + */a{color:#313c52}a:focus,a:hover{color:#3123ae}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#3123ae;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#271c8c;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1f166e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#3123ae;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#271c8c;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#1f166e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#3123ae;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#3123ae;background-color:#f2eafc;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#3123ae;background-color:#dcc6f7;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#c9a7f2;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#f2eafc;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#3123ae;background-color:#dcc6f7;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#c9a7f2;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#f2eafc;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#3123ae}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#3123ae}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#251a84}.label-primary.label-outline{color:#3123ae;background:0 0;border:1px solid #3123ae}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#251a84}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#6759de}.text-primary{color:#3123ae}.text-primary:hover{color:#251a84}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#3123ae}a.bg-primary:hover{background-color:#251a84}.hl-primary{background-color:#f2eafc}a.hl-primary:hover{background-color:#d6bdf6}.progress{background-color:#f2eafc;border-radius:3px}.progress-bar{color:#fff;background-color:#3123ae;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#3123ae;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)}.form-control:focus{border-color:#3123ae;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#3123ae;border-color:#3123ae}.switch input:focus+label{color:#3123ae}.switch input:focus+label:before{border-color:#3123ae;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #3123ae;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #3123ae}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#3123ae;border-color:#3123ae}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#3123ae;-webkit-box-shadow:0 0 8px #3123ae;box-shadow:0 0 8px #3123ae}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#3123ae}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#3123ae}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#9958dc}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#f2eafc}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#3123ae;border-color:#3123ae}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#9958dc;border-color:#7f2ed3}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#8c43d8}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#a871e1}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#b382e5}.navbar-inverse .navbar-toggle{border-color:#b382e5}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#8c43d8}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#873ad6}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#b382e5}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#7f2ed3}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#a871e1}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#b382e5}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #b382e5;-webkit-box-shadow:inset 0 -1px 0 #7f2ed3;box-shadow:inset 0 -1px 0 #7f2ed3}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#8436d5}.nav>li>a:focus,.nav>li>a:hover{color:#3123ae}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#3123ae}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#3123ae;border-color:#3123ae}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#3123ae;border-bottom-color:#3123ae}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #3123ae;box-shadow:inset 2px 0 0 #3123ae}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#3123ae;border-color:#3123ae}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#3123ae}.panel-primary>.panel-heading{color:#fff;background-color:#3123ae;border-color:#3123ae}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#3123ae}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#3123ae}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f2eafc}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#3123ae!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#3123ae!important;border-bottom-left-radius:#3123ae!important}.chosen-container .chosen-results li.highlighted{background-color:#3123ae!important}.chosen-container-active .chosen-single{border-color:#3123ae!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#3123ae!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#3123ae!important;border-bottom-left-radius:#3123ae!important}.chosen-container.chosen-highlight-selected .result-selected{color:#3123ae;background:#f2eafc}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#3123ae;border-color:#3123ae}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#3123ae}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#3123ae}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#3123ae}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#3123ae!important;border-color:#251a84!important}.datetimepicker td.day.active:hover{background-color:#251a84!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#3123ae!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)!important}.ke-menu-item-on{background-color:#3123ae!important}.ke-colorpicker-cell-on{background-color:#3123ae!important}.ke-input-text:focus{border-color:#3123ae!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#3123ae}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#f2eafc}.alert-primary hr{border-top-color:#dfcbf8}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#3123ae;border-color:#3123ae}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#f2eafc}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#3123ae}.tree-drag-holder{background-color:#f2eafc}.tree-menu li.active>a{color:#fff;background-color:#3123ae;border-color:#3123ae}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#9958dc}a.text-primary{color:#3123ae}.nav-primary>li.active>a{color:#7055df}.nav-primary>li.active>a:hover{color:#7055df}.bg-primary,.m-user-login{background:#9958dc -webkit-gradient(linear,right top,left top,from(#3123ae),to(#9958dc))!important;background:#9958dc -webkit-linear-gradient(right,#3123ae 0,#9958dc 100%)!important;background:#9958dc -o-linear-gradient(right,#3123ae 0,#9958dc 100%)!important;background:#9958dc linear-gradient(-90deg,#3123ae 0,#9958dc 100%)!important}.bg-primary-pure{color:#fff;background-color:#3123ae}.bg-primary-pale{color:#3123ae;background-color:#f2eafc}.bg-secondary{background:#9958dc}.alert-info{color:#3123ae;background:#f2eafc}.btn-primary{color:#fff;background-color:#3123ae;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(49,35,174,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#2b1f99;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:#3123ae;border-color:transparent}.btn-secondary{color:#fff;background-color:#9958dc;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(153,88,220,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#8c43d8;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:#9958dc;border-color:transparent}.btn-info{color:#3123ae;background-color:#f2eafc;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#3123ae;background-color:rgba(242,234,252,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#e4d4f9;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(49,35,174,.3);background-color:#f2eafc;border-color:transparent}.btn-icon-left>.icon{color:#9958dc;background:#f2eafc}.btn-active-line{color:#3123ae}.btn-active-line:after{border-bottom-color:#3123ae}.btn-active-line:hover{color:#3123ae}.btn-active-text .text{color:#7055df}.btn-active-text .text:after{border-bottom-color:#7055df}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(49,35,174,.8)}.label-primary{background:#3123ae!important}.label-pale{background:#d6bdf6!important}.label-outline.label-primary{background:#f2eafc!important;border-color:rgba(49,35,174,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#3123ae;border-color:#3123ae}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#3123ae;-webkit-box-shadow:0 0 0 3px rgba(49,35,174,.2);box-shadow:0 0 0 3px rgba(49,35,174,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#3123ae}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#3123ae!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#3123ae!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#3123ae!important}.nav-tabs>li.active>a:before{background:#3123ae}.nav-tabs-primary>li.active>a{color:#3123ae!important}.panel-actions .btn.text-primary{color:#3123ae}.picker-focus .picker-selections{border-color:#3123ae;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(49,35,174,.6)}.status-bars .bar{background:#3123ae}.status-bars-h .bar{background:#3123ae}.messagger-zt .messager-content>.icon{color:#3123ae}.tree li.active>a{color:#3123ae}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#3123ae}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#9958dc}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#f2eafc}.dropdown-submenu:hover>a:after{border-left-color:#3123ae}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#9958dc}.timeline>li>a:after,.timeline>li>div:after{background-color:#3123ae}.timeline>li.active:before{background-color:rgba(49,35,174,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#3123ae!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#3123ae!important}#mainHeader{background:#8a6ff5;border-top-color:#3123ae;border-bottom-color:#f2eafc}#searchGo{background-color:#9958dc}#searchGo:hover{background-color:#3123ae}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#3123ae}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#3123ae}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#3123ae}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#3123ae}.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 #3123ae}.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 #3123ae}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #3123ae}#sidebarHeader .title{color:#3123ae}#sidebar>.sidebar-toggle>.icon{background:#cdacee}#main .querybox-toggle.querybox-opened{color:#3123ae}#contentNav .nav>li.active>a{color:#3123ae}#contentNav .nav>li.active>a:before{background:#3123ae}td.c-actions .btn{color:#9958dc}td.c-actions .btn:hover{color:#3123ae;background-color:#e4d4f9}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#3123ae;background:#f2eafc}.main-table table .btn-icon-left:hover>.icon{background:#f2eafc}.main-table tbody>tr:hover{background:#f2eafc}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#3123ae}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#f8f3fd}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f8f3fd}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#513baa}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#0d092f}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#3123ae}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#3123ae}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#3123ae}.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:#f2eafc}.table-nest-toggle:hover{color:#3123ae}.table-footer .checkbox-primary.checked label:after{border-color:#3123ae!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#402fd5!important;border-color:#402fd5!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#3123ae}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#3123ae;border-color:#3123ae}.article-content a{color:#3123ae}.article-content a:focus,.article-content a:hover{color:#9958dc}.list-group{overflow-y:auto}.list-group>a.selected{color:#f2eafc;background-color:#3123ae}.list-group>a.active{color:#3123ae;background-color:#f2eafc}.list-group>a.active:hover,.list-group>a:hover{background-color:#3123ae}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#3123ae}#swapper #dropMenu .tree li>.selected{color:#3123ae!important;background:#f2eafc!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#3123ae!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#3123ae!important;background:#f2eafc!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#3123ae!important}.release-line>li>a:hover:before{background-color:#f2eafc}.release-line>li>a:hover .title{color:#3123ae}.release-line>li.active>a:before{border-color:#3123ae}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#9958dc}#poweredBy .icon-zentao{color:#9958dc}#poweredBy a:hover{color:#3123ae}#poweredBy a:hover .icon-zentao{color:#3123ae}#poweredBy a.text-primary{color:#3123ae}#poweredBy a.text-primary:hover{color:#9958dc}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#3123ae!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#9958dc!important}.dynamic.active .dynamic-date:before{background-color:#9958dc!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#3123ae!important}.table td.has-child>.task-toggle:hover{color:#3123ae!important}#openTaskPage.open:hover,#task .task-nav{color:#3123ae!important;background:#f2eafc!important}#tasksProgress>.progress-bar{background:#3123ae!important}#tasksProgress .progress-text{color:#3123ae!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#3123ae!important;background:#f2eafc!important;border-left-color:#3123ae!important;-webkit-box-shadow:inset 4px 0 0 #3123ae!important;box-shadow:inset 4px 0 0 #3123ae!important}#copyProjectModal a:hover{border-color:#9958dc!important}#zeroTaskStory.checked{background:#f2eafc!important;border-color:#9958dc!important}.cols-list .col:hover{background:#f2eafc!important}.files-grid .actions,.files-grid .col:hover .file{background:#f2eafc!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#9958dc!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#9958dc!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#3123ae!important}#bars>li.active:after{background:#f2eafc!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#7055df;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#3123ae}td.c-actions .btn{color:#3123ae}.main-table tbody>tr:hover{background:rgba(242,234,252,.8)}.main-table tbody>tr>td.c-name a{color:#513baa}.main-table tbody>tr>td.c-name a:hover{color:#7055df}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#3123ae!important}.assigned-none{color:#7055df!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#7055df!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#7055df!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#8a6ff5}#assigntomeBlock .nav>li.active>a{color:#7055df}.consumedTotally{color:#3123ae;background:#f2eafc}#toggleFoldIcon .icon-border{border:1px solid #e4dff7}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#3123ae}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#9958dc}.nav-steps>ul>li.active>a:focus{background-color:#3123ae}.nav-steps>ul>li.active+li:after{border-left-color:#9958dc}.nav-steps>ul>li.active:hover+li:after{border-left-color:#3123ae}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#3123ae}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #3123ae;box-shadow:0 0 1px 1px #3123ae}.border-primary-hover:hover{border:1px solid #3123ae}.menu-hover-primary>li>a:hover{color:#7055df!important;background-color:#e4dff7!important}.menu-active-primary>li.active>a{color:#3123ae!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#e4dff7!important}.form-active-primary .active .label,.form-active-primary .hover .label{color:#3123ae!important}.form-active-primary .active .form-control,.form-active-primary .hover .form-control{-webkit-box-shadow:0 0 1px 1px #3123ae;box-shadow:0 0 1px 1px #3123ae}#mainHeader{background:#9958dc -webkit-gradient(linear,right top,left top,from(#3123ae),to(#9958dc));background:#9958dc -webkit-linear-gradient(right,#3123ae 0,#9958dc 100%);background:#9958dc -o-linear-gradient(right,#3123ae 0,#9958dc 100%);background:#9958dc linear-gradient(-90deg,#3123ae 0,#9958dc 100%);background-color:#9958dc} \ No newline at end of file diff --git a/www/theme/red/style.css b/www/theme/red/style.css index 0b4e5d4edf..2bcdc0f31e 100644 --- a/www/theme/red/style.css +++ b/www/theme/red/style.css @@ -1,6 +1,6 @@ /*! - * ZUI: Zentao Theme - red - v1.10.0 - 2023-02-09 + * ZUI: Zentao Theme - red - v1.10.0 - 2023-02-24 * http://openzui.com - * GitHub: https://github.com/easysoft/zui.git + * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2023 cnezsoft.com; Licensed MIT - */a{color:#313c52}a:focus,a:hover{color:#e62340}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#e62340;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#c91731;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#a9132a;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#e62340;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#c91731;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#a9132a;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#e62340;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#e62340;background-color:#fceaea;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#e62340;background-color:#f7c6c6;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#f2a7a7;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fceaea;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#e62340;background-color:#f7c6c6;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#f2a7a7;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fceaea;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#e62340}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#e62340}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#c0162f}.label-primary.label-outline{color:#e62340;background:0 0;border:1px solid #e62340}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#c0162f}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#f07f90}.text-primary{color:#e62340}.text-primary:hover{color:#c0162f}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#e62340}a.bg-primary:hover{background-color:#c0162f}.hl-primary{background-color:#fceaea}a.hl-primary:hover{background-color:#f6bdbd}.progress{background-color:#fceaea;border-radius:3px}.progress-bar{color:#fff;background-color:#e62340;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#e62340;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)}.form-control:focus{border-color:#e62340;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#e62340;border-color:#e62340}.switch input:focus+label{color:#e62340}.switch input:focus+label:before{border-color:#e62340;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #e62340;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #e62340}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#e62340;border-color:#e62340}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#e62340;-webkit-box-shadow:0 0 8px #e62340;box-shadow:0 0 8px #e62340}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#e62340}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#e62340}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#f5515f}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#fceaea}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#e62340;border-color:#e62340}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#f5515f;border-color:#f22133}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#f43949}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#f76e7a}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#f8818b}.navbar-inverse .navbar-toggle{border-color:#f8818b}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#f43949}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#f32f40}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#f8818b}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#f22133}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#f76e7a}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#f8818b}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #f8818b;-webkit-box-shadow:inset 0 -1px 0 #f22133;box-shadow:inset 0 -1px 0 #f22133}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#f32a3c}.nav>li>a:focus,.nav>li>a:hover{color:#e62340}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#e62340}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#e62340;border-color:#e62340}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#e62340;border-bottom-color:#e62340}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #e62340;box-shadow:inset 2px 0 0 #e62340}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#e62340;border-color:#e62340}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#e62340}.panel-primary>.panel-heading{color:#fff;background-color:#e62340;border-color:#e62340}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#e62340}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#e62340}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#fceaea}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#e62340!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#e62340!important;border-bottom-left-radius:#e62340!important}.chosen-container .chosen-results li.highlighted{background-color:#e62340!important}.chosen-container-active .chosen-single{border-color:#e62340!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#e62340!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#e62340!important;border-bottom-left-radius:#e62340!important}.chosen-container.chosen-highlight-selected .result-selected{color:#e62340;background:#fceaea}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#e62340;border-color:#e62340}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e62340}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#e62340}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#e62340}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#e62340!important;border-color:#c0162f!important}.datetimepicker td.day.active:hover{background-color:#c0162f!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#e62340!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)!important}.ke-menu-item-on{background-color:#e62340!important}.ke-colorpicker-cell-on{background-color:#e62340!important}.ke-input-text:focus{border-color:#e62340!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#e62340}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#fceaea}.alert-primary hr{border-top-color:#f8cbcb}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#e62340;border-color:#e62340}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#fceaea}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#e62340}.tree-drag-holder{background-color:#fceaea}.tree-menu li.active>a{color:#fff;background-color:#e62340;border-color:#e62340}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#f5515f}a.text-primary{color:#e62340}.nav-primary>li.active>a{color:#fb2b2b}.nav-primary>li.active>a:hover{color:#fb2b2b}.bg-primary,.m-user-login{background:#f5515f -webkit-gradient(linear,right top,left top,from(#e62340),to(#f5515f))!important;background:#f5515f -webkit-linear-gradient(right,#e62340 0,#f5515f 100%)!important;background:#f5515f -o-linear-gradient(right,#e62340 0,#f5515f 100%)!important;background:#f5515f linear-gradient(-90deg,#e62340 0,#f5515f 100%)!important}.bg-primary-pure{color:#fff;background-color:#e62340}.bg-primary-pale{color:#e62340;background-color:#fceaea}.bg-secondary{background:#f5515f}.alert-info{color:#e62340;background:#fceaea}.btn-primary{color:#fff;background-color:#e62340;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(230,35,64,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#d71835;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:#e62340;border-color:transparent}.btn-secondary{color:#fff;background-color:#f5515f;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(245,81,95,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#f43949;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:#f5515f;border-color:transparent}.btn-info{color:#e62340;background-color:#fceaea;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#e62340;background-color:rgba(252,234,234,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#f9d4d4;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(230,35,64,.3);background-color:#fceaea;border-color:transparent}.btn-icon-left>.icon{color:#f5515f;background:#fceaea}.btn-active-line{color:#e62340}.btn-active-line:after{border-bottom-color:#e62340}.btn-active-line:hover{color:#e62340}.btn-active-text .text{color:#fb2b2b}.btn-active-text .text:after{border-bottom-color:#fb2b2b}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(230,35,64,.8)}.label-primary{background:#e62340!important}.label-pale{background:#f6bdbd!important}.label-outline.label-primary{background:#fceaea!important;border-color:rgba(230,35,64,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#e62340;border-color:#e62340}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#e62340;-webkit-box-shadow:0 0 0 3px rgba(230,35,64,.2);box-shadow:0 0 0 3px rgba(230,35,64,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#e62340}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#e62340!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#e62340!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#e62340!important}.nav-tabs>li.active>a:before{background:#e62340}.nav-tabs-primary>li.active>a{color:#e62340!important}.panel-actions .btn.text-primary{color:#e62340}.picker-focus .picker-selections{border-color:#e62340;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)}.status-bars .bar{background:#e62340}.status-bars-h .bar{background:#e62340}.messagger-zt .messager-content>.icon{color:#e62340}.tree li.active>a{color:#e62340}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#e62340}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#f5515f}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#fceaea}.dropdown-submenu:hover>a:after{border-left-color:#e62340}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#f5515f}.timeline>li>a:after,.timeline>li>div:after{background-color:#e62340}.timeline>li.active:before{background-color:rgba(230,35,64,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#e62340!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#e62340!important}#mainHeader{background:#ff7c7c;border-top-color:#e62340;border-bottom-color:#fceaea}#searchGo{background-color:#f5515f}#searchGo:hover{background-color:#e62340}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#e62340}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#e62340}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#e62340}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#e62340}.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 #e62340}.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 #e62340}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #e62340}#sidebarHeader .title{color:#e62340}#sidebar>.sidebar-toggle>.icon{background:#fbb1b8}#main .querybox-toggle.querybox-opened{color:#e62340}#contentNav .nav>li.active>a{color:#e62340}#contentNav .nav>li.active>a:before{background:#e62340}td.c-actions .btn{color:#f5515f}td.c-actions .btn:hover{color:#e62340;background-color:#f9d4d4}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#e62340;background:#fceaea}.main-table table .btn-icon-left:hover>.icon{background:#fceaea}.main-table tbody>tr:hover{background:#fceaea}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#e62340}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#fdf3f3}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#fdf3f3}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#d91b1b}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#650b19}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#e62340}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#e62340}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#e62340}.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:#fceaea}.table-nest-toggle:hover{color:#e62340}.table-footer .checkbox-primary.checked label:after{border-color:#e62340!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#eb5168!important;border-color:#eb5168!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#e62340}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#e62340;border-color:#e62340}.article-content a{color:#e62340}.article-content a:focus,.article-content a:hover{color:#f5515f}.list-group{overflow-y:auto}.list-group>a.selected{color:#fceaea;background-color:#e62340}.list-group>a.active{color:#e62340;background-color:#fceaea}.list-group>a.active:hover,.list-group>a:hover{background-color:#e62340}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#e62340}#swapper #dropMenu .tree li>.selected{color:#e62340!important;background:#fceaea!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#e62340!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#e62340!important;background:#fceaea!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#e62340!important}.release-line>li>a:hover:before{background-color:#fceaea}.release-line>li>a:hover .title{color:#e62340}.release-line>li.active>a:before{border-color:#e62340}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#f5515f}#poweredBy .icon-zentao{color:#f5515f}#poweredBy a:hover{color:#e62340}#poweredBy a:hover .icon-zentao{color:#e62340}#poweredBy a.text-primary{color:#e62340}#poweredBy a.text-primary:hover{color:#f5515f}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#e62340!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#f5515f!important}.dynamic.active .dynamic-date:before{background-color:#f5515f!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#e62340!important}.table td.has-child>.task-toggle:hover{color:#e62340!important}#openTaskPage.open:hover,#task .task-nav{color:#e62340!important;background:#fceaea!important}#tasksProgress>.progress-bar{background:#e62340!important}#tasksProgress .progress-text{color:#e62340!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#e62340!important;background:#fceaea!important;border-left-color:#e62340!important;-webkit-box-shadow:inset 4px 0 0 #e62340!important;box-shadow:inset 4px 0 0 #e62340!important}#copyProjectModal a:hover{border-color:#f5515f!important}#zeroTaskStory.checked{background:#fceaea!important;border-color:#f5515f!important}.cols-list .col:hover{background:#fceaea!important}.files-grid .actions,.files-grid .col:hover .file{background:#fceaea!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#f5515f!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#f5515f!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#e62340!important}#bars>li.active:after{background:#fceaea!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#fb2b2b;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#e62340}td.c-actions .btn{color:#e62340}.main-table tbody>tr:hover{background:rgba(252,234,234,.8)}.main-table tbody>tr>td.c-name a{color:#d91b1b}.main-table tbody>tr>td.c-name a:hover{color:#fb2b2b}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#e62340!important}.assigned-none{color:#fb2b2b!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#fb2b2b!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#fb2b2b!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#ff7c7c}#assigntomeBlock .nav>li.active>a{color:#fb2b2b}.consumedTotally{color:#e62340;background:#fceaea}#toggleFoldIcon .icon-border{border:1px solid #ffd5d5}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#e62340}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#f5515f}.nav-steps>ul>li.active>a:focus{background-color:#e62340}.nav-steps>ul>li.active+li:after{border-left-color:#f5515f}.nav-steps>ul>li.active:hover+li:after{border-left-color:#e62340}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#e62340}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #e62340;box-shadow:0 0 1px 1px #e62340}.border-primary-hover:hover{border:1px solid #e62340}.menu-hover-primary>li>a:hover{color:#fb2b2b!important;background-color:#ffd5d5!important}.menu-active-primary>li.active>a{color:#e62340!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#ffd5d5!important}#mainHeader{background:#f5515f -webkit-gradient(linear,right top,left top,from(#e62340),to(#f5515f));background:#f5515f -webkit-linear-gradient(right,#e62340 0,#f5515f 100%);background:#f5515f -o-linear-gradient(right,#e62340 0,#f5515f 100%);background:#f5515f linear-gradient(-90deg,#e62340 0,#f5515f 100%);background-color:#f5515f} + */a{color:#313c52}a:focus,a:hover{color:#e62340}.btn{color:#313c52;background-color:#fff;border-color:#d8dbde;border-radius:4px}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn.active,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:#ebebeb;border-color:#b7bcc2;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#d9d9d9;background-image:none;border-color:#bcc2c7;-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fff;border-color:#d8dbde}.btn-primary{color:#fff;background-color:#e62340;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#c91731;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#a9132a;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#e62340;border-color:transparent}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#c91731;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#a9132a;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#e62340;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ff8a1d;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#f87800;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#fb3131;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fb0e0e;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#1ca675;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#17885f;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#22c98d;border-color:transparent}.btn-info{color:#e62340;background-color:#fceaea;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#e62340;background-color:#f7c6c6;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#f2a7a7;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fceaea;border-color:transparent}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#e62340;background-color:#f7c6c6;border-color:rgba(0,0,0,0);-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#f2a7a7;background-image:none;border-color:rgba(0,0,0,0);-webkit-box-shadow:inset 0 4px 6px rgba(0,0,0,.15);box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.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{background-color:#fceaea;border-color:transparent}.btn-link{color:#313c52;background-color:transparent}.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:#e62340}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#c4c4c4}.popover,.tooltip-inner{border-radius:4px}.label{border-radius:3px}.label-badge{border-radius:9px}.label-dot{border-radius:5px}.label-primary{background-color:#e62340}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#c0162f}.label-primary.label-outline{color:#e62340;background:0 0;border:1px solid #e62340}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#c0162f}.label-success{background-color:#22c98d}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#1b9d6e}.label-success.label-outline{color:#22c98d;background:0 0;border:1px solid #22c98d}.label-success[href]:focus,.label-success[href]:hover{background-color:#1b9d6e}.label-info{background-color:#37b2fe}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#049efe}.label-info.label-outline{color:#37b2fe;background:0 0;border:1px solid #37b2fe}.label-info[href]:focus,.label-info[href]:hover{background-color:#049efe}.label-warning{background-color:#ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#ff8513}.label-warning.label-outline{color:#ff9f46;background:0 0;border:1px solid #ff9f46}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ff8513}.label-danger{background-color:#fc5959}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#fb2727}.label-danger.label-outline{color:#fc5959;background:0 0;border:1px solid #fc5959}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fb2727}.btn-primary .label-badge,.btn-primary .label-dot{background-color:#f07f90}.text-primary{color:#e62340}.text-primary:hover{color:#c0162f}.text-warning{color:#ff9f46}.text-warning:hover{color:#ff8513}.text-danger{color:#fc5959}.text-danger:hover{color:#fb2727}.text-success{color:#22c98d}.text-success:hover{color:#1b9d6e}.text-info{color:#37b2fe}.text-info:hover{color:#049efe}.text-important{color:#ff6f42}.text-important:hover{color:#ff480f}.text-special{color:#8166ee}.text-special:hover{color:#5b38e9}.text-muted a:active,.text-muted a:hover{color:#313c52}.text-link:active,.text-link:hover{color:#313c52}.bg-primary{background-color:#e62340}a.bg-primary:hover{background-color:#c0162f}.hl-primary{background-color:#fceaea}a.hl-primary:hover{background-color:#f6bdbd}.progress{background-color:#fceaea;border-radius:3px}.progress-bar{color:#fff;background-color:#e62340;border-radius:3px}.form-control{border-radius:2px}.form-control.focus,.form-control:focus{border-color:#e62340;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)}.form-control:focus{border-color:#e62340;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)}.form-condensed .btn,.form-condensed .form-control{border-radius:4px}.switch>input:checked+label:before{background-color:#e62340;border-color:#e62340}.switch input:focus+label{color:#e62340}.switch input:focus+label:before{border-color:#e62340;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #e62340;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px #e62340}.checkbox-primary>label:after,.radio-primary>label:after{background:#fff;border-color:#838a9d}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#e62340;border-color:#e62340}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#e62340;-webkit-box-shadow:0 0 8px #e62340;box-shadow:0 0 8px #e62340}.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;border-color:#bbb}.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}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#fff;border-color:#e62340}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#e62340}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#fff;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.form-control:focus+.input-control-label-left{color:#f5515f}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.input-group-addon{background-color:#eee}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{border-radius:4px}.input-group-btn.fix-border>.btn{border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.list-group-item{background-color:#fff;border:1px solid #c4c4c4}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#313c52;text-decoration:none;background-color:#fceaea}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{color:#fff;background-color:#e62340;border-color:#e62340}.list-group-item.active .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6e6e6}.list-group-item-heading{color:#313c52}.navbar-toggle{border-radius:4px}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-inverse{background-color:#f5515f;border-color:#f22133}.navbar-inverse .navbar-nav>li.nav-heading{background-color:#f43949}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:#f76e7a}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#f8818b}.navbar-inverse .navbar-toggle{border-color:#f8818b}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#f43949}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#f32f40}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#f8818b}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#f22133}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:#f76e7a}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#f8818b}}.navbar-fixed-left.navbar-inverse .navbar-header,.navbar-fixed-left.navbar-inverse .navbar-nav{border-bottom:1px solid #f8818b;-webkit-box-shadow:inset 0 -1px 0 #f22133;box-shadow:inset 0 -1px 0 #f22133}.navbar-fixed-left.navbar-inverse.navbar-collapsed .navbar-nav>li.nav-heading:hover{color:#d1d1d1;background-color:#f32a3c}.nav>li>a:focus,.nav>li>a:hover{color:#e62340}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:#313c52}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#e62340}.nav-primary>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #c4c4c4}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#e62340;border-color:#e62340}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#e62340;border-bottom-color:#e62340}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.nav-stacked.nav-secondary>li>a{border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #e62340;box-shadow:inset 2px 0 0 #e62340}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #c4c4c4}.nav-tabs>li>a{border-radius:4px 4px 0 0}.pager{border-radius:4px}.pager>li>a,.pager>li>span{background-color:#fff;border:1px solid #c4c4c4}.pager>li:first-child>a,.pager>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{color:#fff;background-color:#e62340;border-color:#e62340}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#c4c4c4;background-color:#fff;border-color:#c4c4c4}.panel{border-radius:4px}.panel>.panel-heading{background-image:none;border-top-left-radius:4px;border-top-right-radius:4px}.panel-group .panel{border-radius:4px}.dashboard .panel{-webkit-box-shadow:none;box-shadow:none}.panel-primary{border-color:#e62340}.panel-primary>.panel-heading{color:#fff;background-color:#e62340;border-color:#e62340}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#e62340}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#e62340}.panel-danger>.panel-body,.panel-info>.panel-body,.panel-primary>.panel-body,.panel-success>.panel-body,.panel-warning>.panel-body{-webkit-box-shadow:none;box-shadow:none}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#fceaea}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe7d0}table.tablesorter thead tr .headerSortDown:after,table.tablesorter thead tr .headerSortUp:after{color:#313c52!important}.chosen-container-single .chosen-search input[type=text]:focus,.chosen-container-single .chosen-search:focus{border-color:#e62340!important}.chosen-container-single .chosen-single{border-radius:2px!important}.chosen-container-single.chosen-with-drop .chosen-single{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-single.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#e62340!important;border-bottom-left-radius:#e62340!important}.chosen-container .chosen-results li.highlighted{background-color:#e62340!important}.chosen-container-active .chosen-single{border-color:#e62340!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#b2b2b2!important;border-color:rgba(0,0,0,.15)!important}.chosen-container-active .chosen-choices{border-color:#e62340!important}.chosen-container-multi .chosen-choices{border-radius:2px!important}.chosen-container-multi.chosen-with-drop .chosen-choices{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.chosen-container-multi.chosen-with-drop.chosen-up .chosen-choices{border-top-left-radius:0!important;border-top-right-radius:0!important;border-bottom-right-radius:#e62340!important;border-bottom-left-radius:#e62340!important}.chosen-container.chosen-highlight-selected .result-selected{color:#e62340;background:#fceaea}.menu>.nav>li>.nav{background-color:#f6f6f6}.menu>.nav>li>.nav>li>a{border:1px solid #c4c4c4}.menu>.nav>li>.nav>li>a:focus,.menu>.nav>li>.nav>li>a:hover{background-color:#e4e4e4}.menu>.nav>li>.nav>li.active>a,.menu>.nav>li>.nav>li.active>a:focus,.menu>.nav>li>.nav>li.active>a:hover{color:#fff;background-color:#e62340;border-color:#e62340}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li:first-child.nav-heading,.menu>.nav>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.menu>.nav>li.show>a,.menu>.nav>li.show>a:focus,.menu>.nav>li.show>a:hover{color:#313c52;background-color:#fff;border-color:#c4c4c4}.menu>.nav>li.show>a:focus>[class*=icon-],.menu>.nav>li.show>a:hover>[class*=icon-],.menu>.nav>li.show>a>[class*=icon-]{color:#313c52}.menu>.nav>li.show>a:hover{background-color:#f1f1f1}.menu>.nav>li.show:last-child>a{border-bottom-right-radius:0;border-bottom-left-radius:0}.menu>.nav>li.show:last-child>.nav>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.menu>.nav>li.nav-heading{background-color:#f1f1f1;border:1px solid #c4c4c4}.dropdown-menu{border-radius:4px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e62340}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#e62340}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{background-color:#e62340}.dropdown-submenu:hover>a:after{border-left-color:#fff}.datetimepicker td.day.today{background-color:#ff9f46!important;border-color:#ff9f46!important}.datetimepicker td.day.active{background-color:#e62340!important;border-color:#c0162f!important}.datetimepicker td.day.active:hover{background-color:#c0162f!important}.datetimepicker td.day.today.active:hover,.datetimepicker td.day.today:hover{background-color:#ff8513!important}.ke-container{border-radius:4px!important}.ke-container.focus{border-color:#e62340!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)!important}.ke-menu-item-on{background-color:#e62340!important}.ke-colorpicker-cell-on{background-color:#e62340!important}.ke-input-text:focus{border-color:#e62340!important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)!important;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)!important}.messager{border-radius:4px}.messager-primary{background-color:#e62340}.messager-success{background-color:#22c98d}.messager-info{background-color:#37b2fe}.messager-warning{background-color:#ff9f46}.messager-danger{background-color:#fc5959}.messager-important{background-color:#ff6f42}.messager-special{background-color:#8166ee}.comment:hover>.content>.actions>a{color:#313c52}.alert:not(.alert-block){border-radius:3px}.alert-primary{color:#273042;background-color:#fceaea}.alert-primary hr{border-top-color:#f8cbcb}.alert-primary .alert-link{color:#1a202c}.alert-success{color:#1eb37e;background-color:#ecfff8}.alert-success hr{border-top-color:#b9ffda}.alert-success .alert-link{color:#199568}.alert-info{color:#1ea8fe;background-color:#e7f6ff}.alert-info hr{border-top-color:#9beaff}.alert-info .alert-link{color:#0199f7}.alert-warning{color:#ff922c;background-color:#fff4ea}.alert-warning hr{border-top-color:#ffdfd0}.alert-warning .alert-link{color:#ff7f09}.alert-danger{color:#fc4040;background-color:#ffebeb}.alert-danger hr{border-top-color:#ffd1d9}.alert-danger .alert-link{color:#fb1d1d}.alert-primary-inverse{color:#fff;background-color:#e62340;border-color:#e62340}.alert-primary-inverse hr{border-top-color:#c4c4c4;border-top-color:rgba(196,196,196,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.modal-dialog{border-radius:6px}.card{border-radius:4px;-webkit-box-shadow:none;box-shadow:none}pre{border-radius:4px}.datagrid .datagrid-hover-col .datagrid-cell.hover,.datagrid .datagrid-hover-col .datagrid-row-cell.active .datagrid-cell.hover,.datagrid .datagrid-hover-row .datagrid-row-cell:hover .datagrid-cell{background-color:#fceaea}.datagrid .datagrid-loading>.content>.icon,.datagrid .datagrid-sort-down>.icon-sort:before,.datagrid .datagrid-sort-up>.icon-sort:before{color:#e62340}.tree-drag-holder{background-color:#fceaea}.tree-menu li.active>a{color:#fff;background-color:#e62340;border-color:#e62340}.tree-menu li.active>.list-toggle{color:#fff}.text-secondary{color:#f5515f}a.text-primary{color:#e62340}.nav-primary>li.active>a{color:#fb2b2b}.nav-primary>li.active>a:hover{color:#fb2b2b}.bg-primary,.m-user-login{background:#f5515f -webkit-gradient(linear,right top,left top,from(#e62340),to(#f5515f))!important;background:#f5515f -webkit-linear-gradient(right,#e62340 0,#f5515f 100%)!important;background:#f5515f -o-linear-gradient(right,#e62340 0,#f5515f 100%)!important;background:#f5515f linear-gradient(-90deg,#e62340 0,#f5515f 100%)!important}.bg-primary-pure{color:#fff;background-color:#e62340}.bg-primary-pale{color:#e62340;background-color:#fceaea}.bg-secondary{background:#f5515f}.alert-info{color:#e62340;background:#fceaea}.btn-primary{color:#fff;background-color:#e62340;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(230,35,64,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#d71835;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:#e62340;border-color:transparent}.btn-secondary{color:#fff;background-color:#f5515f;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(245,81,95,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#f43949;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:#f5515f;border-color:transparent}.btn-info{color:#e62340;background-color:#fceaea;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#e62340;background-color:rgba(252,234,234,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#f9d4d4;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(230,35,64,.3);background-color:#fceaea;border-color:transparent}.btn-icon-left>.icon{color:#f5515f;background:#fceaea}.btn-active-line{color:#e62340}.btn-active-line:after{border-bottom-color:#e62340}.btn-active-line:hover{color:#e62340}.btn-active-text .text{color:#fb2b2b}.btn-active-text .text:after{border-bottom-color:#fb2b2b}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(230,35,64,.8)}.label-primary{background:#e62340!important}.label-pale{background:#f6bdbd!important}.label-outline.label-primary{background:#fceaea!important;border-color:rgba(230,35,64,.25)!important}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#e62340;border-color:#e62340}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#e62340;-webkit-box-shadow:0 0 0 3px rgba(230,35,64,.2);box-shadow:0 0 0 3px rgba(230,35,64,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#e62340}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{border-color:#e62340!important}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#e62340!important}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#e62340!important}.nav-tabs>li.active>a:before{background:#e62340}.nav-tabs-primary>li.active>a{color:#e62340!important}.panel-actions .btn.text-primary{color:#e62340}.picker-focus .picker-selections{border-color:#e62340;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(230,35,64,.6)}.status-bars .bar{background:#e62340}.status-bars-h .bar{background:#e62340}.messagger-zt .messager-content>.icon{color:#e62340}.tree li.active>a{color:#e62340}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#e62340}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{background-color:#f5515f}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#313c52;background-color:#fceaea}.dropdown-submenu:hover>a:after{border-left-color:#e62340}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager>li.active>a{background-color:#f5515f}.timeline>li>a:after,.timeline>li>div:after{background-color:#e62340}.timeline>li.active:before{background-color:rgba(230,35,64,.2)}.ke-container{border-color:#dcdcdc!important}.ke-container.focus{border-color:#e62340!important}.input-group .chosen-container-active .chosen-choices,.input-group .form-control:focus{border-color:#e62340!important}#mainHeader{background:#ff7c7c;border-top-color:#e62340;border-bottom-color:#fceaea}#searchGo{background-color:#f5515f}#searchGo:hover{background-color:#e62340}#subNavbar{margin-top:7px;text-align:center}#subNavbar .nav>li.active>a{color:#e62340}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{border-color:#e62340}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#e62340}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#e62340}.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 #e62340}.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 #e62340}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}#sidebarHeader{border-left:3px solid #e62340}#sidebarHeader .title{color:#e62340}#sidebar>.sidebar-toggle>.icon{background:#fbb1b8}#main .querybox-toggle.querybox-opened{color:#e62340}#contentNav .nav>li.active>a{color:#e62340}#contentNav .nav>li.active>a:before{background:#e62340}td.c-actions .btn{color:#f5515f}td.c-actions .btn:hover{color:#e62340;background-color:#f9d4d4}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#e62340;background:#fceaea}.main-table table .btn-icon-left:hover>.icon{background:#fceaea}.main-table tbody>tr:hover{background:#fceaea}.main-table tbody>tr.checked:hover{background:#ffe6c6}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{background:#e62340}.main-table tbody>tr>td.c-side:before{display:none}.main-table .table-grouped tbody>tr:hover{background:#fdf3f3}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#fdf3f3}.main-table tbody>tr>td>a,.table-data tbody>tr>td>a{color:#d91b1b}.main-table tbody>tr>td>a:not(.btn):visited,.table-data tbody>tr>td>a:not(.btn):visited{color:#650b19}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover,.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#e62340}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up,.table.has-sort-head thead>tr>th>a:hover{color:#e62340}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#e62340}.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:#fceaea}.table-nest-toggle:hover{color:#e62340}.table-footer .checkbox-primary.checked label:after{border-color:#e62340!important}.table-footer.fixed-footer .checkbox-primary.checked label:after{background-color:#eb5168!important;border-color:#eb5168!important}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffe6c6}.files-list>li>a:hover{color:#e62340}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#e62340;border-color:#e62340}.article-content a{color:#e62340}.article-content a:focus,.article-content a:hover{color:#f5515f}.list-group{overflow-y:auto}.list-group>a.selected{color:#fceaea;background-color:#e62340}.list-group>a.active{color:#e62340;background-color:#fceaea}.list-group>a.active:hover,.list-group>a:hover{background-color:#e62340}.list-group.tab-menu a.active:hover,.list-group.tab-menu a:hover{color:#e62340}#swapper #dropMenu .tree li>.selected{color:#e62340!important;background:#fceaea!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .list-group>a.selected,#swapper #dropMenu .list-group>a.selected:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#e62340!important}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#e62340!important;background:#fceaea!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#e62340!important}.release-line>li>a:hover:before{background-color:#fceaea}.release-line>li>a:hover .title{color:#e62340}.release-line>li.active>a:before{border-color:#e62340}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#f5515f}#poweredBy .icon-zentao{color:#f5515f}#poweredBy a:hover{color:#e62340}#poweredBy a:hover .icon-zentao{color:#e62340}#poweredBy a.text-primary{color:#e62340}#poweredBy a.text-primary:hover{color:#f5515f}.block-guide .nav-secondary>li.active>a:before,.block-statistic .nav-secondary>li.active>a:before{background:#e62340!important}.dynamic.active .dynamic-date,.dynamic.active .timeline{border-color:#f5515f!important}.dynamic.active .dynamic-date:before{background-color:#f5515f!important}.tablesorter-header-inner:hover,table.tablesorter tr.tablesorter-headerRow .header.headerSortDown .tablesorter-header-inner:after,table.tablesorter tr.tablesorter-headerRow .header.headerSortUp .tablesorter-header-inner:after{color:#e62340!important}.table td.has-child>.task-toggle:hover{color:#e62340!important}#openTaskPage.open:hover,#task .task-nav{color:#e62340!important;background:#fceaea!important}#tasksProgress>.progress-bar{background:#e62340!important}#tasksProgress .progress-text{color:#e62340!important}#tasks>li.active.finish>a,#tasks>li.active>a{color:#e62340!important;background:#fceaea!important;border-left-color:#e62340!important;-webkit-box-shadow:inset 4px 0 0 #e62340!important;box-shadow:inset 4px 0 0 #e62340!important}#copyProjectModal a:hover{border-color:#f5515f!important}#zeroTaskStory.checked{background:#fceaea!important;border-color:#f5515f!important}.cols-list .col:hover{background:#fceaea!important}.files-grid .actions,.files-grid .col:hover .file{background:#fceaea!important}.dashboard .panel,.panel-default{-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)}#menu .nav>li.active>a{background:#f5515f!important}#menu .nav>li.active>a,#menu .nav>li>a:focus,#menu .nav>li>a:hover{background:#f5515f!important}#bars>li.active>a,#bars>li.active>a:active,#bars>li.active>a:focus{background:#e62340!important}#bars>li.active:after{background:#fceaea!important}#userNav>li>a>.icon{filter:none;opacity:1;-webkit-filter:none}#menu{background:#415a72}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#fb2b2b;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{border-color:#e62340}td.c-actions .btn{color:#e62340}.main-table tbody>tr:hover{background:rgba(252,234,234,.8)}.main-table tbody>tr>td.c-name a{color:#d91b1b}.main-table tbody>tr>td.c-name a:hover{color:#fb2b2b}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}#programTableList>tr:hover{background:#e6f0ff;opacity:.8}#programTableList>tr>.c-name:hover>a{color:#e62340!important}.assigned-none{color:#fb2b2b!important}.assigned-current{color:#f38f19!important}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#fb2b2b!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#fb2b2b!important}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#ff7c7c}#assigntomeBlock .nav>li.active>a{color:#fb2b2b}.consumedTotally{color:#e62340;background:#fceaea}#toggleFoldIcon .icon-border{border:1px solid #ffd5d5}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#e62340}.btn.btn-action.disabled,.c-actions .btn.disabled,.c-actions .btn[disabled=disabled]{border-color:transparent}.nav-steps>ul>li.active>a{background-color:#f5515f}.nav-steps>ul>li.active>a:focus{background-color:#e62340}.nav-steps>ul>li.active+li:after{border-left-color:#f5515f}.nav-steps>ul>li.active:hover+li:after{border-left-color:#e62340}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#e62340}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{color:#fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #e62340;box-shadow:0 0 1px 1px #e62340}.border-primary-hover:hover{border:1px solid #e62340}.menu-hover-primary>li>a:hover{color:#fb2b2b!important;background-color:#ffd5d5!important}.menu-active-primary>li.active>a{color:#e62340!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#ffd5d5!important}.form-active-primary .active .label,.form-active-primary .hover .label{color:#e62340!important}.form-active-primary .active .form-control,.form-active-primary .hover .form-control{-webkit-box-shadow:0 0 1px 1px #e62340;box-shadow:0 0 1px 1px #e62340}#mainHeader{background:#f5515f -webkit-gradient(linear,right top,left top,from(#e62340),to(#f5515f));background:#f5515f -webkit-linear-gradient(right,#e62340 0,#f5515f 100%);background:#f5515f -o-linear-gradient(right,#e62340 0,#f5515f 100%);background:#f5515f linear-gradient(-90deg,#e62340 0,#f5515f 100%);background-color:#f5515f} \ No newline at end of file diff --git a/www/theme/zui/css/min.css b/www/theme/zui/css/min.css index 76216ba789..80612ccbfd 100644 --- a/www/theme/zui/css/min.css +++ b/www/theme/zui/css/min.css @@ -1,5 +1,5 @@ /*! - * ZUI: ZUI for Zentao - v1.10.0 - 2023-02-17 + * ZUI: ZUI for Zentao - v1.10.0 - 2023-02-24 * http://openzui.com * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2023 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 #b2b2b2;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:#2e7fff;background:#e6f0ff}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#0b0f18;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:#2e7fff}.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:#2e7fff}.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 #c4c4c4;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:#ababab;-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:#2e7fff;-webkit-box-shadow:none,0 0 8px rgba(46,127,255,.6);box-shadow:none,0 0 8px rgba(46,127,255,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b2b2b2;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:#2e7fff;-webkit-box-shadow:none,0 0 8px rgba(46,127,255,.6);box-shadow:none,0 0 8px rgba(46,127,255,.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}.picker{min-height:32px;background-color:#eee}.picker:not(.picker-ready)>*{display:none}.picker-selections{position:relative;min-height:32px;color:#0b0f18;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none}.picker-focus .picker-selections{border-color:#2e7fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(46,127,255,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(46,127,255,.6)}.disabled .picker-selections{cursor:not-allowed;background-color:#f5f5f5}.picker-multi .picker-selections{padding:3px}.picker-multi.picker-focus .picker-selections:before{position:absolute;right:0;bottom:8px;display:block;width:24px;height:14px;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;content:"\e928";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.picker-multi.picker-focus.picker-loading .picker-selections::before{display:inline-block;content:"\e982";-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}.picker-multi .picker-selection{position:relative;display:inline-block;padding:0 20px 0 5px;margin:2px;line-height:18px;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #c4c4c4;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)}.picker-selection-single{max-width:100%;padding:5px 20px 5px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker-focus .picker-selection-single .picker-selection-text{display:none}.picker-selection-single:after{position:absolute;top:7px;right:0;display:block;width:24px;height:14px;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;content:"\f0d7";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.picker-focus .picker-selection-single::after{content:"\e928"}.picker-focus.picker-loading .picker-selection-single::after{display:inline-block;content:"\e982";-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}.picker-selection-remove{position:absolute;top:0;right:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:18px;height:18px;text-align:center;cursor:pointer;opacity:.2;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.picker-selection-remove: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}.picker-selection-remove:hover{opacity:.5}.picker-single .picker-selection-remove{top:5px;right:20px;z-index:1}.picker-no-value .picker-selection-remove,.picker-single.picker-focus .picker-selection-remove{display:none}.picker-multi.picker-sortable .picker-selection-text{cursor:move}.picker-search{color:transparent;background:0 0;border:none}.picker-search:focus{color:inherit;outline:0}.disabled .picker-search{cursor:not-allowed}.picker-single .picker-search{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;padding:5px 8px}.picker-multi .picker-search{display:inline-block;width:10px;min-width:10px;max-width:100%;padding:0 2px;margin:2px 0}.picker-placeholder{position:absolute;top:5px;right:20px;left:8px;z-index:0;display:none;overflow:hidden;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.picker-no-value.picker-focus .picker-placeholder{display:none}.picker-input-empty.picker-focus.picker-no-value .picker-placeholder,.picker-no-value .picker-placeholder{display:block}.picker-drop-menu{position:fixed;z-index:1200;display:none;min-width:100px;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.12),0 1px 3px rgba(0,0,0,.1);box-shadow:0 6px 12px rgba(0,0,0,.12),0 1px 3px rgba(0,0,0,.1);opacity:0}.picker-drop-menu.picker-drop-show{display:block}.picker-option-list{padding:5px 0;margin:0;overflow-y:auto}.picker-no-options .picker-option-list{display:none}.picker-option{display:block;min-height:30px;padding:5px 10px;overflow:hidden;clear:both;font-weight:400;line-height:1.42857143;color:#313c52;text-overflow:ellipsis;white-space:nowrap;-webkit-transition:none;-o-transition:none;transition:none}.picker-single .picker-option.picker-option-selected{color:#2e7fff;background:#e6f0ff}.picker-option:focus,.picker-option:hover{text-decoration:none}.picker-option.picker-option-active,.picker-single .picker-option.picker-option-selected.picker-option-active{color:#fff;background-color:#2e7fff}.picker-multi .picker-option.picker-option-selected,.picker-multi .picker-option.picker-option-selected.picker-option-active{color:#ccc;cursor:not-allowed;background-color:#fff}.picker-option.disabled{cursor:not-allowed!important}.picker-option-text-matched{position:relative;color:#2e7fff}.picker-option-text-matched:before{position:absolute;right:0;bottom:-4px;left:0;display:block;height:2px;content:' ';background-color:#2e7fff;border-radius:2px;opacity:.5}.picker-option-active .picker-option-text-matched,.picker-option:hover .picker-option-text-matched{color:#fff}.picker-option-active .picker-option-text-matched:before,.picker-option:hover .picker-option-text-matched:before{background-color:#fff}.picker-message{display:none;height:22px;padding:2px 5px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap;background-color:#f1f1f1}.picker-has-message .picker-message{display:block}.picker-message[data-type=danger]{color:#fc5959}.picker-actions{padding:5px;border-top:1px solid #eee}.picker-no-actions .picker-actions{display:none}.picker-actions .btn{padding:2px 4px}.picker-actions .btn[disabled]{background-color:transparent;filter:grayscale(1);-webkit-filter:grayscale(1)}.picker-actions .btn+.btn{margin-left:4px}.picker-checkable .picker-option{position:relative;padding-left:32px;color:inherit!important;cursor:pointer!important}.picker-checkable .picker-option>.checkbox-primary{position:absolute;top:4px;left:10px}.picker-checkable .picker-option.picker-option-active{background-color:rgba(0,0,0,.05)!important}.picker-checkable .picker-option:hover{background-color:rgba(0,0,0,.075)!important}.picker-checkable .picker-option.picker-option-selected{background-color:#e6f0ff!important}.picker-checkable .picker-option-active .picker-option-text-matched,.picker-checkable .picker-option:hover .picker-option-text-matched{color:#2e7fff!important}.picker-checkable .picker-option-active .picker-option-text-matched:before,.picker-checkable .picker-option:hover .picker-option-text-matched:before{background:#2e7fff!important}:root{--color-primary:#2e7fff;--color-secondary:#18a6fd;--color-pale:#e6f0ff;--color-fore:#313c52;--color-back:#fff;--color-red:#fc5959;--color-yellow:#ff9f46;--color-green:#22c98d;--color-blue:#37b2fe;--color-purple:#8166ee;--color-brown:#ff6f42;--color-danger:#fc5959;--color-warning:#ff9f46;--color-success:#22c98d;--color-info:#37b2fe;--color-special:#8166ee;--color-important:#ff6f42;--color-green-pale:#ecfff8;--color-yellow-pale:#fff4ea;--color-red-pale:#ffebeb;--color-blue-pale:#e7f6ff;--color-brown-pale:#fff2ed;--color-purple-pale:#efecfa;--link-color:#313c52;--link-hover-color:#2e7fff;--color-gray-darker:#0b0f18;--color-gray-dark:#313c52;--color-gray:#838a9d;--color-gray-light:#c4c4c4;--color-gray-lighter:#eee;--color-gray-pale:#f1f1f1;--border-radius:4px;--border-radius-lg:6px;--border-radius-sm:3px;--bg-gradient:#3785ff}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{color:#313c52;background-color:#f4f5f7}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:#313c52}.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:#ff9f46}.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:#18a6fd}a.text-primary{color:#2e7fff}.text-primary-400{color:#3785ff}.text-primary-600{color:#1e6aeb}.text-primary-700{color:#2463c7}.text-primary-900{color:#063072}.text-green-400{color:#48d1a0}.text-yellow-400{color:#ffaf65}.text-blue-400{color:#60c2ff}.text-red-400{color:#ff7c7c}.text-important-400{color:#ff9777}.text-purple-400{color:#8a6ff5}.text-green-600{color:#0dbb7d}.text-yellow-600{color:#f38f19}.text-blue-600{color:#00c0e9}.text-red-600{color:#fb2b2b}.text-important-600{color:#ff6f42}.text-purple-600{color:#7055df}.text-green-700{color:#0ca76f}.text-yellow-700{color:#ed8307}.text-blue-700{color:#1099ed}.text-red-700{color:#d91b1b}.text-important-700{color:#ff4912}.text-purple-700{color:#513baa}.text-green-900{color:#186c4e}.text-yellow-900{color:#af5f01}.text-blue-900{color:#046bab}.text-red-900{color:#a20606}.text-important-900{color:#611700}.text-purple-900{color:#30216f}.text-gray-14,.text-title{color:#0b0f18}.icon-important,.text-color,.text-gray-13{color:#313c52}.text-gray-12{color:#5e626d}.icon-common,.text-gray-11{color:#838a9d}.icon-secondary,.text-gray-10{color:#9ea3b0}.text-disabled{color:#c4c4c4}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#2e7fff;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#2e7fff;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#c4c4c4;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:#fc5959!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#fc5959;content:"\e92b"}.bg-primary{color:#fff;background:#3785ff;border-top-color:#2e7fff}.bg-primary-pure{color:#fff;background-color:#2e7fff}.bg-primary-pale{color:#2e7fff;background-color:#e6f0ff}.bg-secondary{color:#fff;background:#18a6fd}.line-gray-8{background:#d8dbde}.line-gray-5{background:#e3e4e9}.line-gray-7{background:#eee}.bg-gray-1{background:#e3e4e9}.bg-gray-2{background:#edeef2}.bg-gray-3{background:#f8f8f8}.bg-green-400{background:#48d1a0}.bg-yellow-400{background:#ffaf65}.bg-blue-400{background:#60c2ff}.bg-red-400{background:#ff7c7c}.bg-important-400{background:#ff9777}.bg-purple-400{background:#8a6ff5}.bg-green-600{background:#0dbb7d}.bg-yellow-600{background:#f38f19}.bg-blue-600{background:#00c0e9}.bg-red-600{background:#fb2b2b}.bg-important-600{background:#ff6f42}.bg-purple-600{background:#7055df}.bg-green-700{background:#0ca76f}.bg-yellow-700{background:#ed8307}.bg-blue-700{background:#1099ed}.bg-red-700{background:#d91b1b}.bg-important-700{background:#ff4912}.bg-purple-700{background:#513baa}.bg-green-900{background:#186c4e}.bg-yellow-900{background:#af5f01}.bg-blue-900{background:#046bab}.bg-red-900{background:#a20606}.bg-important-900{background:#611700}.bg-purple-900{background:#30216f}.bg-hover{background:#f6f6f6}.bg-active{background:#e6eaf1}.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.43);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.43) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.43) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.43) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.43) 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-info-sign:before{content:"\e9d5"}.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-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-sonarqube:before{content:"\e9ba"}.icon-college:before{content:"\e9c8"}.icon-ztool:before{content:"\e9c1"}.icon-contacts:before{content:"\e9c3"}.icon-chats:before{content:"\e9c4"}.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-info: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-table-sort:before{content:"\e9e1"}.icon-design:before{content:"\e9ec"}.icon-download-alt:before{content:"\e9ea"}.icon-blame:before{content:"\e9e0"}.icon-draft-edit:before{content:"\e9dd"}.icon-sub-review:before{content:"\e9df"}.icon-sub-review-user:before{content:"\e9db"}.icon-ztf:before{content:"\e9dc"}.icon-save:before{content:"\e9d8"}.icon-list-box:before{content:"\e9b4"}.icon-usecase:before{content:"\e99d"}.icon-code:before{content:"\e990"}.icon-summary:before{content:"\e9ad"}.icon-more-alt:before{content:"\e9a7"}.icon-customer:before{content:"\e9d9"}.icon-horn:before{content:"\e9eb"}.icon-resume:before{content:"\e9e9"}.icon-mirror:before{content:"\e9e6"}.icon-remote:before{content:"\e9e7"}.icon-moon:before{content:"\e9e8"}.icon-ticket:before{content:"\e9e1"}.icon-gantt-alt:before{content:"\e9e2"}.icon-appose:before{content:"\e9e2"}.icon-inline:before{content:"\e9e3"}.icon-tree:before{content:"\e9c9"}.icon-list:before{content:"\e9cb"}.icon-gantt:before{content:"\e9cc"}.icon-group-view:before{content:"\e9cd"}.icon-inherit-space:before{content:"\e9c2"}.icon-card-archive:before{content:"\e9b8"}.icon-col-archive:before{content:"\e9b9"}.icon-col-add-right:before{content:"\e9bb"}.icon-col-add-left:before{content:"\e9bc"}.icon-col-split:before{content:"\e9bd"}.icon-waterfall:before{content:"\e9a4"}.icon-manual:before{content:"\e98d"}.icon-kanban:before{content:"\e983"}.icon-lane:before{content:"\e9b1"}.icon-snap-house:before{content:"\e9e3"}.icon-wrench:before{content:"\e9e4"}.icon-desktop:before{content:"\e9e5"}.icon-back:before{content:"\e9d3"}.icon-back-circle:before{content:"\e9da"}.icon-shield:before{content:"\e9ca"}.icon-meh:before{content:"\e9ce"}.icon-frown:before{content:"\e9cf"}.icon-smile:before{content:"\e9d0"}.icon-unlock-solid:before{content:"\e9d1"}.icon-lock-solid:before{content:"\e9d2"}.icon-ver:before{content:"\e9c6"}.icon-publish:before{content:"\e9c7"}.icon-send:before{content:"\e9c7"}.icon-tag:before{content:"\e9be"}.icon-tag-lock:before{content:"\e9bf"}.icon-code-fork:before{content:"\f126"}.icon-branch-lock:before{content:"\e9c0"}.icon-groups:before{content:"\e9af"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-thumbs-up-solid:before{content:"\e9d6"}.icon-thumbs-down-solid:before{content:"\e9d7"}.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-minuse-solid-circle:before{content:"\e9b6"}.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-undo:before{content:"\e93f"}.icon-redo:before{content:"\e9d4"}.icon-swap:before{content:"\e9b0"}.icon-chat-solid:before{content:"\e9b5"}.icon-clock:before{content:"\e97c"}.icon-cost:before{content:"\e97d"}.icon-pencil-alt:before{content:"\e984"}.icon-size-height:before{content:"\e9c5"}.icon-file-log:before{content:"\e9de"}.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-diff:before{content:"\e9b7"}.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:#fc5959;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:#313c52;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:#313c52;background-color:#fff;border-color:#d8dbde}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:rgba(255,255,255,.8);border-color:#bcc2c7}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#bcc2c7}.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(49,60,82,.3);background-color:#fff;border-color:#d8dbde}.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:#2e7fff;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(46,127,255,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#156fff;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:#2e7fff;border-color:transparent}.btn-secondary{color:#fff;background-color:#18a6fd;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(24,166,253,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#029bf9;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:#18a6fd;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;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,159,70,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#ff922c;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:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;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(252,89,89,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fc4040;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:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;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(34,201,141,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#1eb37e;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:#22c98d;border-color:transparent}.btn-info{color:#2e7fff;background-color:#e6f0ff;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#2e7fff;background-color:rgba(230,240,255,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#cce1ff;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(46,127,255,.3);background-color:#e6f0ff;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#313c52;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:#0b0f18;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:#c4c4c4;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:unset;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:#18a6fd;text-align:center;background:#e6f0ff}.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:#2e7fff}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #2e7fff}.btn-active-line:hover{color:#2e7fff}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#1e6aeb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #2e7fff}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #c4c4c4;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 #c4c4c4;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 #c4c4c4;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:#2e7fff}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#2e7fff}.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 #2e7fff}.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 #2e7fff}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(46,127,255,.8)}.btn.btn-action,.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#18a6fd;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:#2e7fff;background-color:#cce1ff}.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:#b3d1ff!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#2e7fff!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#fc5959;background:#ffebeb;border-color:rgba(252,89,89,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e6f0ff!important;border-color:rgba(46,127,255,.25)}.label-outline.label-success{background:#ecfff8;border-color:rgba(34,201,141,.25)}.label-outline.label-info{background:#e7f6ff;border-color:rgba(55,178,254,.25)}.label-outline.label-warning{background:#fff4ea;border-color:rgba(255,159,70,.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:#fc5959}[class*=" status-"],[class^=status-]{color:#313c52}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#fc5959}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#fc5959}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#2e7fff}.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:#22c98d}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#fc5959}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#313c52;background:0 0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9f46}.status-pause,.status-suspended{color:#ff9f46}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9f46}.status-active.status-bug,.status-draft{color:#8166ee}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8166ee}.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:#c4c4c4}.label-pri{display:inline-block;min-width:18px;max-width:100%;height:18px;padding:0 4px;overflow:hidden;font-size:12px;line-height:16px;color:#838a9d;text-align:center;text-overflow:clip;white-space:normal;vertical-align:middle;border:1px solid #838a9d;border-radius:10px}.label-pri-1,.label-selector>.label-pri[data-value="1"]{overflow:visible;color:#ff6f42;border-color:#ff6f42}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#f38f19;border-color:#f38f19}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#37b2fe;border-color:#37b2fe}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#22c98d;border-color:#22c98d}.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="1"],.label-severity[data-value="1"]{color:#fb2b2b}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#c92d79}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#f48116}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#ffba34}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#9ea3b0}.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:20px;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:3px;right:0;left:0;display:block;width:14px;height:14px;line-height:14px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:1px solid #d9dbe1;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:#22c98d;border-color:#22c98d;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 input:indeterminate+label:before,.checkbox-primary.indeterminate>label:before,.radio-primary input:indeterminate+label:before,.radio-primary.indeterminate>label:before{top:9px;left:3px;width:8px;height:2px;content:' ';background-color:#a3a2bc;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:#22c98d;-webkit-box-shadow:0 0 0 3px rgba(34,201,141,.2);box-shadow:0 0 0 3px rgba(34,201,141,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#22c98d}.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:#22c98d;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#22c98d}.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}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li>a{position:relative;border:none!important;border-radius:2px!important}.nav-tabs>li.active>a{font-weight:700;color:#313c52!important}.nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#2e7fff}.nav-tabs-primary>li.active>a{color:#1e6aeb!important}.nav-steps{height:29px;text-align:center}.nav-steps>ul{display:inline-block;margin:0}.nav-steps>ul>li{position:relative;background-color:#fff}.nav-steps>ul>li.active>a{color:#fff;background-color:#18a6fd}.nav-steps>ul>li>a{min-width:119px;padding:5px 20px;text-align:center;border:1px solid transparent;-webkit-transition:none;-o-transition:none;transition:none}.nav-steps>ul>li>a:hover{background-color:transparent}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#2e7fff}.nav-steps>ul>li+li>a{padding-left:34px}.nav-steps>ul>li+li:after,.nav-steps>ul>li+li:before{position:absolute;top:0;left:0;width:-1;height:0;content:' ';border-color:transparent transparent transparent #a6aab8;border-style:solid;border-width:15px 0 15px 15px}.nav-steps>ul>li+li:after{left:-2px;border-left-color:#fff}.nav-steps>ul>li.active+li:after{border-left-color:#18a6fd}.nav-steps>ul>li:hover{background-color:#eceef3}.nav-steps>ul>li:hover+li:after{border-left-color:#eceef3}.nav-steps>ul>li.active:hover+li:after{border-left-color:#2e7fff}.nav-steps.editor-steps-advance>ul>li:last-child:after,.nav-steps.editor-steps-advance>ul>li:last-child:before{display:none}.nav-steps.editor-steps-advance>ul>li:last-child>a{padding-left:19px}.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:#313c52;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#2e7fff}.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:#2e7fff;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:#2e7fff;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}.ring,[class*=" ring-"],[class^=ring-]{width:24px;height:24px;font-size:12px;line-height:24px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACZAAAAAwCAMAAACyyT3hAAAAP1BMVEUAAAAAAAA5rm06sG87snE4q200o2o7sG86r244q2w6r244rWw7snA7sG86rG05rm07snA5qWw7sW86sG48s3ECZypFAAAAFHRSTlMACl2b8TkPtnsqj0fVv4Zt4RrIqxUkbyYAAA1gSURBVHja7NrbbtswEIRhmyJ1IiVS0v/+z9rCbeGkdZodNEnVdHmTxP4wmF1exLB9eXCu12tqLX39cTGcm78use2z5Msx19wLfunGpOZvSv4xh/798tt+dKPSZ+jGMNn9/pWnXp1X7f9e+ynf53Xv3r37j/bLyfq4/1u+n8T8VI8jLWY/hbEbSjT76+2ssH77zeyBJHooom9dkHzssuQ5wvau+YuWz141/87zMoTewP9kP+7d2/31ZPln82e7L/fuP9LnJPk+DDDb/TQvEaDc/1//vk9Yvrl7vmHa+ztk347BXwcA1UMRPXCIfq+b5Jm3d82PneY5guSHG1fmVfu/837m5N69e/fu3T89fRZ9bRTBpyMCLFa/zfG7CU98l1/M/+EBS/59PT//bfD9lCS/pbAeR7bnb1OqC7AI+QWAkiz5Kdd1B6BVLb8Fk891Poox/7bPUNcIwGHrM3YDAHu1zyv0yWHcjfNen++nWvsvANC5d6/468nyz+bPdl/u3es+NFbFjw1A8BGAPUv5xGFMz/382HcAsNy+W9Sb9/PwwbP4ra5J8WluQDb7qQ4Ayybl05nnrQVgSFafB4AyWfvPEaBT57X2Seu3ecX9HBfN75t79+7du/+sPnVBy++A1e6nHaAEsz9ufk7W/gUgrvmBP/pf/bYDtDlp+/x8j4du1XwBFsHvQMlW348NIJjz0yH5bbz1n7R5m71/bUAL2n5iMueHAYjZvXv37t1/Tp8bJMFPDYhCfgTa2Ft9aEDJ5vzUbvnbC3562GcI5j6vf3T43/h+hlnJnwFGs99WgGDPv/lq9yPQsjCv1mcT/aUDGEVf3bt37979v+DH1kk+RIiCrwCz0AeI82bvc8vvzT5HYP1NfnjQv3uL/d+f/X/8ljUfGiD4ChDsPkcgCX0iUMX8UfDDw/6Xl+fV+q8Awb373/rLyfLP5s92X+4/rQ8QFV+BmO0+AyTND0nqT1H6xFf715/zWe35l5fXf3/e/YtnGugUnxsQhD47sNl9Klp+ipq/DmL/ovXPAJN79+7du/9on5dV80An+BEoye4nYLhofu/tPgAtafO26RWfn/chv9F93YX7N/PTDoOSHzW/LVA2Ib9Am+y+34Es5DdYlHmB2Lt37969+4/1fYQs+KlB6e0+Acsm9CnQXTQfJ61PTMI+dyiv99me7pO3u6+7cf9mvj/Ikgc6xRfNXyIcgt8KLIoX+0/A4d69e/fu/8znoPkOBsH3O8Qk5C8wiH12xR9AFvwAUfEzREOf/Wmf6Q3v967cv52fNJ+BIPgg+gmogk/xmb9a+lex/+ze/WN/PVn+2fzZ7sv93/MVVsUHIAn+AKrgV4hK/gxsYv+q7Ycg+AxMFt/d+9vy/QXZP+RHCIrvoGyCr9B6wa/QNq3/ftHyye7df2HP3pbQBKIgihqGmzKA4P7/b02lTOX2EncSEky1z8uungPosYyPj/8Nv8Mk/HaHm/Adzk/AIvy1hUb4vkKR5y0yf33Nd+K89vo+Xfy/81Oj/FahmPwBRuH7CjeTX6GRfUp8fHx8/Fc/UpRvoBpf4L4ZL/MfsLvzUoxfgM6e1/V5vNjn9jl/eLV/FrL/2DcwS1+lZxN+9X3a+Pj4+Pgvvm9B5Q8wyvxV+K11+VdgMv2r810LRZ63MX1m6IwX+ep+eMr49/HL3ChfoTF+eD65r/q+wiTy+zus8fHf+8vJ8s/mz3a94n/im075FarxE7Sby2975+8mf5T9G9gvLp/O9Jf5nfHNcz6vzzMLWfyX1wiz8Ss8ZP5g/A32+Pj4+P/XP0D5GRbjC9xkfjF+l/lV9h9gtP2PnOfN9JntfMQPsCeN/3/9dmc2/gqtym+d74BrfHx8/P/q+xaM34CryZf+CnTCT9Ca/A7YnG+N71V/P89La/r7eZ5pIYj/x35aNuUH6IzfpZ+hiY+Pj38X35dF+Ql241eoxncwGD/K/EbmL8r7/En2X+X8J99/dveb+4L/EB//zX+Wo/EFVunH+Pj4+HfxI0zG3+BmfIHF+AaKzB/VeU+Wv8BwZJ/14P56IbvEx39+bdDIBa4YP8bHx8e/kS/QGb/DZPwDVuMXGGV+Y3yR+QM+X/py5HlvB/e3C1l8/Fe/TYZfJtjNGxoY4uN/8JeT5Z/Nn+16vbVf7kX5Ga7GV+iM32Ey/gHNkfnDyfJnWA+d58H9L+aB/4Tj43/Vb4DxHdT4+Pj4f+WhVb7CZnwrfYWr8Tt0xt9lfj1ZfoVJedvn4P5ZyOL/nn+wGN9DGx8fH/+vPKB8630f/0f9drI+ymchiz+vB5Q/4Qd6fHz8efxCycIU/5G9e9lRHAaAKEr7kZi8nIT7/986UlatWaWGCbjpYn1UKizAQU7sZr0vyOzb9QkUv8Ek+qT4u77ksYv5q5g/tZQv91F9g0ta9j/Loy8RZnv7795LlvYf4b/U/JgWccLur/xBH2EXfbw4v28pP8B8cZ9HgzfR27/Tj9utpZvK7e2f8W09tWdv/8S+aBmi4OWnPis8FF+gKD7o+VHM78X8QfGD3uch+qG1bQ7s3+sDbIqPUEVf7O2/+5a2vWhqHyx7+++vUbwAGsQJfhEnjAhB8UXPLy3l97BcOgF7Y2H7v3yBeuVGqcXe/oW+qaN77O2f8jF2it9hVPwE9eKjpYqYH0S/XJk/ieM5i+P5gLG1o3Ls/7PfllE9Gkj0u3r0jb39q3xbE6q9/Qs9pE7wd+BKn4FNyU8wCn4DsuKT5vPF49Phw+k/389Mm+IT3DWf5MOh7e1f5G/n1ywPaW//MR4eil9EP0AU83sxf1d8Ub3YJ4q+iONZYRDHZ7b/aX6GovgIVfG9kr8ffYbz+fb2z/nbTZnw7O2f8V9N9clV8hMEwW8JRsF3q5i/QlX676rX+mSgqPmKnyGr42n/dh/mRfEjTIoP0Kv53Vlfj/z1tA/29s/5039hDmdv/2s9pE7wBXolv+r5aRP8CIh+UvpHSFnwQXy/GeabmG//fj9DUPyk+Q0IYp+q+ATB3v4lvqkJz96+ZR+pip8gCH5bIUr5ot/hofgIRfAZWK58vzMUxfcw2F/hQ1D8ANMm+Aq9mt8JPsB0Mj8e+UIfe/vn/Olv5KHs7e3P+QC74gdY75onC34BRsFXSEqfCFOn+XUT/KDnk+0v8AGK4LcJouC7FQYlf4VF6b9DEb4vmfP97X+HX859fvT843Vq880D2dv/o7811udyv0AV/IjmK/AQfE6wKB4YxD5B8AGoYp9R8AsQ7f+0a287bsJQFIapTxxssA3/+z9rJVS1VVOmezeDOp1s7mI+LS1bxJZChH7WeAdkpXcKX4Gs8yHqPFXyfC4/jspNlG/+VbyTPD/6/G+X9EAyb9681Dun8SMcCh8D7Enu0wirpk/T+QyMGh90fgiwKPvs5oU+45PCH4DGeyjK/KDpv0Lpyv7z237mp+/jDmRBvvnX8YLn5y/yxd/gU5g3b/4enyF0uU8FWpT7vgIKf56JSe5jgNY1XtlnV+5XQOjmhf6AfVb4AkGR3wuMXe7nBrsiPwN7evf+3xN7AAR9zJt/yst3uPO+efPmb/LbmhXeAwofCzAp8kcgyn0qyj4NcHLflfkzr+494yz3DmhZ7mdgH3T5JSp91/lxeL/+GWC++HyZb/6lfL72+Yl80d8OztvmzYv8I/9gff5/H6DKfQ6ofARwCj+i61MAp+sfstw7gPrZfO4KDzQn9w5A4TMQZrmvQFDkT0DIuv5j1Hku87eH1aiC9TH/Yn678tsT+Vdn5uM98+bNfxDvwyT3KUBwcr/o9oe+BJVPZ76T529AyBf+8jz9bH6BJYn9BLDI8x3A1nX5VZ6fGzAp+yxJ6ZX9t+ufn6m/W5+3+pt/Oe+vnx99/tWxYOM2buOfanyGluU+AHuX+jQ1IERxfi5Ac1Lfz/wmzk9uBML8P/jNO7lfgSL3sQC73DuANiWpzwA+i/Pns//UxflNN1/XgFaTuE8D1sv8/OADMLrLfPPmn/JXO/qX3w+aN2/+P/X1iHK/AZM43xWAsQt9XE5/zEKftwBQoji/nfnpH/m41S72GQg+Cn1aAcZpluYvqPLjCFCqdL59B1jFfvAAYZH2j8r5dq+b77Bd+70/8nQAtOX3+ebNP+Wvd9zz+vWjefNaP3ywPuZFfqNluQcIm9DnndNPIh+nMQDQJL5HN/kVAJY/+TinJPX5OCYXhX4F1hrnPgh8LAAUaX5tnH6rWdTfNXX+yZeaRd4DELaaZetZdwBGf/N8Jyfz+Wp9/Buv8mF97G/e/JP+egt6vAbz5s2/is9J4QthEvsVIBxR5F2A0y9d4Avwzfv8Jw8g9gXk/gDkvtdd5xfuzfdB5d2Iyg9uvHe+PrzD+izxyueLfPPmn/OaLXoYzJv/az98sD7m39XHrPAe1pqEfgUI6zJL/AYAsNc/94mA3O+g8M43lc8+aPxcR+7M73VH5aei7cOd8011fW59Vve2f1wf8+bv84+vmsybN2/+Xfzc5b4fR43i/DWU0U9uFvlpb0HsU578WOR+iJNfFb4r85Nbjjvz58kfe1N4p+wf3Xbsyvmq+9+4Ps68+dv8V5yOdlOUBd3vAAAAAElFTkSuQmCC);background-position:0 0;-webkit-background-size:1224px 24px;background-size:1224px 24px}.ring>span,[class*=" ring-"]>span,[class^=ring-]>span{display:inline-block;-webkit-transform:scale(.9,1);-ms-transform:scale(.9,1);-o-transform:scale(.9,1);transform:scale(.9,1)}.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:#313c52;background-color:#fff!important}.messagger-zt .messager-icon>.icon{color:#2e7fff}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-icon>.icon{color:#22c98d}.messagger-zt.messager-danger .messager-icon>.icon{color:#fc5959}.messagger-zt.messager-warning .messager-icon>.icon{color:#ff9f46}.messagger-zt.messager-info .messager-icon>.icon{color:#37b2fe}.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:#313c52}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#313c52;word-break:break-all}.tree li>a:hover{color:#313c52}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#2e7fff}.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:#2e7fff}.tree li.has-active-item>.list-toggle{color:#313c52}.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:#313c52;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#313c52}.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:#18a6fd}.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:#313c52;background-color:#e6f0ff}.dropdown-submenu:hover>a:after{border-left-color:#2e7fff}.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:#18a6fd}.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:#0b0f18}.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:#313c52}.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:#c4c4c4;border:none;border:1px solid #c4c4c4}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#2e7fff;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(46,127,255,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#313c52}.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:#313c52}.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;word-break:break-all;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db;opacity:1}.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}.picker>.picker-selections>.picker-selection>.picker-selection-text{word-break:break-word}.chosen-container .chosen-drop.chosen-no-wrap>.chosen-results>li,.picker-drop-menu>.picker-option-list>.picker-option .picker-option-text{text-overflow:clip;white-space:nowrap!important}.picker-drop-menu>.picker-option-list>.picker-option .picker-option-text{display:block;overflow:hidden;word-break:break-word}.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{right:8px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#fc7272}.datetimepicker td.day.active{background-color:#18a6fd}.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:#2e7fff!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:unset;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:#2e7fff!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:#fc5959!important;-webkit-box-shadow:0 0 6px #febdbd!important;box-shadow:0 0 6px #febdbd!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#22c98d}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#22c98d}textarea.kindeditor{padding:0!important}.form-unsaved{outline:2px solid #ff9f46;-webkit-box-shadow:0 1px 12px #ff9f46;box-shadow:0 1px 12px #ff9f46;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}select[multiple].picker-select,select[multiple][data-toggle=picker]{max-height:32px;visibility:hidden}.picker-selection-remove:before{font-size:18px}.picker-user-option{position:relative;padding-left:40px}.picker-user-option>.avatar{position:absolute;top:5px;left:10px}.picker-user-option>.picker-option-text{display:inline-block;min-width:40px;font-weight:700}.picker-user-option>.dept-name,.picker-user-option>.role-name{display:inline-block;margin-left:10px;font-size:12px;opacity:.6}.picker-user-option>.dept-name{min-width:50px}#mainHeader{height:50px;color:#fff;background:#3785ff;border-top-color:#2e7fff;border-bottom-color:#e6f0ff}#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:unset;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:#18a6fd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#2e7fff}#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:unset;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{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:#fc5959;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}}#subHeader.admin-tab-menu{margin-bottom:-15px;background:unset}#subHeader.admin-tab-menu>.container>#subNavbar{text-align:left}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a{color:unset}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{position:absolute;content:'';border-bottom:2px solid #2e7fff;inset:0 12px}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:13px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#313c52}#subNavbar .nav>li>a:hover{color:#313c52;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#2e7fff}#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>[class*=" col-"],.main-row>[class*="-col"],.main-row>[class^=col-]{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}#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{padding:8px 5px}#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 #2e7fff;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:#2e7fff;text-align:center;text-overflow:unset;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:#7dcdfe;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:#2e7fff;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:#2e7fff}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#2e7fff}.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:unset;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:unset;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 #c4c4c4;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}#mainMenu>.btn-toobar .btn-link .label-light,#mainMenu>.btn-toolBar .btn-link .label-light,#mainMenu>.btn-toolbar .btn-link .label-light{color:#313c52;background:#fff}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#1e6aeb;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text{position:relative;font-size:14px;color:unset;background:unset}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text>span{color:unset}#mainMenu.menu-secondary>.btn-toolbar>a.btn{margin-right:10px}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{position:absolute;content:'';border-bottom:2px solid #2e7fff;inset:0 6px}#menu{background:#415a72}#userNav>li>a>.icon{color:#fff;filter:none;opacity:.25;-webkit-filter:none}.picker-option.picker-option-active,.picker-single .picker-option.picker-option-selected.picker-option-active{background:#2e7fff}select.form-control option.selected,select.form-control option:hover{background:#2e7fff}#guideDialog .project-type-img:hover,#guideDialog .project-type.active img,.kanbans .panel:hover{border-color:#2e7fff}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#3785ff}#assigntomeBlock .nav>li.active>a{color:#1e6aeb}.consumedTotally{color:#2e7fff;background:#e6f0ff}#toggleFoldIcon .icon-border{border:1px solid #d5e5ff}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#2e7fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #2e7fff;box-shadow:0 0 1px 1px #2e7fff}.border-primary-hover:hover{border:1px solid #2e7fff}.menu-hover-primary>li>a:hover{color:#1e6aeb!important;background-color:#d5e5ff!important}.menu-active-primary>li.active>a{color:#2e7fff!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#d5e5ff!important}.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:unset;white-space:nowrap}.assigned-none{color:#1e6aeb!important;background:inherit}.assigned-current{color:#f38f19!important;background:inherit}.assigned-other{color:#313c52!important;background:inherit}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#1e6aeb!important;background:#fff;border-color:#fff!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#1e6aeb!important}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:unset;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;text-overflow:unset;white-space:nowrap;vertical-align:middle}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#2e7fff;background:#e6f0ff}td.c-actions .btn.disabled,td.c-actions .btn[disabled]{pointer-events:auto}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:#313c52}.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:unset;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 caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.table tbody>tr>td.c-name a{color:#2463c7}.table tbody>tr>td.c-name a:hover{color:#1e6aeb}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}.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:#e6f0ff;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:unset;white-space:nowrap}.main-table td,.main-table th{border-bottom:none!important}.main-table thead>tr{background:#fcfdfe;border-bottom:1px solid #f4f5f7}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:unset;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#2463c7}.main-table tbody>tr>td>a:not(.btn):visited{color:#003994;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#2e7fff}.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:#2e7fff;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>td.c-name a{color:#2463c7}.main-table tbody>tr>td.c-name a:hover{color:#1e6aeb}.main-table tbody>tr{border-bottom:1px solid #f4f5f7;-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:rgba(230,240,255,.8)}.main-table .table-grouped tbody>tr:hover{background:#f0f6ff;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f0f6ff}.main-table tbody>tr.checked{background:#fff4ea}.main-table tbody>tr.checked:hover{background:#ffe6c6}.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:#313c52}.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:0;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:#22c98d!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:5;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{display:none;height:28px}.table-actions.show-always{display:block;pointer-events:none;cursor:not-allowed}.has-row-checked .table-actions{display:block;pointer-events:auto!important;cursor:default}.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:#313c52}.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:#313c52;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:#2e7fff;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,.table.fixed-header-copy thead>tr{background:0 0}.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:#22c98d!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:#2463c7}.table-data tbody>tr>td>a:not(.btn):visited{color:#003994}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#2e7fff}.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:#ffe6c6}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{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:12px;color:#888fa1;content:"\e926";-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.table-nest-toggle:after{position:absolute;top:4px;right:4px;bottom:4px;left:4px;display:inline-block;content:"";border:1px solid;border-radius:50%}.table-nest-toggle:hover{color:#2e7fff;background-color:rgba(0,0,0,.1)}.table-nest-child-hide .table-nest-toggle:before{font-size:12px;content:"\e925"}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:absolute!important;font-size:12px!important;line-height:22px!important;content:"\e959"!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:12px!important;content:"\e95a"!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:#c4c4c4;border-radius:1px}.table-nest-child-hover>td:first-child,.table-nest-hover>td:first-child{-webkit-box-shadow:inset 3px 0 0 #c4c4c4;box-shadow:inset 3px 0 0 #c4c4c4}.c-manager .avatar{position:relative;z-index:2;line-height:17px;border:1.5px solid transparent}.c-manager .avatar.avatar-top{border-color:#ffaf65}.c-manager a{position:absolute;top:8px;left:16px;height:20px;padding:0 8px 0 13px;line-height:20px!important;color:#313c52!important;background:#f4f5f7;border-radius:10px}.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!important}.article-content table th{background:#eee}.article-content a{color:#2e7fff}.article-content a:focus,.article-content a:hover{color:#18a6fd}.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:#313c52}.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:#2e7fff}.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:#313c52}.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:#2e7fff;border-color:#2e7fff}.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:unset;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:#e6f0ff;background-color:#2e7fff}.list-group>a.active{color:#2e7fff;background-color:#e6f0ff}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#2e7fff}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.list-group.tab-menu>a{padding:6px 24px}.list-group.tab-menu>a.active{background:unset}.list-group.tab-menu>a.active:hover,.list-group.tab-menu>a:hover{color:#2e7fff;background-color:unset}.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:#2e7fff;background-color:#e6f0ff}.search-list .list-group>a.active:hover,.search-list.searchbox-focus .list-group>a.active:hover{color:#fff;background-color:#2e7fff}#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:-5px;left:0;padding:8px 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 .tree li>.selected{color:#2e7fff!important;background:#e6f0ff!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#2e7fff!important}#swapper #dropMenu .tree{margin:0}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#2e7fff!important;background:#e6f0ff!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#2e7fff!important}.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:#c2dbff}.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:unset;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e6f0ff}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#2e7fff}.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 #c2dbff}.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 #c2dbff}.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:#2e7fff}.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:unset;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:#18a6fd}#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:#313c52}#poweredBy a:hover{color:#2e7fff}#poweredBy a:hover .icon-zentao{color:#2e7fff}#poweredBy a.text-important{color:#ff6f42}#poweredBy a.text-important:hover{color:#fc5959}#poweredBy a.text-primary{color:#2e7fff}#poweredBy a.text-primary:hover{color:#18a6fd}#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:unset;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 #b2b2b2;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:#2e7fff;background:#e6f0ff}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#0b0f18;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:#2e7fff}.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:#2e7fff}.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 #c4c4c4;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:#ababab;-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:#2e7fff;-webkit-box-shadow:none,0 0 8px rgba(46,127,255,.6);box-shadow:none,0 0 8px rgba(46,127,255,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b2b2b2;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:#2e7fff;-webkit-box-shadow:none,0 0 8px rgba(46,127,255,.6);box-shadow:none,0 0 8px rgba(46,127,255,.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}.picker{min-height:32px;background-color:#eee}.picker:not(.picker-ready)>*{display:none}.picker-selections{position:relative;min-height:32px;color:#0b0f18;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none}.picker-focus .picker-selections{border-color:#2e7fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(46,127,255,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(46,127,255,.6)}.disabled .picker-selections{cursor:not-allowed;background-color:#f5f5f5}.picker-multi .picker-selections{padding:3px}.picker-multi.picker-focus .picker-selections:before{position:absolute;right:0;bottom:8px;display:block;width:24px;height:14px;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;content:"\e928";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.picker-multi.picker-focus.picker-loading .picker-selections::before{display:inline-block;content:"\e982";-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}.picker-multi .picker-selection{position:relative;display:inline-block;padding:0 20px 0 5px;margin:2px;line-height:18px;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #c4c4c4;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)}.picker-selection-single{max-width:100%;padding:5px 20px 5px 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker-focus .picker-selection-single .picker-selection-text{display:none}.picker-selection-single:after{position:absolute;top:7px;right:0;display:block;width:24px;height:14px;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;content:"\f0d7";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.picker-focus .picker-selection-single::after{content:"\e928"}.picker-focus.picker-loading .picker-selection-single::after{display:inline-block;content:"\e982";-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}.picker-selection-remove{position:absolute;top:0;right:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:18px;height:18px;text-align:center;cursor:pointer;opacity:.2;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.picker-selection-remove: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}.picker-selection-remove:hover{opacity:.5}.picker-single .picker-selection-remove{top:5px;right:20px;z-index:1}.picker-no-value .picker-selection-remove,.picker-single.picker-focus .picker-selection-remove{display:none}.picker-multi.picker-sortable .picker-selection-text{cursor:move}.picker-search{color:transparent;background:0 0;border:none}.picker-search:focus{color:inherit;outline:0}.disabled .picker-search{cursor:not-allowed}.picker-single .picker-search{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;padding:5px 8px}.picker-multi .picker-search{display:inline-block;width:10px;min-width:10px;max-width:100%;padding:0 2px;margin:2px 0}.picker-placeholder{position:absolute;top:5px;right:20px;left:8px;z-index:0;display:none;overflow:hidden;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.picker-no-value.picker-focus .picker-placeholder{display:none}.picker-input-empty.picker-focus.picker-no-value .picker-placeholder,.picker-no-value .picker-placeholder{display:block}.picker-drop-menu{position:fixed;z-index:1200;display:none;min-width:100px;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.12),0 1px 3px rgba(0,0,0,.1);box-shadow:0 6px 12px rgba(0,0,0,.12),0 1px 3px rgba(0,0,0,.1);opacity:0}.picker-drop-menu.picker-drop-show{display:block}.picker-option-list{padding:5px 0;margin:0;overflow-y:auto}.picker-no-options .picker-option-list{display:none}.picker-option{display:block;min-height:30px;padding:5px 10px;overflow:hidden;clear:both;font-weight:400;line-height:1.42857143;color:#313c52;text-overflow:ellipsis;white-space:nowrap;-webkit-transition:none;-o-transition:none;transition:none}.picker-single .picker-option.picker-option-selected{color:#2e7fff;background:#e6f0ff}.picker-option:focus,.picker-option:hover{text-decoration:none}.picker-option.picker-option-active,.picker-single .picker-option.picker-option-selected.picker-option-active{color:#fff;background-color:#2e7fff}.picker-multi .picker-option.picker-option-selected,.picker-multi .picker-option.picker-option-selected.picker-option-active{color:#ccc;cursor:not-allowed;background-color:#fff}.picker-option.disabled{cursor:not-allowed!important}.picker-option-text-matched{position:relative;color:#2e7fff}.picker-option-text-matched:before{position:absolute;right:0;bottom:-4px;left:0;display:block;height:2px;content:' ';background-color:#2e7fff;border-radius:2px;opacity:.5}.picker-option-active .picker-option-text-matched,.picker-option:hover .picker-option-text-matched{color:#fff}.picker-option-active .picker-option-text-matched:before,.picker-option:hover .picker-option-text-matched:before{background-color:#fff}.picker-message{display:none;height:22px;padding:2px 5px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap;background-color:#f1f1f1}.picker-has-message .picker-message{display:block}.picker-message[data-type=danger]{color:#fc5959}.picker-actions{padding:5px;border-top:1px solid #eee}.picker-no-actions .picker-actions{display:none}.picker-actions .btn{padding:2px 4px}.picker-actions .btn[disabled]{background-color:transparent;filter:grayscale(1);-webkit-filter:grayscale(1)}.picker-actions .btn+.btn{margin-left:4px}.picker-checkable .picker-option{position:relative;padding-left:32px;color:inherit!important;cursor:pointer!important}.picker-checkable .picker-option>.checkbox-primary{position:absolute;top:4px;left:10px}.picker-checkable .picker-option.picker-option-active{background-color:rgba(0,0,0,.05)!important}.picker-checkable .picker-option:hover{background-color:rgba(0,0,0,.075)!important}.picker-checkable .picker-option.picker-option-selected{background-color:#e6f0ff!important}.picker-checkable .picker-option-active .picker-option-text-matched,.picker-checkable .picker-option:hover .picker-option-text-matched{color:#2e7fff!important}.picker-checkable .picker-option-active .picker-option-text-matched:before,.picker-checkable .picker-option:hover .picker-option-text-matched:before{background:#2e7fff!important}:root{--color-primary:#2e7fff;--color-secondary:#18a6fd;--color-pale:#e6f0ff;--color-fore:#313c52;--color-back:#fff;--color-red:#fc5959;--color-yellow:#ff9f46;--color-green:#22c98d;--color-blue:#37b2fe;--color-purple:#8166ee;--color-brown:#ff6f42;--color-danger:#fc5959;--color-warning:#ff9f46;--color-success:#22c98d;--color-info:#37b2fe;--color-special:#8166ee;--color-important:#ff6f42;--color-green-pale:#ecfff8;--color-yellow-pale:#fff4ea;--color-red-pale:#ffebeb;--color-blue-pale:#e7f6ff;--color-brown-pale:#fff2ed;--color-purple-pale:#efecfa;--link-color:#313c52;--link-hover-color:#2e7fff;--color-gray-darker:#0b0f18;--color-gray-dark:#313c52;--color-gray:#838a9d;--color-gray-light:#c4c4c4;--color-gray-lighter:#eee;--color-gray-pale:#f1f1f1;--border-radius:4px;--border-radius-lg:6px;--border-radius-sm:3px;--bg-gradient:#3785ff}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{color:#313c52;background-color:#f4f5f7}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:#313c52}.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:#ff9f46}.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:#18a6fd}a.text-primary{color:#2e7fff}.text-primary-400{color:#3785ff}.text-primary-600{color:#1e6aeb}.text-primary-700{color:#2463c7}.text-primary-900{color:#063072}.text-green-400{color:#48d1a0}.text-yellow-400{color:#ffaf65}.text-blue-400{color:#60c2ff}.text-red-400{color:#ff7c7c}.text-important-400{color:#ff9777}.text-purple-400{color:#8a6ff5}.text-green-600{color:#0dbb7d}.text-yellow-600{color:#f38f19}.text-blue-600{color:#00c0e9}.text-red-600{color:#fb2b2b}.text-important-600{color:#ff6f42}.text-purple-600{color:#7055df}.text-green-700{color:#0ca76f}.text-yellow-700{color:#ed8307}.text-blue-700{color:#1099ed}.text-red-700{color:#d91b1b}.text-important-700{color:#ff4912}.text-purple-700{color:#513baa}.text-green-900{color:#186c4e}.text-yellow-900{color:#af5f01}.text-blue-900{color:#046bab}.text-red-900{color:#a20606}.text-important-900{color:#611700}.text-purple-900{color:#30216f}.text-gray-14,.text-title{color:#0b0f18}.icon-important,.text-color,.text-gray-13{color:#313c52}.text-gray-12{color:#5e626d}.icon-common,.text-gray-11{color:#838a9d}.icon-secondary,.text-gray-10{color:#9ea3b0}.text-disabled{color:#c4c4c4}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#2e7fff;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#2e7fff;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#c4c4c4;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:#fc5959!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#fc5959;content:"\e92b"}.bg-primary{color:#fff;background:#3785ff;border-top-color:#2e7fff}.bg-primary-pure{color:#fff;background-color:#2e7fff}.bg-primary-pale{color:#2e7fff;background-color:#e6f0ff}.bg-secondary{color:#fff;background:#18a6fd}.line-gray-8{background:#d8dbde}.line-gray-5{background:#e3e4e9}.line-gray-7{background:#eee}.bg-gray-1{background:#e3e4e9}.bg-gray-2{background:#edeef2}.bg-gray-3{background:#f8f8f8}.bg-green-400{background:#48d1a0}.bg-yellow-400{background:#ffaf65}.bg-blue-400{background:#60c2ff}.bg-red-400{background:#ff7c7c}.bg-important-400{background:#ff9777}.bg-purple-400{background:#8a6ff5}.bg-green-600{background:#0dbb7d}.bg-yellow-600{background:#f38f19}.bg-blue-600{background:#00c0e9}.bg-red-600{background:#fb2b2b}.bg-important-600{background:#ff6f42}.bg-purple-600{background:#7055df}.bg-green-700{background:#0ca76f}.bg-yellow-700{background:#ed8307}.bg-blue-700{background:#1099ed}.bg-red-700{background:#d91b1b}.bg-important-700{background:#ff4912}.bg-purple-700{background:#513baa}.bg-green-900{background:#186c4e}.bg-yellow-900{background:#af5f01}.bg-blue-900{background:#046bab}.bg-red-900{background:#a20606}.bg-important-900{background:#611700}.bg-purple-900{background:#30216f}.bg-hover{background:#f6f6f6}.bg-active{background:#e6eaf1}.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.44);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.44) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.44) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.44) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.44) 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-info-sign:before{content:"\e9d5"}.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-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-sonarqube:before{content:"\e9ba"}.icon-college:before{content:"\e9c8"}.icon-ztool:before{content:"\e9c1"}.icon-contacts:before{content:"\e9c3"}.icon-chats:before{content:"\e9c4"}.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-info: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-table-sort:before{content:"\e9e1"}.icon-design:before{content:"\e9ec"}.icon-download-alt:before{content:"\e9ea"}.icon-blame:before{content:"\e9e0"}.icon-draft-edit:before{content:"\e9dd"}.icon-sub-review:before{content:"\e9df"}.icon-sub-review-user:before{content:"\e9db"}.icon-ztf:before{content:"\e9dc"}.icon-save:before{content:"\e9d8"}.icon-list-box:before{content:"\e9b4"}.icon-usecase:before{content:"\e99d"}.icon-code:before{content:"\e990"}.icon-summary:before{content:"\e9ad"}.icon-more-alt:before{content:"\e9a7"}.icon-customer:before{content:"\e9d9"}.icon-waterfallplus:before{content:"\e9ed"}.icon-agileplus:before{content:"\e9ee"}.icon-horn:before{content:"\e9eb"}.icon-resume:before{content:"\e9e9"}.icon-mirror:before{content:"\e9e6"}.icon-remote:before{content:"\e9e7"}.icon-moon:before{content:"\e9e8"}.icon-ticket:before{content:"\e9e1"}.icon-gantt-alt:before{content:"\e9e2"}.icon-appose:before{content:"\e9e2"}.icon-inline:before{content:"\e9e3"}.icon-tree:before{content:"\e9c9"}.icon-list:before{content:"\e9cb"}.icon-gantt:before{content:"\e9cc"}.icon-group-view:before{content:"\e9cd"}.icon-inherit-space:before{content:"\e9c2"}.icon-card-archive:before{content:"\e9b8"}.icon-col-archive:before{content:"\e9b9"}.icon-col-add-right:before{content:"\e9bb"}.icon-col-add-left:before{content:"\e9bc"}.icon-col-split:before{content:"\e9bd"}.icon-waterfall:before{content:"\e9a4"}.icon-manual:before{content:"\e98d"}.icon-kanban:before{content:"\e983"}.icon-lane:before{content:"\e9b1"}.icon-snap-house:before{content:"\e9e3"}.icon-wrench:before{content:"\e9e4"}.icon-desktop:before{content:"\e9e5"}.icon-back:before{content:"\e9d3"}.icon-back-circle:before{content:"\e9da"}.icon-shield:before{content:"\e9ca"}.icon-meh:before{content:"\e9ce"}.icon-frown:before{content:"\e9cf"}.icon-smile:before{content:"\e9d0"}.icon-unlock-solid:before{content:"\e9d1"}.icon-lock-solid:before{content:"\e9d2"}.icon-ver:before{content:"\e9c6"}.icon-publish:before{content:"\e9c7"}.icon-send:before{content:"\e9c7"}.icon-tag:before{content:"\e9be"}.icon-tag-lock:before{content:"\e9bf"}.icon-code-fork:before{content:"\f126"}.icon-branch-lock:before{content:"\e9c0"}.icon-groups:before{content:"\e9af"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-thumbs-up-solid:before{content:"\e9d6"}.icon-thumbs-down-solid:before{content:"\e9d7"}.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-minuse-solid-circle:before{content:"\e9b6"}.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-undo:before{content:"\e93f"}.icon-redo:before{content:"\e9d4"}.icon-swap:before{content:"\e9b0"}.icon-chat-solid:before{content:"\e9b5"}.icon-clock:before{content:"\e97c"}.icon-cost:before{content:"\e97d"}.icon-pencil-alt:before{content:"\e984"}.icon-size-height:before{content:"\e9c5"}.icon-file-log:before{content:"\e9de"}.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-diff:before{content:"\e9b7"}.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:#fc5959;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:#313c52;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:#313c52;background-color:#fff;border-color:#d8dbde}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#313c52;background-color:rgba(255,255,255,.8);border-color:#bcc2c7}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#bcc2c7}.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(49,60,82,.3);background-color:#fff;border-color:#d8dbde}.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:#2e7fff;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(46,127,255,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#156fff;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:#2e7fff;border-color:transparent}.btn-secondary{color:#fff;background-color:#18a6fd;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(24,166,253,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#029bf9;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:#18a6fd;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9f46;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,159,70,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#ff922c;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:#ff9f46;border-color:transparent}.btn-danger{color:#fff;background-color:#fc5959;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(252,89,89,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#fc4040;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:#fc5959;border-color:transparent}.btn-success{color:#fff;background-color:#22c98d;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(34,201,141,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#1eb37e;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:#22c98d;border-color:transparent}.btn-info{color:#2e7fff;background-color:#e6f0ff;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#2e7fff;background-color:rgba(230,240,255,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#cce1ff;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(46,127,255,.3);background-color:#e6f0ff;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#313c52;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:#0b0f18;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:#c4c4c4;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:unset;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:#18a6fd;text-align:center;background:#e6f0ff}.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:#2e7fff}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #2e7fff}.btn-active-line:hover{color:#2e7fff}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#1e6aeb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #2e7fff}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #c4c4c4;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 #c4c4c4;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 #c4c4c4;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:#2e7fff}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#2e7fff}.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 #2e7fff}.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 #2e7fff}.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:#c4c4c4}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#313c52}.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 #c4c4c4}.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 #c4c4c4!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(46,127,255,.8)}.btn.btn-action,.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#18a6fd;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:#2e7fff;background-color:#cce1ff}.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:#b3d1ff!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#2e7fff!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#fc5959;background:#ffebeb;border-color:rgba(252,89,89,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e6f0ff!important;border-color:rgba(46,127,255,.25)}.label-outline.label-success{background:#ecfff8;border-color:rgba(34,201,141,.25)}.label-outline.label-info{background:#e7f6ff;border-color:rgba(55,178,254,.25)}.label-outline.label-warning{background:#fff4ea;border-color:rgba(255,159,70,.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:#fc5959}[class*=" status-"],[class^=status-]{color:#313c52}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#fc5959}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#fc5959}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#2e7fff}.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:#22c98d}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#fc5959}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#313c52;background:0 0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9f46}.status-pause,.status-suspended{color:#ff9f46}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9f46}.status-active.status-bug,.status-draft{color:#8166ee}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8166ee}.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:#c4c4c4}.label-pri{display:inline-block;min-width:18px;max-width:100%;height:18px;padding:0 4px;overflow:hidden;font-size:12px;line-height:16px;color:#838a9d;text-align:center;text-overflow:clip;white-space:normal;vertical-align:middle;border:1px solid #838a9d;border-radius:10px}.label-pri-1,.label-selector>.label-pri[data-value="1"]{overflow:visible;color:#ff6f42;border-color:#ff6f42}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#f38f19;border-color:#f38f19}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#37b2fe;border-color:#37b2fe}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#22c98d;border-color:#22c98d}.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="1"],.label-severity[data-value="1"]{color:#fb2b2b}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#c92d79}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#f48116}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#ffba34}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#9ea3b0}.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:20px;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:3px;right:0;left:0;display:block;width:14px;height:14px;line-height:14px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:1px solid #d9dbe1;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:#22c98d;border-color:#22c98d;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 input:indeterminate+label:before,.checkbox-primary.indeterminate>label:before,.radio-primary input:indeterminate+label:before,.radio-primary.indeterminate>label:before{top:9px;left:3px;width:8px;height:2px;content:' ';background-color:#a3a2bc;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:#22c98d;-webkit-box-shadow:0 0 0 3px rgba(34,201,141,.2);box-shadow:0 0 0 3px rgba(34,201,141,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#22c98d}.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:#22c98d;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#22c98d}.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}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li>a{position:relative;border:none!important;border-radius:2px!important}.nav-tabs>li.active>a{font-weight:700;color:#313c52!important}.nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#2e7fff}.nav-tabs-primary>li.active>a{color:#1e6aeb!important}.nav-steps{height:29px;text-align:center}.nav-steps>ul{display:inline-block;margin:0}.nav-steps>ul>li{position:relative;background-color:#fff}.nav-steps>ul>li.active>a{color:#fff;background-color:#18a6fd}.nav-steps>ul>li>a{min-width:119px;padding:5px 20px;text-align:center;border:1px solid transparent;-webkit-transition:none;-o-transition:none;transition:none}.nav-steps>ul>li>a:hover{background-color:transparent}.nav-steps>ul>li.active>a:focus,.nav-steps>ul>li.active>a:hover{background-color:#2e7fff}.nav-steps>ul>li+li>a{padding-left:34px}.nav-steps>ul>li+li:after,.nav-steps>ul>li+li:before{position:absolute;top:0;left:0;width:-1;height:0;content:' ';border-color:transparent transparent transparent #a6aab8;border-style:solid;border-width:15px 0 15px 15px}.nav-steps>ul>li+li:after{left:-2px;border-left-color:#fff}.nav-steps>ul>li.active+li:after{border-left-color:#18a6fd}.nav-steps>ul>li:hover{background-color:#eceef3}.nav-steps>ul>li:hover+li:after{border-left-color:#eceef3}.nav-steps>ul>li.active:hover+li:after{border-left-color:#2e7fff}.nav-steps.editor-steps-advance>ul>li:last-child:after,.nav-steps.editor-steps-advance>ul>li:last-child:before{display:none}.nav-steps.editor-steps-advance>ul>li:last-child>a{padding-left:19px}.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:#313c52;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#2e7fff}.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:#2e7fff;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:#2e7fff;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}.ring,[class*=" ring-"],[class^=ring-]{width:24px;height:24px;font-size:12px;line-height:24px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACZAAAAAwCAMAAACyyT3hAAAAP1BMVEUAAAAAAAA5rm06sG87snE4q200o2o7sG86r244q2w6r244rWw7snA7sG86rG05rm07snA5qWw7sW86sG48s3ECZypFAAAAFHRSTlMACl2b8TkPtnsqj0fVv4Zt4RrIqxUkbyYAAA1gSURBVHja7NrbbtswEIRhmyJ1IiVS0v/+z9rCbeGkdZodNEnVdHmTxP4wmF1exLB9eXCu12tqLX39cTGcm78use2z5Msx19wLfunGpOZvSv4xh/798tt+dKPSZ+jGMNn9/pWnXp1X7f9e+ynf53Xv3r37j/bLyfq4/1u+n8T8VI8jLWY/hbEbSjT76+2ssH77zeyBJHooom9dkHzssuQ5wvau+YuWz141/87zMoTewP9kP+7d2/31ZPln82e7L/fuP9LnJPk+DDDb/TQvEaDc/1//vk9Yvrl7vmHa+ztk347BXwcA1UMRPXCIfq+b5Jm3d82PneY5guSHG1fmVfu/837m5N69e/fu3T89fRZ9bRTBpyMCLFa/zfG7CU98l1/M/+EBS/59PT//bfD9lCS/pbAeR7bnb1OqC7AI+QWAkiz5Kdd1B6BVLb8Fk891Poox/7bPUNcIwGHrM3YDAHu1zyv0yWHcjfNen++nWvsvANC5d6/468nyz+bPdl/u3es+NFbFjw1A8BGAPUv5xGFMz/382HcAsNy+W9Sb9/PwwbP4ra5J8WluQDb7qQ4Ayybl05nnrQVgSFafB4AyWfvPEaBT57X2Seu3ecX9HBfN75t79+7du/+sPnVBy++A1e6nHaAEsz9ufk7W/gUgrvmBP/pf/bYDtDlp+/x8j4du1XwBFsHvQMlW348NIJjz0yH5bbz1n7R5m71/bUAL2n5iMueHAYjZvXv37t1/Tp8bJMFPDYhCfgTa2Ft9aEDJ5vzUbvnbC3562GcI5j6vf3T43/h+hlnJnwFGs99WgGDPv/lq9yPQsjCv1mcT/aUDGEVf3bt37979v+DH1kk+RIiCrwCz0AeI82bvc8vvzT5HYP1NfnjQv3uL/d+f/X/8ljUfGiD4ChDsPkcgCX0iUMX8UfDDw/6Xl+fV+q8Awb373/rLyfLP5s92X+4/rQ8QFV+BmO0+AyTND0nqT1H6xFf715/zWe35l5fXf3/e/YtnGugUnxsQhD47sNl9Klp+ipq/DmL/ovXPAJN79+7du/9on5dV80An+BEoye4nYLhofu/tPgAtafO26RWfn/chv9F93YX7N/PTDoOSHzW/LVA2Ib9Am+y+34Es5DdYlHmB2Lt37969+4/1fYQs+KlB6e0+Acsm9CnQXTQfJ61PTMI+dyiv99me7pO3u6+7cf9mvj/Ikgc6xRfNXyIcgt8KLIoX+0/A4d69e/fu/8znoPkOBsH3O8Qk5C8wiH12xR9AFvwAUfEzREOf/Wmf6Q3v967cv52fNJ+BIPgg+gmogk/xmb9a+lex/+ze/WN/PVn+2fzZ7sv93/MVVsUHIAn+AKrgV4hK/gxsYv+q7Ycg+AxMFt/d+9vy/QXZP+RHCIrvoGyCr9B6wa/QNq3/ftHyye7df2HP3pbQBKIgihqGmzKA4P7/b02lTOX2EncSEky1z8uungPosYyPj/8Nv8Mk/HaHm/Adzk/AIvy1hUb4vkKR5y0yf33Nd+K89vo+Xfy/81Oj/FahmPwBRuH7CjeTX6GRfUp8fHx8/Fc/UpRvoBpf4L4ZL/MfsLvzUoxfgM6e1/V5vNjn9jl/eLV/FrL/2DcwS1+lZxN+9X3a+Pj4+Pgvvm9B5Q8wyvxV+K11+VdgMv2r810LRZ63MX1m6IwX+ep+eMr49/HL3ChfoTF+eD65r/q+wiTy+zus8fHf+8vJ8s/mz3a94n/im075FarxE7Sby2975+8mf5T9G9gvLp/O9Jf5nfHNcz6vzzMLWfyX1wiz8Ss8ZP5g/A32+Pj4+P/XP0D5GRbjC9xkfjF+l/lV9h9gtP2PnOfN9JntfMQPsCeN/3/9dmc2/gqtym+d74BrfHx8/P/q+xaM34CryZf+CnTCT9Ca/A7YnG+N71V/P89La/r7eZ5pIYj/x35aNuUH6IzfpZ+hiY+Pj38X35dF+Ql241eoxncwGD/K/EbmL8r7/En2X+X8J99/dveb+4L/EB//zX+Wo/EFVunH+Pj4+HfxI0zG3+BmfIHF+AaKzB/VeU+Wv8BwZJ/14P56IbvEx39+bdDIBa4YP8bHx8e/kS/QGb/DZPwDVuMXGGV+Y3yR+QM+X/py5HlvB/e3C1l8/Fe/TYZfJtjNGxoY4uN/8JeT5Z/Nn+16vbVf7kX5Ga7GV+iM32Ey/gHNkfnDyfJnWA+d58H9L+aB/4Tj43/Vb4DxHdT4+Pj4f+WhVb7CZnwrfYWr8Tt0xt9lfj1ZfoVJedvn4P5ZyOL/nn+wGN9DGx8fH/+vPKB8630f/0f9drI+ymchiz+vB5Q/4Qd6fHz8efxCycIU/5G9e9lRHAaAKEr7kZi8nIT7/986UlatWaWGCbjpYn1UKizAQU7sZr0vyOzb9QkUv8Ek+qT4u77ksYv5q5g/tZQv91F9g0ta9j/Loy8RZnv7795LlvYf4b/U/JgWccLur/xBH2EXfbw4v28pP8B8cZ9HgzfR27/Tj9utpZvK7e2f8W09tWdv/8S+aBmi4OWnPis8FF+gKD7o+VHM78X8QfGD3uch+qG1bQ7s3+sDbIqPUEVf7O2/+5a2vWhqHyx7+++vUbwAGsQJfhEnjAhB8UXPLy3l97BcOgF7Y2H7v3yBeuVGqcXe/oW+qaN77O2f8jF2it9hVPwE9eKjpYqYH0S/XJk/ieM5i+P5gLG1o3Ls/7PfllE9Gkj0u3r0jb39q3xbE6q9/Qs9pE7wd+BKn4FNyU8wCn4DsuKT5vPF49Phw+k/389Mm+IT3DWf5MOh7e1f5G/n1ywPaW//MR4eil9EP0AU83sxf1d8Ub3YJ4q+iONZYRDHZ7b/aX6GovgIVfG9kr8ffYbz+fb2z/nbTZnw7O2f8V9N9clV8hMEwW8JRsF3q5i/QlX676rX+mSgqPmKnyGr42n/dh/mRfEjTIoP0Kv53Vlfj/z1tA/29s/5039hDmdv/2s9pE7wBXolv+r5aRP8CIh+UvpHSFnwQXy/GeabmG//fj9DUPyk+Q0IYp+q+ATB3v4lvqkJz96+ZR+pip8gCH5bIUr5ot/hofgIRfAZWK58vzMUxfcw2F/hQ1D8ANMm+Aq9mt8JPsB0Mj8e+UIfe/vn/Olv5KHs7e3P+QC74gdY75onC34BRsFXSEqfCFOn+XUT/KDnk+0v8AGK4LcJouC7FQYlf4VF6b9DEb4vmfP97X+HX859fvT843Vq880D2dv/o7811udyv0AV/IjmK/AQfE6wKB4YxD5B8AGoYp9R8AsQ7f+0a287bsJQFIapTxxssA3/+z9rJVS1VVOmezeDOp1s7mI+LS1bxJZChH7WeAdkpXcKX4Gs8yHqPFXyfC4/jspNlG/+VbyTPD/6/G+X9EAyb9681Dun8SMcCh8D7Enu0wirpk/T+QyMGh90fgiwKPvs5oU+45PCH4DGeyjK/KDpv0Lpyv7z237mp+/jDmRBvvnX8YLn5y/yxd/gU5g3b/4enyF0uU8FWpT7vgIKf56JSe5jgNY1XtlnV+5XQOjmhf6AfVb4AkGR3wuMXe7nBrsiPwN7evf+3xN7AAR9zJt/yst3uPO+efPmb/LbmhXeAwofCzAp8kcgyn0qyj4NcHLflfkzr+494yz3DmhZ7mdgH3T5JSp91/lxeL/+GWC++HyZb/6lfL72+Yl80d8OztvmzYv8I/9gff5/H6DKfQ6ofARwCj+i61MAp+sfstw7gPrZfO4KDzQn9w5A4TMQZrmvQFDkT0DIuv5j1Hku87eH1aiC9TH/Yn678tsT+Vdn5uM98+bNfxDvwyT3KUBwcr/o9oe+BJVPZ76T529AyBf+8jz9bH6BJYn9BLDI8x3A1nX5VZ6fGzAp+yxJ6ZX9t+ufn6m/W5+3+pt/Oe+vnx99/tWxYOM2buOfanyGluU+AHuX+jQ1IERxfi5Ac1Lfz/wmzk9uBML8P/jNO7lfgSL3sQC73DuANiWpzwA+i/Pns//UxflNN1/XgFaTuE8D1sv8/OADMLrLfPPmn/JXO/qX3w+aN2/+P/X1iHK/AZM43xWAsQt9XE5/zEKftwBQoji/nfnpH/m41S72GQg+Cn1aAcZpluYvqPLjCFCqdL59B1jFfvAAYZH2j8r5dq+b77Bd+70/8nQAtOX3+ebNP+Wvd9zz+vWjefNaP3ywPuZFfqNluQcIm9DnndNPIh+nMQDQJL5HN/kVAJY/+TinJPX5OCYXhX4F1hrnPgh8LAAUaX5tnH6rWdTfNXX+yZeaRd4DELaaZetZdwBGf/N8Jyfz+Wp9/Buv8mF97G/e/JP+egt6vAbz5s2/is9J4QthEvsVIBxR5F2A0y9d4Avwzfv8Jw8g9gXk/gDkvtdd5xfuzfdB5d2Iyg9uvHe+PrzD+izxyueLfPPmn/OaLXoYzJv/az98sD7m39XHrPAe1pqEfgUI6zJL/AYAsNc/94mA3O+g8M43lc8+aPxcR+7M73VH5aei7cOd8011fW59Vve2f1wf8+bv84+vmsybN2/+Xfzc5b4fR43i/DWU0U9uFvlpb0HsU578WOR+iJNfFb4r85Nbjjvz58kfe1N4p+wf3Xbsyvmq+9+4Ps68+dv8V5yOdlOUBd3vAAAAAElFTkSuQmCC);background-position:0 0;-webkit-background-size:1224px 24px;background-size:1224px 24px}.ring>span,[class*=" ring-"]>span,[class^=ring-]>span{display:inline-block;-webkit-transform:scale(.9,1);-ms-transform:scale(.9,1);-o-transform:scale(.9,1);transform:scale(.9,1)}.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:#313c52;background-color:#fff!important}.messagger-zt .messager-icon>.icon{color:#2e7fff}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-icon>.icon{color:#22c98d}.messagger-zt.messager-danger .messager-icon>.icon{color:#fc5959}.messagger-zt.messager-warning .messager-icon>.icon{color:#ff9f46}.messagger-zt.messager-info .messager-icon>.icon{color:#37b2fe}.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:#313c52}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#313c52;word-break:break-all}.tree li>a:hover{color:#313c52}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#2e7fff}.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:#2e7fff}.tree li.has-active-item>.list-toggle{color:#313c52}.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:#313c52;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#313c52}.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:#18a6fd}.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:#313c52;background-color:#e6f0ff}.dropdown-submenu:hover>a:after{border-left-color:#2e7fff}.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:#18a6fd}.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:#0b0f18}.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:#313c52}.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:#c4c4c4;border:none;border:1px solid #c4c4c4}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#2e7fff;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(46,127,255,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#313c52}.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:#313c52}.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;word-break:break-all;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db;opacity:1}.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}.picker>.picker-selections>.picker-selection>.picker-selection-text{word-break:break-word}.chosen-container .chosen-drop.chosen-no-wrap>.chosen-results>li,.picker-drop-menu>.picker-option-list>.picker-option .picker-option-text{text-overflow:clip;white-space:nowrap!important}.picker-drop-menu>.picker-option-list>.picker-option .picker-option-text{display:block;overflow:hidden;word-break:break-word}.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{right:8px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#fc7272}.datetimepicker td.day.active{background-color:#18a6fd}.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:#2e7fff!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:unset;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:#2e7fff!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:#fc5959!important;-webkit-box-shadow:0 0 6px #febdbd!important;box-shadow:0 0 6px #febdbd!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#22c98d}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#22c98d}textarea.kindeditor{padding:0!important}.form-unsaved{outline:2px solid #ff9f46;-webkit-box-shadow:0 1px 12px #ff9f46;box-shadow:0 1px 12px #ff9f46;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}select[multiple].picker-select,select[multiple][data-toggle=picker]{max-height:32px;visibility:hidden}.picker-selection-remove:before{font-size:18px}.picker-user-option{position:relative;padding-left:40px}.picker-user-option>.avatar{position:absolute;top:5px;left:10px}.picker-user-option>.picker-option-text{display:inline-block;min-width:40px;font-weight:700}.picker-user-option>.dept-name,.picker-user-option>.role-name{display:inline-block;margin-left:10px;font-size:12px;opacity:.6}.picker-user-option>.dept-name{min-width:50px}#mainHeader{height:50px;color:#fff;background:#3785ff;border-top-color:#2e7fff;border-bottom-color:#e6f0ff}#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:unset;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:#18a6fd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#2e7fff}#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:unset;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{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:#fc5959;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}}#subHeader.admin-tab-menu{margin-bottom:-15px;background:unset}#subHeader.admin-tab-menu>.container>#subNavbar{text-align:left}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a{color:unset}#subHeader.admin-tab-menu>.container>#subNavbar>ul>li.active>a:after{position:absolute;content:'';border-bottom:2px solid #2e7fff;inset:0 12px}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:13px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#313c52}#subNavbar .nav>li>a:hover{color:#313c52;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#2e7fff}#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>[class*=" col-"],.main-row>[class*="-col"],.main-row>[class^=col-]{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}#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{padding:8px 5px}#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 #2e7fff;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:#2e7fff;text-align:center;text-overflow:unset;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:#7dcdfe;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:#2e7fff;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:#2e7fff}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#2e7fff}.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:unset;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:unset;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 #c4c4c4;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}#mainMenu>.btn-toobar .btn-link .label-light,#mainMenu>.btn-toolBar .btn-link .label-light,#mainMenu>.btn-toolbar .btn-link .label-light{color:#313c52;background:#fff}#mainMenu>.btn-toobar .btn-active-text,#mainMenu>.btn-toolBar .btn-active-text,#mainMenu>.btn-toolbar .btn-active-text{color:#1e6aeb;background:#e6eaf1}#mainMenu>.btn-toobar .btn-active-text .text,#mainMenu>.btn-toolBar .btn-active-text .text,#mainMenu>.btn-toolbar .btn-active-text .text{top:0}#mainMenu>.btn-toobar .btn-active-text .text:after,#mainMenu>.btn-toolBar .btn-active-text .text:after,#mainMenu>.btn-toolbar .btn-active-text .text:after{border:none}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text{position:relative;font-size:14px;color:unset;background:unset}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text>span{color:unset}#mainMenu.menu-secondary>.btn-toolbar>a.btn{margin-right:10px}#mainMenu.menu-secondary>.btn-toolbar .btn-active-text:after{position:absolute;content:'';border-bottom:2px solid #2e7fff;inset:0 6px}#menu{background:#415a72}#userNav>li>a>.icon{color:#fff;filter:none;opacity:.25;-webkit-filter:none}.picker-option.picker-option-active,.picker-single .picker-option.picker-option-selected.picker-option-active{background:#2e7fff}select.form-control option.selected,select.form-control option:hover{background:#2e7fff}#guideDialog .project-type-img:hover,#guideDialog .project-type.active img,.kanbans .panel:hover{border-color:#2e7fff}#dashboard .block-welcome .progress{background:#edeef2}#dashboard .block-welcome .progress>.progress-bar{background:#3785ff}#assigntomeBlock .nav>li.active>a{color:#1e6aeb}.consumedTotally{color:#2e7fff;background:#e6f0ff}#toggleFoldIcon .icon-border{border:1px solid #d5e5ff}#createEffort .table tbody .date-group .input-group-addon .icon,#recordForm .table tbody .date-group .input-group-addon .icon,#toggleFoldIcon{color:#2e7fff}.shadow-primary-hover:hover{-webkit-box-shadow:0 0 1px 1px #2e7fff;box-shadow:0 0 1px 1px #2e7fff}.border-primary-hover:hover{border:1px solid #2e7fff}.menu-hover-primary>li>a:hover{color:#1e6aeb!important;background-color:#d5e5ff!important}.menu-active-primary>li.active>a{color:#2e7fff!important;background-color:unset}.menu-active-primary>li.disabled>a:hover{color:#c4c4c4!important;background-color:unset!important}.bg-primary-100{background-color:#d5e5ff!important}.form-active-primary .active .label,.form-active-primary .hover .label{color:#2e7fff!important}.form-active-primary .active .form-control,.form-active-primary .hover .form-control{-webkit-box-shadow:0 0 1px 1px #2e7fff;box-shadow:0 0 1px 1px #2e7fff}.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:unset;white-space:nowrap}.assigned-none{color:#1e6aeb!important;background:inherit}.assigned-current{color:#f38f19!important;background:inherit}.assigned-other{color:#313c52!important;background:inherit}a.assigned-current:hover,a.assigned-none:hover,a.assigned-other:hover{color:#1e6aeb!important;background:#fff;border-color:#fff!important}a.assigned-current:hover .icon,a.assigned-none:hover .icon,a.assigned-other:hover .icon{color:#1e6aeb!important}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:unset;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;text-overflow:unset;white-space:nowrap;vertical-align:middle}td.c-actions .btn-link{color:#313c52;background:0 0}td.c-actions .btn-link:hover{color:#2e7fff;background:#e6f0ff}td.c-actions .btn.disabled,td.c-actions .btn[disabled]{pointer-events:auto}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:#313c52}.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:unset;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 caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.table tbody>tr>td.c-name a{color:#2463c7}.table tbody>tr>td.c-name a:hover{color:#1e6aeb}.table.table-data tbody>tr:hover,.table.table-form tbody>tr:hover{background:0 0}.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:#e6f0ff;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:unset;white-space:nowrap}.main-table td,.main-table th{border-bottom:none!important}.main-table thead>tr{background:#fcfdfe;border-bottom:1px solid #f4f5f7}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:unset;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#2463c7}.main-table tbody>tr>td>a:not(.btn):visited{color:#003994;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#2e7fff}.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:#2e7fff;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>td.c-name a{color:#2463c7}.main-table tbody>tr>td.c-name a:hover{color:#1e6aeb}.main-table tbody>tr{border-bottom:1px solid #f4f5f7;-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:rgba(230,240,255,.8)}.main-table .table-grouped tbody>tr:hover{background:#f0f6ff;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f0f6ff}.main-table tbody>tr.checked{background:#fff4ea}.main-table tbody>tr.checked:hover{background:#ffe6c6}.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:#313c52}.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:0;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:#22c98d!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:5;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{display:none;height:28px}.table-actions.show-always{display:block;pointer-events:none;cursor:not-allowed}.has-row-checked .table-actions{display:block;pointer-events:auto!important;cursor:default}.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:#313c52}.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:#313c52;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:#2e7fff;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,.table.fixed-header-copy thead>tr{background:0 0}.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:#22c98d!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:#2463c7}.table-data tbody>tr>td>a:not(.btn):visited{color:#003994}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#2e7fff}.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:#ffe6c6}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{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:12px;color:#888fa1;content:"\e926";-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.table-nest-toggle:after{position:absolute;top:4px;right:4px;bottom:4px;left:4px;display:inline-block;content:"";border:1px solid;border-radius:50%}.table-nest-toggle:hover{color:#2e7fff;background-color:rgba(0,0,0,.1)}.table-nest-child-hide .table-nest-toggle:before{font-size:12px;content:"\e925"}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:absolute!important;font-size:12px!important;line-height:22px!important;content:"\e959"!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:12px!important;content:"\e95a"!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:#c4c4c4;border-radius:1px}.table-nest-child-hover>td:first-child,.table-nest-hover>td:first-child{-webkit-box-shadow:inset 3px 0 0 #c4c4c4;box-shadow:inset 3px 0 0 #c4c4c4}.c-manager .avatar{position:relative;z-index:2;line-height:17px;border:1.5px solid transparent}.c-manager .avatar.avatar-top{border-color:#ffaf65}.c-manager a{position:absolute;top:8px;left:16px;height:20px;padding:0 8px 0 13px;line-height:20px!important;color:#313c52!important;background:#f4f5f7;border-radius:10px}.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!important}.article-content table th{background:#eee}.article-content a{color:#2e7fff}.article-content a:focus,.article-content a:hover{color:#18a6fd}.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:#313c52}.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:#2e7fff}.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:#313c52}.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:#2e7fff;border-color:#2e7fff}.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:unset;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:#e6f0ff;background-color:#2e7fff}.list-group>a.active{color:#2e7fff;background-color:#e6f0ff}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#2e7fff}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.list-group.tab-menu>a{padding:6px 24px}.list-group.tab-menu>a.active{background:unset}.list-group.tab-menu>a.active:hover,.list-group.tab-menu>a:hover{color:#2e7fff;background-color:unset}.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:#2e7fff;background-color:#e6f0ff}.search-list .list-group>a.active:hover,.search-list.searchbox-focus .list-group>a.active:hover{color:#fff;background-color:#2e7fff}#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:-5px;left:0;padding:8px 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 .tree li>.selected{color:#2e7fff!important;background:#e6f0ff!important}#swapper #dropMenu .list-group>a.active:hover,#swapper #dropMenu .search-box .list-group>a.active,#swapper #dropMenu .tree li>.clickable:hover,#swapper #dropMenu.searchbox-focus .list-group>a.active:hover{color:#fff!important;background:#2e7fff!important}#swapper #dropMenu .tree{margin:0}#pageNav #dropMenu .list-group>a.active{color:inherit;background-color:inherit}#pageNav #dropMenu .list-group>a.active:hover,#pageNav #dropMenu.searchbox-focus .list-group>a.active:hover{color:#2e7fff!important;background:#e6f0ff!important}#pageNav #dropMenu .list-group>a.active.selected,#pageNav #dropMenu .list-group>a.active.selected:hover{color:#fff!important;background:#2e7fff!important}.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:#c2dbff}.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:unset;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e6f0ff}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#2e7fff}.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 #c2dbff}.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 #c2dbff}.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:#2e7fff}.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:unset;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:#18a6fd}#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:#313c52}#poweredBy a:hover{color:#2e7fff}#poweredBy a:hover .icon-zentao{color:#2e7fff}#poweredBy a.text-important{color:#ff6f42}#poweredBy a.text-important:hover{color:#fc5959}#poweredBy a.text-primary{color:#2e7fff}#poweredBy a.text-primary:hover{color:#18a6fd}#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:unset;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 d526aeae33..e406a8a404 100644 Binary files a/www/theme/zui/fonts/ZentaoIcon.eot and b/www/theme/zui/fonts/ZentaoIcon.eot differ diff --git a/www/theme/zui/fonts/ZentaoIcon.svg b/www/theme/zui/fonts/ZentaoIcon.svg index 19a2fcf4f2..3e20ca18fd 100644 --- a/www/theme/zui/fonts/ZentaoIcon.svg +++ b/www/theme/zui/fonts/ZentaoIcon.svg @@ -257,6 +257,8 @@ + + diff --git a/www/theme/zui/fonts/ZentaoIcon.ttf b/www/theme/zui/fonts/ZentaoIcon.ttf index d824b4ec40..d24fb57d07 100644 Binary files a/www/theme/zui/fonts/ZentaoIcon.ttf and b/www/theme/zui/fonts/ZentaoIcon.ttf differ diff --git a/www/theme/zui/fonts/ZentaoIcon.woff b/www/theme/zui/fonts/ZentaoIcon.woff index 84742403cb..0ccdd4ab75 100644 Binary files a/www/theme/zui/fonts/ZentaoIcon.woff and b/www/theme/zui/fonts/ZentaoIcon.woff differ