layouts.blade.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. @php use App\Models\ReferralLog, App\Models\Order; @endphp
  2. @extends('_layout')
  3. @section('title', sysConfig('website_name'))
  4. @section('layout_css')
  5. @yield('css')
  6. @endsection
  7. @section('body_class', 'dashboard')
  8. @section('layout_content')
  9. <nav class="site-navbar navbar navbar-default navbar-fixed-top navbar-mega {{ config('theme.navbar.inverse') }} {{ config('theme.navbar.skin') }}"
  10. role="navigation">
  11. <div class="navbar-header">
  12. <button class="navbar-toggler hamburger hamburger-close navbar-toggler-left hided" data-toggle="menubar" type="button">
  13. <span class="sr-only">{{ trans('common.toggle_action', ['action' => trans('common.function.navigation')]) }}</span>
  14. <span class="hamburger-bar"></span>
  15. </button>
  16. <button class="navbar-toggler collapsed" data-target="#site-navbar-collapse" data-toggle="collapse" type="button">
  17. <i class="icon wb-more-horizontal" aria-hidden="true"></i>
  18. </button>
  19. <div class="navbar-brand navbar-brand-center">
  20. <img class="navbar-brand-logo" src="{{ sysConfig('website_logo') ? asset(sysConfig('website_logo')) : '/assets/images/logo.png' }}"
  21. alt="logo" />
  22. <span class="navbar-brand-text hidden-xs-down"> {{ sysConfig('website_name') }}</span>
  23. </div>
  24. </div>
  25. <div class="navbar-container container-fluid">
  26. <div class="collapse navbar-collapse navbar-collapse-toolbar" id="site-navbar-collapse">
  27. <ul class="nav navbar-toolbar">
  28. <li class="nav-item hidden-float" id="toggleMenubar">
  29. <a class="nav-link" data-toggle="menubar" href="#" role="button">
  30. <i class="icon hamburger hamburger-arrow-left">
  31. <span class="sr-only">{{ trans('common.toggle_action', ['action' => trans('common.function.menubar')]) }}</span>
  32. <span class="hamburger-bar"></span>
  33. </i>
  34. </a>
  35. </li>
  36. <li class="nav-item hidden-sm-down" id="toggleFullscreen">
  37. <a class="nav-link icon icon-fullscreen" data-toggle="fullscreen" href="#" role="button">
  38. <span class="sr-only">{{ trans('common.toggle_action', ['action' => trans('common.function.fullscreen')]) }}</span>
  39. </a>
  40. </li>
  41. </ul>
  42. <ul class="nav navbar-toolbar navbar-right navbar-toolbar-right">
  43. @include('user.components.notification')
  44. <li class="nav-item dropdown">
  45. <a class="nav-link" data-toggle="dropdown" data-animation="scale-up" href="javascript:void(0)" role="button" aria-expanded="false">
  46. <span class="icon font-size-16 wb-globe"></span>
  47. </a>
  48. <div class="dropdown-menu" role="menu">
  49. @foreach (config('common.language') as $key => $value)
  50. <a class="dropdown-item" href="{{ route('lang', ['locale' => $key]) }}" role="menuitem">
  51. <i class="fi fi-{{ $value[1] }}" aria-hidden="true"></i>
  52. <span style="padding: inherit;">{{ $value[0] }}</span>
  53. </a>
  54. @endforeach
  55. </div>
  56. </li>
  57. <li class="nav-item dropdown">
  58. <a class="nav-link" data-toggle="dropdown" data-animation="scale-up" href="javascript:void(0)" role="button" aria-expanded="false">
  59. <span class="icon wb-payment"></span>
  60. </a>
  61. <div class="dropdown-menu" role="menu">
  62. @foreach (config('common.currency') as $country_code => $currency)
  63. <a class="dropdown-item" href="{{ route('currency', ['code' => $currency['code']]) }}" role="menuitem">
  64. <i class="fi fi-{{ $country_code }}" aria-hidden="true"></i>
  65. <span style="padding: inherit;">{{ $currency['symbol'] . ' ' . $currency['name'] }}</span>
  66. </a>
  67. @endforeach
  68. </div>
  69. </li>
  70. <li class="nav-item dropdown">
  71. <a class="nav-link navbar-avatar" data-animation="scale-up" data-toggle="dropdown" href="#" role="button" aria-expanded="false">
  72. <span class="avatar avatar-online">
  73. <img data-uid="{{ auth()->user()->id }}" data-qq="{{ auth()->user()->qq }}" data-username="{{ auth()->user()->username }}"
  74. src="" alt="{{ trans('common.avatar') }}" loading="lazy" />
  75. </span>
  76. </a>
  77. <div class="dropdown-menu" role="menu">
  78. @can('admin.index')
  79. <a class="dropdown-item" href="{{ route('admin.index') }}" role="menuitem">
  80. <i class="icon wb-dashboard" aria-hidden="true"></i>
  81. {{ trans('user.menu.admin_dashboard') }}
  82. </a>
  83. @endcan
  84. <a class="dropdown-item" href="{{ route('profile.show') }}" role="menuitem">
  85. <i class="icon wb-settings" aria-hidden="true"></i>
  86. {{ trans('user.menu.profile') }}
  87. </a>
  88. <div class="dropdown-divider" role="presentation"></div>
  89. <a class="dropdown-item" href="{{ route('logout') }}" role="menuitem">
  90. <i class="icon wb-power" aria-hidden="true"></i>
  91. {{ trans('auth.logout') }}
  92. </a>
  93. </div>
  94. </li>
  95. </ul>
  96. </div>
  97. </div>
  98. </nav>
  99. @php
  100. $ticket_count = auth()->user()->tickets()->where('status', '<>', 2)->count();
  101. $activePlan = Order::uid()->whereStatus(2)->exists();
  102. @endphp
  103. <x-ui.site.menubar :items="[
  104. ['icon' => 'wb-home', 'route' => 'home', 'text' => trans('user.menu.home')],
  105. ['icon' => 'wb-shopping-cart', 'route' => 'shop.index', 'active' => 'shop.*', 'text' => trans('user.menu.shop')],
  106. ['icon' => 'wb-cloud', 'route' => 'node.index', 'active' => 'node.*', 'text' => trans('user.menu.nodes')],
  107. ['icon' => 'wb-info-circle', 'route' => 'knowledge.index', 'active' => 'knowledge.*', 'text' => trans('user.menu.help')],
  108. ['icon' => 'wb-settings', 'route' => 'profile.show', 'active' => 'profile.*', 'text' => trans('user.menu.profile')],
  109. [
  110. 'icon' => 'wb-chat-working',
  111. 'route' => 'ticket.index',
  112. 'active' => 'ticket.*',
  113. 'text' => trans('user.menu.tickets'),
  114. 'badge' => $ticket_count,
  115. ],
  116. ['icon' => 'wb-bookmark', 'route' => 'invoice.index', 'active' => 'invoice.*', 'text' => trans('user.menu.invoices')],
  117. [
  118. 'icon' => 'wb-extension',
  119. 'route' => 'invite.index',
  120. 'active' => 'invite.*',
  121. 'text' => trans('user.menu.invites'),
  122. 'show' => sysConfig('is_invite_register') && ReferralLog::uid()->exists(),
  123. ],
  124. [
  125. 'icon' => 'wb-star-outline',
  126. 'route' => 'referral.index',
  127. 'active' => 'referral.*',
  128. 'text' => trans('user.menu.promotion'),
  129. 'show' => sysConfig('referral_status') && $activePlan,
  130. ],
  131. '',
  132. ['icon' => 'wb-dashboard', 'route' => 'admin.index', 'text' => trans('user.menu.admin_dashboard'), 'can' => 'admin.index'],
  133. ['icon' => 'wb-power', 'route' => 'logout', 'text' => trans('auth.logout')],
  134. ]" />
  135. <div class="page">
  136. @yield('content')
  137. </div>
  138. <footer class="site-footer">
  139. <div class="site-footer-legal">
  140. © 2017 - {{ now()->year }} <a href="https://github.com/ProxyPanel/ProxyPanel" target="_blank">{{ config('version.name') }}
  141. {{ __('All rights reserved.') }}</a>
  142. 🚀 Version: <code> {{ config('version.number') }} </code>
  143. </div>
  144. <div class="site-footer-right">
  145. <a href="{{ sysConfig('website_url') }}" target="_blank">{{ sysConfig('website_name') }}</a> 🈺
  146. </div>
  147. </footer>
  148. @if (Session::has('admin'))
  149. <div class="panel panel-bordered w-300 bg-grey-200" style="position:fixed;right:20px;bottom:0;">
  150. <div class="panel-body text-right">
  151. <h5>{{ trans('user.current_role') }}:{{ auth()->user()->username }}</h5>
  152. <button class="btn btn-danger btn-block mt-20" id="return_to_admin" type="button">
  153. {{ trans('common.back_to', ['page' => trans('user.menu.admin_dashboard')]) }}
  154. </button>
  155. </div>
  156. </div>
  157. @endif
  158. @endsection
  159. @section('layout_javascript')
  160. <script src="/assets/custom/sweetalert2/sweetalert2.all.min.js"></script>
  161. <script src="/assets/js/config/common.js"></script>
  162. <script>
  163. // 全局变量,用于common.js
  164. const CSRF_TOKEN = '{{ csrf_token() }}';
  165. // 页面特定的翻译文本
  166. window.i18n.extend({
  167. 'warning': '{{ trans('common.warning') }}',
  168. 'btn': {
  169. 'close': '{{ trans('common.close') }}',
  170. 'confirm': '{{ trans('common.confirm') }}'
  171. },
  172. 'copy': {
  173. 'success': '{{ trans('common.copy.success') }}',
  174. 'failed': '{{ trans('common.copy.failed') }}'
  175. }
  176. });
  177. const $buoop = {
  178. required: {
  179. e: 11,
  180. f: -6,
  181. o: -6,
  182. s: -6,
  183. c: -6
  184. },
  185. insecure: true,
  186. unsupported: true,
  187. api: 2024.07
  188. };
  189. function $buo_f() {
  190. const e = document.createElement("script");
  191. e.src = "//browser-update.org/update.min.js";
  192. document.body.appendChild(e);
  193. }
  194. try {
  195. document.addEventListener("DOMContentLoaded", $buo_f, false);
  196. } catch (e) {
  197. window.attachEvent("onload", $buo_f);
  198. }
  199. @if (Session::has('admin'))
  200. $("#return_to_admin").click(function() {
  201. ajaxPost('{{ route('switch') }}', {}, {
  202. success: function(ret) {
  203. handleResponse(ret, {
  204. redirectUrl: '{{ route('admin.index') }}'
  205. });
  206. }
  207. });
  208. });
  209. @endif
  210. </script>
  211. @yield('javascript')
  212. <!-- 统计 -->
  213. {!! sysConfig('website_statistics_code') !!}
  214. <!-- 客服 -->
  215. {!! sysConfig('website_customer_service_code') !!}
  216. @endsection