promptnav.html.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace zin;
  3. /**
  4. * Build navigation steps for prompt design
  5. * 构建提示设计页面的步骤导航
  6. *
  7. * @param array $stepSequence 步骤序列
  8. * @param array $stepStatus 步骤状态
  9. * @param object $prompt 提示对象
  10. * @param array $stepNav 步骤导航配置
  11. * @return mixed Any type supported by zin widget function
  12. */
  13. function buildNavSteps($stepSequence, $stepStatus, $prompt, $stepNav)
  14. {
  15. return menu(
  16. setClass('nav nav-steps'),
  17. ...array_map(function ($stepKey, $stepLang) use ($stepStatus, $stepSequence, $prompt) {
  18. $currentStepStatus = $stepStatus[$stepKey] ?? 'disabled';
  19. /* 根据状态设置CSS类 */
  20. $linkClass = '';
  21. switch ($currentStepStatus) {
  22. case 'active':
  23. $linkClass = 'selected';
  24. break;
  25. case 'current':
  26. $linkClass = 'active';
  27. break;
  28. case 'clickable':
  29. $linkClass = '';
  30. break;
  31. case 'disabled':
  32. $linkClass = 'disabled';
  33. break;
  34. }
  35. return li(setClass('nav-item item'), a(setClass($linkClass), set::href(createLink('ai', "prompt$stepKey", "prompt=" . ($prompt->id ?? '0'))), span(
  36. setClass('text'),
  37. $stepLang
  38. )));
  39. }, array_keys($stepNav), array_values($stepNav))
  40. );
  41. }
  42. /* 步骤导航逻辑 */
  43. $step = preg_replace('/^prompt/', '', $app->methodName ?? 'assignrole');
  44. $stepSequence = array('assignrole', 'selectdatasource', 'setpurpose', 'settargetform', 'finalize');
  45. $currentStepIndex = array_search($step, $stepSequence);
  46. $lastActiveStepIndex = array_search($lastActiveStep ?? 'assignrole', $stepSequence);
  47. $stepStatus = array();
  48. foreach ($stepSequence as $index => $stepName) {
  49. if ($index < $currentStepIndex) {
  50. $stepStatus[$stepName] = 'active';
  51. } elseif ($index > $currentStepIndex && $index <= $lastActiveStepIndex + 1) {
  52. $stepStatus[$stepName] = 'clickable';
  53. } else {
  54. $stepStatus[$stepName] = 'disabled';
  55. }
  56. if ($index == $currentStepIndex) {
  57. $stepStatus[$stepName] = 'current';
  58. }
  59. }
  60. /**
  61. * Prompt Design 页面共享头部
  62. */
  63. div(setClass('prompt-header'), btn(setClass('btn-back'), set::type('ghost'), set::url(createLink('ai', 'prompts')), set::icon('angle-left'), set::text($lang->goback)), buildNavSteps($stepSequence, $stepStatus, $prompt, $lang->ai->designStepNav));