znt/module/index/ui/index.html.php

303 lines
9.9 KiB
PHP

<?php
namespace zin;
$this->app->loadConfig('message');
h::css("
#versionTitle {background-image: url('{$config->webRoot}theme/default/images/main/version-upgrade.svg');}
.icon-version {width: 20px; height: 24px; margin: -4px 3px 0px 0px; background-image: url('{$config->webRoot}theme/default/images/main/version-new.svg');}
.icon-version:before {content:'';}
");
$upgradeBtn = null;
if(trim($config->visions, ',') == 'lite')
{
$version = $config->liteVersion;
$versionName = $lang->liteName . $config->liteVersion;
}
else
{
$version = $config->version;
$versionName = $lang->pmsName . $config->version;
$upgradeBtn = $config->systemMode != 'PLM' ? btn
(
setID('bizLink'),
on::click()->do(<<<'JS'
$('#upgradeContent').toggle();
$('#bizLink').toggleClass('active', $('#upgradeContent').prop('style') && $('#upgradeContent').prop('style').display != 'none');
event.preventDefault();
JS),
setClass('ghost'),
set::target('_blank'),
span(setClass('upgrade'), $lang->index->upgrade),
icon('up-circle', setClass('text-danger'))
) : null;
}
if(!empty($latestVersionList))
{
$lastVersionList = (array)$latestVersionList;
$lastVersion = end($lastVersionList);
$versionItems = array();
foreach($latestVersionList as $versionNumber => $versionInfo)
{
if(!isset($versionInfo['name'])) continue;
$versionItems[] = div
(
setClass('version-list py-2'),
div
(
setClass('version-name flex h-6 items-center'),
icon('version', setClass('version-upgrade')),
h5($versionInfo['name'])
),
div
(
setClass('version-detail text-gray my-2'),
$versionInfo['explain']
),
div
(
setClass('version-footer flex justify-between'),
btn
(
setData(array('toggle' => 'modal')),
setClass('ghost'),
set::url(inLink('changeLog', 'version=' . $versionNumber)),
$lang->index->log
),
btn
(
setClass('primary upgrade-now'),
set::url($versionInfo['link']),
set::target('_blank'),
$lang->index->upgradeNow
)
)
);
if($versionInfo['name'] != $lastVersion['name']) $versionItems[] = h::hr(setClass('version-hr'));
}
$upgradeContent = div
(
setClass('version-content'),
$versionItems
);
}
else
{
$upgradeContent = div
(
setClass('table-empty-tip py-10 mt-8 center'),
btn
(
setClass('secondary-outline bg-secondary-50'),
set::url($lang->website),
set::target('_blank'),
set::text($lang->index->website . ': '. $lang->website)
)
);
h::css("#upgradeContent {height: 262px;} latestVersionList {height: 200px;} ");
}
$scoreNotice = '';
if($config->vision != 'lite') $scoreNotice = $this->loadModel('score')->getNotice();
if($config->systemMode == 'light') unset($lang->searchObjects['program'], $lang->searchObjects['charter']);
unset($lang->searchObjects['all']);
$searchItems = array();
$searchItems[] = array('key' => 'search', 'text' => $lang->searchAB . ' {0}');
foreach($lang->searchObjects as $key => $module) $searchItems[] = array('key' => $key, 'text' => $module . ' #{0}');
jsVar('scoreNotice', $scoreNotice);
jsVar('edition', $config->edition);
jsVar('vision', $config->vision);
jsVar('navGroup', $lang->navGroup);
jsVar('appNotFound', $lang->appNotFound);
jsVar('oldPages', $config->index->oldPages);
jsVar('allAppsItems', $allAppsItems);
jsVar('isTutorialMode', common::isTutorialMode());
jsVar('defaultOpen', !empty($open) ? $open : '');
jsVar('manualText', $lang->manual);
jsVar('manualUrl', ((!empty($config->isINT)) ? $config->manualUrl['int'] : $config->manualUrl['home']) . '&theme=' . $_COOKIE['theme']);
jsVar('langData', array_merge(array('search' => $lang->index->search, 'searchAB' => $lang->searchAB), (array)$lang->index->dock));
jsVar('browserMessage', $browserMessage);
jsVar('pollTime', (!empty($config->message->browser->turnon) && !empty($config->message->browser->pollTime)) ? $config->message->browser->pollTime : 600);
jsVar('turnon', empty($config->message->browser->turnon) ? 0 : 1);
jsVar('runnable', $this->loadModel('cron')->runnable());
jsVar('showFeatures', $showFeatures);
set::zui(true);
set::bodyClass($this->cookie->hideMenu ? 'hide-menu' : 'show-menu');
h::jsVar('window.appsItems', $appsItems, setID('appsItemsData'));
h::jsVar('window.searchItems', $searchItems, setID('searchItemsData'));
h::jsVar('window.userVisions', explode(',', $app->user->visions), setID('userVisionData'));
/* The menu fixed on left */
div
(
setID('menu'),
div
(
setID('spaceHeading'),
icon('space'),
div(setClass('text'))
),
div
(
setID('menuNav'),
ul(setClass('nav'), setID('menuMainNav')),
ul
(
setClass('nav'),
setID('menuMoreNav'),
li(setClass('divider')),
li
(
a
(
setID('menuMoreBtn'),
set::title($lang->more),
set::href('#menuMoreList'),
icon('more-circle'),
span(setClass('text'), $lang->more),
toggle::dropdown(array('placement' => 'right-end', 'offset' => 12, 'shift' => true))
),
ul(setClass('dropdown-menu menu scrollbar-light overflow-y-auto'), setID('menuMoreList'))
)
),
ul
(
setID('menuToggleNav'),
setClass('nav'),
li
(
setID('menuToggleMenu'),
setClass('hint-right'),
setData(array('collapse-text' => $lang->collapseMenu, 'hint' => $lang->unfoldMenu)),
a
(
setClass('menu-toggle justify-center cursor-pointer'),
icon('icon-menu-collapse icon-sm')
)
)
)
)
);
/* The div used to place the page iframes. */
div(setID('apps'));
/* The toolbar docked on the bottom. */
div
(
setID('appsBar'),
div(setID('visionSwitcher'), visionSwitcher(), setData('vision', $app->config->vision)),
ul(setID('appTabs'), setClass('nav')),
toolbar
(
setID('appsToolbar'),
setClass('space-x-1'),
hasPriv('search', 'index') ? globalSearch() : null,
chatBtn(),
item
(
setID('version'),
setClass('ghost btn-zentao px-1'),
set::icon('zentao text-2xl'),
set::url($lang->website),
set::target('_blank'),
set::hint($version),
set::text($versionName)
),
$upgradeBtn,
panel
(
setID('upgradeContent'),
to::heading
(
setClass('justify-start items-center gap-1'),
icon(setClass('version-upgrade'), setID('versionTitle')),
span($lang->index->upgradeVersion)
),
set::headingClass('border-b'),
set::bodyClass('p-0'),
div
(
setID('latestVersionList'),
setClass('p-4'),
$upgradeContent
)
)
)
);
/* Inject zai config to index page. */
$zaiLang = new stdClass();
$this->app->loadLang('aiapp');
if($zaiConfig && !empty($zaiConfig->host) && !empty($zaiConfig->token))
{
if(!hasPriv('aiapp', 'conversation')) $zaiConfig->privs = 'disable-all';
$zaiLang = $lang->aiapp->langData;
}
else
{
$zaiLang->zaiConfigNotValid = $lang->aiapp->langData->zaiConfigNotValid;
}
$zaiConfigUrl = createLink('zai', 'setting');
$zaiLang->zaiConfigNotValid = str_replace('{zaiConfigUrl}', $zaiConfigUrl, $lang->aiapp->langData->zaiConfigNotValid);
if(isset($zaiLang->unauthorizedError)) $zaiLang->unauthorizedError = str_replace('{zaiConfigUrl}', $zaiConfigUrl, $lang->aiapp->langData->unauthorizedError);
$enableAITeammate = !empty($config->enableAITeammate);
h::jsVar('window.enableAITeammate', $enableAITeammate);
if($config->edition != 'open' && $zaiConfig)
{
$this->app->loadLang('ai');
$zaiLang->knowledgeLib = $lang->ai->knowledgeLib;
$zaiConfig->teammateMap = array();
if($enableAITeammate)
{
$zaiLang->teammate = $lang->ai->teammate;
$zaiLang->teammatePromptPrefix = $lang->ai->teammatePromptPrefix;
$zaiLang->teammateKnowledgePrefix = $lang->ai->teammateKnowledgePrefix;
$zaiLang->teammateKnowledgeSuffix = $lang->ai->teammateKnowledgeSuffix;
$zaiConfig->teammateMap = $this->loadModel('aiteammate')->getMap();
}
}
to::headBefore(h::css('.icon-app-empty::before{content: "\ea6e"}'));
to::head
(
$zaiConfig ? h::js('window.zai=' . js::value($zaiConfig) . ';') : null,
h::js('window.zaiLang=', js::value($zaiLang)),
h::importJs($app->getWebRoot() . 'js/zui3/ai.js', setID('aiJS'))
);
/**
* Check if the tutorial mode is on, show confirm dialog if it is.
* 检查是否处于教程模式,如果是则显示确认对话框是否继续。
*/
if(common::isTutorialMode())
{
setData('tutorialTip', $lang->index->tutorialTip);
to::head
(
js
(<<<'JS'
$(function()
{
if(window.top !== window) return;
zui.Modal.confirm($('html').data('tutorialTip')).then(result =>
{
window.location = result ? $.createLink('tutorial', 'index') : $.createLink('tutorial', 'quit');
});
})
JS)
);
}
render('pagebase');