diff --git a/app/Http/Controllers/ComputerController.php b/app/Http/Controllers/ComputerController.php index 4beb41c..133e1d6 100644 --- a/app/Http/Controllers/ComputerController.php +++ b/app/Http/Controllers/ComputerController.php @@ -32,7 +32,7 @@ class ComputerController extends Controller ]); $computer = Computer::create($request->all()); - return response()->json($wish, 201); + return response()->json($computer, 201); } public function update(Request $request) diff --git a/app/Http/Controllers/JobController.php b/app/Http/Controllers/JobController.php index efa3c10..245260a 100644 --- a/app/Http/Controllers/JobController.php +++ b/app/Http/Controllers/JobController.php @@ -7,59 +7,50 @@ use Illuminate\Http\Request; class JobController extends Controller { - /** - * Display a listing of the resource. - */ public function index() { - // + return Job::select()->get(); } - /** - * Show the form for creating a new resource. - */ - public function create() - { - // + public function getByComputerId(Request $request){ + return Job::select()->where('computer_id', '=', $request->get('computer_id'))->get(); } - /** - * Store a newly created resource in storage. - */ - public function store(Request $request) + public function create(Request $request) { - // + $request->validate([ + 'computer_id' => 'required|exists:computers,id', + 'description' => 'required|string|max:256', + 'status' => 'nullable|boolean' + ]); + + $job = Job::create($request->all()); + return response()->json($job, 201); } - /** - * Display the specified resource. - */ - public function show(Job $job) + public function update(Request $request) { - // + $request->validate([ + 'id' => 'required|exists:jobs,id', + 'computer_id' => 'required|exists:computers,id', + 'description' => 'required|string|max:256', + 'status' => 'nullable|boolean' + ]); + + $job = Job::find($request->get('id')); + $job->computer_id = $request->get('computer_id'); + $job->description = $request->get('description'); + $job->status = $request->get('status'); + $job->save(); + return response()->json($job); } - /** - * Show the form for editing the specified resource. - */ - public function edit(Job $job) + public function destroy(Request $request) { - // - } - - /** - * Update the specified resource in storage. - */ - public function update(Request $request, Job $job) - { - // - } - - /** - * Remove the specified resource from storage. - */ - public function destroy(Job $job) - { - // + $request->validate([ + 'id' => 'required|exists:jobs,id', + ]); + $destroyed = Job::destroy($request->get('id')); + return response()->json($destroyed, 204); } } diff --git a/resources/App.vue b/resources/App.vue index 5147bf8..27502af 100644 --- a/resources/App.vue +++ b/resources/App.vue @@ -27,13 +27,18 @@ - Главная - Войти - Регистрация - Выйти + + Welcome {{ authenticated ? userStore.user['name'] : 'guest' }}! + + + Главная + Войти + Регистрация + Выйти + diff --git a/resources/app.js b/resources/app.js index eadab36..f453819 100644 --- a/resources/app.js +++ b/resources/app.js @@ -7,7 +7,8 @@ import * as components from 'vuetify/components' import * as directives from 'vuetify/directives' import '@mdi/font/css/materialdesignicons.css' import Login from "./views/Login.vue"; -import About from "./views/About.vue"; +import ComputersList from "./views/ComputersList.vue"; +import JobsList from "./views/JobsList.vue"; import Register from "./views/Register.vue"; import {createMemoryHistory, createRouter} from "vue-router"; import { createPinia } from 'pinia'; @@ -15,9 +16,10 @@ import { createPinia } from 'pinia'; const pinia = createPinia(); const routes = [ - {path: '/', component: About, props: true}, + {path: '/', component: ComputersList, props: true}, {path: '/login', component: Login, props: true}, - {path: '/register', component: Register, props: true} + {path: '/register', component: Register, props: true}, + {path: '/jobs', component: JobsList, props: true}, ] const router = createRouter({ diff --git a/resources/css/app.css b/resources/css/app.css index 56ea6d5..ede7952 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -4,6 +4,14 @@ text-decoration-color: #e0e0e0!important; } +.cursor-pointer { + cursor: pointer; +} + +.text-decoration-none { + text-decoration: none; +} + .bg-gradient { background: linear-gradient(-45deg, #f103b0, #f0a068, #4fdbfeff)!important; background-size: 200% 200%!important; @@ -204,7 +212,7 @@ stroke-dashoffset: -64px; } .ham8.active .middle { -//stroke-dashoffset: -20px; +/*stroke-dashoffset: -20px;*/ transform: rotate(90deg); } .ham8.active .bottom { diff --git a/resources/js/rules.js b/resources/js/rules.js new file mode 100644 index 0000000..1b0d344 --- /dev/null +++ b/resources/js/rules.js @@ -0,0 +1,18 @@ +export const rules = { + email: value => { + const pattern = /^[A-Za-z0-9\._]+@{1}[A-Za-z0-9]+\.[a-z]+$/ + return pattern.test(value) || 'Неверный email' + }, + notNull: value => { + return (value !== null && value !== undefined && value !== '') || 'Поле не может быть пустым'; + }, + id: value => { + return (value !== null && value !== undefined && typeof value == 'number') || 'Неверный id'; + }, + price: value => { + return (typeof value == 'number' || typeof value == 'undefined' || value === null) || 'Стоимость должна быть числом'; + }, + isNumber: value => { + return /^\d+[\.,\,]?\d*$/.test(value); + } +} diff --git a/resources/store/computers.js b/resources/store/computers.js new file mode 100644 index 0000000..173c5f6 --- /dev/null +++ b/resources/store/computers.js @@ -0,0 +1,38 @@ +import {defineStore} from 'pinia' +import axios from "axios"; +import {useUserStore} from "./auth.js"; + +export const useComputersStore = defineStore('computers', { + state: () => ({ + computers: [], + token: null, + }), + actions: { + setToken(token) { + this.token = token; + localStorage.setItem('auth_token', token); + }, + checkToken(){ + this.token = this.useUserStore().token; + }, + async getComputerList(user_id){ + if (this.token === null){ + this.checkToken(); + } + await axios.get( + '/api/data/computers/byUser', + { + headers: { + Authorization: `Bearer ${this.token}`, + token: this.token + }, + params: { + user_id: user_id + } + } + ).then((response)=>{ + this.computers = response.data; + }) + } + }, +}) diff --git a/resources/views/About.vue b/resources/views/About.vue deleted file mode 100644 index e9b720e..0000000 --- a/resources/views/About.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Welcome {{ authenticated ? userStore.user['name'] : 'guest' }}! - - - - diff --git a/resources/views/ComputersList.vue b/resources/views/ComputersList.vue new file mode 100644 index 0000000..706c976 --- /dev/null +++ b/resources/views/ComputersList.vue @@ -0,0 +1,94 @@ + + + + + + + + + + {{ computer['name'] }} + + CPU: {{ computer['cpu'] }} + Motherboard: {{ computer['motherboard'] }} + GPU: {{ computer['gpu'] }} + Дополнительная информация: {{ computer['additional_info'] }} + + + + + + + + + + + + + + + + + Создание нового компьютера + + + + + + + Создать + + + + + + diff --git a/resources/views/JobsList.vue b/resources/views/JobsList.vue new file mode 100644 index 0000000..8329039 --- /dev/null +++ b/resources/views/JobsList.vue @@ -0,0 +1,36 @@ + + + + + + Назад + + + + + + + + + diff --git a/routes/api.php b/routes/api.php index 194ab4d..eb287aa 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,6 +2,7 @@ use App\Http\Controllers\API\AuthController; use App\Http\Controllers\ComputerController; +use App\Http\Controllers\JobController; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; @@ -31,8 +32,20 @@ Route::group(['prefix' => 'auth'], function () { }); Route::group(['prefix' => 'data'], function () { - Route::get('computers/all', [ComputerController::class, 'index']); - Route::post('computers/create', [ComputerController::class, 'create']); - Route::post('computers/save', [ComputerController::class, 'update']); - Route::post('computers/delete', [ComputerController::class, 'destroy']); -}); \ No newline at end of file + Route::group(['middleware' => 'auth:sanctum'], function() { + Route::group(['prefix' => 'computers'], function () { + Route::get('all', [ComputerController::class, 'index']); + Route::get('byUser', [ComputerController::class, 'getByUserId']); + Route::post('create', [ComputerController::class, 'create']); + Route::post('save', [ComputerController::class, 'update']); + Route::post('delete', [ComputerController::class, 'destroy']); + }); + Route::group(['prefix' => 'jobs'], function () { + Route::get('all', [JobController::class, 'index']); + Route::get('byComputer', [JobController::class, 'getByComputerId']); + Route::post('create', [JobController::class, 'create']); + Route::post('save', [JobController::class, 'update']); + Route::post('delete', [JobController::class, 'destroy']); + }); + }); +});
Главная
Войти
Регистрация
Выйти