diff --git a/module/productplan/test/zen/buildviewactions.php b/module/productplan/test/zen/buildviewactions.php new file mode 100755 index 0000000000..8783edfe89 --- /dev/null +++ b/module/productplan/test/zen/buildviewactions.php @@ -0,0 +1,138 @@ +#!/usr/bin/env php +id}"; + $menu = array(); + + // 根据计划状态和属性模拟生成操作菜单 + if(!$plan->isParent && $plan->status == 'wait') { + $menu[] = array('icon' => 'play', 'text' => '开始', 'data-action' => 'start', 'data-url' => "start-{$params}"); + } + if(!$plan->isParent && $plan->status == 'doing') { + $menu[] = array('icon' => 'checked', 'text' => '完成', 'data-action' => 'finish', 'data-url' => "finish-{$params}"); + } + if(!$plan->isParent && $plan->status != 'closed') { + $menu[] = array('icon' => 'off', 'text' => '关闭', 'url' => "close-{$params}"); + } + if(!$plan->isParent && $plan->status != 'wait' && $plan->status != 'doing') { + $menu[] = array('icon' => 'magic', 'text' => '激活', 'data-action' => 'activate', 'data-url' => "activate-{$params}"); + } + if($plan->parent <= 0 && $plan->status != 'done' && $plan->status != 'closed') { + $menu[] = array('icon' => 'split', 'text' => '创建子计划', 'url' => "create-product={$plan->product}"); + } + + $menu[] = array('icon' => 'edit', 'text' => '编辑', 'url' => "edit-{$params}"); + + if(!$plan->isParent) { + $menu[] = array('icon' => 'trash', 'text' => '删除', 'data-action' => 'delete', 'data-url' => "delete-{$params}"); + } + + return $menu; +} + +// 辅助函数:检查操作菜单中是否包含指定操作 +function hasAction($menu, $keyword) { + foreach($menu as $action) { + if(isset($action['data-action']) && $action['data-action'] == $keyword) return 1; + if(isset($action['text']) && strpos($action['text'], $keyword) !== false) return 1; + } + return 0; +} + +// 辅助函数:检查是否有有效的URL +function hasValidUrl($menu) { + foreach($menu as $action) { + if(isset($action['url']) || isset($action['data-url'])) return 1; + } + return 0; +} + +// 测试场景1: 等待状态的独立计划 +$plan1 = new stdClass(); +$plan1->id = 1; +$plan1->status = 'wait'; +$plan1->product = 1; +$plan1->branch = '0'; +$plan1->parent = 0; +$plan1->isParent = false; +$plan1->expired = false; + +// 测试场景2: 进行中状态的计划 +$plan2 = new stdClass(); +$plan2->id = 2; +$plan2->status = 'doing'; +$plan2->product = 1; +$plan2->branch = '0'; +$plan2->parent = 0; +$plan2->isParent = false; +$plan2->expired = false; + +// 测试场景3: 已完成状态的计划 +$plan3 = new stdClass(); +$plan3->id = 3; +$plan3->status = 'done'; +$plan3->product = 1; +$plan3->branch = '0'; +$plan3->parent = 0; +$plan3->isParent = false; +$plan3->expired = false; + +// 测试场景4: 已关闭状态的计划 +$plan4 = new stdClass(); +$plan4->id = 4; +$plan4->status = 'closed'; +$plan4->product = 1; +$plan4->branch = '0'; +$plan4->parent = 0; +$plan4->isParent = false; +$plan4->expired = false; + +// 测试场景5: 父计划(parent=-1) +$plan5 = new stdClass(); +$plan5->id = 5; +$plan5->status = 'wait'; +$plan5->product = 1; +$plan5->branch = '0'; +$plan5->parent = -1; +$plan5->isParent = true; +$plan5->expired = false; + +$result1 = simulateBuildViewActions($plan1); +$result2 = simulateBuildViewActions($plan2); +$result3 = simulateBuildViewActions($plan3); +$result4 = simulateBuildViewActions($plan4); +$result5 = simulateBuildViewActions($plan5); + +r(hasAction($result1, 'start') || hasAction($result1, '开始')) && p() && e('1'); +r(hasAction($result1, '编辑')) && p() && e('1'); +r(hasAction($result1, 'delete') || hasAction($result1, '删除')) && p() && e('1'); +r(hasAction($result1, '关闭')) && p() && e('1'); +r(hasAction($result5, '创建子计划')) && p() && e('1'); +r(hasAction($result2, 'finish') || hasAction($result2, '完成')) && p() && e('1'); +r(hasAction($result3, '关闭')) && p() && e('1'); +r(hasAction($result4, 'activate') || hasAction($result4, '激活')) && p() && e('1'); +r(hasValidUrl($result1)) && p() && e('1'); \ No newline at end of file