* @package approval
* @link https://www.zentao.net
*/
namespace zin;
$reviewTypeLang = $lang->approvalflow->reviewTypeList;
$noticeTypeLang = $lang->approvalflow->noticeTypeList;
$productRoles = $lang->approvalflow->productRoleList;
$projectRoles = $lang->approvalflow->projectRoleList;
$executionRoles = $lang->approvalflow->executionRoleList;
$superiorList = $lang->approvalflow->superiorList;
$userRange = $lang->approvalflow->userRangeList;
if($node)
{
$node = json_decode($node);
if(!empty($node->type) && $node->type != 'conditions')
{
$reviewerTypes = array();
$ccTypes = array();
$reviewerBox = array();
$ccerBox = array();
foreach($lang->approvalflow->reviewerTypeList as $type => $info)
{
if((!empty($node->nodeIndex) && $node->nodeIndex > 1) || $type != 'setByPrev') $reviewerTypes[$type] = $info['name'];
if($type != 'self' && $type != 'setByPrev' && $type != 'productRole' && $type != 'projectRole' && $type != 'executionRole') $ccTypes[$type] = $info['name'];
if(empty($info['options'])) continue;
$multiple = $type != 'select' && $type != 'superiorList' ? true : false;
$reviewerBox[] = picker(set::name($info['options']), set::required(true), setClass($type == 'select' ? '' : 'hidden'), set::multiple($multiple), set::items(${$info['options']}), setData(array('on' => 'change', 'call' => 'changeOption', 'params' => 'event', 'type' => $type)));
$ccerBox[] = picker(set::name("cc{$info['options']}"), set::required(true), setClass($type == 'select' ? '' : 'hidden'), set::multiple($multiple), set::items(${$info['options']}), setData(array('on' => 'change', 'call' => 'changeOption', 'params' => 'event', 'type' => $type)));
}
foreach($lang->approvalflow->userRangeList as $range => $label)
{
if($range == 'all') continue;
$rangeType = "{$range}s";
$reviewerBox[] = picker(set::name("range{$range}"), setClass('hidden'), set::multiple(true), set::items(${$rangeType}), setData(array('type' => "range$range")));
$ccerBox[] = picker(set::name("ccrange{$range}"), setClass('hidden'), set::multiple(true), set::items(${$rangeType}), setData(array('type' => "ccrange$range")));
}
$reviewerBox[] = picker(set::name('required'), set::required(true), set::items($lang->approvalflow->required), setData(array('type' => 'required')));
if(!empty($node->reviewers))
{
foreach($node->reviewers as $index => $reviewer)
{
if(!empty($reviewer->type) && $reviewer->type == 'select')
{
$dd = new stdclass();
foreach($reviewer as $key => $value)
{
$field = $key;
if($key != 'type' && $key != 'userRange' && $key != 'required') $field = "range" . substr($key, 0, -1);
$dd->{$field} = $value;
}
$node->reviewers[$index] = $dd;
}
}
}
if(!empty($node->ccs))
{
foreach($node->ccs as $index => $cc)
{
$before = 'cc';
if(!empty($cc->type) && $cc->type == 'select') $before = 'ccrange';
$dd = new stdclass();
foreach($cc as $key => $value)
{
if($key == 'type') $field = 'ccType';
if($key == 'userRange') $field = 'ccuserRange';
if($key != 'type' && $key != 'userRange')
{
$field = $before . $key;
if($cc->type == 'select') $field = substr($field, 0, -1);
}
$dd->{$field} = $value;
}
$node->ccs[$index] = $dd;
}
}
}
}
$renderConditionText = function($conditions) use($users, $depts, $roles, $positions, $fields)
{
global $lang;
$conditionTextLang = (array)$lang->approvalflow->conditionTypeList;
$operatorList = (array)$lang->workflowcondition->operatorList;
$conditionText = '';
$conditionTitleText = '';
$conditionNum = 0;
foreach($conditions as $condition)
{
$conditionNum ++;
if(!$condition->conditionValue) continue;
if($condition->conditionField == 'submitUsers')
{
$userConditionText = '';
$userName = zget($users, $condition->conditionValue, '');
if($userName) $userConditionText .= $userName . ' ';
if($conditionNum <= 2) $conditionText .= $conditionTextLang['submitUsers'] . $operatorList[$condition->conditionOperator] . trim($userConditionText, ' ') . '
';
$conditionTitleText .= $conditionTextLang['submitUsers'] . $operatorList[$condition->conditionOperator] . trim($userConditionText, ' ');
}
elseif($condition->conditionField == 'submitDepts')
{
$deptConditionText = '';
$deptName = zget($depts, $condition->conditionValue, '');
if($deptName) $deptConditionText .= $deptName . '、';
if($conditionNum <= 2) $conditionText .= $conditionTextLang['submitDepts'] . $operatorList[$condition->conditionOperator] . trim($deptConditionText, ' ') . '
';
$conditionTitleText .= $conditionTextLang['submitDepts'] . $operatorList[$condition->conditionOperator] . trim($deptConditionText, ' ');
}
elseif($condition->conditionField == 'submitRoles')
{
$roleConditionText = '';
$roleName = zget($roles, $condition->conditionValue, '');
if($roleName) $roleConditionText .= $roleName . '、';;
if($conditionNum <= 2) $conditionText .= $conditionTextLang['submitRoles'] . $operatorList[$condition->conditionOperator] . trim($roleConditionText, ' ') . '
';
$conditionTitleText .= $conditionTextLang['submitRoles'] . $operatorList[$condition->conditionOperator] . trim($roleConditionText, ' ');
}
elseif($condition->conditionField == 'submitPositions')
{
$positionConditionText = '';
$positionName = zget($positions, $condition->conditionValue, '');
$positionConditionText .= $positionName . '、';
if($conditionNum <= 2) $conditionText .= $conditionTextLang['submitPositions'] . $operatorList[$condition->conditionOperator] . trim($positionConditionText, ' ') . '
';
$conditionTitleText .= $conditionTextLang['submitPositions'] . $operatorList[$condition->conditionOperator] . trim($positionConditionText, ' ');
}
elseif(isset($fields[$condition->conditionField]))
{
$field = $fields[$condition->conditionField];
$text = '';
$value = $field->options ? zget($field->options, $condition->conditionValue, '') : $condition->conditionValue;
if($value) $text .= $value . '、';
if($conditionNum <= 2) $conditionText .= $field->name . $operatorList[$condition->conditionOperator] . trim($text, ' ') . '
';
$conditionTitleText .= $field->name . $operatorList[$condition->conditionOperator] . trim($text, ' ');
}
if($conditionNum == 3) $conditionText .= '...';
$conditionTitleText .= '
';
}
return array('text' => $conditionText, 'titleText' => trim($conditionTitleText, '
'));
};
$renderNodes = function($nodes) use(&$renderNodes, &$renderConditionText)
{
global $lang;
$editorNodes = array();
$noticeTypeLang = $lang->approvalflow->noticeTypeList;
$reviewerTypeLang = $lang->approvalflow->reviewerTypeList;
$reviewTypeLang = $lang->approvalflow->reviewTypeList;
$nodeTypeLang = $lang->approvalflow->nodeTypeList;
foreach($nodes as $node)
{
if($node->type == 'branch')
{
$nodeType = $node->branchType == 'parallel' ? 'default' : 'other';
$branchType = $node->branchType == 'parallel' ? 'addParallel' : 'addCondition';
$noticeType = $node->branchType == 'condition' ? 'otherBranch' : 'defaultBranch';
$branchesHTML = array();
foreach($node->branches as $index => $branches)
{
$brancheNodes = $branches->nodes;
$conditions = $branches->conditions;
$conditionLabel = $renderConditionText($conditions);
$branchesHTML[] = div
(
setData('id', $branches->id),
setClass('editor-node branch'),
div(setClass('top-line-mask')),
div(setClass('top-v-line')),
div
(
setClass('nodes'),
div
(
setClass('editor-node condition'),
div
(
setClass('editor-node-container'),
div
(
setClass('node-title node-title-condition'),
span(setClass('node-title-name'), $nodeTypeLang['condition'] . ' ' . ((int)$index + 1)),
div
(
setClass('node-btns'),
button
(
set::type('button'),
setClass('delete-btn operate-icon'),
setData(array('on' => 'click', 'call' => 'deleteBranch', 'params' => 'event')),
span
(
setClass('universe-icon'),
h::svg
(
set::width('1em'),
set::height('1em'),
set::viewBox('0 0 24 24'),
set::fill('none'),
set::xmlns('http://www.w3.org/2000/svg'),
h::path(set::d('M12.0001 10.5858L19.7176 2.86825C19.9129 2.67299 20.2295 2.67299 20.4247 2.86825L21.1318 3.57536C21.3271 3.77062 21.3271 4.0872 21.1318 4.28246L13.4143 12L21.1318 19.7175C21.3271 19.9128 21.3271 20.2293 21.1318 20.4246L20.4247 21.1317C20.2295 21.327 19.9129 21.327 19.7176 21.1317L12.0001 13.4142L4.28258 21.1317C4.08732 21.327 3.77074 21.327 3.57548 21.1317L2.86837 20.4246C2.67311 20.2293 2.67311 19.9128 2.86837 19.7175L10.5859 12L2.86837 4.28246C2.67311 4.0872 2.67311 3.77062 2.86837 3.57536L3.57548 2.86825C3.77074 2.67299 4.08732 2.67299 4.28258 2.86825L12.0001 10.5858Z'), set::fill('currentColor'))
)
)
)
)
),
div
(
setClass('node-content node-content-placeholder'),
setData(array('on' => 'click', 'call' => 'clickConditionNode', 'params' => 'event', 'title' => $conditionLabel['titleText'])),
set::title($conditionLabel['titleText']),
div
(
setClass('node-detail-item'),
div(setClass('text-ellipsis'), html($conditionLabel['text']))
)
),
icon('arrow', setClass('iconfont-approval-admin'))
),
div(setClass('bottom-v-line')),
div
(
setClass('add-node-btn'),
setData(array('on' => 'click', 'call' => 'addNodeType', 'params' => 'event')),
div
(
setClass('add-btn'),
icon('plus', setClass('add-btn-icon iconfont-approval-admin'))
)
)
),
$brancheNodes ? $renderNodes($brancheNodes) : null
),
div(setClass('bottom-v-line')),
div(setClass('bottom-line-mask'))
);
}
$branchesHTML[] = div
(
setData('id', $node->default->id),
setClass('editor-node branch'),
div(setClass('top-line-mask')),
div(setClass('top-v-line')),
div
(
setClass('nodes'),
div
(
setClass('editor-node condition'),
div
(
setClass('editor-node-container'),
setData('condition-id', 'CONDITION_648325_5857434'),
setData('data-node-id', 'l10f2gm2-004'),
div
(
setClass('node-title node-title-condition'),
span(setClass('node-title-name'), $nodeTypeLang[$nodeType])
),
div
(
setClass('node-content'),
div
(
setClass('node-detail-item'),
div($noticeTypeLang[$noticeType])
)
),
icon('arrow', setClass('iconfont-approval-admin'))
),
div(setClass('bottom-v-line')),
div
(
setClass('add-node-btn'),
setData(array('on' => 'click', 'call' => 'addNodeType', 'params' => 'event')),
div
(
setClass('add-btn'),
icon('plus', setClass('add-btn-icon iconfont-approval-admin'))
)
)
),
$renderNodes($node->default->nodes)
),
div(setClass('bottom-v-line')),
div(setClass('bottom-line-mask'))
);
$editorNodes[] = div
(
setData('id', $node->id),
setClass('editor-node route'),
div(setClass('top-h-line')),
div
(
setClass('add-condition'),
setData(array('on' => 'click', 'call' => 'addCondition', 'params' => 'event')),
div
(
setClass('add-condition-inner'),
$noticeTypeLang[$branchType],
icon('arrow', setClass('iconfont-approval-admin'))
)
),
div
(
setClass('branches'),
$branchesHTML
),
div(setClass('bottom-h-line')),
div(setClass('bottom-v-line')),
div
(
setClass('add-node-btn'),
setData(array('on' => 'click', 'call' => 'addNodeType', 'params' => 'event')),
div
(
setClass('add-btn'),
icon('plus', setClass('add-btn-icon iconfont-approval-admin'))
)
)
);
}
else
{
$id = '';
$title = '';
$notice = '';
switch($node->type)
{
case 'start':
case 'end':
$id = $node->type;
$title = $noticeTypeLang['setCC'];
$notice = $noticeTypeLang['setCC'];
if(!empty($node->ccs[0]->type))
{
foreach($node->ccs as $cc) $notice = $reviewerTypeLang[$cc->type]['name'] . ' ';
}
break;
case 'approval':
$id = $node->id;
$title = $noticeTypeLang['setReviewer'];
if(empty($node->reviewType) || $node->reviewType == 'manual')
{
foreach($node->reviewers as $reviewer) $notice = $reviewerTypeLang[$reviewer->type]['name'] . ' ';
}
else
{
$notice = $reviewTypeLang[$node->reviewType];
}
break;
case 'cc':
$id = $node->id;
$title = $noticeTypeLang['setCC'];
foreach($node->ccs as $cc) $notice = $reviewerTypeLang[$cc->type]['name'] . ' ';
break;
}
$editorNodes[] = div
(
setData('id', $id),
setClass("editor-node {$node->type}"),
div(setClass('editor-node-container'), div
(
setClass('node-title'),
div
(
setClass('node-title-name text-ellipsis'),
set::title(!empty($node->title) ? $node->title : $nodeTypeLang[$node->type]),
!empty($node->title) ? $node->title : $nodeTypeLang[$node->type]
)
), div
(
setClass('node-content'),
setData(array('on' => 'click', 'call' => 'clickNode', 'params' => 'event')),
set::title($title),
div
(
setClass('node-detail'),
div
(
setClass('node-detail-item'),
$notice
)
)
), $node->type != 'start' && $node->type != 'end' ? icon('close', setClass('delete-btn iconfont-approval-admin'), setData(array('on' => 'click', 'call' => 'deleteNode', 'params' => 'event'))) : null),
$node->type != 'end' ? div
(
div(setClass('bottom-v-line')),
div
(
setClass('add-node-btn'),
setData(array('on' => 'click', 'call' => 'addNodeType', 'params' => 'event')),
div
(
setClass('add-btn'),
icon('plus', setClass('add-btn-icon iconfont-approval-admin'))
)
)
) : null
);
}
}
return $editorNodes;
};
jsVar('nodeTypeLang', $lang->approvalflow->nodeTypeList);
jsVar('warningLang', $lang->approvalflow->warningList);
jsVar('link', inlink('design', "flowID={$flow->id}"));
jsVar('workflow', $flow->workflow);
$btnClass = isInModal() ? 'mr-4' : '';
detailHeader
(
to::title
(
entityLabel
(
set::entityID($flow->id),
set::level(1),
set::text($flow->name)
)
),
to::suffix
(
btn
(
setClass("btn primary $btnClass"),
set::icon('save'),
setData(array('on' => 'click', 'call' => "$('#editorForm [type=submit]').trigger('click')")),
$lang->save
)
)
);
div
(
formPanel
(
setID('editorForm'),
set::ajax(array('beforeSubmit' => jsRaw('clickSubmit'))),
set::size('full'),
set::width('auto'),
set::actionsClass('hidden'),
div
(
setID('graph'),
div
(
setID('editor'),
setClass('editor-node branch'),
setData(array('on' => 'click', 'call' => 'hideAddType', 'params' => 'event')),
div
(
setID('root'),
setClass('nodes')
),
$renderNodes(json_decode($flow->nodes)),
formHidden('nodes', $flow->nodes)
)
)
),
modal
(
setID('modal'),
set::title(!empty($node->type) && $node->type == 'conditions' ? $lang->approvalflow->noticeTypeList['setCondition'] : $lang->approvalflow->noticeTypeList['setNode']),
!empty($node->type) ? formPanel
(
set::layout('grid'),
set::actions(array('submit' => array('text' => $noticeTypeLang['confirm'], 'class' => 'primary', 'data-on' => 'click', 'data-call' => $node->type == 'conditions' ? 'saveCondition' : 'saveNode', 'data-params' => 'event', 'data-id' => isset($node->id) ? $node->id : $node->type))),
$node->type == 'approval' || $node->type == 'cc' ? formGroup
(
set::label($noticeTypeLang["{$node->type}Title"]),
set::width('full'),
set::id('title'),
set::name('title'),
set::value(!empty($node->title) ? $node->title : $lang->approvalflow->nodeTypeList[$node->type])
) : null,
$node->type == 'approval' ? formGroup
(
set::label($lang->approvalflow->type),
set::width('full'),
radioList(set::name('reviewType'), set::inline(true), set::items(array('manual' => $reviewTypeLang['manual'], 'pass' => $reviewTypeLang['pass'], 'reject' => $reviewTypeLang['reject'])), set::value(!empty($node->reviewType) ? $node->reviewType : 'manual'), setData(array('on' => 'change', 'call' => 'changeReviewType', 'params' => 'event')))
) : null,
$node->type != 'conditions' ? formGroup
(
setID('reviewTypeBox'),
set::width('full'),
setClass(!empty($node->reviewType) && $node->reviewType == 'reject' ? 'hidden' : ''),
tabs
(
set::navClass('flex-1'),
set::titleClass('w-full'),
$node->type == 'approval' ? tabPane
(
set::key('reviewer'),
set::title($lang->approvalflow->reviewer),
set::active(empty($node->reviewType) || $node->reviewType == 'manual'),
set::hide(!empty($node->reviewType) && $node->reviewType != 'manual'),
div
(
setClass('section-list', 'canvas', 'col', 'pt-4', 'pb-6'),
formBatch
(
set::actions(''),
set::actionsWidth('64px'),
set::tagName('div'),
set::mode('add'),
set::minRows(1),
set::onRenderRow(jsRaw('renderRowData')),
!empty($node->reviewers) ? set::data(array_values($node->reviewers)) : null,
formBatchItem
(
set::label($noticeTypeLang['reviewType']),
set::name('type'),
set::width('1/4'),
set::control(array('control' => 'picker', 'required' => true, 'data-on' => 'change', 'data-call' => 'changeType', 'data-params' => 'event')),
set::items($reviewerTypes)
),
formBatchItem
(
set::label($noticeTypeLang['reviewRange']),
set::name('approval'),
set::control(array('control' => 'inputGroup')),
inputGroup(setClass('gap-4'), $reviewerBox)
)
),
formGroup
(
set::label($lang->approvalflow->priv),
set::width('full'),
checkList(set::name('priv'), set::inline(true), set::items($lang->approvalflow->privList), set::value(!empty($node->priv) ? $node->priv : ''))
)
)
) : null,
tabPane
(
set::key('ccer'),
set::title($lang->approvalflow->ccer),
set::active(!empty($node->reviewType) && $node->reviewType == 'pass'),
div
(
setClass('section-list', 'canvas', 'col', 'pt-4', 'pb-6'),
toolbar
(
btn
(
setClass('btn primary ghost hidden add-ccer-btn'),
set::icon('plus'),
set::text($lang->approvalflow->noticeTypeList['addCC'] ),
set::size('md')
)
),
formBatch
(
setID('ccerForm'),
set::actions(''),
set::actionsWidth('64px'),
set::tagName('div'),
set::mode('add'),
set::minRows(1),
set::onRenderRow(jsRaw('renderRowData')),
!empty($node->ccs) ? set::data(array_values($node->ccs)) : null,
formBatchItem(set::label($noticeTypeLang['ccType']), set::name('ccType'), set::width('1/4'), set::control(array('control' => 'picker', 'required' => true, 'data-on' => 'change', 'data-call' => 'changeType', 'data-params' => 'event')), set::items($ccTypes)),
formBatchItem
(
set::label($noticeTypeLang['ccRange']),
set::name('approval'),
set::control(array('control' => 'inputGroup')),
inputGroup(setClass('gap-4'), $ccerBox)
)
)
)
),
$node->type == 'approval' ? tabPane
(
set::key('approvalflow'),
set::title($lang->approvalflow->approval),
set::hide(!empty($node->reviewType) && $node->reviewType != 'manual'),
div(setClass('section-list', 'canvas', 'col', 'pt-4', 'pb-6'), $node->type == 'approval' ? formGroup
(
set::label($noticeTypeLang['multipleType']),
set::width('full'),
div
(
setClass('check-list'),
checkbox(set::name('multiple'), set::type('radio'), set::text($noticeTypeLang['multipleAnd']), set::value('and'), set::checked(empty($node->multiple) || $node->multiple == 'and'), setData(array('on' => 'change', 'call' => 'changeMultiple', 'params' => 'event')), checkBox(set::name('needAll'), set::text($lang->approvalflow->needAll), set::value(1), set::checked(!empty($node->needAll) && !empty($node->multiple) && $node->multiple == 'and'), set::rootClass('mx-4', empty($node->multiple) || $node->multiple == 'and' ? '' : 'hidden'))),
checkbox(set::name('multiple'), set::type('radio'), set::text($noticeTypeLang['multipleOr']), set::value('or'), set::checked(!empty($node->multiple) && $node->multiple == 'or'), setData(array('on' => 'change', 'call' => 'changeMultiple', 'params' => 'event')), checkBox(set::name('needAll'), set::text($lang->approvalflow->needAll), set::value(2), set::checked(!empty($node->needAll) && !empty($node->multiple) && $node->multiple == 'or'), set::rootClass('mx-4', !empty($node->multiple) && $node->multiple == 'or' ? '' : 'hidden'))),
checkbox
(
set::rootClass('items-center h-5'),
set::name('multiple'), set::type('radio'), set::text($noticeTypeLang['multiplePercent']), set::value('percent'), set::checked(!empty($node->multiple) && $node->multiple == 'percent'),
setData(array('on' => 'change', 'call' => 'changeMultiple', 'params' => 'event')),
div
(
setClass('input-control flex items-center has-suffix-sm w-28 mx-4', !empty($node->multiple) && $node->multiple == 'percent' ? '' : 'hidden'),
cell(setClass('flex-1'), set::width('1/1'), $lang->approvalflow->percent),
input(set::name('percent'), set::value(!empty($node->percent) ? $node->percent : '50'), setData(array('on' => 'change', 'call' => 'checkPercent', 'params' => 'event'))),
span(setClass('input-control-suffix'), '%')
),
checkBox(set::name('needAll'), set::text($lang->approvalflow->needAll), set::value(3), set::checked(!empty($node->needAll) && !empty($node->multiple) && $node->multiple == 'percent'), set::rootClass(!empty($node->multiple) && $node->multiple == 'percent' ? '' : 'hidden'))
),
checkbox(set::name('multiple'), set::type('radio'), set::text($noticeTypeLang['multipleSolicit']), set::value('solicit'), set::checked(!empty($node->multiple) && $node->multiple == 'solicit'), setData(array('on' => 'change', 'call' => 'changeMultiple', 'params' => 'event')))
)
) : null, $node->type == 'approval' ? formGroup
(
set::label($noticeTypeLang['commentType']),
set::width('full'),
radioList
(
set::name('commentType'),
set::inline(true),
set::items(array('noRequired' => $noticeTypeLang['noRequired'], 'required' => $noticeTypeLang['required'])),
set::value(!empty($node->commentType) ? $node->commentType : 'noRequired')
)
) : null, $node->type == 'approval' ? formGroup
(
set::label($noticeTypeLang['agentType']),
set::width('full'),
radioList(set::name('agentType'), set::inline(true), set::items(array('pass' => $noticeTypeLang['agentPass'], 'reject' => $noticeTypeLang['agentReject'], 'appointee' => $noticeTypeLang['agentUser'], 'admin' => $noticeTypeLang['agentAdmin'])), set::value(!empty($node->agentType) ? $node->agentType : 'pass'), setData(array('on' => 'change', 'call' => 'changeAgentType', 'params' => 'event'))),
picker(set::name('agentUser'), set::items($users), set::value(!empty($node->agentUser) ? $node->agentUser : ''), setClass(!empty($node->agentType) && $node->agentType == 'appointee' ? '' : 'hidden'), set::width('200px'), set::required(true))
) : null, $node->type == 'approval' ? formGroup
(
set::label($noticeTypeLang['selfType']),
set::width('full'),
radioList
(
set::name('selfType'),
set::inline(true),
set::items(array('selfReview' => $noticeTypeLang['selfReview'], 'selfPass' => $noticeTypeLang['selfPass'], 'selfNext' => $noticeTypeLang['selfNext'], 'selfManager' => $noticeTypeLang['selfManager'])),
set::value(!empty($node->selfType) ? $node->selfType : 'selfReview')
)
) : null, $node->type == 'approval' ? formGroup
(
set::label($noticeTypeLang['deletedType']),
set::width('full'),
radioList(set::name('deletedType'), set::inline(true), set::items(array('autoPass' => $noticeTypeLang['autoPass'], 'autoReject' => $noticeTypeLang['autoReject'], 'setUser' => $noticeTypeLang['setUser'], 'setSuperior' => $noticeTypeLang['setSuperior'], 'setManager' => $noticeTypeLang['setManager'], 'setAdmin' => $noticeTypeLang['setAdmin'])), set::value(!empty($node->deletedType) ? $node->deletedType : 'setAdmin'), setData(array('on' => 'change', 'call' => 'changeDeletedType', 'params' => 'event'))),
picker(set::name('setUser'), set::items($users), set::value(!empty($node->setUser) ? $node->setUser : ''), setClass(!empty($node->deletedType) && $node->deletedType == 'setUser' ? '' : 'hidden'), set::width('200px'), set::required(true))
) : null)
) : null
)
) : null,
$node->type == 'conditions' ? formBatch
(
set::actions(''),
set::actionsWidth('64px'),
set::tagName('div'),
set::mode('add'),
set::minRows(1),
set::onRenderRow(jsRaw('renderConditionRowData')),
!empty($node->conditions) ? set::data(array_values($node->conditions)) : null,
formBatchItem
(
set::width('1/6'),
set::name('conditionLogical'),
set::control(array('control' => 'picker', 'required' => true)),
set::items($lang->workflowcondition->logicalOperatorList),
set::value('or')
),
formBatchItem
(
set::width('1/2'),
set::label($noticeTypeLang['when']),
set::name('conditionField'),
set::control(array('control' => 'picker', 'required' => true, 'data-on' => 'change', 'data-call' => 'changeConditionField', 'data-params' => 'event')),
set::items($conditionFields)
),
formBatchItem
(
set::width('1/6'),
set::name('conditionOperator'),
set::control(array('control' => 'picker', 'required' => true)),
set::value('equal'),
set::items($lang->workflowcondition->operatorList)
),
formBatchItem
(
set::width('1/2'),
set::label($noticeTypeLang['value']),
set::name('conditionValue')
)
) : null
) : div()
),
div
(
setID('addNode'),
setClass('hidden'),
div
(
setClass('add-node-types'),
div
(
setClass('node-type add-reviewer'),
setData(array('on' => 'click', 'call' => 'addNode', 'params' => 'event', 'type' => 'reviewer')),
icon('review', setClass('node-type-icon iconfont-approval-admin')),
div(setClass('node-type-name'), $lang->approvalflow->reviewer)
),
div
(
setClass('node-type add-cc'),
setData(array('on' => 'click', 'call' => 'addNode', 'params' => 'event', 'type' => 'cc')),
icon('send', setClass('node-type-icon iconfont-approval-admin')),
div(setClass('node-type-name'), $lang->approvalflow->ccer)
),
div
(
setClass('node-type add-branch type-condition'),
setData(array('on' => 'click', 'call' => 'addNode', 'params' => 'event', 'type' => 'condition')),
icon('treemap', setClass('node-type-icon iconfont-approval-admin')),
div(setClass('node-type-name'), $lang->approvalflow->condition)
),
div
(
setClass('node-type add-branch type-parallel'),
setData(array('on' => 'click', 'call' => 'addNode', 'params' => 'event', 'type' => 'parallel')),
icon('tree', setClass('node-type-icon iconfont-approval-admin')),
div(setClass('node-type-name'), $lang->approvalflow->parallel)
)
)
)
);