browseminiprogram.html.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. namespace zin;
  3. jsVar('regenerateLang', $lang->aiapp->regenerate);
  4. jsVar('emptyNameWarning', $lang->aiapp->emptyNameWarning);
  5. jsVar('clearContextLang', $lang->aiapp->clearContext);
  6. jsVar('newChatTip', $lang->aiapp->newChatTip);
  7. jsVar('newVersionTip', $lang->aiapp->newVersionTip);
  8. jsVar('prompt', $miniProgram->prompt);
  9. jsVar('knowledgeLibs', $miniProgram->knowledgeLib);
  10. jsVar('postLink', createLink('aiapp', 'miniProgramChat', "id={$miniProgram->id}"));
  11. jsVar('messages', $messages);
  12. jsVar('isAppDisabled', $miniProgram->published == '0');
  13. jsVar('pathname', $miniProgram->name);
  14. $app->loadLang('ai');
  15. $isDeleted = $miniProgram->deleted === '1';
  16. $formGroups = array();
  17. if(count($fields) !== 0)
  18. {
  19. foreach($fields as $field)
  20. {
  21. if($field->type === 'textarea')
  22. {
  23. $control = textarea(
  24. set::rows(1),
  25. set::name("field-{$field->id}"),
  26. set::placeholder($field->placeholder),
  27. set::disabled($isDeleted),
  28. set::className('form-field'),
  29. setData('name', $field->name),
  30. setData('fid', $field->id)
  31. );
  32. }
  33. elseif($field->type === 'radio')
  34. {
  35. $options = explode(',', $field->options);
  36. $control = picker(
  37. set::name("field-{$field->id}"),
  38. set::items(array_combine($options, $options)),
  39. set::disabled($isDeleted),
  40. setData('name', $field->name),
  41. setData('fid', $field->id)
  42. );
  43. }
  44. elseif($field->type === 'checkbox')
  45. {
  46. $options = explode(',', $field->options);
  47. $control = picker(
  48. set::name("field-{$field->id}"),
  49. set::items(array_combine($options, $options)),
  50. set::multiple(true),
  51. set::disabled($isDeleted),
  52. setData('name', $field->name),
  53. setData('fid', $field->id)
  54. );
  55. }
  56. else
  57. {
  58. $control = input(
  59. set::name("field-{$field->id}"),
  60. set::placeholder($field->placeholder),
  61. set::disabled($isDeleted),
  62. set::className('form-field'),
  63. setData('name', $field->name),
  64. setData('fid', $field->id)
  65. );
  66. }
  67. $formGroups[] = formGroup(
  68. set::label($field->name),
  69. set::required($field->required === '1'),
  70. setData('name', $field->name),
  71. $control
  72. );
  73. }
  74. }
  75. jsVar('fields', $fields);
  76. list($iconName, $iconTheme) = explode('-', $miniProgram->icon);
  77. $star = in_array($miniProgram->id, $collectedIDs) ? 'star' : 'star-empty';
  78. $delete = $star === 'star' ? 'true' : 'false';
  79. btn(
  80. setClass('hidden'),
  81. setID('open-dialog'),
  82. setData('toggle', 'modal'),
  83. setData('target', '#disabled-dialog')
  84. );
  85. div(
  86. setClass('modal'),
  87. setData('backdrop', 'static'),
  88. setID('disabled-dialog'),
  89. div(
  90. setClass('modal-dialog shadow size-sm bd-none'),
  91. div(
  92. setClass('modal-content'),
  93. div(
  94. setClass('modal-body'),
  95. html('<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
  96. <circle cx="12.013" cy="12.0163" r="12" transform="rotate(0.0777774 12.013 12.0163)" fill="#FFA34D"/>
  97. <path d="M11.5573 14.7861C12.0809 14.7867 12.6054 14.2164 12.6063 13.6455L13.0103 6.08095C13.0112 5.51 13.0129 4.36812 11.442 4.36619C10.002 4.36442 9.8696 5.36341 9.86853 6.07709L10.2499 13.6426C10.5109 14.2138 11.0337 14.7854 11.5573 14.7861ZM11.5551 16.2134C10.7697 16.2124 9.98317 16.9252 9.98167 17.9243C9.98039 18.7807 10.6336 19.6379 11.55 19.6391C12.4664 19.6402 13.122 18.9273 13.1235 17.9282C13.125 16.929 12.3406 16.2144 11.5551 16.2134Z" fill="white"/>
  98. </svg>'),
  99. $lang->aiapp->disabledTip
  100. ),
  101. div(
  102. setClass('modal-footer'),
  103. btn(
  104. setClass('primary'),
  105. setData('dismiss', 'modal'),
  106. on::click('window.aiBrowseMiniProgram.backToSquare'),
  107. $lang->confirm
  108. )
  109. )
  110. )
  111. )
  112. );
  113. $starBtn = common::hasPriv('aiapp', 'collectMiniProgram')
  114. ? btn(
  115. setClass('ghost btn-star absolute'),
  116. set::size('md'),
  117. setData('url', createLink('aiapp', 'collectMiniProgram', "appID={$miniProgram->id}&delete={$delete}")),
  118. on::click('window.aiBrowseMiniProgram.handleStarBtnClick'),
  119. html(html::image("static/svg/{$star}.svg", "class='$star'")),
  120. $lang->aiapp->collect
  121. )
  122. : null;
  123. $generateBtn = common::hasPriv('aiapp', 'miniProgramChat')
  124. ? btn(
  125. setClass('primary block w-full generate-btn'),
  126. set::disabled($isDeleted),
  127. $lang->aiapp->generate,
  128. on::click('window.aiBrowseMiniProgram.startAIChat')
  129. )
  130. : null;
  131. div(
  132. setClass('mini-program fixed flex'),
  133. div(
  134. setClass('detail col shadow ring rounded h-full flex-none'),
  135. div(
  136. setClass('header relative flex flex-none'),
  137. div(
  138. setID('program-avatar'),
  139. setClass('program-avatar center flex-none'),
  140. setStyle(array('border' => "1px solid {$config->ai->miniPrograms->themeList[$iconTheme][1]}", 'background-color' => $config->ai->miniPrograms->themeList[$iconTheme][0])),
  141. html($config->ai->miniPrograms->iconList[$iconName])
  142. ),
  143. div(
  144. setClass('content flex-1 overflow-hidden'),
  145. div(
  146. setClass('title pb-2 ellipsis'),
  147. set::title($miniProgram->name),
  148. $miniProgram->name
  149. ),
  150. div(
  151. setClass('desc'),
  152. set::title($miniProgram->desc),
  153. $miniProgram->desc
  154. )
  155. ),
  156. $isDeleted
  157. ? label(
  158. setClass('danger'),
  159. $lang->aiapp->deleted
  160. )
  161. : $starBtn
  162. ),
  163. div(
  164. setClass('body col overflow-hidden', empty($formGroups) ? 'flex-none' : 'flex-1'),
  165. div(
  166. setClass('language-model flex flex-none justify-between items-center'),
  167. div(
  168. setClass('content flex gap-2.5'),
  169. span(
  170. setStyle(array('color' => 'var(--color-slate-700)')),
  171. $lang->aiapp->modelCurrent
  172. ),
  173. zui::aiModelName($miniProgram->model)
  174. ),
  175. empty($formGroups)
  176. ? null
  177. : btn(
  178. setClass('ghost'),
  179. set::size('md'),
  180. set::disabled($isDeleted),
  181. set::icon('trash'),
  182. $lang->aiapp->clear,
  183. on::click('window.aiBrowseMiniProgram.handleRestBtnClick')
  184. )
  185. ),
  186. empty($formGroups)
  187. ? null
  188. : div(
  189. setClass('form-container p-1 flex-1 overflow-y-auto'),
  190. setID('miniProgramForm'),
  191. form(
  192. set::grid(false),
  193. set::actions(array()),
  194. $formGroups
  195. )
  196. )
  197. ),
  198. div(
  199. setClass('footer flex-none'),
  200. $generateBtn
  201. )
  202. ),
  203. common::hasPriv('aiapp', 'miniProgramChat') ? div
  204. (
  205. setID('aiChatView'),
  206. setClass('shadow rounded flex-1 ring'),
  207. div
  208. (
  209. setClass('center h-full'),
  210. div
  211. (
  212. setClass('row items-center gap-2'),
  213. icon('lightbulb text-warning'),
  214. div(html(str_replace('{zaiConfigUrl}', createLink('zai', 'setting'), $lang->aiapp->langData->zaiConfigNotValid)))
  215. )
  216. ),
  217. on::init()->call('window.aiBrowseMiniProgram.initAIChatView', array(
  218. 'creatingChat' => array('title' => $miniProgram->name, 'chatType' => 'miniprogram'),
  219. 'noContexts' => true,
  220. 'hideHeader' => true,
  221. 'sendbox' => array('placeholder' => $lang->aiapp->continueasking),
  222. 'noMessagesTip' => array('html' => "<div class='row items-center gap-2'><i class='icon icon-lightbulb text-warning'></i><div>{$lang->aiapp->chatTip}</div></div>")
  223. ))
  224. ) : null
  225. );
  226. render();