promptaudit.html.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. /**
  3. * The audit view file of AI module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2025 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  6. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Hao Sun <sunhao@easycorp.ltd>
  8. * @package ai
  9. * @link https://www.zentao.net
  10. */
  11. namespace zin;
  12. $sources = explode(',', $prompt->source);
  13. $sources = array_filter($sources);
  14. end($sources);
  15. $lastKey = key($sources);
  16. $fields = array();
  17. foreach($sources as $key => $source)
  18. {
  19. list($object, $field) = explode('.', $source);
  20. $fields[] = $this->lang->ai->dataSource[$prompt->module][$object][$field];
  21. }
  22. $targetForm = explode('.', $prompt->targetForm);
  23. $targetFormName = $this->lang->ai->targetForm[$targetForm[0]][$targetForm[1]];
  24. set::size('lg');
  25. modalHeader
  26. (
  27. set::title($lang->ai->audit->designPrompt),
  28. set::entityID($prompt->id),
  29. set::entityText($prompt->name)
  30. );
  31. form
  32. (
  33. row
  34. (
  35. setClass('surface-light py-1'),
  36. cell
  37. (
  38. setClass('col gap-3 w-1/2 pr-4 border-r'),
  39. h5(setClass('pl-1'), $lang->ai->prompts->assignRole),
  40. formGroup
  41. (
  42. set::label($lang->ai->prompts->role),
  43. set::name('role'),
  44. set::value($prompt->role),
  45. set::control('input'),
  46. set::placeholder($lang->ai->prompts->rolePlaceholder),
  47. on::input()->do('$("#roleDisplay").text($(target).closest("input").val());')
  48. ),
  49. formGroup
  50. (
  51. set::label($lang->ai->prompts->characterization),
  52. set::name('characterization'),
  53. set::value($prompt->characterization),
  54. set::control(array('control' => 'textarea', 'rows' => 4)),
  55. set::placeholder($lang->ai->prompts->charPlaceholder),
  56. on::input()->do('$("#characterizationDisplay").text($(target).closest("textarea").val());')
  57. ),
  58. h5(setClass('pl-1'), $lang->ai->prompts->selectDataSource),
  59. formGroup
  60. (
  61. set::label($lang->ai->prompts->object),
  62. set::value($lang->ai->dataSource[$prompt->module]['common']),
  63. set::control('static')
  64. ),
  65. formGroup
  66. (
  67. set::label($lang->ai->prompts->field),
  68. set::value(implode($lang->ai->prompts->fieldSeparator, $fields)),
  69. set::control('static')
  70. ),
  71. h5(setClass('pl-1'), $lang->ai->prompts->setPurpose),
  72. formGroup
  73. (
  74. set::label($lang->ai->prompts->purpose),
  75. set::name('purpose'),
  76. set::value($currentPrompt),
  77. set::control(array('control' => 'textarea', 'rows' => 6)),
  78. set::required(true),
  79. set::placeholder($lang->ai->prompts->purposeTip),
  80. on::input()->do
  81. (
  82. 'const purposeText = $(target).closest("textarea").val();',
  83. '$("#purposeDisplay").text(purposeText);',
  84. '$this.closest("form").find("button[type=\'submit\']").prop("disabled", !purposeText);'
  85. )
  86. ),
  87. h5(setClass('pl-1'), $lang->ai->prompts->setTargetForm),
  88. formGroup
  89. (
  90. set::label($lang->ai->prompts->selectTargetForm),
  91. set::value($targetFormName),
  92. set::control('static')
  93. )
  94. ),
  95. cell
  96. (
  97. setClass('col gap-4 w-1/2 pl-4'),
  98. h5
  99. (
  100. setClass('flex items-center'),
  101. $lang->ai->audit->promptForModel,
  102. $lang->colon,
  103. zui::aiModelName($prompt->model)
  104. ),
  105. div(setClass('border-t text-gray pt-1'), $lang->ai->prompts->assignRole),
  106. p(setID('roleDisplay'), $prompt->role),
  107. p(setID('characterizationDisplay'), $prompt->characterization),
  108. div(setClass('border-t text-gray pt-1'), $lang->ai->prompts->selectDataSource),
  109. p(htmlspecialchars($dataPrompt)),
  110. div(setClass('border-t text-gray pt-1'), $lang->ai->prompts->setPurpose),
  111. p(setID('purposeDisplay'), setClass('whitespace-pre-wrap'), $currentPrompt)
  112. )
  113. ),
  114. row
  115. (
  116. setClass('items-center gap-2 pl-1'),
  117. div($this->lang->ai->audit->afterSave),
  118. radioList
  119. (
  120. set::name('backLocation'),
  121. set::items($this->lang->ai->audit->backLocationList),
  122. set::value(1),
  123. set::inline(true)
  124. )
  125. )
  126. );