From 5f2ad997f4e408616ea81eb31a2fd23567328457 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Thu, 15 Jun 2023 13:14:54 +0800 Subject: [PATCH] + Add stakeholder view for program. --- module/program/js/stakeholder.ui.js | 7 ++ module/program/ui/stakeholder.html.php | 108 +++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 module/program/js/stakeholder.ui.js create mode 100644 module/program/ui/stakeholder.html.php diff --git a/module/program/js/stakeholder.ui.js b/module/program/js/stakeholder.ui.js new file mode 100644 index 0000000000..4f2c5258c4 --- /dev/null +++ b/module/program/js/stakeholder.ui.js @@ -0,0 +1,7 @@ +window.footerGenerator = function() +{ + var checkedCount = $("div.is-checked").length; + const statistic = summeryTpl.replace('%s', ' ' + checkedCount + ' '); + return [{children: statistic, className: "text-dark"}, "flex", "pager"]; +} + diff --git a/module/program/ui/stakeholder.html.php b/module/program/ui/stakeholder.html.php new file mode 100644 index 0000000000..4eeb79cbf9 --- /dev/null +++ b/module/program/ui/stakeholder.html.php @@ -0,0 +1,108 @@ + + * @package program + * @link https://www.zentao.net + */ + +declare(strict_types=1); +namespace zin; + +/* Feature bar. */ +$navLinkParams = array('program' => $programID); +featureBar +( + li + ( + set::class('nav-item'), + a + ( + set::href($this->createLink('program', 'stakeholder', $navLinkParams)), + set('data-app', $app->tab), + $lang->program->stakeholder + ) + ), + set::current('all') +); + +/* Toolbar. */ +$createLink = $this->createLink('program', 'createstakeholder', "programID=$programID"); + +if(common::hasPriv('program', 'createstakeholder')) +{ + toolbar + ( + btngroup + ( + btn(setClass('btn primary'), set::icon('plus'), set::url($createLink), $lang->program->createStakeholder), + ) + ); +} + +/* Create datatable with reusing stakeholder module. */ +$this->loadModel('stakeholder'); + +$role = array(); +$role['id'] = 'role'; +$role['title'] = $lang->user->role; +$role['name'] = 'role'; +$role['type'] = 'text'; +$role['show'] = true; + +$fieldListKeys = array_keys($this->config->stakeholder->dtable->fieldList); +array_splice($fieldListKeys, array_search('phone', array_keys($this->config->stakeholder->dtable->fieldList), true), 0, 'role'); +$fieldListExtend = array(); +foreach($fieldListKeys as $key) +{ + if($key == 'role') $fieldListExtend[$key] = $role; + else $fieldListExtend[$key] = $this->config->stakeholder->dtable->fieldList[$key]; +} + +$fieldListExtend['id']['type'] = 'checkID'; + +$this->config->stakeholder->dtable->fieldList = $fieldListExtend; +$cols = $this->loadModel('datatable')->getSetting('stakeholder'); + +/* Set list and menu of actions to customize the actions of stakeholder in program module. */ +$cols['actions']['list'] = array('unlinkStakeholder' => array( + "icon" => 'unlink', + "text" => $lang->program->unlinkStakeholder, + "hint" => $lang->program->unlinkStakeholder, + "url" => $this->createLink('program', 'unlinkStakeholder', "id={id}&programID={$programID}&confirm=no" + ) +)); +$cols['actions']['menu'] = array('unlinkStakeholder'); + +$data = initTableData($stakeholders, $cols, $this->stakeholder); +foreach($data as $rowData) +{ + $rowData->name = $rowData->realname; + $rowData->from = $lang->stakeholder->fromList[$rowData->from]; + $rowData->role = $lang->user->roleList[$rowData->role]; +} + +jsVar('summeryTpl', $lang->program->checkedProjects); + +dtable +( + set::customCols(false), + set::cols($cols), + set::data($data), + set::footPager(usePager()), + set::showToolbarOnChecked(true), + set::footToolbar(array( + 'items' => array( + array( + 'text' => $lang->unlink, + 'class' => 'btn secondary toolbar-item batch-btn size-sm', + 'data-url' => createLink('program', 'batchUnlinkStakeholders', "programID={$programID}") + ) + ) + )), + set::footer(jsRaw('function() {return window.footerGenerator.call(this);}')), +); + +render();