|
@@ -110,7 +110,7 @@
|
|
|
速度限制
|
|
|
</div>
|
|
|
<div class="text-secondary">
|
|
|
- {if $user->node_speedlimit !== 0.0}
|
|
|
+ {if $user->node_speedlimit !== 0}
|
|
|
<code>{$user->node_speedlimit}</code>
|
|
|
Mbps
|
|
|
{else}
|
|
@@ -181,44 +181,44 @@
|
|
|
<div class="tab-pane active show" id="sub">
|
|
|
<div>
|
|
|
<p>
|
|
|
- 通用订阅(json):<code>{$UniversalSub}/json</code>
|
|
|
+ 通用订阅(Json):<code class="spoiler">{$UniversalSub}/json</code>
|
|
|
</p>
|
|
|
<p>
|
|
|
- 通用订阅(clash):<code>{$UniversalSub}/clash</code>
|
|
|
+ 通用订阅(Clash):<code class="spoiler">{$UniversalSub}/clash</code>
|
|
|
</p>
|
|
|
<p>
|
|
|
- 通用订阅(sing-box):<code>{$UniversalSub}/singbox</code>
|
|
|
+ 通用订阅(SingBox):<code class="spoiler">{$UniversalSub}/singbox</code>
|
|
|
</p>
|
|
|
<p>
|
|
|
- 通用订阅(v2rayjson):<code>{$UniversalSub}/v2rayjson</code>
|
|
|
+ 通用订阅(V2Ray Json):<code class="spoiler">{$UniversalSub}/v2rayjson</code>
|
|
|
</p>
|
|
|
{if $public_setting['enable_ss_sub']}
|
|
|
- <p>
|
|
|
- 通用订阅(sip008):<code>{$UniversalSub}/sip008</code>
|
|
|
- </p>
|
|
|
+ <p>
|
|
|
+ 通用订阅(SIP008):<code class="spoiler">{$UniversalSub}/sip008</code>
|
|
|
+ </p>
|
|
|
{/if}
|
|
|
<div class="btn-list justify-content-start">
|
|
|
<a data-clipboard-text="{$UniversalSub}/json"
|
|
|
class="copy btn btn-primary">
|
|
|
- 复制通用订阅(json)
|
|
|
+ 复制通用订阅(Json)
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/clash"
|
|
|
class="copy btn btn-primary">
|
|
|
- 复制通用订阅(clash)
|
|
|
+ 复制通用订阅(Clash)
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/singbox"
|
|
|
class="copy btn btn-primary">
|
|
|
- 复制通用订阅(sing-box)
|
|
|
+ 复制通用订阅(SingBox)
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/v2rayjson"
|
|
|
class="copy btn btn-primary">
|
|
|
- 复制通用订阅(v2rayjson)
|
|
|
+ 复制通用订阅(V2Ray Json)
|
|
|
</a>
|
|
|
{if $public_setting['enable_ss_sub']}
|
|
|
- <a data-clipboard-text="{$UniversalSub}/sip008"
|
|
|
- class="copy btn btn-primary">
|
|
|
- 复制通用订阅(sip008)
|
|
|
- </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/sip008"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制通用订阅(SIP008)
|
|
|
+ </a>
|
|
|
{/if}
|
|
|
</div>
|
|
|
</div>
|
|
@@ -226,44 +226,44 @@
|
|
|
<div class="tab-pane show" id="client-sub">
|
|
|
<div>
|
|
|
{if $public_setting['enable_ss_sub']}
|
|
|
- <p>
|
|
|
- 客户端订阅(Shadowsocks):<code>{$UniversalSub}/ss</code></p>
|
|
|
- <p>
|
|
|
- 客户端订阅(SIP002):<code>{$UniversalSub}/sip002</code>
|
|
|
- </p>
|
|
|
+ <p>
|
|
|
+ 客户端订阅(Shadowsocks):<code class="spoiler">{$UniversalSub}/ss</code></p>
|
|
|
+ <p>
|
|
|
+ 客户端订阅(SIP002):<code class="spoiler">{$UniversalSub}/sip002</code>
|
|
|
+ </p>
|
|
|
{/if}
|
|
|
{if $public_setting['enable_v2_sub']}
|
|
|
- <p>
|
|
|
- 客户端订阅(V2Ray):<code>{$UniversalSub}/v2ray</code>
|
|
|
- </p>
|
|
|
+ <p>
|
|
|
+ 客户端订阅(V2Ray):<code class="spoiler">{$UniversalSub}/v2ray</code>
|
|
|
+ </p>
|
|
|
{/if}
|
|
|
{if $public_setting['enable_trojan_sub']}
|
|
|
- <p>
|
|
|
- 客户端订阅(Trojan):<code>{$UniversalSub}/trojan</code>
|
|
|
- </p>
|
|
|
+ <p>
|
|
|
+ 客户端订阅(Trojan):<code class="spoiler">{$UniversalSub}/trojan</code>
|
|
|
+ </p>
|
|
|
{/if}
|
|
|
<div class="btn-list justify-content-start">
|
|
|
{if $public_setting['enable_ss_sub']}
|
|
|
- <a data-clipboard-text="{$UniversalSub}/ss"
|
|
|
- class="copy btn btn-primary">
|
|
|
- 复制客户端订阅(Shadowsocks)
|
|
|
- </a>
|
|
|
- <a data-clipboard-text="{$UniversalSub}/sip002"
|
|
|
- class="copy btn btn-primary">
|
|
|
- 复制客户端订阅(SIP002)
|
|
|
- </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/ss"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制客户端订阅(Shadowsocks)
|
|
|
+ </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/sip002"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制客户端订阅(SIP002)
|
|
|
+ </a>
|
|
|
{/if}
|
|
|
{if $public_setting['enable_v2_sub']}
|
|
|
- <a data-clipboard-text="{$UniversalSub}/v2ray"
|
|
|
- class="copy btn btn-primary">
|
|
|
- 复制客户端订阅(V2Ray)
|
|
|
- </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/v2ray"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制客户端订阅(V2Ray)
|
|
|
+ </a>
|
|
|
{/if}
|
|
|
{if $public_setting['enable_trojan_sub']}
|
|
|
- <a data-clipboard-text="{$UniversalSub}/trojan"
|
|
|
- class="copy btn btn-primary">
|
|
|
- 复制客户端订阅(Trojan)
|
|
|
- </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/trojan"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制客户端订阅(Trojan)
|
|
|
+ </a>
|
|
|
{/if}
|
|
|
</div>
|
|
|
</div>
|
|
@@ -271,83 +271,119 @@
|
|
|
<div class="tab-pane" id="windows">
|
|
|
<div>
|
|
|
<p>
|
|
|
- 适用于 Clash 的订阅:<code>{$UniversalSub}/clash</code>
|
|
|
+ 适用于 Clash 的订阅:<code class="spoiler">{$UniversalSub}/clash</code>
|
|
|
+ </p>
|
|
|
+ <p>
|
|
|
+ 适用于 SingBox 的订阅:<code class="spoiler">{$UniversalSub}/clash</code>
|
|
|
</p>
|
|
|
<div class="btn-list justify-content-start">
|
|
|
- <a
|
|
|
- {if $config['enable_r2_client_download']}
|
|
|
- href="/user/clients/Clash.Verge.exe"
|
|
|
+ <a {if $config['enable_r2_client_download']}
|
|
|
+ href="/user/clients/Clash.Nyanpasu.exe"
|
|
|
{else}
|
|
|
- href="/clients/Clash.Verge.exe"
|
|
|
+ href="/clients/Clash.Nyanpasu.exe"
|
|
|
{/if} class="btn btn-azure">
|
|
|
- 下载 Clash Verge
|
|
|
+ 下载 Clash Nyanpasu
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/clash"
|
|
|
class="copy btn btn-primary">
|
|
|
复制 Clash 订阅链接
|
|
|
</a>
|
|
|
- <a href="clash://install-config?url={$UniversalSub}/clash&name={$config['appName']}"
|
|
|
+ <a href="clash-nyanpasu://subscribe-remote-profile?url={$UniversalSub}&name={$config['appName']}"
|
|
|
+ class="btn btn-indigo">
|
|
|
+ 导入 Clash Nyanpasu
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ <div class="btn-list justify-content-start my-2">
|
|
|
+ <a {if $config['enable_r2_client_download']}
|
|
|
+ href="/user/clients/Hiddify.exe"
|
|
|
+ {else}
|
|
|
+ href="/clients/Hiddify.exe"
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
+ 下载 Hiddify
|
|
|
+ </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/singbox"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制 SingBox 订阅链接
|
|
|
+ </a>
|
|
|
+ <a href="hiddify://import/{$UniversalSub}#{$config['appName']}"
|
|
|
class="btn btn-indigo">
|
|
|
- 导入 Clash
|
|
|
+ 导入 Hiddify
|
|
|
</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="tab-pane" id="macos">
|
|
|
<p>
|
|
|
- 适用于 Clash 的订阅:<code>{$UniversalSub}/clash</code>
|
|
|
+ 适用于 Clash 的订阅:<code class="spoiler">{$UniversalSub}/clash</code>
|
|
|
</p>
|
|
|
<p>
|
|
|
- 适用于 sing-box 的订阅:<code>{$UniversalSub}/singbox</code>
|
|
|
+ 适用于 SingBox 的订阅:<code class="spoiler">{$UniversalSub}/singbox</code>
|
|
|
</p>
|
|
|
<div class="btn-list justify-content-start">
|
|
|
<a {if $config['enable_r2_client_download']}
|
|
|
- href="/user/clients/Clash.Verge_aarch64.dmg"
|
|
|
- {else}
|
|
|
- href="/clients/Clash.Verge_aarch64.dmg"
|
|
|
- {/if} class="btn btn-azure">
|
|
|
- 下载 Clash Verge (aarch64)
|
|
|
+ href="/user/clients/Clash.Nyanpasu_aarch64.dmg"
|
|
|
+ {else}
|
|
|
+ href="/clients/Clash.Nyanpasu_aarch64.dmg"
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
+ 下载 Clash Nyanpasu (aarch64)
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/clash"
|
|
|
class="copy btn btn-primary">
|
|
|
复制 Clash 订阅链接
|
|
|
</a>
|
|
|
- <a href="clash://install-config?url={$UniversalSub}/clash&name={$config['appName']}"
|
|
|
+ <a href="clash-nyanpasu://subscribe-remote-profile?url={$UniversalSub}&name={$config['appName']}"
|
|
|
class="btn btn-indigo">
|
|
|
- 导入 Clash
|
|
|
+ 导入 Clash Nyanpasu
|
|
|
</a>
|
|
|
</div>
|
|
|
<div class="btn-list justify-content-start my-2">
|
|
|
<a {if $config['enable_r2_client_download']}
|
|
|
href="/user/clients/SFM.dmg"
|
|
|
- {else}
|
|
|
+ {else}
|
|
|
href="/clients/SFM.dmg"
|
|
|
- {/if} class="btn btn-azure">
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
下载 SFM
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/singbox"
|
|
|
class="copy btn btn-primary">
|
|
|
- 复制 sing-box 订阅链接
|
|
|
+ 复制 SingBox 订阅链接
|
|
|
</a>
|
|
|
<a href="sing-box://import-remote-profile?url={$UniversalSub}/singbox#{$config['appName']}"
|
|
|
class="btn btn-indigo">
|
|
|
导入 SFM
|
|
|
</a>
|
|
|
</div>
|
|
|
+ <div class="btn-list justify-content-start my-2">
|
|
|
+ <a {if $config['enable_r2_client_download']}
|
|
|
+ href="/user/clients/Hiddify.dmg"
|
|
|
+ {else}
|
|
|
+ href="/clients/Hiddify.dmg"
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
+ 下载 Hiddify
|
|
|
+ </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/singbox"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制 SingBox 订阅链接
|
|
|
+ </a>
|
|
|
+ <a href="hiddify://import/{$UniversalSub}#{$config['appName']}"
|
|
|
+ class="btn btn-indigo">
|
|
|
+ 导入 Hiddify
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="tab-pane" id="android">
|
|
|
<p>
|
|
|
- 适用于 Clash 的订阅:<code>{$UniversalSub}/clash</code>
|
|
|
+ 适用于 Clash 的订阅:<code class="spoiler">{$UniversalSub}/clash</code>
|
|
|
</p>
|
|
|
<p>
|
|
|
- 适用于 sing-box 的订阅:<code>{$UniversalSub}/singbox</code>
|
|
|
+ 适用于 SingBox 的订阅:<code class="spoiler">{$UniversalSub}/singbox</code>
|
|
|
</p>
|
|
|
<div class="btn-list justify-content-start">
|
|
|
<a {if $config['enable_r2_client_download']}
|
|
|
href="/user/clients/CMFA.apk"
|
|
|
- {else}
|
|
|
+ {else}
|
|
|
href="/clients/CMFA.apk"
|
|
|
- {/if} class="btn btn-azure">
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
下载 Clash.Meta For Android
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/clash"
|
|
@@ -362,59 +398,96 @@
|
|
|
<div class="btn-list justify-content-start my-2">
|
|
|
<a {if $config['enable_r2_client_download']}
|
|
|
href="/user/clients/SFA.apk"
|
|
|
- {else}
|
|
|
+ {else}
|
|
|
href="/clients/SFA.apk"
|
|
|
- {/if} class="btn btn-azure">
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
下载 SFA
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/singbox"
|
|
|
class="copy btn btn-primary">
|
|
|
- 复制 sing-box 订阅链接
|
|
|
+ 复制 SingBox 订阅链接
|
|
|
</a>
|
|
|
<a href="sing-box://import-remote-profile?url={$UniversalSub}/singbox#{$config['appName']}"
|
|
|
class="btn btn-indigo">
|
|
|
导入 SFA
|
|
|
</a>
|
|
|
</div>
|
|
|
+ <div class="btn-list justify-content-start my-2">
|
|
|
+ <a {if $config['enable_r2_client_download']}
|
|
|
+ href="/user/clients/Hiddify.apk"
|
|
|
+ {else}
|
|
|
+ href="/clients/Hiddify.apk"
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
+ 下载 Hiddify
|
|
|
+ </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/singbox"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制 SingBox 订阅链接
|
|
|
+ </a>
|
|
|
+ <a href="hiddify://import/{$UniversalSub}#{$config['appName']}"
|
|
|
+ class="btn btn-indigo">
|
|
|
+ 导入 Hiddify
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="tab-pane" id="ios">
|
|
|
<p>
|
|
|
- 适用于 sing-box 的订阅:<code>{$UniversalSub}/singbox</code>
|
|
|
+ 适用于 SingBox 的订阅:<code class="spoiler">{$UniversalSub}/singbox</code>
|
|
|
</p>
|
|
|
- <div class="btn-list justify-content-start my-2">
|
|
|
+ <div class="btn-list justify-content-start">
|
|
|
<a href="https://apps.apple.com/app/sing-box/id6451272673" target="_blank"
|
|
|
class="btn btn-azure">
|
|
|
- 安裝 sing-box
|
|
|
+ 安裝 SFI
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/singbox"
|
|
|
class="copy btn btn-primary">
|
|
|
- 复制 sing-box 订阅链接
|
|
|
+ 复制 SingBox 订阅链接
|
|
|
</a>
|
|
|
<a href="sing-box://import-remote-profile?url={$UniversalSub}/singbox#{$config['appName']}"
|
|
|
class="btn btn-indigo">
|
|
|
- 导入 sing-box
|
|
|
+ 导入 SFI
|
|
|
</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="tab-pane" id="linux">
|
|
|
<p>
|
|
|
- 适用于 Clash 的订阅:<code>{$UniversalSub}/clash</code>
|
|
|
+ 适用于 Clash 的订阅:<code class="spoiler">{$UniversalSub}/clash</code>
|
|
|
+ </p>
|
|
|
+ <p>
|
|
|
+ 适用于 SingBox 的订阅:<code class="spoiler">{$UniversalSub}/singbox</code>
|
|
|
</p>
|
|
|
<div class="btn-list justify-content-start">
|
|
|
<a {if $config['enable_r2_client_download']}
|
|
|
- href="/user/clients/Clash.Verge.AppImage.tar.gz"
|
|
|
- {else}
|
|
|
- href="/clients/Clash.Verge.AppImage.tar.gz"
|
|
|
- {/if} class="btn btn-azure">
|
|
|
- 下载 Clash Verge
|
|
|
+ href="/user/clients/Clash.Nyanpasu.AppImage"
|
|
|
+ {else}
|
|
|
+ href="/clients/Clash.Nyanpasu.AppImage"
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
+ 下载 Clash Nyanpasu
|
|
|
</a>
|
|
|
<a data-clipboard-text="{$UniversalSub}/clash"
|
|
|
class="copy btn btn-primary">
|
|
|
复制 Clash 订阅链接
|
|
|
</a>
|
|
|
- <a href="clash://install-config?url={$UniversalSub}/clash&name={$config['appName']}"
|
|
|
+ <a href="clash-nyanpasu://subscribe-remote-profile?url={$UniversalSub}&name={$config['appName']}"
|
|
|
class="btn btn-indigo">
|
|
|
- 导入 Clash
|
|
|
+ 导入 Clash Nyanpasu
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ <div class="btn-list justify-content-start my-2">
|
|
|
+ <a {if $config['enable_r2_client_download']}
|
|
|
+ href="/user/clients/Hiddify.AppImage"
|
|
|
+ {else}
|
|
|
+ href="/clients/Hiddify.AppImage"
|
|
|
+ {/if} class="btn btn-azure">
|
|
|
+ 下载 Hiddify
|
|
|
+ </a>
|
|
|
+ <a data-clipboard-text="{$UniversalSub}/singbox"
|
|
|
+ class="copy btn btn-primary">
|
|
|
+ 复制 SingBox 订阅链接
|
|
|
+ </a>
|
|
|
+ <a href="hiddify://import/{$UniversalSub}#{$config['appName']}"
|
|
|
+ class="btn btn-indigo">
|
|
|
+ 导入 Hiddify
|
|
|
</a>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -429,11 +502,11 @@
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><strong>连接密码</strong></td>
|
|
|
- <td>{$user->passwd}</td>
|
|
|
+ <td><span class="spoiler">{$user->passwd}</span></td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><strong>UUID</strong></td>
|
|
|
- <td>{$user->uuid}</td>
|
|
|
+ <td><span class="spoiler">{$user->uuid}</span></td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><strong>自定义加密</strong></td>
|
|
@@ -448,50 +521,108 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="col-lg-6 col-sm-12">
|
|
|
- <div class="card">
|
|
|
- <div class="card-body">
|
|
|
- <h3 class="card-title">流量用量</h3>
|
|
|
- <div class="progress progress-separated mb-3">
|
|
|
- {if $user->LastusedTrafficPercent() < '1'}
|
|
|
+ <div class="vstack">
|
|
|
+ <div class="card">
|
|
|
+ <div class="card-body">
|
|
|
+ <h3 class="card-title">流量用量</h3>
|
|
|
+ <div class="progress progress-separated mb-3">
|
|
|
+ {if $user->LastusedTrafficPercent() < '1'}
|
|
|
<div class="progress-bar bg-primary" role="progressbar" style="width: 1%"></div>
|
|
|
- {else}
|
|
|
+ {else}
|
|
|
<div class="progress-bar bg-primary" role="progressbar"
|
|
|
style="width: {$user->LastusedTrafficPercent()}%">
|
|
|
</div>
|
|
|
- {/if}
|
|
|
- {if $user->TodayusedTrafficPercent() < '1'}
|
|
|
+ {/if}
|
|
|
+ {if $user->TodayusedTrafficPercent() < '1'}
|
|
|
<div class="progress-bar bg-success" role="progressbar" style="width: 1%"></div>
|
|
|
- {else}
|
|
|
+ {else}
|
|
|
<div class="progress-bar bg-success" role="progressbar"
|
|
|
style="width: {$user->TodayusedTrafficPercent()}%"></div>
|
|
|
- {/if}
|
|
|
- </div>
|
|
|
- <div class="row">
|
|
|
- <div class="col-auto d-flex align-items-center pe-2">
|
|
|
- <span class="legend me-2 bg-primary"></span>
|
|
|
- <span>过去用量 {$user->LastusedTraffic()}</span>
|
|
|
- </div>
|
|
|
- <div class="col-auto d-flex align-items-center px-2">
|
|
|
- <span class="legend me-2 bg-success"></span>
|
|
|
- <span>今日用量 {$user->TodayusedTraffic()}</span>
|
|
|
+ {/if}
|
|
|
</div>
|
|
|
- <div class="col-auto d-flex align-items-center ps-2">
|
|
|
- <span class="legend me-2"></span>
|
|
|
- <span>剩余流量 {$user->unusedTraffic()}</span>
|
|
|
+ <div class="row">
|
|
|
+ <div class="col-auto d-flex align-items-center pe-2">
|
|
|
+ <span class="legend me-2 bg-primary"></span>
|
|
|
+ <span>过去用量 {$user->LastusedTraffic()}</span>
|
|
|
+ </div>
|
|
|
+ <div class="col-auto d-flex align-items-center px-2">
|
|
|
+ <span class="legend me-2 bg-success"></span>
|
|
|
+ <span>今日用量 {$user->TodayusedTraffic()}</span>
|
|
|
+ </div>
|
|
|
+ <div class="col-auto d-flex align-items-center ps-2">
|
|
|
+ <span class="legend me-2"></span>
|
|
|
+ <span>剩余流量 {$user->unusedTraffic()}</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <p class="my-3">
|
|
|
- {if $user->class === 0}
|
|
|
+ <p class="my-3">
|
|
|
+ {if $user->class === 0}
|
|
|
前往
|
|
|
<a href="/user/product">商店</a>
|
|
|
购买套餐
|
|
|
- {else}
|
|
|
+ {else}
|
|
|
你的 LV. {$user->class} 账户会在 {$class_expire_days} 天后到期({$user->class_expire})
|
|
|
+ {/if}
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {if $public_setting['traffic_log']}
|
|
|
+ <div class="card my-3 mb-0">
|
|
|
+ <div class="card-body">
|
|
|
+ <h3 class="card-title">每小时用量</h3>
|
|
|
+ <div id="traffic-log"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {/if}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {if $public_setting['enable_checkin']}
|
|
|
+ <div class="col-lg-6 col-sm-12">
|
|
|
+ <div class="card">
|
|
|
+ <div class="card-stamp">
|
|
|
+ <div class="card-stamp-icon bg-green">
|
|
|
+ <i class="ti ti-check"></i>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="card-body">
|
|
|
+ <h3 class="card-title">每日签到</h3>
|
|
|
+ <p>
|
|
|
+ 签到可领取
|
|
|
+ {if $public_setting['checkin_min'] !== $public_setting['checkin_max']}
|
|
|
+
|
|
|
+ <code>{$public_setting['checkin_min']} MB</code>
|
|
|
+ 至
|
|
|
+ <code>{$public_setting['checkin_max']} MB</code>
|
|
|
+ 范围内的流量
|
|
|
+ {else}
|
|
|
+ <code>{$public_setting['checkin_min']} MB</code>
|
|
|
{/if}
|
|
|
</p>
|
|
|
+ <p>
|
|
|
+ 上次签到时间:<code id="last-checkin-time">{$user->lastCheckInTime()}</code>
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ <div class="card-footer">
|
|
|
+ <div class="d-flex">
|
|
|
+ {if ! $user->isAbleToCheckin()}
|
|
|
+ <button id="check-in" class="btn btn-primary ms-auto" disabled>已签到</button>
|
|
|
+ {else}
|
|
|
+ {if $public_setting['enable_checkin_captcha']}
|
|
|
+ {include file='captcha/div.tpl'}
|
|
|
+ {/if}
|
|
|
+ <button id="check-in" class="btn btn-primary ms-auto"
|
|
|
+ hx-post="/user/checkin" hx-swap="none" hx-vals='js:{
|
|
|
+ {if $public_setting['enable_checkin_captcha']}
|
|
|
+ {include file='captcha/ajax.tpl'}
|
|
|
+ {/if}
|
|
|
+ }'>
|
|
|
+ 签到
|
|
|
+ </button>
|
|
|
+ {/if}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ {/if}
|
|
|
<div class="col-lg-6 col-sm-12">
|
|
|
<div class="card">
|
|
|
<div class="ribbon ribbon-top bg-yellow">
|
|
@@ -499,69 +630,21 @@
|
|
|
</div>
|
|
|
<div class="card-body">
|
|
|
<h3 class="card-title">
|
|
|
- 最新公告
|
|
|
+ 置顶公告
|
|
|
{if $ann !== null}
|
|
|
- <span class="card-subtitle">{$ann->date}</span>
|
|
|
+ <span class="card-subtitle">{$ann->date}</span>
|
|
|
{/if}
|
|
|
</h3>
|
|
|
<p class="text-secondary">
|
|
|
{if $ann !== null}
|
|
|
- {$ann->content}
|
|
|
+ {$ann->content}
|
|
|
{else}
|
|
|
- 暂无公告
|
|
|
+ 暂无公告
|
|
|
{/if}
|
|
|
</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- {if $public_setting['enable_checkin']}
|
|
|
- <div class="col-lg-6 col-sm-12">
|
|
|
- <div class="card">
|
|
|
- <div class="card-stamp">
|
|
|
- <div class="card-stamp-icon bg-green">
|
|
|
- <i class="ti ti-check"></i>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="card-body">
|
|
|
- <h3 class="card-title">每日签到</h3>
|
|
|
- <p>
|
|
|
- 签到可领取
|
|
|
- {if $public_setting['checkin_min'] !== $public_setting['checkin_max']}
|
|
|
-
|
|
|
- <code>{$public_setting['checkin_min']} MB</code>
|
|
|
- 至
|
|
|
- <code>{$public_setting['checkin_max']} MB</code>
|
|
|
- 范围内的流量
|
|
|
- {else}
|
|
|
- <code>{$public_setting['checkin_min']} MB</code>
|
|
|
- {/if}
|
|
|
- </p>
|
|
|
- <p>
|
|
|
- 上次签到时间:<code id="last-checkin-time">{$user->lastCheckInTime()}</code>
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- <div class="card-footer">
|
|
|
- <div class="d-flex">
|
|
|
- {if ! $user->isAbleToCheckin()}
|
|
|
- <button id="check-in" class="btn btn-primary ms-auto" disabled>已签到</button>
|
|
|
- {else}
|
|
|
- {if $public_setting['enable_checkin_captcha']}
|
|
|
- {include file='captcha/div.tpl'}
|
|
|
- {/if}
|
|
|
- <button id="check-in" class="btn btn-primary ms-auto"
|
|
|
- hx-post="/user/checkin" hx-swap="none" hx-vals='js:{
|
|
|
- {if $public_setting['enable_checkin_captcha']}
|
|
|
- {include file='captcha/ajax.tpl'}
|
|
|
- {/if}
|
|
|
- }'>
|
|
|
- 签到
|
|
|
- </button>
|
|
|
- {/if}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- {/if}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -570,4 +653,105 @@
|
|
|
{include file='captcha/js.tpl'}
|
|
|
{/if}
|
|
|
|
|
|
+ {if $public_setting['traffic_log']}
|
|
|
+ <script>
|
|
|
+ document.addEventListener("DOMContentLoaded", function () {
|
|
|
+ let chart = window.ApexCharts && new ApexCharts(document.getElementById('traffic-log'), {
|
|
|
+ chart: {
|
|
|
+ type: "line",
|
|
|
+ fontFamily: "inherit",
|
|
|
+ height: '100%',
|
|
|
+ parentHeightOffset: 0,
|
|
|
+ toolbar: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ animations: {
|
|
|
+ enabled: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ stroke: {
|
|
|
+ curve: "smooth"
|
|
|
+ },
|
|
|
+ fill: {
|
|
|
+ opacity: 1
|
|
|
+ },
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ name: "使用流量(MB)",
|
|
|
+ data: {$traffic_logs}
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ tooltip: {
|
|
|
+ theme: "dark"
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ padding: {
|
|
|
+ top: -20,
|
|
|
+ right: 0,
|
|
|
+ left: 0,
|
|
|
+ bottom: 0
|
|
|
+ },
|
|
|
+ strokeDashArray: 4
|
|
|
+ },
|
|
|
+ xaxis: {
|
|
|
+ title: {
|
|
|
+ text: "小时"
|
|
|
+ },
|
|
|
+ labels: {
|
|
|
+ padding: 0
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ enabled: false
|
|
|
+ },
|
|
|
+ axisBorder: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ categories: [
|
|
|
+ "00",
|
|
|
+ "01",
|
|
|
+ "02",
|
|
|
+ "03",
|
|
|
+ "04",
|
|
|
+ "05",
|
|
|
+ "06",
|
|
|
+ "07",
|
|
|
+ "08",
|
|
|
+ "09",
|
|
|
+ "10",
|
|
|
+ "11",
|
|
|
+ "12",
|
|
|
+ "13",
|
|
|
+ "14",
|
|
|
+ "15",
|
|
|
+ "16",
|
|
|
+ "17",
|
|
|
+ "18",
|
|
|
+ "19",
|
|
|
+ "20",
|
|
|
+ "21",
|
|
|
+ "22",
|
|
|
+ "23"
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ yaxis: {
|
|
|
+ title: {
|
|
|
+ text: "使用流量(MB)",
|
|
|
+ rotate: -90
|
|
|
+ },
|
|
|
+ labels: {
|
|
|
+ padding: 14
|
|
|
+ }
|
|
|
+ },
|
|
|
+ colors: ["#FF4500"],
|
|
|
+ legend: {
|
|
|
+ show: false
|
|
|
+ }
|
|
|
+ });
|
|
|
+ chart.render();
|
|
|
+ });
|
|
|
+ </script>
|
|
|
+
|
|
|
+ <script src="//{$config['jsdelivr_url']}/npm/@tabler/core@latest/dist/libs/apexcharts/dist/apexcharts.min.js"></script>
|
|
|
+ {/if}
|
|
|
+
|
|
|
{include file='user/footer.tpl'}
|