createminiprogram.html.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <?php
  2. namespace zin;
  3. jsVar('iconCheck', $config->ai->miniPrograms->iconCheck);
  4. jsVar('iconName', $iconName);
  5. jsVar('iconTheme', $iconTheme);
  6. jsVar('themeList', $config->ai->miniPrograms->themeList);
  7. jsVar('iconList', $config->ai->miniPrograms->iconList);
  8. div(setClass('create-miniprogram'), formPanel
  9. (
  10. to::heading
  11. (
  12. div(
  13. set::className('flex gap-2 items-center w-full max-w-2xl mx-auto'),
  14. div(
  15. set::className('panel-title text-lg'),
  16. $lang->ai->miniPrograms->configuration
  17. ),
  18. div(
  19. set::className('flex gap-1 items-center'),
  20. h::i(setClass('icon icon-help text-warning')),
  21. div(
  22. set::className('text-gray'),
  23. $lang->ai->miniPrograms->downloadTip
  24. ),
  25. a(
  26. set::className('text-primary'),
  27. set::href('https://www.zentao.net/page/download.html'),
  28. set::target('_blank'),
  29. '>>' . $lang->ai->miniPrograms->download
  30. )
  31. )
  32. )
  33. ),
  34. set::id('miniprogram-form'),
  35. set::actions(
  36. array(
  37. array('text' => $lang->goback, 'class' => 'toolbar-item btn open-url', 'url' => helper::createLink('ai', 'miniPrograms')),
  38. array('text' => $lang->save, 'class' => 'btn secondary', 'id' => 'save-miniprogram', 'btnType' => 'submit'),
  39. array('text' => $lang->ai->nextStep, 'class' => 'btn primary', 'id' => 'next-step', 'btnType' => 'submit')
  40. )
  41. ),
  42. formGroup
  43. (
  44. set::label($lang->ai->miniPrograms->category),
  45. set::width('1/2'),
  46. set::required(true),
  47. select
  48. (
  49. set::name('category'),
  50. set::items(array_merge($lang->ai->miniPrograms->categoryList, $categoryList)),
  51. set::value(!empty($category) ? $category : ''),
  52. set::required(true)
  53. )
  54. ),
  55. formGroup
  56. (
  57. set::label($lang->prompt->model),
  58. set::width('1/2'),
  59. set::required(true),
  60. div
  61. (
  62. setClass('w-full'),
  63. zui::AIModelPicker
  64. (
  65. set::name('model'),
  66. set::required(true),
  67. set::value(!empty($model) ? $model : '')
  68. )
  69. )
  70. ),
  71. formGroup
  72. (
  73. set::label($lang->prompt->name),
  74. set::required(true),
  75. input
  76. (
  77. set::name('name'),
  78. set::value(!empty($name) ? $name : ''),
  79. set('maxlength', 16),
  80. set::placeholder($lang->ai->miniPrograms->placeholder->name),
  81. set::required(true)
  82. )
  83. ),
  84. formGroup
  85. (
  86. set::label($lang->ai->miniPrograms->desc),
  87. set::required(true),
  88. textarea
  89. (
  90. set::name('desc'),
  91. set::value(!empty($desc) ? $desc : ''),
  92. set::rows(3),
  93. set::placeholder($lang->ai->miniPrograms->placeholder->desc),
  94. set::required(true)
  95. )
  96. ),
  97. formGroup
  98. (
  99. set::label($lang->ai->miniPrograms->icon),
  100. set::width('1/2'),
  101. set::hight('50px'),
  102. button
  103. (
  104. setID('ai-edit-icon'),
  105. setClass('btn btn-icon group '),
  106. setStyle(array(
  107. 'border' => "1px solid {$config->ai->miniPrograms->themeList[$iconTheme][1]}",
  108. 'background-color' => $config->ai->miniPrograms->themeList[$iconTheme][0],
  109. )),
  110. html($config->ai->miniPrograms->iconList[$iconName]),
  111. div
  112. (
  113. setID('edit-icon'),
  114. html($config->ai->miniPrograms->iconEdit)
  115. )
  116. )
  117. ),
  118. input
  119. (
  120. set::name('iconName'),
  121. set::type('hidden'),
  122. set::value($iconName)
  123. ),
  124. input
  125. (
  126. set::name('iconTheme'),
  127. set::type('hidden'),
  128. set::value($iconTheme)
  129. ),
  130. input
  131. (
  132. set::name('toNext'),
  133. set::type('hidden')
  134. )
  135. ));
  136. $ai = $config->ai;
  137. div(
  138. setClass('modal fade'),
  139. setData('backdrop', 'static'),
  140. setID('icon-modal'),
  141. div(
  142. setClass('modal-dialog shadow size-sm bd-none'),
  143. div(
  144. setClass('modal-content'),
  145. div(
  146. setClass('modal-header items-center'),
  147. span
  148. (
  149. setStyle(array(
  150. 'font-size' => '20px',
  151. 'font-weight' => 'bold',
  152. )),
  153. $lang->ai->miniPrograms->iconModification
  154. ),
  155. span
  156. (
  157. setClass('text-muted'),
  158. 'Emoji icons by Twemoji with CC-BY4.0'
  159. )
  160. ),
  161. div
  162. (
  163. setClass('modal-actions'),
  164. button
  165. (
  166. setClass('btn square ghost'),
  167. setData('dismiss', 'modal'),
  168. span
  169. (
  170. setClass('close')
  171. )
  172. )
  173. ),
  174. div(
  175. setClass('modal-body'),
  176. div
  177. (
  178. setStyle(array(
  179. 'display' => 'flex',
  180. 'gap' => '42px',
  181. )),
  182. div
  183. (
  184. setClass('icon-preview-container p-1'),
  185. button(setID('preview-icon'), setClass('btn btn-icon'), setStyle(array(
  186. 'width' => '46px',
  187. 'height' => '46px',
  188. 'border-radius' => '50%',
  189. )))
  190. ),
  191. div
  192. (
  193. setClass('icon-setting-container'),
  194. div
  195. (
  196. setClass('mb-4'),
  197. $lang->ai->miniPrograms->customBackground
  198. ),
  199. div
  200. (
  201. setID('theme-buttons'),
  202. setStyle(
  203. array(
  204. 'display' => 'flex',
  205. 'gap' => '20px',
  206. 'width' => '400px'
  207. )
  208. ),
  209. array_map(function ($theme, $index) use ($iconTheme, $ai) {
  210. return button
  211. (
  212. setClass('btn btn-icon'),
  213. setStyle(array(
  214. 'border' => "1px solid {$theme[1]}",
  215. 'background-color' => $theme[0],
  216. )),
  217. set::bg($theme[0]),
  218. set::bd($theme[1]),
  219. set::index($index),
  220. html($ai->miniPrograms->iconCheck)
  221. );
  222. }, $config->ai->miniPrograms->themeList, array_keys($config->ai->miniPrograms->themeList))
  223. ),
  224. div
  225. (
  226. setClass('mt-6'),
  227. div
  228. (
  229. setClass('mb-4'),
  230. $lang->ai->miniPrograms->customIcon
  231. ),
  232. div
  233. (
  234. setID('icon-buttons'),
  235. array_map(function ($icon) {
  236. return html($icon);
  237. }, $config->ai->miniPrograms->iconList)
  238. )
  239. )
  240. )
  241. )
  242. ),
  243. div(
  244. setClass('modal-footer flex items-center justify-center'),
  245. btn(
  246. setID('save-icon-button'),
  247. setClass('btn btn-wide primary'),
  248. setData('dismiss', 'modal'),
  249. $lang->save
  250. )
  251. )
  252. )
  253. )
  254. );