model); jsVar('labelClass', $config->project->labelClass); jsVar('longTime', $lang->project->longTime); jsVar('weekend', $config->execution->weekend); jsVar('unmodifiableProducts', $unmodifiableProducts); jsVar('unmodifiableBranches', $unmodifiableBranches); jsVar('unmodifiableMainBranches', $unmodifiableMainBranches); jsVar('multiBranchProducts', $multiBranchProducts); jsVar('errorSameProducts', $lang->project->errorSameProducts); jsVar('beginLessThanParent', $lang->project->beginLessThanParent); jsVar('endGreatThanParent', $lang->project->endGreatThanParent); jsVar('ignore', $lang->project->ignore); jsVar('unLinkProductTip', $lang->project->unLinkProductTip); jsVar('allProducts', $allProducts); jsVar('branchGroups', $branchGroups); jsVar('programTip', $lang->program->tips); jsVar('projectID', $project->id); jsVar('from', $from); $projectModelItems = array(); foreach($lang->project->modelList as $key => $text) { if(empty($key)) continue; $projectModelItems[] = array ( 'active' => ($key == $model), 'class' => 'model-drop', 'data-key' => $key, 'data-value' => $text, 'text' => $text ); } $productElements = array(); if($linkedProducts) { foreach($linkedProducts as $productID => $product) $productElements[] = formHidden('products[]', $productID); } $labelClass = $config->project->labelClass[$model]; $disableParent = false; $delta = $project->end == LONG_TIME ? 999 : (strtotime($project->end) - strtotime($project->begin)) / 3600 / 24 + 1; if(!isset($programList[$project->parent])) { $disableParent = true; $programList = array($project->parent => $program->name); } useData('title', null); formPanel ( to::heading(div ( setClass('panel-title text-lg'), $title, $disableModel ? btn ( set::id('project-model'), setClass("$labelClass h-5 px-2"), zget($lang->project->modelList, $model, '') ) : dropdown ( btn ( set::id('project-model'), setClass("$labelClass h-5 px-2"), zget($lang->project->modelList, $model, '') ), set::placement('bottom'), set::menu(array('style' => array('color' => 'var(--color-fore)'))), set::items($projectModelItems) ) )), on::click('.addLine', 'addNewLine'), on::click('.removeLine', 'removeLine'), on::click('.project-type-1', 'changeType(1)'), on::click('.project-type-0', 'changeType(0)'), on::click('.project-stageBy-0', 'changeStageBy(0)'), on::click('.project-stageBy-1', 'changeStageBy(1)'), on::change('[name^=products]', 'productChange'), on::change('[name^=branch]', 'branchChange'), on::change('#parent', 'setParentProgram'), on::change('#begin', 'computeWorkDays'), on::change('#end', 'computeWorkDays'), on::change('[name=delta]', 'setDate'), on::change('[name=future]', 'toggleBudget'), on::change('[name=newProduct]', 'addProduct'), formHidden('parent', $project->parent), formHidden('model', $project->model), formHidden('hasProduct', $project->hasProduct), formGroup ( set::width('1/2'), set::name('name'), set::value($project->name), set::label($lang->project->name), set::strong(true) ), (isset($config->setCode) && $config->setCode == 1) ? formGroup ( set::width('1/2'), set::name('code'), set::value($project->code), set::label($lang->project->code), set::strong(true) ) : null, formGroup ( set::width('1/4'), set::label($lang->project->PM), picker ( set::name('PM'), set::value($project->PM), set::items($PMUsers) ) ), formRow ( formGroup ( set::width('1/2'), set::label($lang->project->planDate), set::required(true), inputGroup ( datePicker ( set::name('begin'), set('id', 'begin'), set::value($project->begin), set::placeholder($lang->project->begin), set::required(true) ), $lang->project->to, datePicker ( set::name('end'), set('id', 'end'), set::value($project->end), set::placeholder($lang->project->end), set::required(true), set::disabled($project->end == LONG_TIME) ) ) ), formGroup ( set::width('1/2'), setClass('items-center'), radioList ( set::name('delta'), set::value($delta), set::inline(true), set::items($lang->project->endList) ) ) ), formGroup ( set::label($lang->project->desc), editor ( set::name('desc'), html($project->desc), set::placeholder($lang->project->editorPlaceholder) ) ), formRow ( set::id('aclList'), formGroup ( set::name('acl'), set::label($lang->project->acl), set::control('radioList'), set::items($lang->project->aclList), $programID ? set::items($lang->project->subAclList) : set::items($lang->project->aclList), set::value($project->acl) ) ), formGroup ( set::width('1/2'), set::label($lang->whitelist), picker ( set::name('whitelist[]'), set::value($project->whitelist), set::items($users), set::multiple(true) ) ), $productElements ? $productElements : null ); useData('title', $title); render();