mirror of
https://github.com/ProxyPanel/ProxyPanel.git
synced 2026-04-02 18:48:36 +00:00
10
readme.md
10
readme.md
@@ -1,14 +1,14 @@
|
||||
# **ProxyPanel** [](https://crowdin.com/project/proxypanel) <img src="https://avatars.githubusercontent.com/u/70075860?s=128" alt="logo" align="right" style="margin-top: -50px;"/>
|
||||
|
||||
Support but not limited to: Shadowsocks, ShadowsocksR, ShadowsocksRR, V2Ray, Trojan, VNET
|
||||
`We are looking for translators to help us translate this project into other languages 😊`
|
||||
|
||||
We are looking for translators who help us to translate this project into other languages :)
|
||||
Support but not limited to: Shadowsocks, ShadowsocksR, ShadowsocksRR, V2Ray, Trojan, VNET
|
||||
|
||||
---
|
||||
|
||||
## Project
|
||||
|
||||
- [**Demo**](https://proxypanel.ddo.jp) will always be on dev/latest code, rather than the stable version. For showcase purposes.
|
||||
- [**Demo**](https://proxypanel.ddo.jp) (dev/latest code for showcase purposes)
|
||||
- **Account:** test@test.com
|
||||
- **Password:** 123456
|
||||
- [**WIKI**](https://proxypanel.gitbook.io/wiki/) [简体中文](https://proxypanel.gitbook.io/wiki/)
|
||||
@@ -26,7 +26,7 @@ We are looking for translators who help us to translate this project into other
|
||||
|
||||
### Laravel 10
|
||||
|
||||
This project is based on Laravel 10 Framework. This means anything Laravel 10 requires to install will also be required by this project.
|
||||
This project is based on Laravel 10 Framework. Therefore, it requires all Laravel 10 dependencies.
|
||||
|
||||
- **PHP 8.1+**
|
||||
- Ctype PHP Extension
|
||||
@@ -57,7 +57,7 @@ This project is based on Laravel 10 Framework. This means anything Laravel 10 re
|
||||
|
||||
---
|
||||
|
||||
## Nice VPS
|
||||
## Recommended VPS
|
||||
|
||||
- [**Kdatacenter**](https://www.kdatacenter.com/myportal/?affid=470)
|
||||
- 韩国SK线路,19刀(优惠后16.91刀)1TB流量/月,性价比不错
|
||||
|
||||
@@ -9,6 +9,13 @@
|
||||
{!! $message !!}
|
||||
<footer class="page-copyright">
|
||||
<p id="countdown"></p>
|
||||
<div class="social">
|
||||
@foreach (config('common.language') as $key => $value)
|
||||
<a class="btn btn-icon btn-pure" href="{{ route('lang', ['locale' => $key]) }}">
|
||||
<i class="font-size-30 icon fi fi-{{ $value[1] }}" aria-hidden="true"></i>
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
@@ -17,21 +24,29 @@
|
||||
<script>
|
||||
// 每秒更新计时器
|
||||
const countDownDate = new Date("{{ $time }}").getTime();
|
||||
const x = setInterval(function() {
|
||||
const countdownElement = document.getElementById('countdown');
|
||||
const daysLabel = '{{ trans_choice('common.days.attribute', 1) }}';
|
||||
const hoursLabel = '{{ trans_choice('common.hour', 1) }}';
|
||||
const minutesLabel = '{{ trans('validation.attributes.minute') }}';
|
||||
const secondsLabel = '{{ trans('validation.attributes.second') }}';
|
||||
|
||||
const updateCountdown = () => {
|
||||
const distance = countDownDate - new Date().getTime();
|
||||
if (distance <= 0) {
|
||||
clearInterval(interval);
|
||||
countdownElement.remove();
|
||||
return;
|
||||
}
|
||||
|
||||
const days = Math.floor(distance / 86400000);
|
||||
const hours = Math.floor(distance % 86400000 / 3600000);
|
||||
const minutes = Math.floor(distance % 3600000 / 60000);
|
||||
const seconds = Math.floor(distance % 60000 / 1000);
|
||||
document.getElementById('countdown').innerHTML = '<h2>' + days + ' <span> ' +
|
||||
@json(trans_choice('common.days.attribute', 1)) + ' </span>: ' +
|
||||
hours + ' <span>' + @json(trans_choice('common.hour', 1)) + '</span>: ' + minutes +
|
||||
' <span>{{ trans('validation.attributes.minute') }} </span>: ' +
|
||||
seconds + '<span> {{ trans('validation.attributes.second') }}</span> </h2>';
|
||||
if (distance <= 0) {
|
||||
clearInterval(x);
|
||||
document.getElementById('countdown').remove();
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
countdownElement.innerHTML =
|
||||
`<h3>${days} <span> ${daysLabel} </span>: ${hours} <span>${hoursLabel}</span>: ${minutes} <span>${minutesLabel}</span>: ${seconds}<span> ${secondsLabel}</span></h3>`;
|
||||
};
|
||||
|
||||
const interval = setInterval(updateCountdown, 1000);
|
||||
</script>
|
||||
@endsection
|
||||
|
||||
@@ -28,7 +28,7 @@ Route::middleware(['isForbidden', 'affiliate', 'isMaintenance'])->group(function
|
||||
});
|
||||
|
||||
Route::controller(AuthController::class)->group(function () {
|
||||
Route::get('lang/{locale}', 'switchLang')->name('lang'); // 语言切换
|
||||
Route::get('lang/{locale}', 'switchLang')->name('lang')->withoutMiddleware('isMaintenance'); // 语言切换
|
||||
Route::get('login', 'showLoginForm')->middleware('isSecurity')->name('login'); // 登录页面
|
||||
Route::post('login', 'login')->middleware('isSecurity'); // 登录
|
||||
Route::get('logout', 'logout')->name('logout'); // 退出
|
||||
|
||||
Reference in New Issue
Block a user