357 lines
16 KiB
HTML
357 lines
16 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="<?= session('lang', 'zh-cn') ?>">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
<title><?= $translations['title'] ?? '主页' ?></title>
|
|
<!-- 依 赖 样 式 -->
|
|
<link rel="stylesheet" href="/app/admin/component/pear/css/pear.css" />
|
|
<!-- 加 载 样 式 -->
|
|
<link rel="stylesheet" href="/app/admin/admin/css/loader.css" />
|
|
<!-- 布 局 样 式 -->
|
|
<link rel="stylesheet" href="/app/admin/admin/css/admin.css" />
|
|
<!-- 重置样式 -->
|
|
<link rel="stylesheet" href="/app/admin/admin/css/reset.css" />
|
|
<style>
|
|
.language-selector {
|
|
display: inline-block;
|
|
margin-right: 10px;
|
|
}
|
|
.language-selector .layui-form-item {
|
|
margin-bottom: 0;
|
|
}
|
|
.language-selector .layui-select {
|
|
width: 100px;
|
|
height: 30px;
|
|
line-height: 30px;
|
|
background-color: transparent;
|
|
border: none;
|
|
color: #fff;
|
|
}
|
|
.language-selector .layui-select option {
|
|
background-color: #fff;
|
|
color: #333;
|
|
}
|
|
</style>
|
|
</head>
|
|
<!-- 结 构 代 码 -->
|
|
<body class="layui-layout-body pear-admin">
|
|
<!-- 布 局 框 架 -->
|
|
<div class="layui-layout layui-layout-admin">
|
|
<!-- 顶 部 样 式 -->
|
|
<div class="layui-header">
|
|
<!-- 菜 单 顶 部 -->
|
|
<div class="layui-logo">
|
|
<!-- 图 标 -->
|
|
<img class="logo">
|
|
<!-- 标 题 -->
|
|
<span class="title"><?= $translations['system_name'] ?? 'Vehicle Data Platform' ?></span>
|
|
</div>
|
|
<!-- 顶 部 左 侧 功 能 -->
|
|
<ul class="layui-nav layui-layout-left">
|
|
<li class="collapse layui-nav-item" id="menu_but"><a href="#" id="menu_but1" class="layui-icon layui-icon-shrink-right"></a></li>
|
|
<li class="refresh layui-nav-item"><a href="#" class="layui-icon layui-icon-refresh-1" loading = 600></a></li>
|
|
</ul>
|
|
<!-- 多 系 统 菜 单 -->
|
|
<div id="control" class="layui-layout-control"></div>
|
|
<!-- 顶 部 右 侧 菜 单 -->
|
|
<ul class="layui-nav layui-layout-right">
|
|
<li class="layui-nav-item layui-hide-xs"><a href="#" class="menuSearch layui-icon layui-icon-search"></a></li>
|
|
<li class="layui-nav-item layui-hide-xs"><a href="#" class="fullScreen layui-icon layui-icon-screen-full"></a></li>
|
|
<li class="layui-nav-item layui-hide-xs message"></li>
|
|
<!-- 语言切换 -->
|
|
<li class="layui-nav-item layui-hide-xs">
|
|
<div class="language-selector">
|
|
<form class="layui-form">
|
|
<div class="layui-form-item">
|
|
<select name="language" id="language-select" lay-filter="language-select" class="layui-select">
|
|
<option value="zh-cn" <?= session('lang', 'zh-cn') === 'zh-cn' ? 'selected' : '' ?>>中文</option>
|
|
<option value="en" <?= session('lang', 'zh-cn') === 'en' ? 'selected' : '' ?>>English</option>
|
|
<option value="ru" <?= session('lang', 'zh-cn') === 'ru' ? 'selected' : '' ?>>Русский</option>
|
|
<option value="ar" <?= session('lang', 'zh-cn') === 'ar' ? 'selected' : '' ?>>العربية</option>
|
|
</select>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</li>
|
|
<li class="layui-nav-item user">
|
|
<!-- 头 像 -->
|
|
<a class="layui-icon layui-icon-username" href="javascript:;"></a>
|
|
<!-- 功 能 菜 单 -->
|
|
<dl class="layui-nav-child">
|
|
<dd><a href="javascript:void(0);" class="logout"><?= $translations['logout'] ?? '注销登录' ?></a></dd>
|
|
</dl>
|
|
</li>
|
|
<!-- 主 题 配 置 -->
|
|
<li class="layui-nav-item setting"><a href="#" class="layui-icon layui-icon-more-vertical"></a></li>
|
|
</ul>
|
|
</div>
|
|
<!-- 侧 边 区 域 -->
|
|
<div class="layui-side layui-bg-black">
|
|
<!-- 菜 单 顶 部 -->
|
|
<div class="layui-logo">
|
|
<!-- 图 标 -->
|
|
<img class="logo">
|
|
<!-- 标 题 -->
|
|
<a href="/"><span class="title"><?= $translations['system_name'] ?? 'Vehicle Data Platform' ?></span></a>
|
|
</div>
|
|
<!-- 菜 单 内 容 -->
|
|
<div class="layui-side-scroll">
|
|
<div id="sideMenu"></div>
|
|
</div>
|
|
</div>
|
|
<!-- 视 图 页 面 -->
|
|
<div class="layui-body">
|
|
<!-- 内 容 页 面 -->
|
|
<div id="content"></div>
|
|
</div>
|
|
<!-- 页脚 -->
|
|
<div class="layui-footer layui-text">
|
|
<span class="left">
|
|
<?= $translations['footer_text'] ?? 'Released under the MIT license.' ?>
|
|
</span>
|
|
<span class="center"></span>
|
|
</div>
|
|
<!-- 遮 盖 层 -->
|
|
<div class="pear-cover"></div>
|
|
<!-- 加 载 动 画 -->
|
|
<div class="loader-main">
|
|
<!-- 动 画 对 象 -->
|
|
<div class="loader"></div>
|
|
</div>
|
|
</div>
|
|
<!-- 移 动 端 便 捷 操 作 -->
|
|
<div class="pear-collapsed-pe collapse">
|
|
<a href="#" class="layui-icon layui-icon-shrink-right"></a>
|
|
</div>
|
|
<!-- 依 赖 脚 本 -->
|
|
<script src="/app/admin/component/layui/layui.js?v=2.8.12"></script>
|
|
<script src="/app/admin/component/pear/pear.js"></script>
|
|
<!-- 框 架 初 始 化 -->
|
|
<script>
|
|
// Admin
|
|
window.Admin = {
|
|
Account: {},
|
|
Translations: <?= json_encode($translations ?? []) ?>
|
|
};
|
|
|
|
layui.use(["admin","jquery","popup","drawer","form","tab"], function() {
|
|
var $ = layui.$;
|
|
var admin = layui.admin;
|
|
var popup = layui.popup;
|
|
var drawer = layui.drawer;
|
|
var form = layui.form;
|
|
var tab = layui.tab;
|
|
|
|
// 设置菜单配置
|
|
admin.setConfigType("json");
|
|
admin.setConfigPath("/app/admin/rule/get");
|
|
|
|
// 初始化菜单
|
|
var config = {
|
|
logo: {
|
|
title: "<?= $translations['system_name'] ?? 'Vehicle Data Platform' ?>",
|
|
image: "/app/admin/admin/images/logo.png",
|
|
href: "/"
|
|
},
|
|
menu: {
|
|
data: "/app/admin/rule/get",
|
|
method: "GET",
|
|
accordion: true,
|
|
collapse: false,
|
|
control: false,
|
|
controlWidth: 2000,
|
|
select: "1",
|
|
async: true,
|
|
click: function(data) {
|
|
// 更新标签页标题
|
|
if (data.title) {
|
|
// 获取当前标签页
|
|
var currentTab = $('.layui-tab-title .layui-this');
|
|
if (currentTab.length) {
|
|
// 保存完整的菜单信息
|
|
currentTab.find('span')
|
|
.data('menu-id', data.id)
|
|
.data('menu-key', data.key)
|
|
.data('menu-pid', data.pid)
|
|
.text(data.title);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
tab: {
|
|
enable: true,
|
|
keepState: true,
|
|
session: true,
|
|
preload: false,
|
|
max: "30",
|
|
index: {
|
|
id: "1",
|
|
href: "/app/admin/vehicle/index",
|
|
title: "<?= $translations['vehicle_management'] ?? '车辆管理' ?>"
|
|
},
|
|
close: function(layid) {
|
|
// 获取当前标签页
|
|
var currentTab = $('.layui-tab-title li[lay-id="' + layid + '"]');
|
|
if (currentTab.length) {
|
|
// 移除标签页
|
|
currentTab.remove();
|
|
// 移除对应的内容
|
|
$('.layui-tab-content .layui-tab-item[lay-id="' + layid + '"]').remove();
|
|
// 如果还有其他标签页,激活最后一个
|
|
var lastTab = $('.layui-tab-title li:last');
|
|
if (lastTab.length) {
|
|
lastTab.addClass('layui-this');
|
|
$('.layui-tab-content .layui-tab-item:last').addClass('layui-show');
|
|
}
|
|
}
|
|
}
|
|
},
|
|
theme: {
|
|
defaultColor: "2",
|
|
defaultMenu: "light-theme",
|
|
defaultHeader: "light-theme",
|
|
allowCustom: true,
|
|
banner: false
|
|
},
|
|
colors: [
|
|
{
|
|
id: "1",
|
|
color: "#36b368",
|
|
second: "#f0f9eb"
|
|
},
|
|
{
|
|
id: "2",
|
|
color: "#2d8cf0",
|
|
second: "#ecf5ff"
|
|
},
|
|
{
|
|
id: "3",
|
|
color: "#f6ad55",
|
|
second: "#fdf6ec"
|
|
},
|
|
{
|
|
id: "4",
|
|
color: "#f56c6c",
|
|
second: "#fef0f0"
|
|
},
|
|
{
|
|
id: "5",
|
|
color: "#3963bc",
|
|
second: "#ecf5ff"
|
|
}
|
|
],
|
|
other: {
|
|
keepLoad: "500",
|
|
autoHead: false,
|
|
footer: false
|
|
},
|
|
header: {
|
|
message: false
|
|
}
|
|
};
|
|
|
|
// 初始化 admin
|
|
admin.render(config, function() {
|
|
// 获取菜单数据
|
|
$.ajax({
|
|
url: '/app/admin/rule/get',
|
|
method: 'GET',
|
|
success: function(res) {
|
|
if (res.code === 0) {
|
|
// 创建菜单映射
|
|
var menuMap = {};
|
|
function processMenuItems(items) {
|
|
items.forEach(function(item) {
|
|
menuMap[item.id] = item;
|
|
if (item.children) {
|
|
processMenuItems(item.children);
|
|
}
|
|
});
|
|
}
|
|
processMenuItems(res.data);
|
|
|
|
// 更新所有标签页标题
|
|
$('.layui-tab-title li').each(function() {
|
|
var $tab = $(this);
|
|
var menuId = $tab.find('span').data('menu-id');
|
|
if (menuId && menuMap[menuId]) {
|
|
var menuItem = menuMap[menuId];
|
|
$tab.find('span')
|
|
.data('menu-id', menuItem.id)
|
|
.data('menu-key', menuItem.key)
|
|
.data('menu-pid', menuItem.pid)
|
|
.text(menuItem.title);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
// 语言切换处理
|
|
form.on('select(language-select)', function(data) {
|
|
var lang = data.value;
|
|
$.ajax({
|
|
url: '/app/admin/language/switch',
|
|
method: 'POST',
|
|
data: { lang: lang },
|
|
success: function(res) {
|
|
if (res.code === 0) {
|
|
// 关闭所有非首页标签页
|
|
$('.layui-tab-title li').each(function() {
|
|
var layId = $(this).attr('lay-id');
|
|
if (layId && layId !== '1') { // 保留车辆管理标签
|
|
var closeBtn = $(this).find('.layui-tab-close');
|
|
if (closeBtn.length) {
|
|
closeBtn.trigger('click');
|
|
}
|
|
}
|
|
});
|
|
|
|
// 等待标签页关闭后刷新页面
|
|
setTimeout(function() {
|
|
window.location.reload();
|
|
}, 100);
|
|
} else {
|
|
popup.failure(res.msg);
|
|
}
|
|
},
|
|
error: function() {
|
|
popup.failure('切换语言失败');
|
|
}
|
|
});
|
|
});
|
|
|
|
// 登出逻辑
|
|
admin.logout(function(){
|
|
$.ajax({
|
|
url: "/app/admin/account/logout",
|
|
dataType: "json",
|
|
success: function (res) {
|
|
if (res.code) {
|
|
return popup.error(res.msg);
|
|
}
|
|
popup.success(Admin.Translations['logout_success'] || "注销成功", function(){
|
|
location.reload();
|
|
})
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
|
|
$.ajax({
|
|
url: "/app/admin/account/info",
|
|
dataType: 'json',
|
|
success: function (res) {
|
|
window.Admin.Account = res.data;
|
|
}
|
|
});
|
|
|
|
// 重新渲染表单
|
|
form.render();
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|