diff --git a/app/Http/Controllers/Api/Auth/ResetPasswordController.php b/app/Http/Controllers/Api/Auth/ResetPasswordController.php index f4365420..681384f1 100644 --- a/app/Http/Controllers/Api/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Api/Auth/ResetPasswordController.php @@ -25,7 +25,7 @@ class ResetPasswordController extends Controller if (auth('api')->check()) { $user = auth('api')->user(); - $user->password = Hash::make($request->password); + $user->password = \Hash::make($request->password); $user->save(); return \MessageResponse::success('Success Change Password'); } diff --git a/app/Http/Controllers/MedicalCenterController.php b/app/Http/Controllers/MedicalCenterController.php index 572a7516..b42482b7 100644 --- a/app/Http/Controllers/MedicalCenterController.php +++ b/app/Http/Controllers/MedicalCenterController.php @@ -22,8 +22,8 @@ class MedicalCenterController extends Controller public function store(StoreMedicalCenterRequest $request) { - $MedicalCenter = MedicalCenter::create($request->all()); - return response()->json(trans('messages.success')); + MedicalCenter::create($request->all()); + return \MessageResponse::success(trans('messages.success')); } public function show($id) @@ -32,22 +32,24 @@ class MedicalCenterController extends Controller // return response()->json(['MedicalCenter' => $MedicalCenter]); } - public function edit($id) + public function edit(MedicalCenter $MedicalCenter) { - $MedicalCenter = MedicalCenter::with('users')->findOrFail($id); - return response()->json(['MedicalCenter' => $MedicalCenter]); + $MedicalCenter = $MedicalCenter->load('users'); + return \MessageResponse::data($MedicalCenter); } public function update(StoreMedicalCenterRequest $request, MedicalCenter $MedicalCenter) { $MedicalCenter->update($request->all()); - return response()->json(trans('messages.success')); + return \MessageResponse::success(trans('messages.success')); } public function destroy(MedicalCenter $MedicalCenter) { if ($MedicalCenter->users->count() == 0) { $MedicalCenter->delete(); + return \MessageResponse::success(trans('messages.success')); } + return \MessageResponse::error(trans('messages.failed')); } } diff --git a/app/Http/Controllers/TestResultController.php b/app/Http/Controllers/TestResultController.php index 5bad7e72..423f28c7 100644 --- a/app/Http/Controllers/TestResultController.php +++ b/app/Http/Controllers/TestResultController.php @@ -8,12 +8,20 @@ use App\Http\Requests\StoreTestResultRequest; use App\TestResult; use App\InputValue; use App\Input; +use App\Gallery; +use App\Uploadable; +use Intervention\Image\ImageManagerStatic as Image; +use Illuminate\Support\Facades\Storage; class TestResultController extends Controller { - public function index() + public function index(Request $request) { - $TestResult = TestResult::with('test_type', 'user', 'user.medical_center')->paginate(10); + $TestResult = TestResult::with('test_type', 'user', 'user.medical_center') + ->when($request->has('verified'), function ($query) use ($request) + { + return $query->where('verified', $request->verified); + })->paginate(10); return \MessageResponse::data($TestResult); } @@ -38,7 +46,6 @@ class TestResultController extends Controller public function store(StoreTestResultRequest $request) { - // dd($request->all()); try { $return_value = \DB::transaction(function () use ($request) { @@ -52,54 +59,58 @@ class TestResultController extends Controller $TestResultObj = TestResult::create($TestResult); $TestResultInfo = $request->all(); - $Inputs = Input::with('options','children','children.children')->where('test_type_id',$request->test_type_id)->get(); + $Inputs = Input::with('options','children','children.children')->whereNull('parent_id')->where('test_type_id',$request->test_type_id)->get(); - ////////////////////////////////////////////////////////////////////////////////////--2 + ///////////////////////////////////////////////////////////////////////////Inputs foreach ($Inputs as $Input) { if ($Input['type'] != 'Form') { $Value = $TestResultInfo[$Input->name]; - if ($Input['type'] == 'Checkbox') { - $Value = json_encode($Value); + + if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' ) { + + foreach ($Value as $Option) { + $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $Input->id, 'option_id' => $Option]); + } + } + else { + $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $Input->id, 'value' => $Value]); } - $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id , 'input_id' => $Input->id , 'value' => $Value]); } else { foreach ($Input->children as $InputChild) { $Value = $TestResultInfo[$InputChild->name]; - if ($InputChild['type'] == 'Checkbox') { - $Value = json_encode($Value); + + if ($InputChild['type'] == 'Checkbox' || $InputChild['type'] == 'Select') { + foreach ($Value as $Option) { + $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $InputChild->id, 'option_id' => $Option]); + } } - $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id , 'input_id' => $InputChild->id , 'value' => $Value]); + else { + $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $InputChild->id, 'value' => $Value]); + } + } - //------------------------------------------------------- - // $this->CreateChildFormValue2($Input,$TestResultObj,$TestResultInfo); - // foreach ($Input->children as $InputChild) { - // - // if ($InputChild['type'] != 'Form') { - // $Value = $TestResultInfo[$Input->name][$InputChild->name]; - // $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id , 'input_id' => $InputChild->id , 'value' => $Value]); - // } - // else { - // - // foreach ($InputChild->children as $InputChild2) { - // - // if ($InputChild2['type'] != 'Form') { - // $Value = $TestResultInfo[$Input->name][$InputChild->name][$InputChild2->name]; - // $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id , 'input_id' => $InputChild2->id , 'value' => $Value]); - // } - // else { - // - // } - // - // } - // } - // - // } - //--------------------------------------------------------- } } + ///////////////////////////////////////////////////////////////////////////Inputs + ///////////////////////////////////////////////////////////////////////////Image + if ($request->hasFile('img')) { + $Image = $request->file('img'); + $InterventionImage = Image::make($Image); + $Mime = explode('/', $InterventionImage->mime()); + + $ImageName = time().'.'.$Mime[1]; + $Path = 'uploads'.'/TestResults'.'/'.$TestResultObj->id .'/'.$ImageName; + + Storage::disk('public')->makeDirectory('TestResults'.'/'.$TestResultObj->id); + $InterventionImage->save(public_path($Path)); + + $GalleryObj = Gallery::create(['user_id' => auth('api')->user()->id, 'path' => $Path]); + $Uploadable = Uploadable::create(['uploadable_id' => $TestResultObj->id, 'uploadable_type' => 'App\TestResult', 'gallery_id' => $GalleryObj->id, 'image_role' => 'TitleImage']); + } + ///////////////////////////////////////////////////////////////////////////Image }); } catch (\Exception $e) { @@ -111,19 +122,80 @@ class TestResultController extends Controller public function show($id) { - // + $TestResult = TestResult::with('input_values', 'user')->select('result', 'verified', 'autoclave_id','user_id','id')->findOrFail($id); + $options = []; + foreach ($TestResult->input_values as $key => $value) { + $input = $value->input; + + if ($input->parent_id != null && $input->parent['type'] == 'Form') { + //----------------------------------------------------------------------FormType + if ($input->type == 'Checkbox' || $input->type == 'Select') { + $input_options = InputValue::with('option')->where('test_result_id', $TestResult->id)->where('input_id', $input->id)->get(); + $options = []; + foreach ($input_options as $input_option) { + $options[] = $input_option->option->title; + $input_values[$input->name] = $options; + } + + $children[$input->parent->name] = $input_values; + $TestResult['children'] = $children; + } + else { + $input_values = [$input->name => $value->value]; + $children[$input->parent->name] = $input_values; + $TestResult['children'] = $children; + } + //-----------------------------------------------------------------------FormType + } + else { + //-----------------------------------------------------------------------Anothertype + if ($input->type == 'Checkbox' || $input->type == 'Select') { + $input_options = InputValue::with('option')->where('test_result_id', $TestResult->id)->where('input_id', $input->id)->get(); + $options = []; + foreach ($input_options as $input_option) { + $options[] = $input_option->option->title; + } + + $values[$input->name] = $options; + $TestResult['options'] = $values; + } + else { + $inputs[$input->name] = $value->value; + $TestResult['inputs'] = $inputs; + } + //-----------------------------------------------------------------------Anothertype + } + } + + if (count($TestResult->TitleImage)) { + $TestResult['imagePath'] = $TestResult->TitleImage[0]->path; + } + return \MessageResponse::data($TestResult); } - //Todo:: pass Inputs public function edit(TestResult $TestResult) { foreach ($TestResult->input_values as $key => $value) { $input = $value->input; - $TestResult[$input->name] = $value->value; + if ($input->type == 'Checkbox' || $input->type == 'Select') { + $input_options = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $input->id)->get()->pluck('option_id')->toArray(); + $TestResult[$input->name] = $input_options; + } + else { + $TestResult[$input->name] = $value->value; + } } return \MessageResponse::data($TestResult); } + public static function storage_path($path) + { + if (starts_with($path, 'uploads/')) { + $path = substr($path, 8); + } + return $path; + } + public function update(StoreTestResultRequest $request, TestResult $TestResult) { $TestResultData = [ @@ -136,43 +208,94 @@ class TestResultController extends Controller $TestResult->update($TestResultData); $TestResultInfo = $request->all(); - $Inputs = Input::with('options','children','children.children')->where('test_type_id',$request->test_type_id)->get(); + $Inputs = Input::with('options', 'children', 'children.children')->whereNull('parent_id')->where('test_type_id',$request->test_type_id)->get(); foreach ($Inputs as $Input) { if ($Input['type'] != 'Form') { $Value = $TestResultInfo[$Input->name]; - if ($Input['type'] == 'Checkbox') { - $Value = json_encode($Value); - } - $InputValueObj = InputValue::where('test_result_id',$TestResult->id)->where('input_id', $Input['id'])->update(['value' => $Value]); + if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' ) { + + $InputOptions = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $Input->id)->get()->each->delete(); + + foreach ($Value as $Option) { + $InputValueObj = InputValue::create(['test_result_id' => $TestResult->id, 'input_id' => $Input->id, 'option_id' => $Option]); + } + } + else { + $InputValueObj = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $Input['id'])->update(['value' => $Value]); + } } else { foreach ($Input->children as $InputChild) { $Value = $TestResultInfo[$InputChild->name]; - if ($InputChild['type'] == 'Checkbox') { - $Value = json_encode($Value); + + if ($InputChild['type'] == 'Checkbox' || $InputChild['type'] == 'Select') { + $InputOptions = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $InputChild->id)->get()->each->delete(); + + foreach ($Value as $Option) { + $InputValueObj = InputValue::create(['test_result_id' => $TestResult->id, 'input_id' => $InputChild->id, 'option_id' => $Option]); + } + } + else { + $InputValueObj = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $InputChild['id'])->update(['value' => $Value]); } - $InputValueObj = InputValue::where('test_result_id',$TestResult->id)->where('input_id', $Input['id'])->update(['value' => $Value]); } } } - return \MessageResponse::success(null,trans('messages.update')); + //////////////////////////////////////////////////////////////////Image + $image = ''; + if (count($TestResult->TitleImage)) + $image = $TestResult->TitleImage[0]; + + if ($request->hasFile('img')) { + + $Image = $request->file('img'); + $InterventionImage = Image::make($Image); + $Mime = explode('/', $InterventionImage->mime()); + + $ImageName = time().'.'.$Mime[1]; + $Path = 'uploads'.'/TestResults'.'/'.$TestResult->id .'/'.$ImageName; + + Storage::disk('public')->makeDirectory('TestResults'.'/'.$TestResult->id); + $InterventionImage->save(public_path($Path)); + + + if ($image !== ''){ + Storage::disk('public')->delete(static::storage_path($image->path)); + Uploadable::where('gallery_id', $image->id)->where('uploadable_id', $TestResult->id)->where('uploadable_type', get_class($TestResult))->delete(); + + //-------------------------------------------------------- + $GalleryObj = Gallery::where('id', $image->id)->update(['path' => $Path]); + $Uploadable = Uploadable::create(['uploadable_id' => $TestResult->id, 'uploadable_type' => get_class($TestResult), 'gallery_id' => $image->id, 'image_role' => 'TitleImage']); + //-------------------------------------------------------- + + } + else { + //-------------------------------------------------------- + $GalleryObj = Gallery::create(['user_id' => auth('api')->user()->id, 'path' => $Path]); + $Uploadable = Uploadable::create(['uploadable_id' => $TestResult->id, 'uploadable_type' => 'App\TestResult', 'gallery_id' => $GalleryObj->id, 'image_role' => 'TitleImage']); + //-------------------------------------------------------- + } + } + //////////////////////////////////////////////////////////////////Image + + return \MessageResponse::success(null,trans('messages.update')); } public function destroy(TestResult $TestResult) { - if (auth('api')->user()->can('delete', $TestResult)) { - return \MessageResponse::error(trans('messages.failed')); + if (!auth('api')->user()->can('delete', $TestResult)) { + return \MessageResponse::error(trans('messages.access_denied')); } $TestResult->delete(); - return \MessageResponse::success(null, trans('messages.failed')); + return \MessageResponse::success(null, trans('messages.success')); } public function verifyTestResult(TestResult $TestResult) { - if (auth('api')->user()->can('verifyTestResult', $TestResult)) { - return \MessageResponse::error(trans('messages.failed')); + if (!auth('api')->user()->can('verifyTestResult', $TestResult)) { + return \MessageResponse::error(trans('messages.access_denied')); } if ($TestResult->verified == 'Verified') { $TestResult->verified = 'NotVerified'; @@ -180,7 +303,7 @@ class TestResultController extends Controller $TestResult->verified = 'Verified'; } $TestResult->save(); - return \MessageResponse::data($TestResult); + return \MessageResponse::success(trans('messages.success')); } } diff --git a/app/Http/Controllers/TestTypeController.php b/app/Http/Controllers/TestTypeController.php index 1a5323c5..002aebd2 100644 --- a/app/Http/Controllers/TestTypeController.php +++ b/app/Http/Controllers/TestTypeController.php @@ -48,7 +48,6 @@ class TestTypeController extends Controller } //---------------------------------------------Option return $InputObj; - } public function CreateChildForm($Input,$TestType,$InputObj) @@ -329,6 +328,9 @@ class TestTypeController extends Controller ///////////////////////////////////////////////////////////////////////////////////// public function getInputs(Request $request) { + if (auth('api')->user()->can('getInputs')) { + return \MessageResponse::error(trans('messages.failed')); + } if($request->test_result_id !== '') { $testTypeId = TestResult::find($request->test_result_id); } @@ -364,10 +366,9 @@ class TestTypeController extends Controller public function destroy(TestType $TestType) { - // if (auth('api')->user()->can('delete', $TestType)) { - // return \MessageResponse::error(trans('messages.failed')); - // } - // dd($TestType); + if (!auth('api')->user()->can('delete', $TestType)) { + return \MessageResponse::error(trans('messages.access_denied')); + } $TestType->delete(); return \MessageResponse::success(trans('messages.success')); } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 9d89aebc..e884226f 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -1,111 +1,111 @@ -paginate(10); - return \MessageResponse::data($Users); - } - - public function store(StoreUserRequest $request) - { - $UserData = [ - 'name' => $request->name , - 'cell_number' => $request->cell_number , - 'medical_center_id' => $request->medical_center_id , - 'status' => 'PreRegister', - 'verified' => 1, - 'password' => bcrypt($request->password), - ]; - $User = User::create($UserData); - return \MessageResponse::success(trans('messages.success')); - } - - public function edit(User $User) - { - return \MessageResponse::data($User); - } - - public function update(StoreUserRequest $request, User $User) - { - $UserData = [ - 'name' => $request->name , - 'cell_number' => $request->cell_number , - 'medical_center_id' => $request->medical_center_id , - 'status' => 'PreRegister', - 'verified' => 1, - 'password' => bcrypt($request->password), - ]; - $User->update($UserData); - return \MessageResponse::success(trans('messages.success')); - } - - public function destroy(User $User) - { - if (auth('api')->user()->can('delete', $User)) { - return \MessageResponse::error(trans('messages.failed')); - } - $User->delete(); - return \MessageResponse::success(trans('messages.success')); - } - - - - public function getByMedicalCenter(MedicalCenter $MedicalCenter) - { - $MedicalCenter = $MedicalCenter->load(['users' => function ($query) { - return $query->select(['id', 'medical_center_id', 'name', 'cell_number', 'status']); - }, 'users.roles']); - return \MessageResponse::data($MedicalCenter); - } - - - - public function changeStatus(User $User) - { - if ($User->status == 'Active') { - $User->status = 'Suspended'; - } else { - $User->status = 'Active'; - } - $User->save(); - return \MessageResponse::data($User); - } - - - - public function changeRole(User $User, Request $request) - { - $User->syncRoles($request->roles); - return \MessageResponse::data($User); - } - - public function updateInfo(Request $request) - { - auth('api')->user()->update($request->all()); - return \MessageResponse::success(trans('messages.success')); - } - - public function getInfo() - { - return \MessageResponse::data([ 'user' => auth('api')->user(), 'roles' => auth('api')->user()->getRoleNames() ]); - } - -} +paginate(10); + return \MessageResponse::data($Users); + } + + public function store(StoreUserRequest $request) + { + $UserData = [ + 'name' => $request->name , + 'cell_number' => $request->cell_number , + 'medical_center_id' => $request->medical_center_id , + 'status' => 'PreRegister', + 'verified' => 1, + 'password' => bcrypt($request->password), + ]; + $User = User::create($UserData); + return \MessageResponse::success(trans('messages.success')); + } + + public function edit(User $User) + { + return \MessageResponse::data($User); + } + + public function update(StoreUserRequest $request, User $User) + { + $UserData = [ + 'name' => $request->name , + 'cell_number' => $request->cell_number , + 'medical_center_id' => $request->medical_center_id , + 'status' => 'PreRegister', + 'verified' => 1, + 'password' => bcrypt($request->password), + ]; + $User->update($UserData); + return \MessageResponse::success(trans('messages.success')); + } + + public function destroy(User $User) + { + if (auth('api')->user()->can('delete', $User)) { + return \MessageResponse::error(trans('messages.failed')); + } + $User->delete(); + return \MessageResponse::success(trans('messages.success')); + } + + + + public function getByMedicalCenter(MedicalCenter $MedicalCenter) + { + $MedicalCenter = $MedicalCenter->load(['users' => function ($query) { + return $query->select(['id', 'medical_center_id', 'name', 'cell_number', 'status']); + }, 'users.roles']); + return \MessageResponse::data($MedicalCenter); + } + + + + public function changeStatus(User $User) + { + if ($User->status == 'Active') { + $User->status = 'Suspended'; + } else { + $User->status = 'Active'; + } + $User->save(); + return \MessageResponse::data($User); + } + + + + public function changeRole(User $User, Request $request) + { + $User->syncRoles($request->roles); + return \MessageResponse::data($User); + } + + public function updateInfo(Request $request) + { + auth('api')->user()->update($request->all()); + return \MessageResponse::success(trans('messages.success')); + } + + public function getInfo() + { + return \MessageResponse::data([ 'user' => auth('api')->user(), 'roles' => auth('api')->user()->getRoleNames() ]); + } + +} diff --git a/app/InputValue.php b/app/InputValue.php index f6d6200a..50265bd5 100644 --- a/app/InputValue.php +++ b/app/InputValue.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model; class InputValue extends Model { - public $fillable = ['value','test_result_id','input_id']; + public $fillable = ['value','test_result_id','input_id','option_id']; public function input() { return $this->belongsTo('App\Input'); @@ -15,4 +15,8 @@ class InputValue extends Model { return $this->belongsTo('App\TestResult'); } + public function option() + { + return $this->belongsTo('App\Option'); + } } diff --git a/app/Option.php b/app/Option.php index 7943ddfb..1f387c86 100644 --- a/app/Option.php +++ b/app/Option.php @@ -11,4 +11,9 @@ class Option extends Model { return $this->belongsTo('App\Input'); } + public function input_value() + { + return $this->hasOne('App\InputValue'); + } + } diff --git a/app/Policies/TestResultPolicy.php b/app/Policies/TestResultPolicy.php index 46457b8d..f517a64b 100644 --- a/app/Policies/TestResultPolicy.php +++ b/app/Policies/TestResultPolicy.php @@ -26,4 +26,9 @@ class TestResultPolicy // if($User->hasRole('Admin')) return true; } + public function verifyTestResult(User $User, TestResult $TestResult) + { + // if($User->hasRole('Supervisor')) + return true; + } } diff --git a/app/Policies/TestTypePolicy.php b/app/Policies/TestTypePolicy.php index a27768e8..daeb2347 100644 --- a/app/Policies/TestTypePolicy.php +++ b/app/Policies/TestTypePolicy.php @@ -11,7 +11,7 @@ class TestTypePolicy public function delete(User $User, TestType $TestType) { - // if($User->hasRole('Admin')) + if($User->hasRole('Admin')) return true; } @@ -26,4 +26,9 @@ class TestTypePolicy // if($User->hasRole('Admin')) return true; } + public function getInputs(User $User) + { + // if($User->hasRole('Admin')) + return true; + } } diff --git a/app/TestResult.php b/app/TestResult.php index f4628164..59e98932 100644 --- a/app/TestResult.php +++ b/app/TestResult.php @@ -19,4 +19,8 @@ class TestResult extends Model { return $this->hasMany('App\InputValue'); } + public function TitleImage() + { + return $this->morphToMany('App\Gallery', 'uploadable')->wherePivot('image_role', 'TitleImage'); + } } diff --git a/app/TestType.php b/app/TestType.php index 5bd130b1..18d76b24 100644 --- a/app/TestType.php +++ b/app/TestType.php @@ -3,10 +3,15 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; class TestType extends Model { + use SoftDeletes; + public $fillable = ['name','unique_code','user_id']; + // protected $softDelete = true; + public function user() { return $this->belongsTo('App\User'); diff --git a/app/Uploadable.php b/app/Uploadable.php index 2a408d5c..5a36207a 100644 --- a/app/Uploadable.php +++ b/app/Uploadable.php @@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model; class Uploadable extends Model { - protected $fillable = ['uploadable_id', 'uploadable_type', 'gallery_id']; + protected $fillable = ['uploadable_id', 'uploadable_type', 'gallery_id', 'image_role']; public $timestamps = false; public function gallery() diff --git a/config/filesystems.php b/config/filesystems.php index 77fa5ded..ceca83f2 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -50,8 +50,8 @@ return [ 'public' => [ 'driver' => 'local', - 'root' => storage_path('app/public'), - 'url' => env('APP_URL').'/storage', + 'root' => public_path('uploads'), + 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', ], diff --git a/config/image.php b/config/image.php new file mode 100644 index 00000000..2b1d2c3e --- /dev/null +++ b/config/image.php @@ -0,0 +1,20 @@ + 'gd' + +]; diff --git a/package-lock.json b/package-lock.json index ece4621e..73a36b76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14903,6 +14903,11 @@ "integrity": "sha512-S4f0wXEbQNHnP4IUtSSIRmzU/fjyPtTN5fC80JlHdTcF78VLT1/xsTqXgNtSW5712UJtrLPpF6b0LfOTJrCCBg==", "dev": true }, + "vuetify-upload-component": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vuetify-upload-component/-/vuetify-upload-component-1.0.6.tgz", + "integrity": "sha512-7g4VjnacxPDAiaKWu+GikqmcLXqlFk6G+SirgajXQHnBgkOP0U0RLqPLU/sdtmcQCfj0l5RjiXTT5RZPDWRpNg==" + }, "vuex": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.0.tgz", diff --git a/package.json b/package.json index 521f9c8a..9aa76241 100644 --- a/package.json +++ b/package.json @@ -60,5 +60,8 @@ "vuetify": "^1.2.5", "vuex": "^3.0.1", "vuex-router-sync": "^5.0.0" + }, + "dependencies": { + "vuetify-upload-component": "^1.0.6" } } diff --git a/public/10.js b/public/10.js index 8b5d54a2..97fae306 100644 --- a/public/10.js +++ b/public/10.js @@ -94,7 +94,10 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar case 2: result = _context.sent; - this.medicalCenter = result.data.MedicalCenter; + + if (result && result.status == 200) { + this.medicalCenter = result.data.data; + } case 4: case "end": diff --git a/public/16.js b/public/16.js index 114f86be..f72cc96b 100644 --- a/public/16.js +++ b/public/16.js @@ -155,6 +155,29 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar // // // +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// /* harmony default export */ __webpack_exports__["default"] = ({ @@ -172,8 +195,10 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar formData: { autoclave_id: "", result: "", + img: null, test_type_id: "" - } + }, + image: null }; }, created: function created() { @@ -244,10 +269,14 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar if (result.data.data.inputs[key].type == 'Form') { for (keyForm in result.data.data.inputs[key].children) { if (result.data.data.inputs[key].children.hasOwnProperty(keyForm)) { - this.formData[result.data.data.inputs[key].children[keyForm].name] = ''; + if (result.data.data.inputs[key].children[keyForm].type == 'Checkbox' || result.data.data.inputs[key].children[keyForm].type == 'Select') { + this.formData[result.data.data.inputs[key].children[keyForm].name] = []; + } else { + this.formData[result.data.data.inputs[key].children[keyForm].name] = ''; + } } } - } else if (result.data.data.inputs[key].type == 'Checkbox') { + } else if (result.data.data.inputs[key].type == 'Checkbox' || result.data.data.inputs[key].type == 'Select') { this.formData[result.data.data.inputs[key].name] = []; } else { this.formData[result.data.data.inputs[key].name] = ''; @@ -288,8 +317,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar var _submitForm = _asyncToGenerator( /*#__PURE__*/ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee3() { - var _result2, _result3; - + var result; return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { @@ -303,7 +331,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar return _services__WEBPACK_IMPORTED_MODULE_1__["ApiService"].put(_config_urls__WEBPACK_IMPORTED_MODULE_2__["urls"].updateTestResult(this.$route.params.testResult), this.formData); case 3: - _result2 = _context3.sent; + result = _context3.sent; _context3.next = 9; break; @@ -312,7 +340,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar return _services__WEBPACK_IMPORTED_MODULE_1__["ApiService"].post(_config_urls__WEBPACK_IMPORTED_MODULE_2__["urls"].storeTestResult, this.formData); case 8: - _result3 = _context3.sent; + result = _context3.sent; case 9: if (result && result.status == 200) { @@ -334,7 +362,31 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar } return submitForm; - }() + }(), + onFileChange: function onFileChange(e) { + var files = e.target.files || e.dataTransfer.files; + if (!files.length) return; + this.createImage(files[0]); + }, + createImage: function createImage(file) { + var image = new Image(); + var reader = new FileReader(); + var vm = this; + + reader.onload = function (e) { + vm.image = e.target.result; + }; + + reader.readAsDataURL(file); + }, + removeImage: function removeImage(e) { + this.image = null; + } + }, + watch: { + image: function image(img) { + this.formData.img = img; + } } }); @@ -533,6 +585,26 @@ var render = function() { 1 ), _vm._v(" "), + _c("v-flex", { attrs: { xs12: "", sm4: "", md3: "" } }, [ + !_vm.image + ? _c("div", [ + _c("input", { + attrs: { type: "file" }, + on: { change: _vm.onFileChange } + }) + ]) + : _c("div", [ + _c("img", { + staticStyle: { width: "100%" }, + attrs: { src: _vm.image } + }), + _vm._v(" "), + _c("button", { on: { click: _vm.removeImage } }, [ + _vm._v("Remove image") + ]) + ]) + ]), + _vm._v(" "), _vm._l(_vm.form, function(item, key) { return _c( "v-flex", @@ -554,6 +626,7 @@ var render = function() { item.type == "Select" ? _c("v-select", { attrs: { + multiple: "", items: item.options, label: item.name, color: "black", @@ -603,122 +676,117 @@ var render = function() { _vm._v(" "), item.type == "Form" ? [ + _c("v-layout", { attrs: { row: "", wrap: "" } }, [ + _c("h3", [_vm._v(_vm._s(item.name))]) + ]), + _vm._v(" "), _c( "v-layout", { attrs: { row: "", wrap: "" } }, - [ - _c("h3", [_vm._v(_vm._s(item.name))]), - _vm._v(" "), - _vm._l(item.children, function( - children, - keyChildren - ) { - return _c( - "v-flex", - { - key: keyChildren, - class: ["pa-2", children.size] - }, - [ - children.type == "Text" - ? _c("v-text-field", { - attrs: { - label: children.name, - color: "black" - }, - model: { - value: - _vm.formData[children.name], - callback: function($$v) { - _vm.$set( - _vm.formData, - children.name, - $$v - ) - }, - expression: - "formData[children.name]" - } - }) - : _vm._e(), - _vm._v(" "), - children.type == "Select" - ? _c("v-select", { - attrs: { - items: children.options, - label: children.name, - color: "black", - "item-text": "title", - "item-value": "id" - }, - model: { - value: - _vm.formData[children.name], - callback: function($$v) { - _vm.$set( - _vm.formData, - children.name, - $$v - ) - }, - expression: - "formData[children.name]" - } - }) - : _vm._e(), - _vm._v(" "), - children.type == "Checkbox" - ? _c( - "v-container", - { attrs: { fluid: "" } }, - [ - _c("p", [ - _vm._v(_vm._s(children.name)) - ]), - _vm._v(" "), - _vm._l( - children.options, - function( - optionValue, - keyOption - ) { - return _c("v-checkbox", { - key: keyOption, - attrs: { - label: - optionValue.title, - value: optionValue.id - }, - model: { - value: - _vm.formData[ - children.name - ], - callback: function( - $$v - ) { - _vm.$set( - _vm.formData, - children.name, - $$v - ) - }, - expression: - "formData[children.name]" - } - }) - } + _vm._l(item.children, function( + children, + keyChildren + ) { + return _c( + "v-flex", + { + key: keyChildren, + class: ["pa-2", children.size] + }, + [ + children.type == "Text" + ? _c("v-text-field", { + attrs: { + label: children.name, + color: "black" + }, + model: { + value: + _vm.formData[children.name], + callback: function($$v) { + _vm.$set( + _vm.formData, + children.name, + $$v ) - ], - 2 - ) - : _vm._e() - ], - 1 - ) - }) - ], - 2 + }, + expression: + "formData[children.name]" + } + }) + : _vm._e(), + _vm._v(" "), + children.type == "Select" + ? _c("v-select", { + attrs: { + multiple: "", + items: children.options, + label: children.name, + color: "black", + "item-text": "title", + "item-value": "id" + }, + model: { + value: + _vm.formData[children.name], + callback: function($$v) { + _vm.$set( + _vm.formData, + children.name, + $$v + ) + }, + expression: + "formData[children.name]" + } + }) + : _vm._e(), + _vm._v(" "), + children.type == "Checkbox" + ? _c( + "v-container", + { attrs: { fluid: "" } }, + [ + _c("p", [ + _vm._v(_vm._s(children.name)) + ]), + _vm._v(" "), + _vm._l(children.options, function( + optionValue, + keyOption + ) { + return _c("v-checkbox", { + key: keyOption, + attrs: { + label: optionValue.title, + value: optionValue.id + }, + model: { + value: + _vm.formData[ + children.name + ], + callback: function($$v) { + _vm.$set( + _vm.formData, + children.name, + $$v + ) + }, + expression: + "formData[children.name]" + } + }) + }) + ], + 2 + ) + : _vm._e() + ], + 1 + ) + }), + 1 ) ] : _vm._e() diff --git a/public/17.js b/public/17.js index d7ebb6ff..e82bb0a9 100644 --- a/public/17.js +++ b/public/17.js @@ -13,12 +13,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _services__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/services */ "./resources/js/vue/services/index.js"); /* harmony import */ var _config_urls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/config/urls */ "./resources/js/vue/config/urls.js"); +/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + // // // @@ -106,9 +111,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar // // // -// -// -// + /* harmony default export */ __webpack_exports__["default"] = ({ @@ -146,14 +149,19 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar }; }, created: function created() { - this.load(); + if (this.$route.name == 'NotVerifyTestResult') { + this.load(1, 'NotVerified'); + } else { + this.load(); + } }, - methods: { + methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_3__["mapMutations"])("modal", ["changeCurrentModal"]), { load: function () { var _load = _asyncToGenerator( /*#__PURE__*/ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() { var page, + verified, result, _args = arguments; return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { @@ -161,10 +169,11 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar switch (_context.prev = _context.next) { case 0: page = _args.length > 0 && _args[0] !== undefined ? _args[0] : 1; - _context.next = 3; - return _services__WEBPACK_IMPORTED_MODULE_1__["ApiService"].get(_config_urls__WEBPACK_IMPORTED_MODULE_2__["urls"].listTestResult(page)); + verified = _args.length > 1 && _args[1] !== undefined ? _args[1] : null; + _context.next = 4; + return _services__WEBPACK_IMPORTED_MODULE_1__["ApiService"].get(_config_urls__WEBPACK_IMPORTED_MODULE_2__["urls"].listTestResult(page, verified)); - case 3: + case 4: result = _context.sent; if (result && result.status == 200) { @@ -173,7 +182,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar this.lastPage = result.data.data.last_page; } - case 5: + case 6: case "end": return _context.stop(); } @@ -187,21 +196,59 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar return load; }(), - remove: function () { - var _remove = _asyncToGenerator( + show: function () { + var _show = _asyncToGenerator( /*#__PURE__*/ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee2(testResultId) { - var result, key; + var result; return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; - return _services__WEBPACK_IMPORTED_MODULE_1__["ApiService"].delete(_config_urls__WEBPACK_IMPORTED_MODULE_2__["urls"].removeTestResult(testResultId)); + return _services__WEBPACK_IMPORTED_MODULE_1__["ApiService"].get(_config_urls__WEBPACK_IMPORTED_MODULE_2__["urls"].showTestResult(testResultId)); case 2: result = _context2.sent; + if (result && result.status == 200) { + this.changeCurrentModal({ + modal: "modal-testresult-show", + properties: { + result: result + } + }); + } + + case 4: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + + function show(_x) { + return _show.apply(this, arguments); + } + + return show; + }(), + remove: function () { + var _remove = _asyncToGenerator( + /*#__PURE__*/ + _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee3(testResultId) { + var result, key; + return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + _context3.next = 2; + return _services__WEBPACK_IMPORTED_MODULE_1__["ApiService"].delete(_config_urls__WEBPACK_IMPORTED_MODULE_2__["urls"].removeTestResult(testResultId)); + + case 2: + result = _context3.sent; + if (result && result.status == 200) { for (key in this.items) { if (this.items.hasOwnProperty(key) && this.items[key].id == testResultId) { @@ -212,19 +259,19 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar case 4: case "end": - return _context2.stop(); + return _context3.stop(); } } - }, _callee2, this); + }, _callee3, this); })); - function remove(_x) { + function remove(_x2) { return _remove.apply(this, arguments); } return remove; }() - }, + }), watch: { currentPage: function currentPage(page) { this.load(page); @@ -329,6 +376,45 @@ var render = function() { ) ], 1 + ), + _vm._v(" "), + _c("v-spacer"), + _vm._v(" "), + _c( + "v-flex", + { + staticClass: "text-xs-right", + attrs: { xs12: "", md2: "", sm2: "" } + }, + [ + _c( + "router-link", + { attrs: { to: { name: "SubmitTestResult" } } }, + [ + _c( + "v-btn", + { + staticClass: + "WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black" + }, + [ + _c( + "v-icon", + { staticClass: "black--text mr-2 caption" }, + [_vm._v("fas fa-plus")] + ), + _vm._v(" "), + _c("span", { staticClass: "black--text" }, [ + _vm._v("Add") + ]) + ], + 1 + ) + ], + 1 + ) + ], + 1 ) ], 1 @@ -410,6 +496,32 @@ var render = function() { "td", { staticClass: "text-xs-right" }, [ + _c( + "v-btn", + { + staticClass: "mr-2", + attrs: { color: "cyan" }, + on: { + click: function($event) { + return _vm.show(item.id) + } + } + }, + [ + _c( + "v-icon", + { + staticClass: + "white--text mr-1 caption" + }, + [_vm._v("fas fa-pen")] + ), + _vm._v(" "), + _c("span", [_vm._v("Show")]) + ], + 1 + ), + _vm._v(" "), _c( "router-link", { @@ -425,7 +537,7 @@ var render = function() { "v-btn", { staticClass: "mr-2", - attrs: { color: "cyan" } + attrs: { color: "orange" } }, [ _c( @@ -448,8 +560,8 @@ var render = function() { _c( "v-btn", { - staticClass: "mr-2", - attrs: { color: "black" }, + staticClass: "WM-ActionButton", + attrs: { color: "pink" }, on: { click: function($event) { return _vm.remove(item.id) @@ -461,12 +573,12 @@ var render = function() { "v-icon", { staticClass: - "white--text mr-1 caption" + "white--text mr-2 caption" }, - [_vm._v("fas fa-folder")] + [_vm._v("fas fa-times")] ), _vm._v(" "), - _c("span", [_vm._v("Archive")]) + _c("span", [_vm._v("Remove")]) ], 1 ) diff --git a/public/19.js b/public/19.js index b709310c..825ec8f3 100644 --- a/public/19.js +++ b/public/19.js @@ -123,10 +123,10 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar return !!value || "Required."; }, counter: function counter(value) { - return value.length == 0 || value.length >= 5 || "Min 5 characters"; + return !value || value.length == 0 || value.length >= 5 || "Min 5 characters"; }, email: function email(value) { - if (value.length > 0) { + if (value && value.length > 0) { var pattern = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return pattern.test(value) || "Invalid e-mail."; } diff --git a/public/4.js b/public/4.js index 07738567..109a6942 100644 --- a/public/4.js +++ b/public/4.js @@ -95,6 +95,8 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar // // // +// +// /* harmony default export */ __webpack_exports__["default"] = ({ @@ -225,7 +227,11 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar exports = module.exports = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); // Module +<<<<<<< HEAD exports.push([module.i, "\n.WM-ActionButton[data-v-b1f1b72e] {\r\n padding: 8px 22px;\n}\r\n", ""]); +======= +exports.push([module.i, "\n.WM-ActionButton[data-v-b1f1b72e] {\n padding: 8px 22px;\n}\n", ""]); +>>>>>>> 116ef9e130916c23ffec776f35fb489cbc506d58 @@ -492,8 +498,8 @@ var render = function() { _c( "v-btn", { - staticClass: "WM-ActionButton", - attrs: { color: "pink" }, + staticClass: "mr-2", + attrs: { color: "black" }, on: { click: function($event) { return _vm.remove(item.id) @@ -504,12 +510,12 @@ var render = function() { _c( "v-icon", { - staticClass: "white--text mr-2 caption" + staticClass: "white--text mr-1 caption" }, - [_vm._v("fas fa-times")] + [_vm._v("fas fa-folder")] ), _vm._v(" "), - _c("span", [_vm._v("Remove")]) + _c("span", [_vm._v("Archive")]) ], 1 ) diff --git a/public/6.js b/public/6.js index a1189332..d668a61e 100644 --- a/public/6.js +++ b/public/6.js @@ -66,6 +66,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // // // +// +// @@ -74,6 +76,14 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope return { form: { cell_number: "" + }, + rules: { + required: function required(value) { + return !!value || "Required."; + }, + cellNumberCounter: function cellNumberCounter(value) { + return value && value.length == 11 || "must 11 characters"; + } } }; }, @@ -87,9 +97,11 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope while (1) { switch (_context.prev = _context.next) { case 0: - this.forgotPassword({ - form: this.form - }); + if (this.$refs.form.validate()) { + this.forgotPassword({ + form: this.form + }); + } case 1: case "end": @@ -127,6 +139,7 @@ var render = function() { var _c = _vm._self._c || _h return _c( "v-form", + { ref: "form" }, [ _c( "v-container", @@ -159,7 +172,12 @@ var render = function() { attrs: { name: "cellnumber", label: "Cell Number", - color: "black" + color: "black", + rules: [ + _vm.rules.required, + _vm.rules.cellNumberCounter + ], + mask: "#### ### ####" }, model: { value: _vm.form.cell_number, diff --git a/public/7.js b/public/7.js index e365828c..e7b73499 100644 --- a/public/7.js +++ b/public/7.js @@ -9,7 +9,15 @@ "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); +/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); +/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); + + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -68,27 +76,71 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // // // +// +// /* harmony default export */ __webpack_exports__["default"] = ({ data: function data() { return { cell_number: "", password: "", - show1: false + show1: false, + rules: { + required: function required(value) { + return !!value || "Required."; + }, + passCounter: function passCounter(value) { + return value && value.length >= 8 || "Min 8 characters"; + }, + cellNumberCounter: function cellNumberCounter(value) { + return value && value.length == 11 || "must 11 characters"; + } + } }; }, - computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapGetters"])('auth', ['authenticating', 'authenticationError', 'authenticationErrorCode'])), - methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapActions"])('auth', ['login']), { - handleSubmit: function handleSubmit() { - // Perform a simple validation that cell_number and password have been typed in - if (this.cell_number != '' && this.password != '') { - this.login({ - cell_number: this.cell_number, - password: this.password - }); - this.password = ""; + computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapGetters"])('auth', ['authenticating', 'authenticationError', 'authenticationErrorCode'])), + methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapActions"])('auth', ['login']), { + handleSubmit: function () { + var _handleSubmit = _asyncToGenerator( + /*#__PURE__*/ + _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() { + var response; + return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + if (!this.$refs.form.validate()) { + _context.next = 5; + break; + } + + _context.next = 3; + return this.login({ + cell_number: this.cell_number, + password: this.password + }); + + case 3: + response = _context.sent; + + if (!response.status || response.status !== 200) { + this.password = ""; + } + + case 5: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function handleSubmit() { + return _handleSubmit.apply(this, arguments); } - } + + return handleSubmit; + }() }) }); @@ -111,6 +163,7 @@ var render = function() { var _c = _vm._self._c || _h return _c( "v-form", + { ref: "form" }, [ _c( "v-container", @@ -143,8 +196,12 @@ var render = function() { attrs: { name: "cellnumber", label: "Cell Number", - id: "id1", - color: "black" + color: "black", + rules: [ + _vm.rules.required, + _vm.rules.cellNumberCounter + ], + mask: "#### ### ####" }, model: { value: _vm.cell_number, @@ -178,6 +235,10 @@ var render = function() { "append-icon": _vm.show1 ? "visibility" : "visibility_off", + rules: [ + _vm.rules.required, + _vm.rules.passCounter + ], color: "black" }, on: { diff --git a/public/8.js b/public/8.js index 3d986a6f..0c91664e 100644 --- a/public/8.js +++ b/public/8.js @@ -120,13 +120,13 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar return !!value || "Required."; }, nameCounter: function nameCounter(value) { - return value.length >= 5 || "Min 5 characters"; + return value && value.length >= 5 || "Min 5 characters"; }, passCounter: function passCounter(value) { - return value.length >= 6 || "Min 6 characters"; + return value && value.length >= 8 || "Min 8 characters"; }, cellNumberCounter: function cellNumberCounter(value) { - return value.length == 11 || "must 11 characters"; + return value && value.length == 11 || "must 11 characters"; } } }; diff --git a/public/9.js b/public/9.js index 97462752..0cd7a678 100644 --- a/public/9.js +++ b/public/9.js @@ -98,7 +98,7 @@ __webpack_require__.r(__webpack_exports__); icon: '/img/Static/Dashboard/notepad-colorful.png', color: 'WM-PinkGradient-BG', route: { - name: 'SubmitTestResult' + name: 'NotVerifyTestResult' }, aligntext: 'text-md-center', alignimg: 'text-md-left', diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 02b9fb87..66c297e3 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,3 +1,7 @@ { +<<<<<<< HEAD "/vue/js/app.js": "/vue/js/app.js?id=b4534e69c5368a1cd1b1" +======= + "/vue/js/app.js": "/vue/js/app.js?id=b1ffa939001e67dfabbc" +>>>>>>> 116ef9e130916c23ffec776f35fb489cbc506d58 } diff --git a/public/vue/js/app.js b/public/vue/js/app.js index 770c8a57..e111dbf6 100644 --- a/public/vue/js/app.js +++ b/public/vue/js/app.js @@ -3366,7 +3366,11 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope }; }, methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapActions"])('auth', ['changePassword']), { +<<<<<<< HEAD submitVerifyCode: function submitVerifyCode() { +======= + submitChangePassword: function submitChangePassword() { +>>>>>>> 116ef9e130916c23ffec776f35fb489cbc506d58 if (this.form.code != '') { this.changePassword({ form: this.form @@ -3445,6 +3449,97 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/vue/components/modal/testresult/Show.vue?vue&type=script&lang=js&": +/*!************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/vue/components/modal/testresult/Show.vue?vue&type=script&lang=js& ***! + \************************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + // import { ApiService } from "@/services"; +// import { urls } from "@/config/urls"; + +/* harmony default export */ __webpack_exports__["default"] = ({ + data: function data() { + return { + data: {} + }; + }, + methods: {// ...mapMutations("modal", ["closeModal", "setResultModal"]), + // async changeRole() { + // const result = await ApiService.post( + // urls.changeRoleUser(this.getModalProperties.user.id), + // this.data + // ); + // if (result && result.status == 200) { + // this.setResultModal(result.data.data); + // this.closeModal(); + // } + // } + }, + created: function created() { + this.data = this.getModalProperties.result.data.data; + }, + computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapGetters"])("modal", ["getModalProperties"])) +}); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/vue/components/modal/user/Role.vue?vue&type=script&lang=js&": /*!******************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/vue/components/modal/user/Role.vue?vue&type=script&lang=js& ***! @@ -17299,6 +17394,183 @@ render._withStripped = true +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/vue/components/modal/testresult/Show.vue?vue&type=template&id=9160f06e&": +/*!****************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/vue/components/modal/testresult/Show.vue?vue&type=template&id=9160f06e& ***! + \****************************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); +var render = function() { + var _vm = this + var _h = _vm.$createElement + var _c = _vm._self._c || _h + return _c( + "div", + [ + _c( + "v-container", + { attrs: { fluid: "" } }, + [ + _c( + "material-card", + { attrs: { color: "black", title: "Show Test Resualt", text: "" } }, + [ + _c( + "v-layout", + { + staticClass: "my-3", + attrs: { "align-center": "", wrap: "" } + }, + [ + _c("v-flex", { attrs: { xs12: "", md12: "", sm12: "" } }, [ + _c("div", [ + _vm._v("Auto Clave Id : " + _vm._s(_vm.data.autoclave_id)) + ]) + ]), + _vm._v(" "), + _c("v-flex", { attrs: { xs12: "", md12: "", sm12: "" } }, [ + _c("div", [_vm._v("Result : " + _vm._s(_vm.data.result))]) + ]), + _vm._v(" "), + _c("v-flex", { attrs: { xs12: "", md12: "", sm12: "" } }, [ + _c("div", [_vm._v("verify : " + _vm._s(_vm.data.verified))]) + ]), + _vm._v(" "), + _c("v-flex", { attrs: { xs12: "", md12: "", sm12: "" } }, [ + _c("div", [ + _vm._v("Register User : " + _vm._s(_vm.data.user.name)) + ]) + ]), + _vm._v(" "), + _vm.data.inputs + ? _vm._l(_vm.data.inputs, function(inputData, keyInputs) { + return _c( + "v-flex", + { + key: keyInputs, + attrs: { xs12: "", md12: "", sm12: "" } + }, + [ + _c("div", [ + _vm._v( + _vm._s(keyInputs) + " : " + _vm._s(inputData) + ) + ]) + ] + ) + }) + : _vm._e(), + _vm._v(" "), + _vm.data.options + ? _vm._l(_vm.data.options, function( + optionData, + keyOptions + ) { + return _c( + "v-flex", + { + key: keyOptions, + attrs: { xs12: "", md12: "", sm12: "" } + }, + [ + _c( + "div", + [ + _vm._v(_vm._s(keyOptions) + " : "), + _vm._l(optionData, function(data, dataKey) { + return _c("span", { key: dataKey }, [ + _vm._v(_vm._s(data) + ", ") + ]) + }) + ], + 2 + ) + ] + ) + }) + : _vm._e(), + _vm._v(" "), + _vm.data.children + ? _vm._l(_vm.data.children, function(formData, keyForm) { + return _c( + "v-flex", + { + key: keyForm, + attrs: { xs12: "", md12: "", sm12: "" } + }, + [ + _c("h1", [_vm._v(_vm._s(keyForm))]), + _vm._v(" "), + _vm._l(formData, function(childData, keyChild) { + return _c("div", { key: keyChild }, [ + _c( + "div", + [ + _vm._v( + _vm._s(keyChild) + + " : \n " + ), + Array.isArray(childData) + ? _vm._l(childData, function( + data, + dataKey + ) { + return _c("span", { key: dataKey }, [ + _vm._v(_vm._s(data) + ", ") + ]) + }) + : [ + _c("span", [ + _vm._v(_vm._s(childData)) + ]) + ] + ], + 2 + ) + ]) + }) + ], + 2 + ) + }) + : _vm._e() + ], + 2 + ), + _vm._v(" "), + _c("v-divider"), + _vm._v(" "), + _c( + "v-layout", + { + staticClass: "my-3", + attrs: { "align-center": "", wrap: "" } + }, + [_c("v-flex", { attrs: { md12: "" } })], + 1 + ) + ], + 1 + ) + ], + 1 + ) + ], + 1 + ) +} +var staticRenderFns = [] +render._withStripped = true + + + /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/vue/components/modal/user/Role.vue?vue&type=template&id=f7c30ab4&": @@ -60764,6 +61036,7 @@ var map = { "./modal/Base.vue": "./resources/js/vue/components/modal/Base.vue", "./modal/auth/ChangePassword.vue": "./resources/js/vue/components/modal/auth/ChangePassword.vue", "./modal/auth/VerifyCode.vue": "./resources/js/vue/components/modal/auth/VerifyCode.vue", + "./modal/testresult/Show.vue": "./resources/js/vue/components/modal/testresult/Show.vue", "./modal/user/Role.vue": "./resources/js/vue/components/modal/user/Role.vue" }; @@ -62050,6 +62323,75 @@ __webpack_require__.r(__webpack_exports__); +/***/ }), + +/***/ "./resources/js/vue/components/modal/testresult/Show.vue": +/*!***************************************************************!*\ + !*** ./resources/js/vue/components/modal/testresult/Show.vue ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _Show_vue_vue_type_template_id_9160f06e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Show.vue?vue&type=template&id=9160f06e& */ "./resources/js/vue/components/modal/testresult/Show.vue?vue&type=template&id=9160f06e&"); +/* harmony import */ var _Show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Show.vue?vue&type=script&lang=js& */ "./resources/js/vue/components/modal/testresult/Show.vue?vue&type=script&lang=js&"); +/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); + + + + + +/* normalize component */ + +var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( + _Show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], + _Show_vue_vue_type_template_id_9160f06e___WEBPACK_IMPORTED_MODULE_0__["render"], + _Show_vue_vue_type_template_id_9160f06e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], + false, + null, + null, + null + +) + +/* hot reload */ +if (false) { var api; } +component.options.__file = "resources/js/vue/components/modal/testresult/Show.vue" +/* harmony default export */ __webpack_exports__["default"] = (component.exports); + +/***/ }), + +/***/ "./resources/js/vue/components/modal/testresult/Show.vue?vue&type=script&lang=js&": +/*!****************************************************************************************!*\ + !*** ./resources/js/vue/components/modal/testresult/Show.vue?vue&type=script&lang=js& ***! + \****************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/babel-loader/lib??ref--4-0!../../../../../../node_modules/vue-loader/lib??vue-loader-options!./Show.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/vue/components/modal/testresult/Show.vue?vue&type=script&lang=js&"); +/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Show_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }), + +/***/ "./resources/js/vue/components/modal/testresult/Show.vue?vue&type=template&id=9160f06e&": +/*!**********************************************************************************************!*\ + !*** ./resources/js/vue/components/modal/testresult/Show.vue?vue&type=template&id=9160f06e& ***! + \**********************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Show_vue_vue_type_template_id_9160f06e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../../node_modules/vue-loader/lib??vue-loader-options!./Show.vue?vue&type=template&id=9160f06e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/vue/components/modal/testresult/Show.vue?vue&type=template&id=9160f06e&"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Show_vue_vue_type_template_id_9160f06e___WEBPACK_IMPORTED_MODULE_0__["render"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Show_vue_vue_type_template_id_9160f06e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); + + + /***/ }), /***/ "./resources/js/vue/components/modal/user/Role.vue": @@ -62157,6 +62499,12 @@ var urls = { return "/TestTypes/".concat(id); }, listTestResult: function listTestResult(page) { + var verified = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + if (verified) { + return "/TestResults/?verified=".concat(verified, "&page=").concat(page); + } + return "/TestResults?page=" + page; }, editTestResult: function editTestResult(id) { @@ -62165,6 +62513,9 @@ var urls = { updateTestResult: function updateTestResult(id) { return "/TestResults/".concat(id); }, + showTestResult: function showTestResult(id) { + return "/TestResults/".concat(id); + }, removeTestResult: function removeTestResult(id) { return "/TestResults/".concat(id); }, @@ -62796,6 +63147,10 @@ __webpack_require__.r(__webpack_exports__); path: '/test-result/:testResult/edit', name: 'EditTestResult', view: 'TestResult/AddEdit' +}, { + path: '/test-result/NotVerified', + name: 'NotVerifyTestResult', + view: 'TestResult/List' }]); /***/ }), @@ -62927,6 +63282,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _global_api_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../global/api.service */ "./resources/js/vue/services/global/api.service.js"); /* harmony import */ var _storage_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./storage.service */ "./resources/js/vue/services/auth/storage.service.js"); /* harmony import */ var _config_urls__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/config/urls */ "./resources/js/vue/config/urls.js"); +/* harmony import */ var _global_toast_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../global/toast.service */ "./resources/js/vue/services/global/toast.service.js"); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } @@ -62959,6 +63315,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g + var AuthenticationError = /*#__PURE__*/ function (_Error) { @@ -63020,14 +63377,15 @@ var UserService = { // but don't worry about this just yet - I'll come back to it later _global_api_service__WEBPACK_IMPORTED_MODULE_1__["ApiService"].mount401Interceptor(); - return _context.abrupt("return", response.data.access_token); + return _context.abrupt("return", response); case 12: _context.prev = 12; _context.t0 = _context["catch"](1); + _global_toast_service__WEBPACK_IMPORTED_MODULE_4__["default"].error('Username Or Password Is Incorrect', 'Error'); throw new AuthenticationError(_context.t0.response.status, _context.t0.response.data.detail); - case 15: + case 16: case "end": return _context.stop(); } @@ -63699,7 +64057,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar var _login = _asyncToGenerator( /*#__PURE__*/ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(_ref, _ref2) { - var commit, dispatch, cell_number, password, token; + var commit, dispatch, cell_number, password, response; return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { @@ -63712,14 +64070,14 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar return _services__WEBPACK_IMPORTED_MODULE_1__["UserService"].login(cell_number, password); case 6: - token = _context.sent; - commit('loginSuccess', token); // Redirect the user to the page he first tried to visit or to the home view + response = _context.sent; + commit('loginSuccess', response.data.access_token); // Redirect the user to the page he first tried to visit or to the home view _router__WEBPACK_IMPORTED_MODULE_2__["default"].push(_router__WEBPACK_IMPORTED_MODULE_2__["default"].history.current.query.redirect || '/'); dispatch('info', {}, { root: true }); - return _context.abrupt("return", true); + return _context.abrupt("return", response); case 13: _context.prev = 13; @@ -63854,6 +64212,9 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar commit('modal/closeModal', {}, { root: true }); + _router__WEBPACK_IMPORTED_MODULE_2__["default"].push({ + name: "Dashboard" + }); } case 6: diff --git a/resources/js/vue/components/modal/auth/ChangePassword.vue b/resources/js/vue/components/modal/auth/ChangePassword.vue index f4466ec4..e39ac829 100644 --- a/resources/js/vue/components/modal/auth/ChangePassword.vue +++ b/resources/js/vue/components/modal/auth/ChangePassword.vue @@ -51,7 +51,7 @@ export default { ...mapActions('auth', [ 'changePassword' ]), - submitVerifyCode() { + submitChangePassword() { if (this.form.code != '') { this.changePassword({form: this.form}); } diff --git a/resources/js/vue/components/modal/testresult/Show.vue b/resources/js/vue/components/modal/testresult/Show.vue new file mode 100644 index 00000000..74d9a449 --- /dev/null +++ b/resources/js/vue/components/modal/testresult/Show.vue @@ -0,0 +1,77 @@ + + + + + + + Auto Clave Id : {{ data.autoclave_id }} + + + Result : {{ data.result }} + + + verify : {{ data.verified }} + + + Register User : {{ data.user.name }} + + + + {{keyInputs}} : {{inputData}} + + + + + {{keyOptions}} : {{data}}, + + + + + {{keyForm}} + + {{keyChild}} : + {{data}}, + {{childData}} + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/js/vue/config/urls.js b/resources/js/vue/config/urls.js index 78d13c36..4a5476fa 100644 --- a/resources/js/vue/config/urls.js +++ b/resources/js/vue/config/urls.js @@ -23,7 +23,10 @@ const urls = { updateTestType : function(id) { return `/TestTypes/${id}`; }, - listTestResult : function(page) { + listTestResult : function(page, verified = null) { + if (verified) { + return `/TestResults/?verified=${verified}&page=${page}`; + } return "/TestResults?page=" + page; }, editTestResult : function(id) { @@ -32,6 +35,9 @@ const urls = { updateTestResult : function(id) { return `/TestResults/${id}`; }, + showTestResult : function(id) { + return `/TestResults/${id}`; + }, removeTestResult : function(id) { return `/TestResults/${id}`; }, diff --git a/resources/js/vue/router/paths.js b/resources/js/vue/router/paths.js index b8b05cca..387d83d9 100644 --- a/resources/js/vue/router/paths.js +++ b/resources/js/vue/router/paths.js @@ -101,4 +101,9 @@ export default [ name: 'EditTestResult', view: 'TestResult/AddEdit' }, + { + path: '/test-result/NotVerified', + name: 'NotVerifyTestResult', + view: 'TestResult/List' + }, ] diff --git a/resources/js/vue/services/auth/user.service.js b/resources/js/vue/services/auth/user.service.js index d7c6ff88..3c4e51b8 100644 --- a/resources/js/vue/services/auth/user.service.js +++ b/resources/js/vue/services/auth/user.service.js @@ -1,6 +1,7 @@ import { ApiService } from "../global/api.service"; import { TokenService } from "./storage.service"; import { urls } from "@/config/urls"; +import toast from "../global/toast.service"; class AuthenticationError extends Error { constructor(errorCode, message) { @@ -42,8 +43,9 @@ const UserService = { // NOTE: We haven't covered this yet in our ApiService // but don't worry about this just yet - I'll come back to it later ApiService.mount401Interceptor(); - return response.data.access_token; + return response; } catch (error) { + toast.error('Username Or Password Is Incorrect', 'Error'); throw new AuthenticationError( error.response.status, error.response.data.detail diff --git a/resources/js/vue/store/modules/auth/actions.js b/resources/js/vue/store/modules/auth/actions.js index a52a7d80..32af7512 100644 --- a/resources/js/vue/store/modules/auth/actions.js +++ b/resources/js/vue/store/modules/auth/actions.js @@ -6,14 +6,14 @@ export default { async login({ commit, dispatch }, {cell_number, password}) { commit('loginRequest'); try { - const token = await UserService.login(cell_number, password); - commit('loginSuccess', token); + const response = await UserService.login(cell_number, password); + commit('loginSuccess', response.data.access_token); // Redirect the user to the page he first tried to visit or to the home view router.push(router.history.current.query.redirect || '/'); dispatch('info', {}, {root : true}); - return true + return response; } catch (e) { if (e instanceof AuthenticationError) { commit('loginError', {errorCode: e.errorCode, errorMessage: e.message}) @@ -47,6 +47,7 @@ export default { var response = await ApiService.post(urls.changePassword, form); if(response && response.status == 200 ) { commit('modal/closeModal', {}, {root: true}); + router.push({ name: `Dashboard` }); } }, diff --git a/resources/js/vue/views/Auth/ForgotPassword.vue b/resources/js/vue/views/Auth/ForgotPassword.vue index b54bb94d..3fdae59e 100644 --- a/resources/js/vue/views/Auth/ForgotPassword.vue +++ b/resources/js/vue/views/Auth/ForgotPassword.vue @@ -1,5 +1,5 @@ - + @@ -11,6 +11,8 @@ name="cellnumber" label="Cell Number" color="black" + :rules="[rules.required, rules.cellNumberCounter]" + mask="#### ### ####" > @@ -49,6 +51,10 @@ export default { return { form :{ cell_number: "" + }, + rules: { + required: value => !!value || "Required.", + cellNumberCounter: value => (value && value.length == 11) || "must 11 characters" } }; }, @@ -56,7 +62,9 @@ export default { ...mapActions("auth", ["forgotPassword"]), // ...mapMutations("modal", ["changeCurrentModal"]), async handleSubmit() { - this.forgotPassword({form : this.form}); + if (this.$refs.form.validate()) { + this.forgotPassword({form : this.form}); + } } } }; diff --git a/resources/js/vue/views/Auth/Login.vue b/resources/js/vue/views/Auth/Login.vue index 237ddf93..60ca0ba1 100644 --- a/resources/js/vue/views/Auth/Login.vue +++ b/resources/js/vue/views/Auth/Login.vue @@ -1,5 +1,5 @@ - + @@ -12,8 +12,9 @@ v-model="cell_number" name="cellnumber" label="Cell Number" - id="id1" color="black" + :rules="[rules.required, rules.cellNumberCounter]" + mask="#### ### ####" > @@ -26,6 +27,7 @@ :type="show1 ? 'text' : 'password'" :append-icon="show1 ? 'visibility' : 'visibility_off'" @click:append="show1 = !show1" + :rules="[rules.required, rules.passCounter]" color="black" class="pa-2" > @@ -60,6 +62,11 @@ export default { cell_number: "", password: "", show1: false, + rules: { + required: value => !!value || "Required.", + passCounter: value => (value && value.length >= 8) || "Min 8 characters", + cellNumberCounter: value => (value && value.length == 11) || "must 11 characters" + } }; }, computed: { @@ -73,13 +80,15 @@ export default { ...mapActions('auth', [ 'login' ]), - handleSubmit() { + async handleSubmit() { // Perform a simple validation that cell_number and password have been typed in - if (this.cell_number != '' && this.password != '') { - - this.login({cell_number: this.cell_number, password: this.password}); + if (this.$refs.form.validate()) { + const response = await this.login({cell_number: this.cell_number, password: this.password}); + + if (!response.status || response.status !== 200) { this.password = ""; } + } } } }; diff --git a/resources/js/vue/views/Auth/Register.vue b/resources/js/vue/views/Auth/Register.vue index 0a35144e..42151cf2 100644 --- a/resources/js/vue/views/Auth/Register.vue +++ b/resources/js/vue/views/Auth/Register.vue @@ -101,9 +101,9 @@ export default { isLogin: TokenService.getInfo(), rules: { required: value => !!value || "Required.", - nameCounter: value => value.length >= 5 || "Min 5 characters", - passCounter: value => value.length >= 6 || "Min 6 characters", - cellNumberCounter: value => value.length == 11 || "must 11 characters" + nameCounter: value => (value && value.length >= 5) || "Min 5 characters", + passCounter: value => (value && value.length >= 8) || "Min 8 characters", + cellNumberCounter: value => (value && value.length == 11) || "must 11 characters" } }; }, diff --git a/resources/js/vue/views/Dashboard.vue b/resources/js/vue/views/Dashboard.vue index 6d99bbd4..034c5e23 100644 --- a/resources/js/vue/views/Dashboard.vue +++ b/resources/js/vue/views/Dashboard.vue @@ -33,7 +33,7 @@ export default { {title:'Manage Users', text:'You can edit the medical center information',icon:'/img/Static/Dashboard/ipad.png',color:'WM-YellowPinkGradient-BG',route:{name: 'ManageUsers'},aligntext:'text-md-center',alignimg:'text-md-left',column:'xs12 md12 sm12'}, {title:'Manage Medical Center', text:'Managing users very fast by ...',icon:'/img/Static/Dashboard/Macbook.png',color:'WM-MuskGradient-BG',route:{name: 'ManageMedicalCenter'},aligntext:'text-md-left',alignimg:'text-md-right',column:'xs12 md7 sm7'}, {title:'List Test Type', text:'You can simply add your own test type',icon:'/img/Static/Dashboard/Book-and-Pen.png',color:'WM-GreyGradient-BG',route:{name: 'ListTestType'},aligntext:'text-md-left',alignimg:'text-md-right',column:'xs12 md5 sm5'}, - {title:'Test to Verify', text:'You can simply add your own test type in this section of website',icon:'/img/Static/Dashboard/notepad-colorful.png',color:'WM-PinkGradient-BG',route:{name: 'SubmitTestResult'},aligntext:'text-md-center',alignimg:'text-md-left',column:'xs12 md12 sm12'}, + {title:'Test to Verify', text:'You can simply add your own test type in this section of website',icon:'/img/Static/Dashboard/notepad-colorful.png',color:'WM-PinkGradient-BG',route:{name: 'NotVerifyTestResult'},aligntext:'text-md-center',alignimg:'text-md-left',column:'xs12 md12 sm12'}, {title:'Add a Test Result', text:'You can edit the medical center information',icon:'/img/Static/Dashboard/ipad.png',color:'WM-YellowPinkGradient-BG',route:{name: 'SubmitTestResult'},aligntext:'text-md-center',alignimg:'text-md-left',column:'xs12 md12 sm12'}, ] } diff --git a/resources/js/vue/views/MedicalCenter/AddEdit.vue b/resources/js/vue/views/MedicalCenter/AddEdit.vue index b481afe0..ae8c919b 100644 --- a/resources/js/vue/views/MedicalCenter/AddEdit.vue +++ b/resources/js/vue/views/MedicalCenter/AddEdit.vue @@ -58,7 +58,9 @@ export default { methods: { async load(id) { const result = await ApiService.get(urls.editMedicalCenter(id)); - this.medicalCenter = result.data.MedicalCenter; + if (result && result.status == 200) { + this.medicalCenter = result.data.data; + } }, async AddMedicalCenter() { if (this.$refs.form.validate()) { diff --git a/resources/js/vue/views/TestResult/AddEdit.vue b/resources/js/vue/views/TestResult/AddEdit.vue index f6f01b25..0eea0946 100644 --- a/resources/js/vue/views/TestResult/AddEdit.vue +++ b/resources/js/vue/views/TestResult/AddEdit.vue @@ -2,7 +2,13 @@ - + + + + + + + + Remove image + + - + {{ item.name }} {{ item.name }} - + + + { + vm.image = e.target.result; + }; + + reader.readAsDataURL(file); + }, + removeImage: function (e) { + this.image = null; + }, + }, + watch:{ + image(img) { + this.formData.img = img; + } } }; \ No newline at end of file diff --git a/resources/js/vue/views/TestResult/List.vue b/resources/js/vue/views/TestResult/List.vue index 9d1e5f6d..687fe4c8 100644 --- a/resources/js/vue/views/TestResult/List.vue +++ b/resources/js/vue/views/TestResult/List.vue @@ -1,163 +1,182 @@ - - - - - - - - - - - - - - - - - - - fas fa-search - Filter - - - - - - - - - - - - {{ item.autoclave_id }} - {{ item.user.medical_center.name }} - {{ item.user.name }} - {{ item.result }} - {{ item.created_at }} - - - - fas fa-pen - Edit - - - - fas fa-folder - Archive - - - - - - - - - - - - - - fas fa-chevron-left - Back - - - - - - + + + + + + + + + + + + + + + + fas fa-search + Filter + + + + + + + fas fa-plus + Add + + + + + + + + + + + + + {{ item.autoclave_id }} + {{ item.user.medical_center.name }} + {{ item.user.name }} + {{ item.result }} + {{ item.created_at }} + + + fas fa-pen + Show + + + + fas fa-pen + Edit + + + + fas fa-times + Remove + + + + + + + + + + + + + + fas fa-chevron-left + Back + + + + + + \ No newline at end of file diff --git a/resources/js/vue/views/TestType/List.vue b/resources/js/vue/views/TestType/List.vue index 49eb67cc..03456a3b 100644 --- a/resources/js/vue/views/TestType/List.vue +++ b/resources/js/vue/views/TestType/List.vue @@ -1,149 +1,154 @@ - - - - - - - - - fas fa-search - Filter - - - - - - - fas fa-plus - Add - - - - - - - - - - - - - - - {{ item.name }} - {{ item.unique_code }} - {{ item.user.name }} - {{ item.created_at }} - - - - fas fa-pen - Edit - + + + + + + + + + fas fa-search + Filter + + + + + + + fas fa-plus + Add + + + + + + + + + + + + + + + {{ item.name }} + {{ item.unique_code }} + {{ item.user.name }} + {{ item.created_at }} + + + + fas fa-pen + Edit + + + + fas fa-barcode + Generate Barcode + + + fas fa-folder + Archive + + + + + + + + + + + + + + fas fa-chevron-left + Back + - - fas fa-barcode - Generate Barcode - - - fas fa-times - Remove - - - - - - - - - - - - - - fas fa-chevron-left - Back - - - - - + + + diff --git a/resources/js/vue/views/User/MyInfo.vue b/resources/js/vue/views/User/MyInfo.vue index 752bc4b4..68091da8 100644 --- a/resources/js/vue/views/User/MyInfo.vue +++ b/resources/js/vue/views/User/MyInfo.vue @@ -101,9 +101,9 @@ export default { rules: { required: value => !!value || "Required.", counter: value => - value.length == 0 || value.length >= 5 || "Min 5 characters", + !value || value.length == 0 || value.length >= 5 || "Min 5 characters", email: value => { - if (value.length > 0) { + if (value && value.length > 0) { const pattern = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return pattern.test(value) || "Invalid e-mail."; } diff --git a/routes/api.php b/routes/api.php index 74019a0b..897a0b58 100644 --- a/routes/api.php +++ b/routes/api.php @@ -16,22 +16,24 @@ Route::group(['namespace' => 'Api'],function () { Route::post('/login', 'Auth\LoginController@login')->name('login'); Route::post('/logout', 'Auth\LoginController@logout')->name('logout')->middleware('auth:api'); Route::post('/register', 'Auth\RegisterController@register')->name('register'); - Route::post('/password/phone', 'Auth\ForgotPasswordController@sendDisposablePassword'); + Route::post('/password/phone', 'Auth\ForgotPasswordController@sendDisposablePassword')->name('password.email'); Route::post('/password/verifyCode', 'Auth\ForgotPasswordController@checkDisposablePassword'); - Route::post('/password/reset', 'Auth\ResetPasswordController@reset')->name('password.reset')->middleware('auth:api'); + Route::post('/password/reset', 'Auth\ResetPasswordController@reset')->name('password.reset'); }); -Route::get('TestTypes/ListNames', 'TestTypeController@listNames'); -Route::resource('TestTypes', 'TestTypeController'); -Route::resource('TestResults', 'TestResultController'); -Route::resource('MedicalCenters', 'MedicalCenterController'); -Route::post('/GetInputs', 'TestTypeController@getInputs'); +Route::middleware('auth:api')->group(function () { + Route::post('/TestResults/Verify/{TestResult}', 'TestResultController@verifyTestResult'); + Route::get('TestTypes/ListNames', 'TestTypeController@listNames'); + Route::resource('TestTypes', 'TestTypeController'); + Route::resource('TestResults', 'TestResultController'); + Route::resource('MedicalCenters', 'MedicalCenterController'); + Route::post('/GetInputs', 'TestTypeController@getInputs'); -Route::get('/GetInfo', 'UserController@getInfo')->middleware('auth:api'); -Route::get('Users/MedicalCenter/{MedicalCenter}', 'UserController@getByMedicalCenter')->middleware('auth:api'); -Route::post('Users/ChangeStatus/{User}', 'UserController@changeStatus')->middleware('auth:api'); -Route::post('Users/ChangeRole/{User}', 'UserController@changeRole')->middleware('auth:api'); -Route::post('UpdateInfo', 'UserController@updateInfo')->middleware('auth:api'); -Route::resource('Users', 'UserController'); -Route::post('/TestResults/Verify/{TestResult}', 'TestResultController@verifyTestResult'); + Route::get('/GetInfo', 'UserController@getInfo'); + Route::get('Users/MedicalCenter/{MedicalCenter}', 'UserController@getByMedicalCenter'); + Route::post('Users/ChangeStatus/{User}', 'UserController@changeStatus'); + Route::post('Users/ChangeRole/{User}', 'UserController@changeRole'); + Route::post('UpdateInfo', 'UserController@updateInfo'); + Route::resource('Users', 'UserController'); +});
{{ item.name }}