| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- <?php
- namespace zin;
- class productCharterBox extends wg
- {
- /**
- * Define widget properties.
- *
- * @var array
- * @access protected
- */
- protected static $defineProps = array(
- 'charter?: object', // 所属立项。
- 'products?: array', // 产品下拉列表。
- 'objectType?: string' // 立项关联的对象类型。
- );
- public static function getPageCSS()
- {
- return file_get_contents(__DIR__ . DS . 'css' . DS . 'v1.css');
- }
- public static function getPageJS()
- {
- return file_get_contents(__DIR__ . DS . 'js' . DS . 'v1.js');
- }
- protected function build()
- {
- $productsBox = $this->initProductsBox();
- return div
- (
- setClass('productsBox'),
- setData(array('objecttype' => $this->prop('objectType'))),
- jsVar('multiBranchProducts', data('multiBranchProducts')),
- $productsBox
- );
- }
- protected function initProductsBox()
- {
- global $lang, $app, $config;
- $products = $this->prop('products');
- $charter = $this->prop('charter');
- $objectType = $this->prop('objectType');
- $productsBox = array();
- $index = 0;
- if($charter)
- {
- $objectsGroup = array();
- if($objectType == 'plan') $objectsGroup = $app->control->loadModel('productplan')->getPlansForCharter(explode(',', trim($charter->product, ',')), trim($charter->plan, ','));
- if($objectType == 'roadmap') $objectsGroup = $app->control->loadModel('roadmap')->groupByProduct('nolaunching', trim($charter->roadmap, ','));
- $branchGroups = $app->control->loadModel('branch')->getByProducts(array_keys($products), 'noclosed');
- $linkedBranchGroups = $app->control->loadModel('charter')->getLinkedBranchGroups($charter->id);
- $charterProductMaps = $app->control->loadModel('charter')->getGroupDataByID($charter->id);
- if(empty($charterProductMaps)) $charterProductMaps = array(array()); // 没有产品时,至少渲染一行数据。
- foreach($charterProductMaps as $productID => $objects)
- {
- $productObjects = isset($objectsGroup[$productID]) ? array_keys($objectsGroup[$productID]) : array();
- $objects = array_intersect($productObjects, array_keys($objects));
- $product = $app->control->loadModel('product')->fetchByID($productID);
- $hasBranch = !empty($product->type) && $product->type != 'normal' && isset($branchGroups[$productID]);
- $productsBox[] = div
- (
- set::className('productBox'),
- div
- (
- set::className('flex'),
- formGroup
- (
- set::width($hasBranch ? '1/4' : '1/2'),
- setClass('distributeProduct text-clip'),
- $index != 0 ? set::labelClass('hidden') : null,
- set::label($lang->charter->product),
- inputGroup
- (
- div
- (
- setClass('grow linkProduct w-1/2'),
- picker
- (
- setData(array('on' => 'change', 'call' => 'refreshPicker', 'params' => 'event')),
- set::name("product[$index]"),
- set::items($products),
- set::value($productID)
- )
- )
- )
- ),
- formGroup
- (
- set::width('1/4'),
- setClass('linkBranch ml-px'),
- $hasBranch ? null : setClass('hidden'),
- set::label(''),
- $index != 0 ? set::labelClass('hidden') : null,
- inputGroup
- (
- setClass('branchBox'),
- picker
- (
- set::name("branch[{$index}][]"),
- set::items(isset($branchGroups[$productID]) ? $branchGroups[$productID] : array()),
- set::value(isset($linkedBranchGroups[$productID]) ? array_keys($linkedBranchGroups[$productID]) : array()),
- set::multiple(true),
- set::emptyValue(''),
- setData(array('on' => 'change', 'call' => 'branchChange', 'params' => 'event'))
- )
- )
- ),
- formGroup
- (
- set::width('1/2'),
- set::label($lang->charter->$objectType),
- $config->edition == 'ipd' ? set::labelControl(array('control' => 'icon', 'name' => 'help', 'data-toggle' => 'tooltip', 'data-title' => $lang->custom->charter->tips->type)) : null,
- set::className("{$objectType}Box"),
- $index != 0 ? set::labelClass('hidden') : null,
- inputGroup
- (
- div
- (
- setClass('grow w-1/2', $objectType == 'roadmap' ? 'linkRoadmap' : 'linkPlan'),
- picker
- (
- set::name("{$objectType}[$index]"),
- set::multiple(true),
- set::items(isset($objectsGroup[$productID]) ? $objectsGroup[$productID] : array()),
- set::value(array_values($objects))
- )
- ),
- div
- (
- $objectType == 'roadmap' && common::hasPriv('charter', 'loadRoadmapStories') ? inputGroupAddon
- (
- setClass('p-0'),
- btn
- (
- setID('loadRoadmapStories'),
- setClass('ghost'),
- setData(array('on' => 'click', 'call' => 'loadRoadmapStories', 'params' => 'event')),
- $lang->charter->loadStories
- )
- ) : null
- )
- )
- )
- ),
- div
- (
- set::className('actionsBox'),
- formGroup
- (
- set::label(''),
- $index != 0 ? set::labelClass('hidden') : null,
- div
- (
- setClass('pl-2 flex self-center line-btn'),
- btn
- (
- setData(array('on' => 'click', 'call' => 'addNewLine', 'params' => 'event')),
- setClass('btn btn-link text-gray addLine'),
- icon('plus')
- ),
- btn
- (
- setData(array('on' => 'click', 'call' => 'removeLine', 'params' => 'event')),
- setClass('btn btn-link text-gray removeLine', $index == 0 && count($charterProductMaps) <= 1 ? 'hidden' : ''),
- icon('trash')
- )
- )
- )
- )
- );
- $index ++;
- }
- }
- else
- {
- $productsBox[] = div
- (
- set::className('productBox'),
- div
- (
- set::className('flex'),
- formGroup
- (
- set::width('1/2'),
- setClass('distributeProduct text-clip'),
- set::label($lang->charter->product),
- set::labelClass($charter ? 'hidden' : ''),
- inputGroup
- (
- div
- (
- setClass('grow linkProduct w-1/2'),
- picker
- (
- setData(array('on' => 'change', 'call' => 'refreshPicker', 'params' => 'event')),
- set::name("product[$index]"),
- set::items($products),
- set::defaultValue(''),
- set::emptyValue('')
- )
- )
- )
- ),
- formGroup
- (
- set::width('1/4'),
- setClass('hidden linkBranch ml-px'),
- set::label(''),
- inputGroup
- (
- setClass('branchBox'),
- picker
- (
- set::name("branch[$index]"),
- set::items(array()),
- setData(array('on' => 'change', 'call' => 'branchChange', 'params' => 'event'))
- )
- )
- ),
- formGroup
- (
- set::width('1/2'),
- set::label($lang->charter->$objectType),
- set::labelClass($charter ? 'hidden' : ''),
- $config->edition == 'ipd' ? set::labelControl(array('control' => 'icon', 'name' => 'help', 'data-toggle' => 'tooltip', 'data-title' => $lang->custom->charter->tips->type)) : null,
- set::className("{$objectType}Box"),
- inputGroup
- (
- div
- (
- setClass('grow w-1/2', $objectType == 'roadmap' ? 'linkRoadmap' : 'linkPlan'),
- picker
- (
- set::name("{$objectType}[$index]"),
- set::multiple(true),
- set::items(array())
- )
- ),
- div
- (
- $objectType == 'roadmap' && common::hasPriv('charter', 'loadRoadmapStories') ? inputGroupAddon
- (
- setClass('p-0'),
- btn
- (
- setID('loadRoadmapStories'),
- setClass('ghost'),
- setData(array('on' => 'click', 'call' => 'loadRoadmapStories', 'params' => 'event')),
- $lang->charter->loadStories
- )
- ) : null
- )
- )
- )
- ),
- div
- (
- set::className('actionsBox'),
- count($products) ? formGroup
- (
- set::label(''),
- set::labelClass($charter ? 'hidden' : ''),
- div
- (
- setClass('pl-2 flex self-center line-btn'),
- btn
- (
- setData(array('on' => 'click', 'call' => 'addNewLine', 'params' => 'event')),
- setClass('btn btn-link text-gray addLine'),
- icon('plus')
- ),
- btn
- (
- setData(array('on' => 'click', 'call' => 'removeLine', 'params' => 'event')),
- setClass('btn btn-link text-gray removeLine', $charter ? '' : 'hidden'),
- icon('trash')
- )
- )
- ) : null
- )
- );
- }
- return $productsBox;
- }
- }
|