mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-13 05:42:15 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
26e79e7baa | ||
|
|
cfecf542ca | ||
|
|
edd0b5195d | ||
|
|
232d560cc4 | ||
|
|
b8b56584bd | ||
|
|
ce2daaf6c4 | ||
|
|
78d9e0bd2a | ||
|
|
55695ba06c |
@@ -6,6 +6,7 @@ APP_URL=http://localhost
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
SCOUT_DRIVER=tntsearch
|
||||
FILESYSTEM_DRIVER=local
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
@@ -38,6 +39,12 @@ AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
|
||||
DO_SPACES_KEY=
|
||||
DO_SPACES_SECRET=
|
||||
DO_SPACES_ENDPOINT=
|
||||
DO_SPACES_REGION=
|
||||
DO_SPACES_BUCKET=
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
### Documentation
|
||||
[Read online documentation](https://vuefilemanager.com/docs/)
|
||||
|
||||
### Installation setup
|
||||
|
||||
Run these commands to install vendors:
|
||||
@@ -42,4 +45,4 @@ To compiles for production, run this command
|
||||
```
|
||||
npm run prod
|
||||
```
|
||||
That's all, happy coding! :tada: :tada: :tada:
|
||||
That's all, happy coding! :tada: :tada: :tada:
|
||||
|
||||
117
app/Console/Commands/SetupDevEnvironment.php
Normal file
117
app/Console/Commands/SetupDevEnvironment.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\User;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class SetupDevEnvironment extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'setup:dev';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Setting production environment';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$this->info('Setting up production environment');
|
||||
|
||||
$this->migrateDatabase();
|
||||
$this->generateKey();
|
||||
$this->createPassportKeys();
|
||||
$this->createPassportClientPassword();
|
||||
$this->createPassportClientPersonal();
|
||||
$this->createDefaultUser();
|
||||
|
||||
$this->info('Everything is done, congratulations! 🥳🥳🥳');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate database
|
||||
*/
|
||||
public function generateKey()
|
||||
{
|
||||
$this->call('key:generate');
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate database
|
||||
*/
|
||||
public function migrateDatabase()
|
||||
{
|
||||
$this->call('migrate:fresh');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Passport Encryption keys
|
||||
*/
|
||||
public function createPassportKeys()
|
||||
{
|
||||
$this->call('passport:keys', [
|
||||
'--force' => true
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Password grant client
|
||||
*/
|
||||
public function createPassportClientPassword()
|
||||
{
|
||||
$this->call('passport:client', [
|
||||
'--password' => true,
|
||||
'--name' => 'vuefilemanager',
|
||||
]);
|
||||
|
||||
$this->alert('Please copy these first password grant Client ID & Client secret above to your /.env file.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Personal access client
|
||||
*/
|
||||
public function createPassportClientPersonal()
|
||||
{
|
||||
$this->call('passport:client', [
|
||||
'--personal' => true,
|
||||
'--name' => 'shared',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Default User
|
||||
*/
|
||||
public function createDefaultUser()
|
||||
{
|
||||
$user = User::create([
|
||||
'name' => 'Jane Doe',
|
||||
'email' => 'howdy@hi5ve.digital',
|
||||
'password' => \Hash::make('secret'),
|
||||
]);
|
||||
|
||||
$this->info('Test user created. Email: ' . $user->email . ' Password: secret');
|
||||
}
|
||||
}
|
||||
@@ -84,6 +84,8 @@ class SetupProductionEnvironment extends Command
|
||||
'--password' => true,
|
||||
'--name' => 'vuefilemanager',
|
||||
]);
|
||||
|
||||
$this->alert('Please copy these first password grant Client ID & Client secret above to your /.env file.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Console;
|
||||
|
||||
use App\Console\Commands\SetupDevEnvironment;
|
||||
use App\Console\Commands\SetupProductionEnvironment;
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
@@ -15,6 +16,7 @@ class Kernel extends ConsoleKernel
|
||||
*/
|
||||
protected $commands = [
|
||||
SetupProductionEnvironment::class,
|
||||
SetupDevEnvironment::class,
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App;
|
||||
|
||||
use ByteUnits\Metric;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Laravel\Scout\Searchable;
|
||||
use TeamTNT\TNTSearch\Indexer\TNTIndexer;
|
||||
@@ -52,7 +53,6 @@ use \Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Query\Builder|\App\FileManagerFile withoutTrashed()
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
|
||||
class FileManagerFile extends Model
|
||||
{
|
||||
use Searchable, SoftDeletes;
|
||||
@@ -72,7 +72,8 @@ class FileManagerFile extends Model
|
||||
*
|
||||
* @param $token
|
||||
*/
|
||||
public function setPublicUrl($token) {
|
||||
public function setPublicUrl($token)
|
||||
{
|
||||
$this->public_access = $token;
|
||||
}
|
||||
|
||||
@@ -93,7 +94,7 @@ class FileManagerFile extends Model
|
||||
*/
|
||||
public function getDeletedAtAttribute()
|
||||
{
|
||||
if (! $this->attributes['deleted_at']) return null;
|
||||
if (!$this->attributes['deleted_at']) return null;
|
||||
|
||||
return format_date($this->attributes['deleted_at'], __('vuefilemanager.time'));
|
||||
}
|
||||
@@ -115,7 +116,14 @@ class FileManagerFile extends Model
|
||||
*/
|
||||
public function getThumbnailAttribute()
|
||||
{
|
||||
if ($this->attributes['thumbnail']) {
|
||||
// Get thumbnail from s3
|
||||
if ($this->attributes['thumbnail'] && is_storage_driver(['s3', 'spaces'])) {
|
||||
|
||||
return Storage::temporaryUrl('file-manager/' . $this->attributes['thumbnail'], now()->addDay());
|
||||
}
|
||||
|
||||
// Get thumbnail from local storage
|
||||
if ($this->attributes['thumbnail'] && is_storage_driver('local')) {
|
||||
|
||||
// Thumbnail route
|
||||
$route = route('thumbnail', ['name' => $this->attributes['thumbnail']]);
|
||||
@@ -137,13 +145,31 @@ class FileManagerFile extends Model
|
||||
*/
|
||||
public function getFileUrlAttribute()
|
||||
{
|
||||
$route = route('file', ['name' => $this->attributes['basename']]);
|
||||
// Get file from s3
|
||||
if (is_storage_driver(['s3', 'spaces'])) {
|
||||
|
||||
if ($this->public_access) {
|
||||
return $route . '/public/' . $this->public_access;
|
||||
$header = [
|
||||
"ResponseAcceptRanges" => "bytes",
|
||||
"ResponseContentType" => $this->attributes['mimetype'],
|
||||
"ResponseContentLength" => $this->attributes['filesize'],
|
||||
"ResponseContentRange" => "bytes 0-600/" . $this->attributes['filesize'],
|
||||
'ResponseContentDisposition' => 'attachment; filename=' . $this->attributes['name'] . '.' . $this->attributes['mimetype'],
|
||||
];
|
||||
|
||||
return Storage::temporaryUrl('file-manager/' . $this->attributes['basename'], now()->addDay(), $header);
|
||||
}
|
||||
|
||||
return $route;
|
||||
// Get thumbnail from local storage
|
||||
if (is_storage_driver('local')) {
|
||||
|
||||
$route = route('file', ['name' => $this->attributes['basename']]);
|
||||
|
||||
if ($this->public_access) {
|
||||
return $route . '/public/' . $this->public_access;
|
||||
}
|
||||
|
||||
return $route;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,20 +2,13 @@
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\ClientProfile;
|
||||
use App\Models\User\UserAttribute;
|
||||
use App\Models\User\UserNotificationSetting;
|
||||
use App\ProviderProfile;
|
||||
use App\Http\Requests\Auth\CheckAccountRequest;
|
||||
use App\User;
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
@@ -26,12 +19,7 @@ class AuthController extends Controller
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function check_account(Request $request) {
|
||||
|
||||
// Validate request
|
||||
$request->validate([
|
||||
'email' => ['required', 'string', 'email'],
|
||||
]);
|
||||
public function check_account(CheckAccountRequest $request) {
|
||||
|
||||
// Get User
|
||||
$user = User::where('email', $request->input('email'))->select(['name', 'avatar'])->first();
|
||||
@@ -111,6 +99,12 @@ class AuthController extends Controller
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
// Demo preview
|
||||
if (is_demo( Auth::id())) {
|
||||
return response('Logout successfull', 204)
|
||||
->cookie('access_token', '', -1);
|
||||
}
|
||||
|
||||
// Get user tokens and remove it
|
||||
auth()->user()->tokens()->each(function ($token) {
|
||||
|
||||
@@ -118,7 +112,8 @@ class AuthController extends Controller
|
||||
$token->delete();
|
||||
});
|
||||
|
||||
return response('Logout successfull', 200)->cookie('access_token', '', -1);
|
||||
return response('Logout successfull', 204)
|
||||
->cookie('access_token', '', -1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -128,7 +123,7 @@ class AuthController extends Controller
|
||||
* @param string $provider
|
||||
* @return Request
|
||||
*/
|
||||
private static function make_request(Request $request)
|
||||
private static function make_request($request)
|
||||
{
|
||||
$request->request->add([
|
||||
'grant_type' => 'password',
|
||||
|
||||
@@ -11,6 +11,7 @@ use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Http\Request;
|
||||
use App\FileManagerFile;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Response;
|
||||
|
||||
@@ -26,19 +27,13 @@ class FileAccessController extends Controller
|
||||
public function get_avatar($basename)
|
||||
{
|
||||
// Get file path
|
||||
$path = storage_path() . '/app/avatars/' . $basename;
|
||||
$path = '/avatars/' . $basename;
|
||||
|
||||
// Check if file exist
|
||||
if (!File::exists($path)) abort(404);
|
||||
if (!Storage::exists($path)) abort(404);
|
||||
|
||||
$file = File::get($path);
|
||||
$type = File::mimeType($path);
|
||||
|
||||
// Create response
|
||||
$response = Response::make($file, 200);
|
||||
$response->header("Content-Type", $type);
|
||||
|
||||
return $response;
|
||||
// Return avatar
|
||||
return Storage::download($path, $basename);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -61,7 +56,7 @@ class FileAccessController extends Controller
|
||||
->firstOrFail();
|
||||
|
||||
// Check user permission
|
||||
if ( ! $request->user()->tokenCan('master') ) {
|
||||
if (!$request->user()->tokenCan('master')) {
|
||||
|
||||
// Get shared token
|
||||
$shared = get_shared($request->cookie('shared_token'));
|
||||
@@ -119,7 +114,7 @@ class FileAccessController extends Controller
|
||||
->firstOrFail();
|
||||
|
||||
// Check user permission
|
||||
if ( ! $request->user()->tokenCan('master') ) {
|
||||
if (!$request->user()->tokenCan('master')) {
|
||||
$this->check_file_access($request, $file);
|
||||
}
|
||||
|
||||
@@ -187,24 +182,20 @@ class FileAccessController extends Controller
|
||||
$file_pretty_name = $file->name . '.' . $file->mimetype;
|
||||
|
||||
// Get file path
|
||||
$path = storage_path() . '/app/file-manager/' . $file->basename;
|
||||
$path = '/file-manager/' . $file->basename;
|
||||
|
||||
// Check if file exist
|
||||
if (!File::exists($path)) abort(404);
|
||||
if (!Storage::exists($path)) abort(404);
|
||||
|
||||
$file = File::get($path);
|
||||
$type = File::mimeType($path);
|
||||
$size = File::size($path);
|
||||
$header = [
|
||||
"Content-Type" => Storage::mimeType($path),
|
||||
"Content-Length" => Storage::size($path),
|
||||
"Accept-Ranges" => "bytes",
|
||||
"Content-Range" => "bytes 0-600/" . Storage::size($path),
|
||||
];
|
||||
|
||||
// Create response
|
||||
$response = Response::make($file, 200);
|
||||
$response->header("Content-Type", $type);
|
||||
$response->header("Content-Disposition", 'attachment; filename=' . $file_pretty_name);
|
||||
$response->header("Content-Length", $size);
|
||||
$response->header("Accept-Ranges", "bytes");
|
||||
$response->header("Content-Range", "bytes 0-" . $size . "/" . $size);
|
||||
|
||||
return $response;
|
||||
// Get file
|
||||
return Storage::download($path, $file_pretty_name, $header);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -215,18 +206,12 @@ class FileAccessController extends Controller
|
||||
private function thumbnail_file($file)
|
||||
{
|
||||
// Get file path
|
||||
$path = storage_path() . '/app/file-manager/' . $file->getOriginal('thumbnail');
|
||||
$path = '/file-manager/' . $file->getOriginal('thumbnail');
|
||||
|
||||
// Check if file exist
|
||||
if (!File::exists($path)) abort(404);
|
||||
if (!Storage::exists($path)) abort(404);
|
||||
|
||||
$file = File::get($path);
|
||||
$type = File::mimeType($path);
|
||||
|
||||
// Create response
|
||||
$response = Response::make($file, 200);
|
||||
$response->header("Content-Type", $type);
|
||||
|
||||
return $response;
|
||||
// Return image thumbnail
|
||||
return Storage::download($path, $file->getOriginal('thumbnail'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers\FileBrowser;
|
||||
|
||||
use App\Http\Requests\FileBrowser\SearchRequest;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Controllers\Controller;
|
||||
@@ -154,16 +155,8 @@ class BrowseController extends Controller
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Database\Eloquent\Collection
|
||||
*/
|
||||
public function search(Request $request)
|
||||
public function search(SearchRequest $request)
|
||||
{
|
||||
// Validate request
|
||||
$validator = Validator::make($request->all(), [
|
||||
'query' => 'required|string',
|
||||
]);
|
||||
|
||||
// Return error
|
||||
if ($validator->fails()) abort(400, 'Bad input');
|
||||
|
||||
// Get user
|
||||
$user_id = Auth::id();
|
||||
|
||||
|
||||
@@ -39,10 +39,10 @@ class TrashController extends Controller
|
||||
foreach ($files as $file) {
|
||||
|
||||
// Delete file
|
||||
Storage::disk('local')->delete('/file-manager/' . $file->basename);
|
||||
Storage::delete('/file-manager/' . $file->basename);
|
||||
|
||||
// Delete thumbnail if exist
|
||||
if ($file->thumbnail) Storage::disk('local')->delete('/file-manager/' . $file->getOriginal('thumbnail'));
|
||||
if ($file->thumbnail) Storage::delete('/file-manager/' . $file->getOriginal('thumbnail'));
|
||||
|
||||
// Delete file permanently
|
||||
$file->forceDelete();
|
||||
|
||||
30
app/Http/Requests/Auth/CheckAccountRequest.php
Normal file
30
app/Http/Requests/Auth/CheckAccountRequest.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Auth;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class CheckAccountRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'email' => 'required|string|email',
|
||||
];
|
||||
}
|
||||
}
|
||||
30
app/Http/Requests/FileBrowser/SearchRequest.php
Normal file
30
app/Http/Requests/FileBrowser/SearchRequest.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\FileBrowser;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class SearchRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'query' => 'required|string',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -121,10 +121,10 @@ class Editor
|
||||
foreach ($files as $file) {
|
||||
|
||||
// Delete file
|
||||
Storage::disk('local')->delete('/file-manager/' . $file->basename);
|
||||
Storage::delete('/file-manager/' . $file->basename);
|
||||
|
||||
// Delete thumbnail if exist
|
||||
if (!is_null($file->thumbnail)) Storage::disk('local')->delete('/file-manager/' . $file->getOriginal('thumbnail'));
|
||||
if (!is_null($file->thumbnail)) Storage::delete('/file-manager/' . $file->getOriginal('thumbnail'));
|
||||
|
||||
// Delete file permanently
|
||||
$file->forceDelete();
|
||||
@@ -169,10 +169,10 @@ class Editor
|
||||
if ($request->force_delete) {
|
||||
|
||||
// Delete file
|
||||
Storage::disk('local')->delete('/file-manager/' . $file->basename);
|
||||
Storage::delete('/file-manager/' . $file->basename);
|
||||
|
||||
// Delete thumbnail if exist
|
||||
if ($file->thumbnail) Storage::disk('local')->delete('/file-manager/' . $file->getOriginal('thumbnail'));
|
||||
if ($file->thumbnail) Storage::delete('/file-manager/' . $file->getOriginal('thumbnail'));
|
||||
|
||||
// Delete file permanently
|
||||
$file->forceDelete();
|
||||
@@ -213,12 +213,12 @@ class Editor
|
||||
$thumbnail = null;
|
||||
|
||||
// create directory if not exist
|
||||
if (!Storage::disk('local')->exists($directory)) {
|
||||
Storage::disk('local')->makeDirectory($directory);
|
||||
if (!Storage::exists($directory)) {
|
||||
Storage::makeDirectory($directory);
|
||||
}
|
||||
|
||||
// Store to disk
|
||||
Storage::disk('local')->putFileAs($directory, $file, $filename, 'public');
|
||||
Storage::putFileAs($directory, $file, $filename, 'private');
|
||||
|
||||
// Create image thumbnail
|
||||
if ($filetype == 'image') {
|
||||
@@ -235,7 +235,7 @@ class Editor
|
||||
})->stream();
|
||||
|
||||
// Store thumbnail to disk
|
||||
Storage::disk('local')->put($directory . '/' . $thumbnail, $image);
|
||||
Storage::put($directory . '/' . $thumbnail, $image);
|
||||
}
|
||||
|
||||
// Store file
|
||||
|
||||
@@ -11,6 +11,38 @@ use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Intervention\Image\ImageManagerStatic as Image;
|
||||
|
||||
/**
|
||||
* Get app version from config
|
||||
*
|
||||
* @return \Illuminate\Config\Repository|mixed
|
||||
*/
|
||||
function get_storage() {
|
||||
return env('FILESYSTEM_DRIVER');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if is running AWS s3 as storage
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function is_storage_driver($driver) {
|
||||
|
||||
if (is_array($driver)) {
|
||||
return in_array(env('FILESYSTEM_DRIVER'), $driver);
|
||||
}
|
||||
|
||||
return env('FILESYSTEM_DRIVER') === $driver;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get app version from config
|
||||
*
|
||||
* @return \Illuminate\Config\Repository|mixed
|
||||
*/
|
||||
function get_version() {
|
||||
return config('vuefilemanager.version');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if is demo
|
||||
*
|
||||
@@ -102,16 +134,19 @@ function store_avatar($image, $path)
|
||||
$path = check_directory($path);
|
||||
|
||||
// Store avatar
|
||||
$image_path = $path . '/' . Str::random(8) . '-' . $image->getClientOriginalName();
|
||||
$image_path = Str::random(8) . '-' . $image->getClientOriginalName();
|
||||
|
||||
// Create intervention image
|
||||
$img = Image::make($image->getRealPath());
|
||||
|
||||
// Generate thumbnail
|
||||
$img->fit('150', '150')->save(storage_path() . "/app/" . $image_path, 90);
|
||||
$img->fit('150', '150')->stream();
|
||||
|
||||
// Store thumbnail to disk
|
||||
Storage::put($path . '/' . $image_path, $img);
|
||||
|
||||
// Return path to image
|
||||
return $image_path;
|
||||
return $path . '/' . $image_path;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
"laravel/passport": "^8.4",
|
||||
"laravel/scout": "^7.2",
|
||||
"laravel/tinker": "^2.0",
|
||||
"league/flysystem-aws-s3-v3": "^1.0",
|
||||
"league/flysystem-cached-adapter": "^1.0",
|
||||
"teamtnt/laravel-scout-tntsearch-driver": "^7.2"
|
||||
},
|
||||
"require-dev": {
|
||||
|
||||
283
composer.lock
generated
283
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "3e3a0dfbec5dd01d1b88b57db1c18bbf",
|
||||
"content-hash": "dd291c7d30131e81dbca3d2127e2fc0d",
|
||||
"packages": [
|
||||
{
|
||||
"name": "asm89/stack-cors",
|
||||
@@ -58,6 +58,90 @@
|
||||
],
|
||||
"time": "2019-12-24T22:41:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.137.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "af91c2fc467a326e5bcb5665e4e2ad3d84d28be2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/af91c2fc467a326e5bcb5665e4e2ad3d84d28be2",
|
||||
"reference": "af91c2fc467a326e5bcb5665e4e2ad3d84d28be2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"ext-pcre": "*",
|
||||
"ext-simplexml": "*",
|
||||
"guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0",
|
||||
"guzzlehttp/promises": "^1.0",
|
||||
"guzzlehttp/psr7": "^1.4.1",
|
||||
"mtdowling/jmespath.php": "^2.5",
|
||||
"php": ">=5.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"andrewsville/php-token-reflection": "^1.4",
|
||||
"aws/aws-php-sns-message-validator": "~1.0",
|
||||
"behat/behat": "~3.0",
|
||||
"doctrine/cache": "~1.4",
|
||||
"ext-dom": "*",
|
||||
"ext-openssl": "*",
|
||||
"ext-pcntl": "*",
|
||||
"ext-sockets": "*",
|
||||
"nette/neon": "^2.3",
|
||||
"phpunit/phpunit": "^4.8.35|^5.4.3",
|
||||
"psr/cache": "^1.0",
|
||||
"psr/simple-cache": "^1.0",
|
||||
"sebastian/comparator": "^1.2.3"
|
||||
},
|
||||
"suggest": {
|
||||
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
|
||||
"doctrine/cache": "To use the DoctrineCacheAdapter",
|
||||
"ext-curl": "To send requests using cURL",
|
||||
"ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
|
||||
"ext-sockets": "To use client-side monitoring"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Aws\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/functions.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Apache-2.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Amazon Web Services",
|
||||
"homepage": "http://aws.amazon.com"
|
||||
}
|
||||
],
|
||||
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
|
||||
"homepage": "http://aws.amazon.com/sdkforphp",
|
||||
"keywords": [
|
||||
"amazon",
|
||||
"aws",
|
||||
"cloud",
|
||||
"dynamodb",
|
||||
"ec2",
|
||||
"glacier",
|
||||
"s3",
|
||||
"sdk"
|
||||
],
|
||||
"time": "2020-05-04T18:13:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "defuse/php-encryption",
|
||||
"version": "v2.2.1",
|
||||
@@ -1881,6 +1965,100 @@
|
||||
],
|
||||
"time": "2020-04-16T13:21:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem-aws-s3-v3",
|
||||
"version": "1.0.24",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
|
||||
"reference": "4382036bde5dc926f9b8b337e5bdb15e5ec7b570"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/4382036bde5dc926f9b8b337e5bdb15e5ec7b570",
|
||||
"reference": "4382036bde5dc926f9b8b337e5bdb15e5ec7b570",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"aws/aws-sdk-php": "^3.0.0",
|
||||
"league/flysystem": "^1.0.40",
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"henrikbjorn/phpspec-code-coverage": "~1.0.1",
|
||||
"phpspec/phpspec": "^2.0.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"League\\Flysystem\\AwsS3v3\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Frank de Jonge",
|
||||
"email": "info@frenky.net"
|
||||
}
|
||||
],
|
||||
"description": "Flysystem adapter for the AWS S3 SDK v3.x",
|
||||
"time": "2020-02-23T13:31:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem-cached-adapter",
|
||||
"version": "1.0.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem-cached-adapter.git",
|
||||
"reference": "08ef74e9be88100807a3b92cc9048a312bf01d6f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/08ef74e9be88100807a3b92cc9048a312bf01d6f",
|
||||
"reference": "08ef74e9be88100807a3b92cc9048a312bf01d6f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"league/flysystem": "~1.0",
|
||||
"psr/cache": "^1.0.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "~0.9",
|
||||
"phpspec/phpspec": "^3.4",
|
||||
"phpunit/phpunit": "^5.7",
|
||||
"predis/predis": "~1.0",
|
||||
"tedivm/stash": "~0.12"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-phpredis": "Pure C implemented extension for PHP"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"League\\Flysystem\\Cached\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "frankdejonge",
|
||||
"email": "info@frenky.net"
|
||||
}
|
||||
],
|
||||
"description": "An adapter decorator to enable meta-data caching.",
|
||||
"time": "2018-07-09T20:51:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/oauth2-server",
|
||||
"version": "8.1.0",
|
||||
@@ -2039,6 +2217,63 @@
|
||||
],
|
||||
"time": "2019-12-20T14:22:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mtdowling/jmespath.php",
|
||||
"version": "2.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jmespath/jmespath.php.git",
|
||||
"reference": "52168cb9472de06979613d365c7f1ab8798be895"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/52168cb9472de06979613d365c7f1ab8798be895",
|
||||
"reference": "52168cb9472de06979613d365c7f1ab8798be895",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4.0",
|
||||
"symfony/polyfill-mbstring": "^1.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/xdebug-handler": "^1.2",
|
||||
"phpunit/phpunit": "^4.8.36|^7.5.15"
|
||||
},
|
||||
"bin": [
|
||||
"bin/jp.php"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"JmesPath\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/JmesPath.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "mtdowling@gmail.com",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
}
|
||||
],
|
||||
"description": "Declaratively specify how to extract elements from a JSON document",
|
||||
"keywords": [
|
||||
"json",
|
||||
"jsonpath"
|
||||
],
|
||||
"time": "2019-12-30T18:03:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "2.33.0",
|
||||
@@ -2528,6 +2763,52 @@
|
||||
],
|
||||
"time": "2020-04-04T23:17:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/cache.git",
|
||||
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
|
||||
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Cache\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for caching libraries",
|
||||
"keywords": [
|
||||
"cache",
|
||||
"psr",
|
||||
"psr-6"
|
||||
],
|
||||
"time": "2016-08-06T20:24:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
"version": "1.0.0",
|
||||
|
||||
@@ -64,6 +64,15 @@ return [
|
||||
'url' => env('AWS_URL'),
|
||||
],
|
||||
|
||||
'spaces' => [
|
||||
'driver' => 's3',
|
||||
'key' => env('DO_SPACES_KEY'),
|
||||
'secret' => env('DO_SPACES_SECRET'),
|
||||
'endpoint' => env('DO_SPACES_ENDPOINT'),
|
||||
'region' => env('DO_SPACES_REGION'),
|
||||
'bucket' => env('DO_SPACES_BUCKET'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
return [
|
||||
|
||||
'version' => '1.4.2',
|
||||
|
||||
// Your app name
|
||||
'app_name' => 'VueFileManager',
|
||||
|
||||
|
||||
2
public/js/main.js
vendored
2
public/js/main.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,6 +1,9 @@
|
||||
<template>
|
||||
<div id="vue-file-manager" :class="appSize">
|
||||
|
||||
<!--System alerts-->
|
||||
<Alert />
|
||||
|
||||
<div id="application-wrapper" v-if="layout === 'authorized'">
|
||||
|
||||
<!--Share Item setup-->
|
||||
@@ -10,15 +13,9 @@
|
||||
<!--Move item setup-->
|
||||
<MoveItem />
|
||||
|
||||
<!--System alerts-->
|
||||
<Alert />
|
||||
|
||||
<!--Mobile Menu-->
|
||||
<MobileMenu />
|
||||
|
||||
<!--Background vignette-->
|
||||
<Vignette />
|
||||
|
||||
<!--Navigation Sidebar-->
|
||||
<Sidebar/>
|
||||
|
||||
@@ -27,6 +24,9 @@
|
||||
</div>
|
||||
|
||||
<router-view v-if="layout === 'unauthorized'"/>
|
||||
|
||||
<!--Background vignette-->
|
||||
<Vignette />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
|
||||
.message {
|
||||
@include font-size(16);
|
||||
color: #8b8f9a;
|
||||
color: #333;
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
this.item = undefined
|
||||
},
|
||||
showContextMenu(event, item) {
|
||||
let VerticalOffsetArea = item ? this.$refs.list.children.length * 50 : 50
|
||||
let VerticalOffsetArea = item && this.$refs.list.children ? this.$refs.list.children.length * 50 : 50
|
||||
let HorizontalOffsetArea = 190
|
||||
|
||||
let container = document.getElementById('files-view')
|
||||
|
||||
@@ -18,8 +18,7 @@
|
||||
<p v-if="$checkPermission(['master', 'editor'])" class="description">{{ $t('empty_page.description') }}</p>
|
||||
<ButtonUpload
|
||||
v-if="$checkPermission(['master', 'editor'])"
|
||||
@input.native="$uploadFiles(files)"
|
||||
v-model="files"
|
||||
@input.native="$uploadFiles"
|
||||
button-style="theme"
|
||||
>
|
||||
{{ $t('empty_page.call_to_action') }}
|
||||
@@ -49,12 +48,7 @@
|
||||
computed: {
|
||||
...mapGetters(['data', 'isLoading', 'currentFolder']),
|
||||
isEmpty() {
|
||||
return this.data.length == 0
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
files: undefined
|
||||
return this.data && this.data.length == 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,9 @@
|
||||
// If is mobile, then go to user settings page, else, open menu
|
||||
if ( this.isSmallAppSize ) {
|
||||
|
||||
events.$emit('show:sidebar')
|
||||
this.$router.push({name: 'Profile'})
|
||||
|
||||
} else {
|
||||
|
||||
this.isOpenedMenu = !this.isOpenedMenu
|
||||
|
||||
18
resources/js/helpers.js
vendored
18
resources/js/helpers.js
vendored
@@ -66,7 +66,7 @@ const Helpers = {
|
||||
return
|
||||
}
|
||||
|
||||
let fileCount = files.length
|
||||
let fileCount = files ? files.length : 0
|
||||
let fileCountSucceed = 1
|
||||
|
||||
store.commit('UPDATE_FILE_COUNT_PROGRESS', {
|
||||
@@ -114,6 +114,14 @@ const Helpers = {
|
||||
message: this.$t('popup_exceed_limit.message')
|
||||
})
|
||||
|
||||
} else if (error.response.status === 413) {
|
||||
|
||||
events.$emit('alert:open', {
|
||||
emoji: '😟',
|
||||
title: this.$t('popup_paylod_error.title'),
|
||||
message: this.$t('popup_paylod_error.message')
|
||||
})
|
||||
|
||||
} else {
|
||||
|
||||
// Show error message
|
||||
@@ -189,6 +197,14 @@ const Helpers = {
|
||||
message: this.$t('popup_exceed_limit.message')
|
||||
})
|
||||
|
||||
} else if (error.response.status === 413) {
|
||||
|
||||
events.$emit('alert:open', {
|
||||
emoji: '😟',
|
||||
title: this.$t('popup_paylod_error.title'),
|
||||
message: this.$t('popup_paylod_error.message')
|
||||
})
|
||||
|
||||
} else {
|
||||
|
||||
// Show error message
|
||||
|
||||
1
resources/js/i18n/index.js
vendored
1
resources/js/i18n/index.js
vendored
@@ -3,6 +3,7 @@ import VueI18n from 'vue-i18n';
|
||||
|
||||
import en from './lang/en.json'
|
||||
//import sk from './lang/sk.json'
|
||||
//import cn from './lang/cn.json'
|
||||
|
||||
Vue.use(VueI18n);
|
||||
|
||||
|
||||
229
resources/js/i18n/lang/cn.json
Normal file
229
resources/js/i18n/lang/cn.json
Normal file
@@ -0,0 +1,229 @@
|
||||
{
|
||||
"routes": {
|
||||
"create_new_password": "创建新密码"
|
||||
},
|
||||
"profile": {
|
||||
"page_title": "用户信息",
|
||||
"store_pass": "保存您的密码",
|
||||
"change_pass": "修改您的密码",
|
||||
"profile_info": "用户信息",
|
||||
"photo_description": "修改您的头像",
|
||||
"photo_supported": "支持的格式 .png, .jpg, .jpeg."
|
||||
},
|
||||
"page_registration": {
|
||||
"title": "创建一个新用户",
|
||||
"subtitle": "填写所有内容进行创建",
|
||||
"label_email": "邮箱:",
|
||||
"placeholder_email": "键入您的邮箱地址",
|
||||
"label_name": "全名:",
|
||||
"placeholder_name": "键入您的全名",
|
||||
"label_pass": "创建密码:",
|
||||
"placeholder_pass": "键入新密码",
|
||||
"label_confirm_pass": "确认密码:",
|
||||
"placeholder_confirm_pass": "请重复输入一遍密码",
|
||||
"button_create_account": "创建账户",
|
||||
"have_an_account": "您之前有过账户了么?"
|
||||
},
|
||||
"page_shared": {
|
||||
"subtitle": "请输入密码后得到分享链接",
|
||||
"title": "您的分享链接已被保护",
|
||||
"placeholder_pass": "输入密码",
|
||||
"download_file": "下载文件",
|
||||
"submit": "提交"
|
||||
},
|
||||
"page_shared_404": {
|
||||
"subtitle": "您要找的内容可能已经被删除了。",
|
||||
"title": "没有找到文件"
|
||||
},
|
||||
"page_create_password": {
|
||||
"title": "只需一步进行登录",
|
||||
"subtitle": "在此创建您的新密码",
|
||||
"button_update": "更新密码",
|
||||
"label_email": "邮箱:",
|
||||
"label_new_pass": "键入新密码",
|
||||
"label_confirm_pass": "确认密码"
|
||||
},
|
||||
"page_forgotten_password": {
|
||||
"title": "忘记密码?",
|
||||
"subtitle": "通过邮箱获得重置链接:",
|
||||
"button_get_link": "获得链接",
|
||||
"password_remember_text": "还记得住您的密码么?",
|
||||
"password_remember_button": "登录。",
|
||||
"pass_sennded_title": "感谢!",
|
||||
"pass_sennded_subtitle": "我们为您发送了一封确认邮件!",
|
||||
"pass_reseted_title": "太棒了!",
|
||||
"pass_reseted_subtitle": "您的密码被成功重置。",
|
||||
"pass_reseted_signin": "登录"
|
||||
},
|
||||
"page_sign_in": {
|
||||
"title": "您是 {name}?",
|
||||
"subtitle": "请用您的密码登录",
|
||||
"placeholder_password": "键入密码",
|
||||
"button_log_in": "登录",
|
||||
"password_reset_text": "忘记密码?",
|
||||
"password_reset_button": "重置密码。"
|
||||
},
|
||||
"page_login": {
|
||||
"title": "欢迎回来!",
|
||||
"subtitle": "请输入您的邮箱来登录。",
|
||||
"placeholder_email": "键入您的邮箱",
|
||||
"button_next": "下一步",
|
||||
"registration_text": "没有帐号?",
|
||||
"registration_button": "注册帐号"
|
||||
},
|
||||
"uploading": {
|
||||
"progress": "上传文件 {current}/{total}"
|
||||
},
|
||||
"inputs": {
|
||||
"placeholder_search_files": "搜索文件"
|
||||
},
|
||||
"messages": {
|
||||
"nothing_to_preview": "没有任何信息可以预览。",
|
||||
"nothing_was_found": "没找到任何信息"
|
||||
},
|
||||
"locations": {
|
||||
"shared": "已分享",
|
||||
"trash": "垃圾箱",
|
||||
"home": "首页"
|
||||
},
|
||||
"file_detail": {
|
||||
"author_participant": "公共参与者",
|
||||
"created_at": "创建于",
|
||||
"shared": "分享",
|
||||
"author": "作者",
|
||||
"where": "地址",
|
||||
"size": "大小"
|
||||
},
|
||||
"empty_page": {
|
||||
"description": "拖动文件至此处,或使用上传按钮",
|
||||
"call_to_action": "文件上传",
|
||||
"title": "这里什么都还没有"
|
||||
},
|
||||
"alerts": {
|
||||
"error_confirm": "哦,出了个问题!",
|
||||
"success_confirm": "太棒了!"
|
||||
},
|
||||
"validation_errors": {
|
||||
"wrong_image": "您可能上传了一个错误的文件!",
|
||||
"incorrect_password": "不好意思,您输入的密码可能有误!"
|
||||
},
|
||||
"pronouns": {
|
||||
"of": "of"
|
||||
},
|
||||
"storage": {
|
||||
"used": "{used} 在 {capacity} 已使用",
|
||||
"title": "存储空间"
|
||||
},
|
||||
"folder": {
|
||||
"item_counts": "{count} 个文件 | {count} 个文件",
|
||||
"empty": "空的"
|
||||
},
|
||||
"item_thumbnail": {
|
||||
"original_location": "原始位置",
|
||||
"deleted_at": "删除时间: {time}"
|
||||
},
|
||||
"preview_type": {
|
||||
"list": "列表",
|
||||
"grid": "方块"
|
||||
},
|
||||
"context_menu": {
|
||||
"remove_from_favourites": "移出收藏",
|
||||
"add_to_favourites": "添加进收藏",
|
||||
"profile_settings": "个人信息编辑",
|
||||
"create_folder": "创建文件夹",
|
||||
"empty_trash": "清空垃圾箱",
|
||||
"share_edit": "编辑分享设定",
|
||||
"add_folder": "添加文件夹",
|
||||
"download": "下载",
|
||||
"log_out": "注销",
|
||||
"restore": "恢复文件",
|
||||
"upload": "上传",
|
||||
"detail": "详情",
|
||||
"rename": "重命名",
|
||||
"delete": "删除",
|
||||
"share": "分享",
|
||||
"move": "移动"
|
||||
},
|
||||
"sidebar": {
|
||||
"shared": "已分享",
|
||||
"locations": "位置",
|
||||
"favourites": "收藏",
|
||||
"favourites_empty": "将您想要收藏的文件夹拖动至此",
|
||||
"latest": "最新上传",
|
||||
"latest_empty": "您并没有最新上传的记录"
|
||||
},
|
||||
"popup_rename": {
|
||||
"title": "修改文件/夹名称"
|
||||
},
|
||||
"popup_create_folder": {
|
||||
"title": "请填入新文件夹名称",
|
||||
"folder_default_name": "新文件夹"
|
||||
},
|
||||
"popup_move_item": {
|
||||
"submit": "移动文件/夹",
|
||||
"title": "移动文件/夹",
|
||||
"cancel": "取消"
|
||||
},
|
||||
"popup_pass_changed": {
|
||||
"title": "您的密码已经改变!",
|
||||
"message": "现在,您拥有一个新的密码。"
|
||||
},
|
||||
"popup_trashed": {
|
||||
"title": "您的垃圾箱已清空!",
|
||||
"message": "现在,您的垃圾箱已经被完全清空。"
|
||||
},
|
||||
"popup_error": {
|
||||
"title": "wow,好像有什么东西坏掉了!",
|
||||
"message": "有什么东西坏掉了,请联系我们,引导我们修复。"
|
||||
},
|
||||
"popup_exceed_limit": {
|
||||
"title": "wow,您已经超过了存储上线。",
|
||||
"message": "请联系我们来增加您的存储空间。"
|
||||
},
|
||||
"popup_share_create": {
|
||||
"title": "分享您的 {item}"
|
||||
},
|
||||
"popup_share_edit": {
|
||||
"title": "更新分享设定",
|
||||
"change_pass": "更改密码",
|
||||
"save": "保存更改",
|
||||
"stop": "停止风险",
|
||||
"confirm": "确认"
|
||||
},
|
||||
"shared": {
|
||||
"empty_shared": "您还没有分享任何内容",
|
||||
"editor": "可以编辑和上传文件",
|
||||
"visitor": "仅可以查看或下载文件",
|
||||
"can_download": "仅可以下载"
|
||||
},
|
||||
"shared_form": {
|
||||
"placeholder_permission": "请设置权限",
|
||||
"label_password_protection": "密码保护",
|
||||
"button_done": "太好了!",
|
||||
"button_generate": "生成分享链接",
|
||||
"label_permission": "权限",
|
||||
"label_shared_url": "分享链接"
|
||||
},
|
||||
"actions": {
|
||||
"create_folder": "穿件文件夹",
|
||||
"preview": "更改预览",
|
||||
"upload": "上传文件",
|
||||
"delete": "删除内容"
|
||||
},
|
||||
"types": {
|
||||
"folder": "文件夹",
|
||||
"file": "文件"
|
||||
},
|
||||
"popup_passport_error": {
|
||||
"title": "Invalid Passport Grand Client",
|
||||
"message": "Probably you didn't generated Passport Grant client or you didn't set up passport credentials in your .env file. Please follow install instructions."
|
||||
},
|
||||
"popup_signup_error": {
|
||||
"title": "Server Error",
|
||||
"message": "Please check your database connection if everything works correctly."
|
||||
},
|
||||
"popup_paylod_error": {
|
||||
"title": "File is too large",
|
||||
"message": "Sorry, your file is too large and can't be uploaded"
|
||||
}
|
||||
}
|
||||
@@ -213,5 +213,17 @@
|
||||
"types": {
|
||||
"folder": "Folder",
|
||||
"file": "File"
|
||||
},
|
||||
"popup_passport_error": {
|
||||
"title": "Invalid Passport Grand Client",
|
||||
"message": "Probably you didn't generated Passport Grant client or you didn't set up passport credentials in your .env file. Please follow install instructions."
|
||||
},
|
||||
"popup_signup_error": {
|
||||
"title": "Server Error",
|
||||
"message": "Please check your database connection if everything works correctly."
|
||||
},
|
||||
"popup_paylod_error": {
|
||||
"title": "File is too large",
|
||||
"message": "Sorry, your file is too large and can't be uploaded"
|
||||
}
|
||||
}
|
||||
@@ -64,7 +64,7 @@
|
||||
"password_reset_button": "Resetovať heslo."
|
||||
},
|
||||
"page_login": {
|
||||
"title": "Vitaj späť!",
|
||||
"title": "Vitajte späť!",
|
||||
"subtitle": "Prosím, vložte svoj email pre prihlásenie:",
|
||||
"placeholder_email": "Napíšte svoj E-mail",
|
||||
"button_next": "Ďalší krok",
|
||||
@@ -213,5 +213,17 @@
|
||||
"types": {
|
||||
"folder": "Priečinok",
|
||||
"file": "Súbor"
|
||||
},
|
||||
"popup_passport_error": {
|
||||
"title": "Nesprávny Passport Grand Client",
|
||||
"message": "Pravdebodobne ste nespravne vygenerovali Passport Grant client alebo ste nenastavili udaje správne. Prosím následujte inštalačné inštrukcie."
|
||||
},
|
||||
"popup_signup_error": {
|
||||
"title": "Chyba serveru",
|
||||
"message": "Prosím skontrolujte databázove spojenie, či všetko funguje správne."
|
||||
},
|
||||
"popup_paylod_error": {
|
||||
"title": "Súbor je príliš veľký",
|
||||
"message": "Prepáčte, súbor je príliš veľký a nemôže byť nahraný."
|
||||
}
|
||||
}
|
||||
@@ -66,6 +66,7 @@
|
||||
import AuthButton from '@/components/Auth/AuthButton'
|
||||
import {required} from 'vee-validate/dist/rules'
|
||||
import {mapGetters} from 'vuex'
|
||||
import {events} from "@/bus"
|
||||
import axios from 'axios'
|
||||
|
||||
export default {
|
||||
@@ -138,6 +139,15 @@
|
||||
});
|
||||
}
|
||||
|
||||
if (error.response.status == 500) {
|
||||
|
||||
events.$emit('alert:open', {
|
||||
emoji: '🤔',
|
||||
title: this.$t('popup_signup_error.title'),
|
||||
message: this.$t('popup_signup_error.message')
|
||||
})
|
||||
}
|
||||
|
||||
// End loading
|
||||
this.isLoading = false
|
||||
})
|
||||
@@ -178,6 +188,17 @@
|
||||
});
|
||||
}
|
||||
|
||||
if (error.response.status == 401) {
|
||||
|
||||
if (error.response.data.error === 'invalid_client') {
|
||||
events.$emit('alert:open', {
|
||||
emoji: '🤔',
|
||||
title: this.$t('popup_passport_error.title'),
|
||||
message: this.$t('popup_passport_error.message')
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// End loading
|
||||
this.isLoading = false
|
||||
})
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
import AuthButton from '@/components/Auth/AuthButton'
|
||||
import {required} from 'vee-validate/dist/rules'
|
||||
import {mapGetters} from 'vuex'
|
||||
import {events} from "@/bus"
|
||||
import axios from 'axios'
|
||||
|
||||
export default {
|
||||
@@ -125,6 +126,26 @@
|
||||
})
|
||||
.catch(error => {
|
||||
|
||||
if (error.response.status == 401) {
|
||||
|
||||
if (error.response.data.error === 'invalid_client') {
|
||||
events.$emit('alert:open', {
|
||||
emoji: '🤔',
|
||||
title: this.$t('popup_passport_error.title'),
|
||||
message: this.$t('popup_passport_error.message')
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (error.response.status == 500) {
|
||||
|
||||
events.$emit('alert:open', {
|
||||
emoji: '🤔',
|
||||
title: this.$t('popup_signup_error.title'),
|
||||
message: this.$t('popup_signup_error.message')
|
||||
})
|
||||
}
|
||||
|
||||
if (error.response.status == 422) {
|
||||
|
||||
if (error.response.data.errors['email']) {
|
||||
|
||||
17
resources/lang/cn/auth.php
Normal file
17
resources/lang/cn/auth.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => '用户名或密码错误。',
|
||||
'throttle' => '您的尝试登录次数过多,请 :seconds 秒后再试。',
|
||||
];
|
||||
20
resources/lang/cn/passwords.php
Normal file
20
resources/lang/cn/passwords.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reminder Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => '密码至少是八位字符并且应与确认密码匹配。',
|
||||
'reset' => '密码重置成功!',
|
||||
'sent' => '密码重置邮件已发送!',
|
||||
'token' => '密码重置令牌无效。',
|
||||
'user' => '找不到该邮箱对应的用户。',
|
||||
];
|
||||
179
resources/lang/cn/validation.php
Normal file
179
resources/lang/cn/validation.php
Normal file
@@ -0,0 +1,179 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => '您必须接受 :attribute。',
|
||||
'active_url' => ':attribute 不是一个有效的网址。',
|
||||
'after' => ':attribute 必须要晚于 :date。',
|
||||
'after_or_equal' => ':attribute 必须要等于 :date 或更晚。',
|
||||
'alpha' => ':attribute 只能由字母组成。',
|
||||
'alpha_dash' => ':attribute 只能由字母、数字、短划线(-)和下划线(_)组成。',
|
||||
'alpha_num' => ':attribute 只能由字母和数字组成。',
|
||||
'array' => ':attribute 必须是一个数组。',
|
||||
'before' => ':attribute 必须要早于 :date。',
|
||||
'before_or_equal' => ':attribute 必须要等于 :date 或更早。',
|
||||
'between' => [
|
||||
'numeric' => ':attribute 必须介于 :min - :max 之间。',
|
||||
'file' => ':attribute 必须介于 :min - :max KB 之间。',
|
||||
'string' => ':attribute 必须介于 :min - :max 个字符之间。',
|
||||
'array' => ':attribute 必须只有 :min - :max 个单元。',
|
||||
],
|
||||
'boolean' => ':attribute 必须为布尔值。',
|
||||
'confirmed' => ':attribute 两次输入不一致。',
|
||||
'date' => ':attribute 不是一个有效的日期。',
|
||||
'date_equals' => ':attribute 必须要等于 :date。',
|
||||
'date_format' => ':attribute 的格式必须为 :format。',
|
||||
'different' => ':attribute 和 :other 必须不同。',
|
||||
'digits' => ':attribute 必须是 :digits 位的数字。',
|
||||
'digits_between' => ':attribute 必须是介于 :min 和 :max 位的数字。',
|
||||
'dimensions' => ':attribute 图片尺寸不正确。',
|
||||
'distinct' => ':attribute 已经存在。',
|
||||
'email' => ':attribute 不是一个合法的邮箱。',
|
||||
'ends_with' => ':attribute 结尾必须包含下列之一::values',
|
||||
'exists' => ':attribute 不存在。',
|
||||
'file' => ':attribute 必须是文件。',
|
||||
'filled' => ':attribute 不能为空。',
|
||||
'gt' => [
|
||||
'numeric' => ':attribute 必须大于 :value。',
|
||||
'file' => ':attribute 必须大于 :value KB。',
|
||||
'string' => ':attribute 必须多于 :value 个字符。',
|
||||
'array' => ':attribute 必须多于 :value 个元素。',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => ':attribute 必须大于或等于 :value。',
|
||||
'file' => ':attribute 必须大于或等于 :value KB。',
|
||||
'string' => ':attribute 必须多于或等于 :value 个字符。',
|
||||
'array' => ':attribute 必须多于或等于 :value 个元素。',
|
||||
],
|
||||
'image' => ':attribute 必须是图片。',
|
||||
'in' => '已选的属性 :attribute 非法。',
|
||||
'in_array' => ':attribute 没有在 :other 中。',
|
||||
'integer' => ':attribute 必须是整数。',
|
||||
'ip' => ':attribute 必须是有效的 IP 地址。',
|
||||
'ipv4' => ':attribute 必须是有效的 IPv4 地址。',
|
||||
'ipv6' => ':attribute 必须是有效的 IPv6 地址。',
|
||||
'json' => ':attribute 必须是正确的 JSON 格式。',
|
||||
'lt' => [
|
||||
'numeric' => ':attribute 必须小于 :value。',
|
||||
'file' => ':attribute 必须小于 :value KB。',
|
||||
'string' => ':attribute 必须少于 :value 个字符。',
|
||||
'array' => ':attribute 必须少于 :value 个元素。',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => ':attribute 必须小于或等于 :value。',
|
||||
'file' => ':attribute 必须小于或等于 :value KB。',
|
||||
'string' => ':attribute 必须少于或等于 :value 个字符。',
|
||||
'array' => ':attribute 必须少于或等于 :value 个元素。',
|
||||
],
|
||||
'max' => [
|
||||
'numeric' => ':attribute 不能大于 :max。',
|
||||
'file' => ':attribute 不能大于 :max KB。',
|
||||
'string' => ':attribute 不能大于 :max 个字符。',
|
||||
'array' => ':attribute 最多只有 :max 个单元。',
|
||||
],
|
||||
'mimes' => ':attribute 必须是一个 :values 类型的文件。',
|
||||
'mimetypes' => ':attribute 必须是一个 :values 类型的文件。',
|
||||
'min' => [
|
||||
'numeric' => ':attribute 必须大于等于 :min。',
|
||||
'file' => ':attribute 大小不能小于 :min KB。',
|
||||
'string' => ':attribute 至少为 :min 个字符。',
|
||||
'array' => ':attribute 至少有 :min 个单元。',
|
||||
],
|
||||
'not_in' => '已选的属性 :attribute 非法。',
|
||||
'not_regex' => ':attribute 的格式错误。',
|
||||
'numeric' => ':attribute 必须是一个数字。',
|
||||
'password' => '密码错误',
|
||||
'present' => ':attribute 必须存在。',
|
||||
'regex' => ':attribute 格式不正确。',
|
||||
'required' => ':attribute 不能为空。',
|
||||
'required_if' => '当 :other 为 :value 时 :attribute 不能为空。',
|
||||
'required_unless' => '当 :other 不为 :values 时 :attribute 不能为空。',
|
||||
'required_with' => '当 :values 存在时 :attribute 不能为空。',
|
||||
'required_with_all' => '当 :values 存在时 :attribute 不能为空。',
|
||||
'required_without' => '当 :values 不存在时 :attribute 不能为空。',
|
||||
'required_without_all' => '当 :values 都不存在时 :attribute 不能为空。',
|
||||
'same' => ':attribute 和 :other 必须相同。',
|
||||
'size' => [
|
||||
'numeric' => ':attribute 大小必须为 :size。',
|
||||
'file' => ':attribute 大小必须为 :size KB。',
|
||||
'string' => ':attribute 必须是 :size 个字符。',
|
||||
'array' => ':attribute 必须为 :size 个单元。',
|
||||
],
|
||||
'starts_with' => ':attribute 必须以 :values 为开头。',
|
||||
'string' => ':attribute 必须是一个字符串。',
|
||||
'timezone' => ':attribute 必须是一个合法的时区值。',
|
||||
'unique' => ':attribute 已经存在。',
|
||||
'uploaded' => ':attribute 上传失败。',
|
||||
'url' => ':attribute 格式不正确。',
|
||||
'uuid' => ':attribute 必须是有效的 UUID。',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap our attribute placeholder
|
||||
| with something more reader friendly such as "E-Mail Address" instead
|
||||
| of "email". This simply helps us make our message more expressive.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [
|
||||
'name' => '名称',
|
||||
'username' => '用户名',
|
||||
'email' => '邮箱',
|
||||
'first_name' => '名',
|
||||
'last_name' => '姓',
|
||||
'password' => '密码',
|
||||
'password_confirmation' => '确认密码',
|
||||
'city' => '城市',
|
||||
'country' => '国家',
|
||||
'address' => '地址',
|
||||
'phone' => '电话',
|
||||
'mobile' => '手机',
|
||||
'age' => '年龄',
|
||||
'sex' => '性别',
|
||||
'gender' => '性别',
|
||||
'day' => '天',
|
||||
'month' => '月',
|
||||
'year' => '年',
|
||||
'hour' => '时',
|
||||
'minute' => '分',
|
||||
'second' => '秒',
|
||||
'title' => '标题',
|
||||
'content' => '内容',
|
||||
'description' => '描述',
|
||||
'excerpt' => '摘要',
|
||||
'date' => '日期',
|
||||
'time' => '时间',
|
||||
'available' => '可用的',
|
||||
'size' => '大小',
|
||||
],
|
||||
];
|
||||
9
resources/lang/cn/vuefilemanager.php
Normal file
9
resources/lang/cn/vuefilemanager.php
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'app_description' => '利用 VueFileManager 创建您自己的私有云,由 Laravel and Vue 驱动',
|
||||
'user_not_fount' => '我们没有找到此邮箱对应的用户信息。',
|
||||
'incorrect_password' => '不好意思,您的密码好像不正确。',
|
||||
'time' => '%d. %B. %Y 于 %H:%M',
|
||||
'home' => '首页',
|
||||
];
|
||||
@@ -1,8 +1,9 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'app_description' => 'Make your own Private Cloud with VueFileManager client powered by Laravel and Vue',
|
||||
'user_not_fount' => 'We can\'t find a user with that e-mail address.',
|
||||
'home' => 'Home',
|
||||
'time' => '%d. %B. %Y at %H:%M',
|
||||
'incorrect_password' => 'Sorry, your password is incorrect.',
|
||||
'time' => '%d. %B. %Y at %H:%M',
|
||||
'home' => 'Home',
|
||||
];
|
||||
@@ -1,8 +1,9 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'app_description' => 'Vytvor si svoj vlastný privátny cloud s VueFileManager klientom poháňaným Laravelom a Vue',
|
||||
'user_not_fount' => 'Uživateľ s touto emailovou adresou sa nenašiel.',
|
||||
'home' => 'Domov',
|
||||
'time' => '%d. %B. %Y o %H:%M',
|
||||
'incorrect_password' => 'Prepáč, zadané heslo je nesprávne',
|
||||
'time' => '%d. %B. %Y o %H:%M',
|
||||
'home' => 'Domov',
|
||||
];
|
||||
@@ -1,19 +1,23 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="Manage your folders and files with Vue File Manager client powered by Laravel API endpoint.">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
|
||||
<meta name="description" content="{{ __('vuefilemanager.app_description') }}">
|
||||
|
||||
<title>VueFileManager | Make your own Private Cloud with VueFileManager client powered by Laravel and Vue</title>
|
||||
<title>{{ config('vuefilemanager.app_name') }} | {{ __('vuefilemanager.app_description') }}</title>
|
||||
|
||||
<link rel="icon" href="{{ asset('favicon.ico') }}">
|
||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||
<link rel="icon" href="{{ asset('favicon.ico') }}?v={{ get_version() }}">
|
||||
<link href="{{ asset('css/app.css') }}?v={{ get_version() }}" rel="stylesheet">
|
||||
|
||||
{{-- Apple Mobile Web App--}}
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="white">
|
||||
<meta name="apple-mobile-web-app-title" content="{{ config('vuefilemanager.app_name') }}">
|
||||
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="{{ asset('assets/images/app-icon.png') }}">
|
||||
|
||||
{{--Format Detection--}}
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta name="format-detection" content="address=no">
|
||||
</head>
|
||||
@@ -34,7 +38,7 @@
|
||||
</script>
|
||||
|
||||
@if(env('APP_ENV') !== 'local')
|
||||
<script src="{{ asset('js/main.js') }}"></script>
|
||||
<script src="{{ asset('js/main.js') }}?v={{ get_version() }}"></script>
|
||||
@else
|
||||
<script src="{{ mix('js/main.js') }}"></script>
|
||||
@endif
|
||||
|
||||
6
webpack.mix.js
vendored
6
webpack.mix.js
vendored
@@ -23,10 +23,4 @@ mix.js('resources/js/main.js', 'public/js')
|
||||
}
|
||||
},
|
||||
})
|
||||
/*.options({
|
||||
hmrOptions: {
|
||||
host: '192.168.1.131',
|
||||
port: '8080'
|
||||
},
|
||||
})*/
|
||||
.disableNotifications();
|
||||
|
||||
Reference in New Issue
Block a user