124 lines
5.7 KiB
PHP
124 lines
5.7 KiB
PHP
<!doctype html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>@yield('title', 'SaaSShop 总台管理')</title>
|
|
@php
|
|
// 资产缓存护栏:避免浏览器缓存导致“样式已修复但页面仍旧错位”的体感。
|
|
// 说明:使用 filemtime 作为版本号,不引入构建链;文件更新即自动换 query。
|
|
$cssVerTheme = @filemtime(public_path('css/admin-theme.css')) ?: time();
|
|
$cssVerBase = @filemtime(public_path('css/admin-base.css')) ?: time();
|
|
$cssVerComponents = @filemtime(public_path('css/admin-components.css')) ?: time();
|
|
@endphp
|
|
<link rel="stylesheet" href="/css/admin-theme.css?v={{ $cssVerTheme }}">
|
|
<link rel="stylesheet" href="/css/admin-base.css?v={{ $cssVerBase }}">
|
|
<link rel="stylesheet" href="/css/admin-components.css?v={{ $cssVerComponents }}">
|
|
</head>
|
|
<body>
|
|
<div class="layout layout-topnav">
|
|
<aside class="sidebar topnav">
|
|
<div class="topnav-row">
|
|
<a class="topnav-brand" href="/admin">SaaSShop</a>
|
|
|
|
<nav class="topnav-menu" aria-label="总台主导航" data-role="topnav-groups-root">
|
|
<a class="topnav-link" href="/admin">仪表盘</a>
|
|
|
|
<details class="topnav-item nav-group" data-role="topnav-group">
|
|
<summary class="topnav-summary">收费中心</summary>
|
|
<div class="topnav-dropdown">
|
|
<a href="/admin/platform-orders" class="topnav-sub nav-item nav-item--sub">平台订单</a>
|
|
<a href="/admin/site-subscriptions" class="topnav-sub nav-item nav-item--sub">订阅</a>
|
|
<a href="/admin/plans" class="topnav-sub nav-item nav-item--sub">套餐</a>
|
|
</div>
|
|
</details>
|
|
|
|
<details class="topnav-item nav-group" data-role="topnav-group">
|
|
<summary class="topnav-summary">站点治理</summary>
|
|
<div class="topnav-dropdown">
|
|
<a href="/admin/merchants" class="topnav-sub nav-item nav-item--sub">站点管理</a>
|
|
<a href="/admin/orders" class="topnav-sub nav-item nav-item--sub">订单监控</a>
|
|
<a href="/admin/products" class="topnav-sub nav-item nav-item--sub">商品巡检</a>
|
|
<a href="/admin/product-categories" class="topnav-sub nav-item nav-item--sub">商品分类</a>
|
|
</div>
|
|
</details>
|
|
|
|
<details class="topnav-item nav-group" data-role="topnav-group">
|
|
<summary class="topnav-summary">增长转化</summary>
|
|
<div class="topnav-dropdown">
|
|
<a href="/admin/platform-leads" class="topnav-sub nav-item nav-item--sub">开通线索</a>
|
|
</div>
|
|
</details>
|
|
|
|
<details class="topnav-item nav-group" data-role="topnav-group">
|
|
<summary class="topnav-summary">客服中心</summary>
|
|
<div class="topnav-dropdown">
|
|
<a href="/admin/support-tickets" class="topnav-sub nav-item nav-item--sub">工单</a>
|
|
</div>
|
|
</details>
|
|
|
|
<details class="topnav-item nav-group" data-role="topnav-group">
|
|
<summary class="topnav-summary">系统</summary>
|
|
<div class="topnav-dropdown">
|
|
<a href="/admin/settings/system" class="topnav-sub nav-item nav-item--sub">系统配置</a>
|
|
</div>
|
|
</details>
|
|
</nav>
|
|
|
|
<div class="topnav-actions">
|
|
<form method="post" action="/admin/logout" class="logout-form topnav-logout">@csrf <button type="submit" class="btn btn-secondary btn-sm">退出登录</button></form>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</aside>
|
|
<main class="content">
|
|
<div class="toast-container" data-role="toast-container" aria-live="polite" aria-relevant="additions" aria-atomic="true"></div>
|
|
|
|
{{-- 页面标题已统一收敛到各页面的 PageHeader 组件,避免重复出现“大标题”。 --}}
|
|
@if(session('success'))
|
|
<div class="flash" data-flash="success">{{ session('success') }}</div>
|
|
@endif
|
|
@if(session('warning'))
|
|
<div class="warning" data-flash="warning">{{ session('warning') }}</div>
|
|
@endif
|
|
@if(session('error'))
|
|
<div class="error-box" data-flash="error">{{ session('error') }}</div>
|
|
@endif
|
|
@if($errors->any())
|
|
<div class="error-box">
|
|
<strong>提交失败:</strong>
|
|
<ul class="list-indent">
|
|
@foreach($errors->all() as $error)
|
|
<li>{{ $error }}</li>
|
|
@endforeach
|
|
</ul>
|
|
</div>
|
|
@endif
|
|
@yield('content')
|
|
</main>
|
|
</div>
|
|
<script src="/js/admin.js" defer></script>
|
|
<script data-action="topnav-single-open">
|
|
(function(){
|
|
var root = document.querySelector('[data-role="topnav-groups-root"]');
|
|
if(!root){return;}
|
|
|
|
var groups = root.querySelectorAll('details[data-role="topnav-group"]');
|
|
if(!groups || groups.length === 0){return;}
|
|
|
|
groups.forEach(function(d){
|
|
d.addEventListener('toggle', function(){
|
|
if(!d.open){return;}
|
|
groups.forEach(function(other){
|
|
if(other !== d){
|
|
other.open = false;
|
|
}
|
|
});
|
|
});
|
|
});
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|