* refactor tutorial module views.

This commit is contained in:
Catouse
2018-06-06 15:02:10 +08:00
parent 78226d52a4
commit 42225e08e6
18 changed files with 149 additions and 86 deletions
+12 -1
View File
@@ -28,7 +28,18 @@ js::set('confirmDelete', $lang->user->confirmDelete);
<div class='btn-toolbar pull-right'>
<?php common::printIcon('group', 'create', '', '', 'button', '', '', 'iframe', true, "data-width='550px'");?>
<?php common::printLink('user', 'batchCreate', "dept={$deptID}", "<i class='icon icon-plus'></i> " . $lang->user->batchCreate, '', "class='btn btn-secondary'");?>
<?php common::printLink('user', 'create', "dept={$deptID}", "<i class='icon icon-plus'></i> " . $lang->user->create, '', "class='btn btn-primary'");?>
<?php
if(commonModel::isTutorialMode())
{
$wizardParams = helper::safe64Encode("dept=$deptID");
$link = $this->createLink('tutorial', 'wizard', "module=user&method=create&params=$wizardParams");
echo html::a($link, "<i class='icon icon-plus'></i> {$lang->user->create}", '', "class='btn btn-primary create-user-btn'");
}
else
{
common::printLink('user', 'create', "dept={$deptID}", "<i class='icon icon-plus'></i> " . $lang->user->create, '', "class='btn btn-primary'");
}
?>
</div>
</div>
<div id='mainContent' class='main-row fade'>
+10 -1
View File
@@ -59,7 +59,16 @@ class productModel extends model
$productIndex .= '<ul class="dropdown-menu">';
if(common::hasPriv('product', 'index')) $productIndex .= '<li>' . html::a(helper::createLink('product', 'index', 'locate=no'), '<i class="icon icon-home"></i> ' . $this->lang->product->index) . '</li>';
if(common::hasPriv('product', 'all')) $productIndex .= '<li>' . html::a(helper::createLink('product', 'all'), '<i class="icon icon-cards-view"></i> ' . $this->lang->product->all) . '</li>';
if(common::hasPriv('product', 'create')) $productIndex .= '<li>' . html::a(helper::createLink('product', 'create'), '<i class="icon icon-plus"></i> ' . $this->lang->product->create) . '</li>';
if(common::isTutorialMode())
{
$wizardParams = helper::safe64Encode('');
$link = helper::createLink('tutorial', 'wizard', "module=product&method=create&params=$wizardParams");
$productIndex .= '<li>' . html::a($link, "<i class='icon icon-plus'></i> {$this->lang->product->create}", '', "class='create-product-btn'") . '</li>';
}
else
{
if(common::hasPriv('product', 'create')) $productIndex .= '<li>' . html::a(helper::createLink('product', 'create'), '<i class="icon icon-plus"></i> ' . $this->lang->product->create) . '</li>';
}
$productIndex .= '</ul></div></div>';
$productIndex .= $selectHtml;
+1 -1
View File
@@ -100,7 +100,7 @@
{
$wizardParams = helper::safe64Encode("productID=$productID&branch=$branch&moduleID=$moduleID");
$link = $this->createLink('tutorial', 'wizard', "module=story&method=create&params=$wizardParams");
echo html::a($link, "<i class='icon icon-plus'></i> {$lang->story->create}", '', "class='btn btn-primary'");
echo html::a($link, "<i class='icon icon-plus'></i> {$lang->story->create}", '', "class='btn btn-primary create-story-btn'");
}
else
{
+12 -1
View File
@@ -110,7 +110,18 @@ class projectModel extends model
$projectIndex .= '<ul class="dropdown-menu">';
if(common::hasPriv('project', 'index')) $projectIndex .= '<li>' . html::a(helper::createLink('project', 'index', 'locate=no'), '<i class="icon icon-home"></i> ' . $this->lang->project->index) . '</li>';
if(common::hasPriv('project', 'all')) $projectIndex .= '<li>' . html::a(helper::createLink('project', 'all', 'status=all'), '<i class="icon icon-cards-view"></i> ' . $this->lang->project->allProjects) . '</li>';
if(common::hasPriv('project', 'create')) $projectIndex .= '<li>' . html::a(helper::createLink('project', 'create'), '<i class="icon icon-plus"></i> ' . $this->lang->project->create) . '</li>';
if(common::isTutorialMode())
{
$wizardParams = helper::safe64Encode('');
$link = helper::createLink('tutorial', 'wizard', "module=project&method=create&params=$wizardParams");
$projectIndex .= '<li>' . html::a($link, "<i class='icon icon-plus'></i> {$this->lang->project->create}", '', "class='create-project-btn'") . '</li>';
}
else
{
if(common::hasPriv('project', 'create')) $projectIndex .= '<li>' . html::a(helper::createLink('project', 'create'), '<i class="icon icon-plus"></i> ' . $this->lang->project->create) . '</li>';
}
$projectIndex .= '</ul></div></div>';
$projectIndex .= $selectHtml;
+2 -2
View File
@@ -80,8 +80,8 @@
<?php if($storyCount):?>
<div class='table-footer'>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<div class='table-actions btn-toolbar'>
<?php echo html::submitButton('', '', 'btn');?>
<div class='table-actions btn-toolbar show-always'>
<?php echo html::submitButton('', '', 'btn btn-secondary');?>
</div>
</div>
<?php else:?>
+2 -2
View File
@@ -173,11 +173,11 @@
if(commonModel::isTutorialMode())
{
$wizardParams = helper::safe64Encode($param);
echo html::a($this->createLink('tutorial', 'wizard', "module=task&method=create&params=$wizardParams"), "<i class='icon-plus-border'></i>",'', "class='btn btn-link btn-task-create' title='{$lang->project->wbs}'");
echo html::a($this->createLink('tutorial', 'wizard', "module=task&method=create&params=$wizardParams"), "<i class='icon-pluses'></i>",'', "class='btn btn-task-create' title='{$lang->project->wbs}'");
}
else
{
if($hasDBPriv) common::printIcon('task', 'create', $param, '', 'list', 'plus', '', 'btn-task-create');
if($hasDBPriv) common::printIcon('task', 'create', $param, '', 'list', 'pluses', '', 'btn-task-create');
}
$lang->task->batchCreate = $lang->project->batchWBS;
+30 -28
View File
@@ -1,16 +1,17 @@
#pageContainer {position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden;}
#iframeWrapper {position: absolute; left: 0; top: 0; bottom: 0; right: 300px; display: block}
#sidebar {position: absolute; right: 0; top: 0; bottom: 0; width: 300px; background: #f5f5f5; overflow-y: auto; padding-top: 66px; border-left: 1px solid #ddd}
#sidebar > header {background: #3280FC; color: #fff; padding: 10px; position: fixed; top: 0; right: 0; z-index: 10; width: 300px; border-bottom: 1px solid #ddd}
#sidebar {position: absolute; right: 0; top: 0; bottom: 0; width: 300px; background: #f5f5f5; overflow-y: auto; padding-top: 56px; border-left: 1px solid #ddd}
#sidebar > header {color: #fff; padding: 10px; position: fixed; top: 0; right: 0; z-index: 10; width: 300px; border-bottom: 1px solid #ddd}
#sidebar > header > h2 {margin: 0 0 0 40px; font-size: 18px; padding: 0; line-height: 36px; color: #fff}
#sidebar > header .start-icon {position: absolute; left: 20px; top: 10px; width: 36px; height: 36px; text-align: center; margin-right: 5px;}
#sidebar > header .start-icon > .icon-front {color: #3280FC; position: absolute; width: 36px; height: 36px; line-height: 36px; top: 0; left: 0; font-size: 12px}
#sidebar > header .start-icon {position: absolute; left: 10px; top: 10px; width: 36px; height: 36px; text-align: center; margin-right: 5px;}
#sidebar > header .start-icon > .icon-front {color: #00B1FD; position: absolute; width: 36px; height: 36px; line-height: 36px; top: 0; left: 0; font-size: 12px}
#sidebar > header .start-icon > .icon-back {font-size: 22px; color: #fff; line-height: 36px;}
#sidebar > header .start-icon > .icon-back:before {content: '\f0a3'}
#sidebar > header > .actions {position: absolute; right: 15px; top: 15px}
#sidebar > section {padding: 20px 10px; border-top: 1px solid #ddd}
#sidebar > section > h4 {margin: 0 0 10px 0; font-size: 14px; color: #808080; font-weight: normal}
#task {border: none}
#task > .panel-heading {padding: 10px; background: #114f8e; color: #fff; font-size: 15px; transition: background .4s;}
#task > .panel-heading {padding: 10px; color: #fff; font-size: 15px; transition: background .4s;}
#task > .panel-heading > .pull-right {margin-top: 3px; opacity: 0; transition: opacity .4s, transform .4s; transform: scale(2.5, 2)}
#task > .panel-body {border: 1px solid #ddd; border-top: none; padding: 0}
#task .panel-body > .btn {padding:5px 7px;}
@@ -20,54 +21,55 @@
#task .task-desc > ul > li {position: relative; padding: 2px 0; overflow: hidden; padding-left: 26px; transition: background .5s}
#task .task-desc > ul > li[data-target].finish {color: #999; text-decoration: line-through;}
#task .task-desc > ul > li[data-target].finish .task-nav {opacity: .6; text-decoration: line-through;}
#task .task-desc > ul > li:before {font-family: NewZenIcon; 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; content: '\e6ec'; display: block; width: 26px; height: 20px; line-height: 20px; text-align: center; opacity: .6; color: #808080; position: absolute; top: 2px; left: 0}
#task .task-desc > ul > li[data-target]:after {content: ' '; display: block; position: absolute; left: 0; top: -100%; width: 100%; height: 100%; border: 2px solid #F1A325; transition: top .5s}
#task .task-desc > ul > li[data-target]:before {font-family: ZenIcon; content: '\e6e8'; color: #333}
#task .task-desc > ul > li:before {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; content: '\e836'; display: block; width: 26px; height: 20px; line-height: 20px; text-align: center; opacity: .6; color: #808080; position: absolute; top: 2px; left: 0}
#task .task-desc > ul > li[data-target]:after {content: ' '; display: block; position: absolute; left: 0; top: -100%; width: 100%; height: 100%; border: 2px solid #F1A325; transition: top .5s; pointer-events: none;}
#task .task-desc > ul > li[data-target]:before {font-family: ZentaoIcon; content: '\e836'; color: #333}
#task .task-desc > ul > li[data-target].finish:after {top: 100%;}
#task .task-desc > ul > li[data-target].finish:before {content: '\e653'; color: #38B03F}
#task .task-desc > ul > li[data-target].finish:before {content: '\e92f'; color: #00da88}
#task .task-desc > ul > li[data-target].active {background: #FFF0D5}
#task .task-desc > ul > li[data-target].active:after {top: 0%}
#task .task-desc > ul > li[data-target].active:before {font-family: ZenIcon; color: #EA644A; content: '\f192'}
#openTaskPage {display: block; overflow: hidden; position: relative; height: 36px; background: #f5f5f5}
#task .task-desc > ul > li[data-target].active:before {font-family: ZentaoIcon; color: #EA644A; content: '\e92c'}
#openTaskPage {display: block; overflow: hidden; position: relative; height: 36px;}
#openTaskPage > div {padding: 8px 10px; line-height: 20px; transition: top .4s cubic-bezier(.175,.885,.32,1); position: absolute; left: 0; top: 0; right: 0}
#openTaskPage > div > .icon {display: inline-block; width: 30px; text-align: center}
#openTaskPage:hover {background: #EBF2F9}
#openTaskPage > .normal {top: 0;}
#openTaskPage.open {color: #38B03F; background: #DDF4DF}
#openTaskPage.open:hover {color: #1a4f85; background: #EBF2F9}
#openTaskPage.open {color: #00da88; background: #DDF4DF}
#openTaskPage.open:hover {color: #006af1; background: #EBF2F9}
#openTaskPage > .opened, #openTaskPage > .reload, #openTaskPage.open > .reload {top: 36px;}
#openTaskPage.open > .normal, #openTaskPage.open:hover > .opened {top: -36px;}
#openTaskPage.open > .opened, #openTaskPage.open:hover > .reload {top: 0;}
#task.finish > .panel-heading {background: #38B03F}
#task.finish > .panel-heading {background: #00da88}
#task.finish > .panel-heading .task-name {text-decoration: line-through;}
#task.finish.finish > .panel-heading > .pull-right {opacity: 1; transform: scale(1)}
#task .task-nav {color: #114f8e; display: inline-block; background: #EBF2F9; padding: 1px 5px 0; transition: all .2s}
#task .task-nav:hover {color: #fff; background: #114f8e; cursor: pointer}
#tasksProgress {background: #ccc; position: relative}
#tasksProgress > .progress-bar {background: #114f8e; height: 4px; margin-bottom: 15px; transition: background .4s, width .4s;}
#tasksProgress.finish > .progress-bar {width: 100%!important; background: #38B03F}
#tasksProgress .progress-text {position: absolute; right: 0; top: -25px; font-weight: bold; opacity: 0.7; color: #114f8e}
#tasksProgress.finish .progress-text {color: #38B03F; opacity: 1}
#task .task-nav {color: #006af1; display: inline-block; background: #EBF2F9; padding: 1px 5px 0; transition: all .2s}
#task .task-nav:hover {color: #fff; background: #006af1; cursor: pointer}
#tasksProgress {background: #ddd; position: relative}
#tasksProgress > .progress-bar {background: #006af1; height: 8px; border-radius: 4px; margin-bottom: 15px; transition: background .4s, width .4s;}
#tasksProgress.finish > .progress-bar {width: 100%!important; background: #00da88}
#tasksProgress .progress-text {position: absolute; right: 0; top: -25px; font-weight: bold; opacity: 0.7; color: #006af1}
#tasksProgress.finish .progress-text {color: #00da88; opacity: 1}
#tasks {background: #fff;}
#tasks > li > a > .pull-right {filter: alpha(opacity=0); opacity: 0; transition: opacity .4s, transform .4s; transform: scale(2.5, 2); color: #38B03F}
#tasks > li.finish > a, #tasks > li.finish.active > a {box-shadow: inset 2px 0 0 #38B03F; border-left-color: #38B03F; color: #808080}
#tasks {background: #fff; box-shadow: 0 1px 1px rgba(0,0,0,.05), 0 2px 6px 0 rgba(0,0,0,0.045); border-radius: 6px;}
#tasks > li > a {padding: 8px;}
#tasks > li > a > .pull-right {filter: alpha(opacity=0); opacity: 0; transition: opacity .4s, transform .4s; transform: scale(2.5, 2); color: #00da88}
#tasks > li.finish > a, #tasks > li.finish.active > a {box-shadow: inset 2px 0 0 #00da88; border-left-color: #00da88; color: #808080}
#tasks > li.finish > a > .pull-right {filter: alpha(opacity=100); opacity: 1; transform: scale(1)}
#tasks > li.finish > a > .task-name {text-decoration: line-through;}
#tasks > li.active > a, #tasks > li.active.finish > a {box-shadow: inset 2px 0 0 #114f8e; border-color: #ddd; border-left-color: #114f8e; color: #114f8e; background: #EBF2F9}
#tasks > li.active > a, #tasks > li.active.finish > a {box-shadow: inset 2px 0 0 #006af1; border-color: #ddd; border-left-color: #006af1; color: #006af1; background: #EBF2F9}
#tasks > li.finish > a:hover, #tasks > li.active > a:hover {background-color: #f1f1f1}
#taskModalBack {position: absolute; top: 0; left: 0; bottom: 0; right: 0; background: #fff; transition: opacity .4s; opacity: 0; display: none}
#taskModalBack.in {filter: alpha(opacity=60); opacity: 0.6;}
#taskModal {width: 500px; position: absolute; background: #38B03F; color: #fff; text-align: center; overflow: hidden; transform: scale(.5) translate(0, 200px) rotateX(120deg); transition: transform .4s, opacity .4s; opacity: 0; transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); top: 0; padding: 30px; left: 50%; margin-left: -250px; top: 20%; box-shadow: 0 3px 9px rgba(0,0,0,.5); display: none}
#taskModal {width: 500px; position: absolute; background: #00da88; color: #fff; text-align: center; overflow: hidden; transform: scale(.5) translate(0, 200px) rotateX(120deg); transition: transform .4s, opacity .4s; opacity: 0; transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); top: 0; padding: 30px; left: 50%; margin-left: -250px; top: 20%; box-shadow: 0 0 20px 0 rgba(0,0,0,.25); display: none}
#taskModal.in {transform: scale(1) translate(0) rotateX(0); opacity: 1}
#taskModal h3 {margin-bottom: 20px}
#taskModal .start-icon > .icon-spin {-moz-animation: spin 10s infinite linear;-o-animation: spin 10s infinite linear;-webkit-animation: spin 10s infinite linear;animation: spin 10s infinite linear;}
#taskModal .start-icon {width: 60px; height: 60px; text-align: center; margin: 10px auto; position: relative}
#taskModal .start-icon > .icon-front {color: #38B03F; width: 60px; height: 60px; line-height: 60px; position: absolute; left: 0; top: 0; font-size: 28px;}
#taskModal .start-icon > .icon-back {font-size: 56px; color: #fff; line-height: 60px;}
#taskModal .start-icon > .icon-front {font-size: 56px; color: #fff; line-height: 60px; width: 60px; height: 60px; position: absolute; left: 0; top: 0;}
#taskModal .btn-success {border-color: #DDF4DF}
#taskModal .btn-success:hover {background: #00c178}
#taskModal > .close {position: absolute; right: 15px; top: 10px;}
#taskModal > .finish-all {display: none}
#taskModal > .finish {display: block}
+4 -4
View File
@@ -1,7 +1,7 @@
#start {background: #EBF2F9; padding: 40px; text-align: center;}
#start {padding: 40px; text-align: center; color: #fff;}
.start-icon {position: relative; width: 140px; height: 140px; margin: 0 auto; line-height: 140px;}
.start-icon > .icon-back {font-size: 140px; color: #145CCD}
.start-icon > .icon-back {font-size: 140px;}
.start-icon > .icon-back:before {content: '\f0a3';}
.start-icon > .icon-front {font-size: 56px; position: absolute; top: 35px; left: 35px; color: #EBF2F9; z-index: 10; width: 70px; height: 70px; text-align: center; line-height: 70px;}
.start-icon > .icon-spin {-moz-animation: spin 15s infinite linear;-o-animation: spin 15s infinite linear;-webkit-animation: spin 15s infinite linear;animation: spin 15s infinite linear;}
#start > h1 {color: #145CCD}
#start > h1, #start > p {margin-bottom: 20px}
#start > h1, #start > p {margin-bottom: 30px}
+3 -3
View File
@@ -35,11 +35,11 @@ $lang->tutorial->dataNotSave = "Data generated in the Tutorial will not be
$lang->tutorial->tasks = array();
$lang->tutorial->tasks['createAccount'] = array('title' => 'Create a User');
$lang->tutorial->tasks['createAccount']['nav'] = array('module' => 'user', 'method' => 'create', 'menuModule' => 'company', 'menu' => 'addUser', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => 'Add User');
$lang->tutorial->tasks['createAccount']['nav'] = array('module' => 'user', 'method' => 'create', 'menuModule' => 'company', 'menu' => 'browseUser', 'form' => '#createForm', 'submit' => '#submit', 'target' => '.create-user-btn', 'targetPageName' => 'Add User');
$lang->tutorial->tasks['createAccount']['desc'] = "<p>Create a User: </p><ul><li data-target='nav'>Open <span class='task-nav'>Company <i class='icon icon-angle-right'></i> Users<i class='icon icon-angle-right'></i> New;</span></li><li data-target='form'>Fill the form with user information;</li><li data-target='submit'>Save</li></ul>";
$lang->tutorial->tasks['createProduct'] = array('title' => 'Create a Product');
$lang->tutorial->tasks['createProduct']['nav'] = array('module' => 'product', 'method' => 'create', 'menu' => 'create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => 'Product');
$lang->tutorial->tasks['createProduct']['nav'] = array('module' => 'product', 'method' => 'create', 'menu' => '#pageNav', 'form' => '#createForm', 'submit' => '#submit', 'target' => '.create-product-btn', 'targetPageName' => 'Product');
$lang->tutorial->tasks['createProduct']['desc'] = "<p>Create a product: </p><ul><li data-target='nav'> Open <span class='task-nav'>Product <i class='icon icon-angle-right'></i> New;</span></li><li data-target='form'>Fill the form with product information;</li><li data-target='submit'>Save</li></ul>";
$lang->tutorial->tasks['createStory'] = array('title' => 'Create a Story');
@@ -47,7 +47,7 @@ $lang->tutorial->tasks['createStory']['nav'] = array('module' => 'story', 'meth
$lang->tutorial->tasks['createStory']['desc'] = "<p>Create a story: </p><ul><li data-target='nav'>Open <span class='task-nav'>Product <i class='icon icon-angle-right'></i>Story <i class='icon icon-angle-right'></i>Create;</span></li><li data-target='form'>Fill the form with story information;</li><li data-target='submit'>Save</li></ul>";
$lang->tutorial->tasks['createProject'] = array('title' => 'Create a Project');
$lang->tutorial->tasks['createProject']['nav'] = array('module' => 'project', 'method' => 'create', 'menu' => 'create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => 'Create Project');
$lang->tutorial->tasks['createProject']['nav'] = array('module' => 'project', 'method' => 'create', 'menu' => '#pageNav', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-project-btn', 'targetPageName' => 'Create Project');
$lang->tutorial->tasks['createProject']['desc'] = "<p>Create a project: </p><ul><li data-target='nav'>Open <span class='task-nav'> Project <i class='icon icon-angle-right'></i> New</span> Page;</li><li data-target='form'>Fill the form with project information;</li><li data-target='submit'>Save</li></ul>";
$lang->tutorial->tasks['manageTeam'] = array('title' => 'Manage Project Team');
+3 -3
View File
@@ -35,11 +35,11 @@ $lang->tutorial->dataNotSave = "教程任务中,数据不会保存。";
$lang->tutorial->tasks = array();
$lang->tutorial->tasks['createAccount'] = array('title' => '创建帐号');
$lang->tutorial->tasks['createAccount']['nav'] = array('module' => 'user', 'method' => 'create', 'menuModule' => 'company', 'menu' => 'addUser', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => '添加用户');
$lang->tutorial->tasks['createAccount']['nav'] = array('module' => 'user', 'method' => 'create', 'menuModule' => 'company', 'menu' => 'browseUser', 'form' => '#createForm', 'submit' => '#submit', 'target' => '.create-user-btn', 'targetPageName' => '添加用户');
$lang->tutorial->tasks['createAccount']['desc'] = "<p>在系统创建一个新的用户帐号:</p><ul><li data-target='nav'>打开 <span class='task-nav'>组织 <i class='icon icon-angle-right'></i> 用户 <i class='icon icon-angle-right'></i> 添加用户</span> 页面;</li><li data-target='form'>在添加用户表单中填写新用户信息;</li><li data-target='submit'>保存用户信息。</li></ul>";
$lang->tutorial->tasks['createProduct'] = array('title' => '创建产品');
$lang->tutorial->tasks['createProduct']['nav'] = array('module' => 'product', 'method' => 'create', 'menu' => 'create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => '添加产品');
$lang->tutorial->tasks['createProduct']['nav'] = array('module' => 'product', 'method' => 'create', 'menu' => '#pageNav', 'form' => '#createForm', 'submit' => '#submit', 'target' => '.create-product-btn', 'targetPageName' => '添加产品');
$lang->tutorial->tasks['createProduct']['desc'] = "<p>在系统创建一个新的产品:</p><ul><li data-target='nav'>打开 <span class='task-nav'>产品 <i class='icon icon-angle-right'></i> 添加产品</span> 页面;</li><li data-target='form'>在表单中填写要创建的产品信息;</li><li data-target='submit'>保存产品信息。</li></ul>";
$lang->tutorial->tasks['createStory'] = array('title' => '创建需求');
@@ -47,7 +47,7 @@ $lang->tutorial->tasks['createStory']['nav'] = array('module' => 'story', 'meth
$lang->tutorial->tasks['createStory']['desc'] = "<p>在系统创建一个新的需求:</p><ul><li data-target='nav'>打开 <span class='task-nav'>产品 <i class='icon icon-angle-right'></i> 需求 <i class='icon icon-angle-right'></i> 添加需求</span> 页面;</li><li data-target='form'>在表单中填写要创建的需求信息;</li><li data-target='submit'>保存需求信息。</li></ul>";
$lang->tutorial->tasks['createProject'] = array('title' => '创建项目');
$lang->tutorial->tasks['createProject']['nav'] = array('module' => 'project', 'method' => 'create', 'menu' => 'create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => '添加项目');
$lang->tutorial->tasks['createProject']['nav'] = array('module' => 'project', 'method' => 'create', 'menu' => '#pageNav', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-project-btn', 'targetPageName' => '添加项目');
$lang->tutorial->tasks['createProject']['desc'] = "<p>在系统创建一个新的项目:</p><ul><li data-target='nav'>打开 <span class='task-nav'> 项目 <i class='icon icon-angle-right'></i> 添加项目</span> 页面;</li><li data-target='form'>在表单中填写要创建的项目信息;</li><li data-target='submit'>保存项目信息。</li></ul>";
$lang->tutorial->tasks['manageTeam'] = array('title' => '管理团队');
+59 -30
View File
@@ -20,19 +20,19 @@
<div id='taskModal'>
<button class='close'><i class="icon icon-close"></i></button>
<div class='finish-all'>
<div class='start-icon'><i class='icon icon-certificate icon-spin icon-back'></i><i class='icon icon-check icon-front'></i></div>
<div class='start-icon'><i class='icon icon-check-circle icon-front'></i></div>
<h3><?php echo $lang->tutorial->congratulation ?></h3>
<button type='button' class='btn btn-success btn-reset-tasks'><i class='icon icon-repeat'></i> <?php echo $lang->tutorial->restart ?></button> &nbsp; <a href='<?php echo helper::createLink('tutorial', 'quit', 'referer=' . base64_encode($referer)) ?>' class='btn btn-success'><i class='icon icon-signout'></i> <?php echo $lang->tutorial->exit ?></a>
<button type='button' class='btn btn-success btn-reset-tasks'><i class='icon icon-restart'></i> <?php echo $lang->tutorial->restart ?></button> &nbsp; <a href='<?php echo helper::createLink('tutorial', 'quit', 'referer=' . base64_encode($referer)) ?>' class='btn btn-success'><i class='icon icon-signout'></i> <?php echo $lang->tutorial->exit ?></a>
</div>
<div class='finish'>
<div class='start-icon'><i class='icon icon-circle icon-back'></i><i class='icon icon-check icon-front'></i></div>
<div class='start-icon'><i class='icon icon-check-circle icon-front'></i></div>
<h3><?php echo $lang->tutorial->congratulateTask ?></h3>
<button type='button' class='btn btn-success btn-next-task btn-task'><?php echo $lang->tutorial->nextTask ?> <i class='icon icon-angle-right'></i></button>
</div>
</div>
</div>
<div id='sidebar'>
<header>
<header class='bg-primary'>
<div class='start-icon'><i class='icon icon-certificate icon-back'></i><i class='icon icon-flag icon-front'></i></div>
<h2><?php echo $lang->tutorial->common ?></h2>
<div class='actions'>
@@ -42,23 +42,23 @@
<section id='current'>
<h4><?php echo $lang->tutorial->currentTask ?></h4>
<div class='panel' id='task'>
<div class='panel-heading'>
<div class='panel-heading bg-secondary'>
<strong><span class='task-id-current'>1</span>. <span class='task-name task-name-current'></span></strong>
<i class="icon icon-check pull-right"></i>
</div>
<div class='panel-body'>
<div class='task-desc'></div>
<a href='javascript:;' id='openTaskPage' class='btn-open-target-page'>
<a href='javascript:;' id='openTaskPage' class='btn-open-target-page hl-primary'>
<div class='normal'><i class="icon icon-flag-alt"></i> <?php echo $lang->tutorial->openTargetPage ?></div>
<div class='opened'><i class="icon icon-flag"></i> <?php echo $lang->tutorial->atTargetPage ?></div>
<div class='reload'><i class="icon icon-repeat"></i> <?php echo $lang->tutorial->reloadTargetPage ?></div>
<div class='reload'><i class="icon icon-restart"></i> <?php echo $lang->tutorial->reloadTargetPage ?></div>
</a>
<div class='alert-warning' style='padding:5px 10px;margin-bottom:0px'><?php echo $lang->tutorial->dataNotSave?></div>
</div>
</div>
<div class='clearfix actions'>
<button type='button' class='btn btn-sm btn-prev-task btn-task'><i class="icon icon-angle-left"></i> <?php echo $lang->tutorial->previous ?></button>
<button type='button' class='btn btn-primary btn-sm pull-right btn-task btn-next-task'><?php echo $lang->tutorial->nextTask ?> <i class="icon icon-angle-right"></i></button>
<button type='button' class='btn btn-sm btn-circle btn-prev-task btn-task btn-icon-left'><span class="label label-badge label-icon"><i class="icon icon-arrow-left"></i></span><?php echo $lang->tutorial->previous ?></button>
<button type='button' class='btn btn-sm btn-circle btn-primary pull-right btn-task btn-next-task btn-icon-right'><?php echo $lang->tutorial->nextTask ?> <span class="label label-badge label-icon"><i class="icon icon-arrow-right"></i></span></button>
</div>
</section>
<section id='all'>
@@ -111,7 +111,7 @@ $(function()
tagetPageTip: '<?php echo $lang->tutorial->targetPageTip ?>',
target : '<?php echo $lang->tutorial->target ?>',
requiredTip : '<?php echo $lang->tutorial->requiredTip ?>'
}
};
var $tasks = $('#tasks'),
$task = $('#task'),
@@ -203,8 +203,8 @@ $(function()
var showToolTip = function($e, text, options)
{
$e.closest('body').find('[data-toggle=tooltip]').tooltip('destroy');
if(!$e.length) return;
$e.closest('body').find('[data-toggle=tooltip]').tooltip('destroy');
options = $.extend(
{
trigger: 'manual',
@@ -216,6 +216,10 @@ $(function()
$e = $e.first();
if(!$e.data('zui.tooltip')) $e.addClass('tooltip-tutorial').attr('data-toggle', 'tooltip').tooltip(options);
$e.tooltip('show');
if($e[0].getBoundingClientRect().top > $(window).height() || $e[0].getBoundingClientRect().top < 0)
{
$e[0].scrollIntoView();
}
};
var tryCheckTask = function()
@@ -234,11 +238,12 @@ $(function()
var checkTask = function()
{
if(!iWindow || !iWindow.$) return tryCheckTask();
var task = tasks[current];
var $$ = iWindow.$;
var pageConfig = iWindow.config;
var currentModule = (iWindow.TUTORIAL ? iWindow.TUTORIAL['module'] : pageConfig.currentModule).toLowerCase();
var currentMethod = (iWindow.TUTORIAL ? iWindow.TUTORIAL['method'] : pageConfig.currentMethod).toLowerCase();
var currentModule = (iWindow.TUTORIAL ? iWindow.TUTORIAL['module'] : pageConfig ? pageConfig.currentModule : '').toLowerCase();
var currentMethod = (iWindow.TUTORIAL ? iWindow.TUTORIAL['method'] : pageConfig ? pageConfig.currentMethod : '').toLowerCase();
var targetStatus = status || {},
$navTarget = $task.find('[data-target="nav"]').removeClass('active'),
$formTarget = $task.find('[data-target="form"]').removeClass('active'),
@@ -249,7 +254,7 @@ $(function()
{
// check form target
var $form = $$(task.nav.form);
var $formWrapper = $form.closest('.container');
var $formWrapper = $form.closest('.main-content');
if(!$formWrapper.length) $formWrapper = $form;
highlight($formWrapper);
showToolTip($formWrapper, $formTarget.text());
@@ -258,7 +263,7 @@ $(function()
if(task.nav.formType === 'table')
{
fieldSelector = ':checkbox:not(.rows-selector)';
fieldSelector = 'input[type="checkbox"]';
var $checkboxes = $form.find(fieldSelector);
targetStatus.form = $checkboxes.filter(':checked').length > 0;
if(!targetStatus.form) {
@@ -288,7 +293,7 @@ $(function()
if(!$form.data('bindCheckTaskEvent'))
{
$form.off('submit .tutorial');
$form.off('.tutorial').off('submit');
$form.on('change.tutorial', fieldSelector, tryCheckTask);
var onSubmit = function(e)
{
@@ -337,28 +342,51 @@ $(function()
// check nav target
$navTarget.addClass('active');
var menuModule = task.nav.menuModule || task.nav['module'];
var $mainmenu = $$('#mainmenu');
var $mainmenuItem = $mainmenu.find('[data-id="' + menuModule + '"]');
var $navbar = $$('#navbar');
var $navbarItem = $navbar.find('[data-id="' + menuModule + '"]');
var tagetPageTip = lang.tagetPageTip.replace('%s', task.nav.targetPageName || lang.target);
if(!$mainmenuItem.hasClass('active'))
if(!$navbarItem.hasClass('active'))
{
highlight($mainmenuItem);
showToolTip($mainmenuItem, tagetPageTip);
highlight($navbarItem);
showToolTip($navbarItem, tagetPageTip);
}
else if(task.nav.menu)
{
var $modulemenu = $$('#modulemenu');
var $modulemenuItem = $modulemenu.find('[data-id="' + task.nav.menu + '"]');
if(!$modulemenuItem.hasClass('active'))
if(task.nav.menu === '#pageNav')
{
highlight($modulemenuItem);
showToolTip($modulemenuItem, tagetPageTip);
var $pageNav = $$('#pageNav');
var $targetBtn = $pageNav.find(task.nav.target);
var $targetBtnGroup = $targetBtn.closest('.btn-group');
if($targetBtnGroup.hasClass('open'))
{
highlight($targetBtn);
showToolTip($targetBtn, tagetPageTip);
}
else
{
highlight($targetBtnGroup);
showToolTip($targetBtnGroup, tagetPageTip);
}
if(!$targetBtnGroup.data('initTutorial'))
{
$targetBtnGroup.data('initTutorial', 1).on('click', tryCheckTask);
}
}
else if(task.nav.target)
else
{
var $targetItem = $$(task.nav.target);
highlight($targetItem);
showToolTip($targetItem, tagetPageTip);
var $modulemenu = $$('#subNavbar');
var $modulemenuItem = $modulemenu.find('[data-id="' + task.nav.menu + '"]');
if(!$modulemenuItem.hasClass('active'))
{
highlight($modulemenuItem);
showToolTip($modulemenuItem, tagetPageTip);
}
else if(task.nav.target)
{
var $targetItem = $$(task.nav.target);
highlight($targetItem);
showToolTip($targetItem, tagetPageTip);
}
}
}
}
@@ -368,6 +396,7 @@ $(function()
$openTaskPage.toggleClass('open', targetStatus.nav);
targetStatus.submitOK = targetStatus.nav && targetStatus.form;
return targetStatus;
};
+3 -3
View File
@@ -11,10 +11,10 @@
*/
?>
<?php include '../../common/view/header.lite.html.php';?>
<div id='start'>
<div class='start-icon'><i class='icon icon-certificate icon-spin icon-back'></i><i class='icon icon-flag icon-front'></i></div>
<div id='start' class='bg-primary'>
<div class='start-icon'><i class='icon icon-certificate icon-spin icon-back text-primary'></i><i class='icon icon-flag icon-front text-primary'></i></div>
<h1><?php echo $lang->tutorial->common ?></h1>
<p><?php echo $lang->tutorial->desc ?></p>
<?php echo html::a(inlink('index'), $lang->tutorial->start, '_top', "class='btn btn-primary btn-lg'");;?>
<?php echo html::a(inlink('index'), $lang->tutorial->start, '_top', "class='btn btn-primary btn-lg btn-wide btn-info'");;?>
</div>
<?php include '../../common/view/footer.lite.html.php';?>
+2 -2
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.
Binary file not shown.