knowledgelib.html.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. namespace zin;
  3. $this->app->loadLang('ai');
  4. jsVar('confirmPublish', $lang->ai->knowledgeLibs->confirmPublish);
  5. jsVar('confirmUnpublish', $lang->ai->knowledgeLibs->confirmUnpublish);
  6. jsVar('confirmDelete', $lang->ai->knowledgeLibs->confirmDelete);
  7. jsVar('currentMethod', $currentMethod);
  8. $userListMap = array();
  9. foreach($userList as $user)
  10. {
  11. $userListMap[$user->account] = $user;
  12. }
  13. $pager = data('pager');
  14. $recTotal = $pager ? $pager->recTotal : 0;
  15. $recPerPage = $pager ? $pager->recPerPage : 20;
  16. $pageID = $pager ? $pager->pageID : 1;
  17. $queryMenuLink = createLink('ai', $currentMethod, "category={$category}&published=bysearch&orderBy={$orderBy}&param={queryID}&recTotal={$recTotal}&recPerPage={$recPerPage}&pageID={$pageID}");
  18. featureBar(
  19. set::current($published),
  20. set::linkParams("category={$category}&published={key}&orderBy={$orderBy}&param=0"),
  21. set::linkMethod($currentMethod),
  22. set::queryMenuLinkCallback(array(function ($key) use ($queryMenuLink) {
  23. return str_replace('{queryID}', (string)$key, $queryMenuLink);
  24. })),
  25. li(searchToggle(set::module($currentMethod), set::open($published == 'bysearch')))
  26. );
  27. $type = ($currentMethod === 'myknowledgelib') ? 'my' : 'team';
  28. /* 生成创建/导入链接 */
  29. $createUrl = function($action) use ($currentMethod)
  30. {
  31. return createLink('ai', $action, array('type' => $currentMethod === 'myknowledgelib' ? 'my' : 'team'));
  32. };
  33. /* 菜单配置 */
  34. $menuConfig = array(
  35. array('category' => '', 'name' => $lang->all),
  36. array('category' => 'custom', 'name' => $lang->ai->knowledgeLibs->customAdd),
  37. array('category' => 'doclib', 'name' => $lang->ai->knowledgeLibs->importActions['doc']),
  38. );
  39. $importActions = array();
  40. if(hasPriv('ai', 'importfromdoc'))
  41. {
  42. $importActions[] = array(
  43. 'text' => $lang->ai->knowledgeLibs->importActions['doc'],
  44. 'data-toggle' => 'modal',
  45. 'data-size' => 'sm',
  46. 'url' => $createUrl('importfromdoc')
  47. );
  48. }
  49. if($config->edition == 'max' || $config->edition == 'ipd')
  50. {
  51. if(hasPriv('ai', 'importfromasset'))
  52. {
  53. $importActions[] = array(
  54. 'text' => $lang->ai->knowledgeLibs->importActions['asset'],
  55. 'data-toggle' => 'modal',
  56. 'data-size' => 'sm',
  57. 'url' => $createUrl('importfromasset')
  58. );
  59. }
  60. $menuConfig[] = array('category' => '', 'name' => $lang->ai->knowledgeLibs->importFromAsset, 'type' => 'group');
  61. if(isset($lang->ai->knowledgeLibs->assets))
  62. {
  63. foreach($lang->ai->knowledgeLibs->assets as $assetType => $assetName) $menuConfig[] = array('category' => $assetType . 'lib', 'name' => $assetName);
  64. }
  65. }
  66. $canCreateknowledgelib = $currentMethod === 'myknowledgelib' ? hasPriv('ai', 'myknowledgelib') && hasPriv('ai', 'createknowledgelib') : hasPriv('ai', 'teamknowledgelib') && hasPriv('ai', 'createknowledgelib');
  67. toolbar
  68. (
  69. btnGroup
  70. (
  71. !$canCreateknowledgelib ? null : btn
  72. (
  73. setClass('primary'),
  74. set::icon('plus'),
  75. set::text($lang->ai->knowledgeLibs->create),
  76. setData(array('toggle' => 'modal', 'size' => 'sm')),
  77. set('href', createLink('ai', 'createknowledgelib', array('type' => $currentMethod === 'myknowledgelib' ? 'my' : 'team')))
  78. ),
  79. empty($importActions) ? null : dropdown
  80. (
  81. btn(setClass('dropdown-toggle'), setClass('primary'), setStyle(array('padding' => '6px', 'border-radius' => '0 2px 2px 0'))),
  82. set::placement('bottom-end'),
  83. set::items($importActions)
  84. )
  85. )
  86. );
  87. /* 构建分类树 */
  88. $buildCategoryTree = function($config) use ($currentMethod)
  89. {
  90. $categoryTree = array();
  91. $index = 1;
  92. foreach($config as $item)
  93. {
  94. $menuItem = (object) array('id' => $index++, 'parent' => 0, 'name' => $item['name']);
  95. if(isset($item['type']) && $item['type'] === 'group')
  96. {
  97. $menuItem->url = '';
  98. $menuItem->type = 'group';
  99. }
  100. else
  101. {
  102. $menuItem->url = inlink($currentMethod, "category={$item['category']}");
  103. }
  104. $categoryTree[] = $menuItem;
  105. }
  106. return $categoryTree;
  107. };
  108. /* 获取激活的菜单项 */
  109. $getActiveKey = function($config, $category)
  110. {
  111. $index = 1;
  112. foreach($config as $item)
  113. {
  114. if(isset($item['type']) && $item['type'] === 'group')
  115. {
  116. $index++;
  117. continue;
  118. }
  119. if($item['category'] === $category) return $index;
  120. $index++;
  121. }
  122. return 1;
  123. };
  124. $categoryTree = $buildCategoryTree($menuConfig);
  125. $activeKey = $getActiveKey($menuConfig, $category);
  126. sidebar(
  127. moduleMenu(
  128. set::showDisplay(false),
  129. set::modules($categoryTree),
  130. set::activeKey($activeKey),
  131. set::closeLink(inlink($currentMethod))
  132. )
  133. );
  134. /* 构建下拉菜单 */
  135. $buildDropdown = function($knowledgeLib) use ($lang)
  136. {
  137. if($knowledgeLib->published == '0')
  138. {
  139. $secondItem = !hasPriv('ai', 'publishknowledgelib') ? null : array('text' => $lang->ai->prompts->action->publish, 'data-action' => 'publish', 'data-id' => $knowledgeLib->id, 'onClick' => jsRaw('window.knowledgeLibAction'));
  140. }
  141. else
  142. {
  143. $secondItem = !hasPriv('ai', 'unpublishknowledgelib') ? null : array('text' => $lang->ai->prompts->action->unpublish, 'data-action' => 'unpublish', 'data-id' => $knowledgeLib->id, 'onClick' => jsRaw('window.knowledgeLibAction'));
  144. }
  145. if(empty($secondItem) && !hasPriv('ai', 'editknowledgelib') && !hasPriv('ai', 'deleteknowledgelib')) return null;
  146. return dropdown(
  147. btn(
  148. setClass('ghost size-sm card-action-btn'),
  149. set::icon('ellipsis-v')
  150. ),
  151. set::items(array(
  152. !hasPriv('ai', 'editknowledgelib') ? null : array('text' => $lang->edit,'data-action' => 'edit','data-id' => $knowledgeLib->id,'onClick' => jsRaw('window.knowledgeLibAction')),
  153. $secondItem,
  154. !hasPriv('ai', 'deleteknowledgelib') ? null : array('text' => $lang->delete,'data-action' => 'delete','data-id' => $knowledgeLib->id,'onClick' => jsRaw('window.knowledgeLibAction'))
  155. )),
  156. set::placement('bottom-end'),
  157. set::caret(false)
  158. );
  159. };
  160. /* 构建卡片 */
  161. $knowledgeCard = function($knowledgeLib) use ($lang, $buildDropdown, $currentMethod, $userListMap)
  162. {
  163. $creator = isset($userListMap[$knowledgeLib->createdBy]) ? $userListMap[$knowledgeLib->createdBy] : null;
  164. $creatorName = $creator ? $creator->realname : $knowledgeLib->createdBy;
  165. $draftTag = $knowledgeLib->published == '0'
  166. ? span(
  167. setClass('draft-tag'),
  168. $lang->ai->knowledgeLibs->draft
  169. )
  170. : null;
  171. return div(
  172. setClass('knowledge-card'),
  173. a(
  174. set::href(inlink('knowledgelibview', "id={$knowledgeLib->id}")),
  175. h3(
  176. setClass('card-title'),
  177. set::title($knowledgeLib->name),
  178. icon('doclib'),
  179. span($knowledgeLib->name),
  180. $draftTag
  181. ),
  182. div(
  183. setClass('card-description'),
  184. set::title($knowledgeLib->desc),
  185. $knowledgeLib->desc
  186. ),
  187. div(
  188. setClass('card-meta'),
  189. div(
  190. setClass('creator'),
  191. avatar(
  192. set::size('sm'),
  193. set::text($creatorName),
  194. $creator && !empty($creator->avatar) ? set::src($creator->avatar) : null
  195. ),
  196. span($creatorName)
  197. ),
  198. span(
  199. setClass('created-date'),
  200. sprintf($lang->ai->knowledgeLibs->createdTime, substr($knowledgeLib->createdDate, 0, 10))
  201. )
  202. )
  203. ),
  204. $buildDropdown($knowledgeLib)
  205. );
  206. };
  207. /* 构建空视图 */
  208. $buildEmptyView = function($category) use ($lang, $createUrl, $canCreateknowledgelib)
  209. {
  210. $isAsset = !empty($category) && $category != 'doclib' && $category != 'custom';
  211. $btnText = '';
  212. $btnLink = '';
  213. if((empty($category) || $category == 'custom') && $canCreateknowledgelib)
  214. {
  215. $btnText = $lang->ai->knowledgeLibs->create;
  216. $btnLink = $createUrl('createknowledgelib');
  217. }
  218. elseif($category == 'doclib' && hasPriv('ai', 'importfromdoc'))
  219. {
  220. $btnText = $lang->ai->knowledgeLibs->importActions['doc'];
  221. $btnLink = $createUrl('importfromdoc');
  222. }
  223. elseif($isAsset && hasPriv('ai', 'importfromasset'))
  224. {
  225. $btnText = $lang->ai->knowledgeLibs->importActions['asset'];
  226. $btnLink = $createUrl('importfromasset');
  227. }
  228. return div(
  229. setClass('empty-view'),
  230. span($lang->ai->knowledgeLibs->noData),
  231. btn
  232. (
  233. setClass('text-primary ghost'),
  234. setData('toggle', 'modal'),
  235. setData('size', 'sm'),
  236. set::url($btnLink),
  237. $btnText
  238. )
  239. );
  240. };
  241. if(empty($knowledgeLibs))
  242. {
  243. $buildEmptyView($category);
  244. }
  245. else
  246. {
  247. div(
  248. setClass('page-knowledge'),
  249. div(
  250. setClass('knowledge-container'),
  251. array_map($knowledgeCard, $knowledgeLibs)
  252. ),
  253. div(
  254. setClass('pager-container'),
  255. pager(set(usePager()))
  256. )
  257. );
  258. }