From 34becd64a00bb360b10fc394e7ba7a00745fdf94 Mon Sep 17 00:00:00 2001
From: "p.belezov"
Date: Sat, 2 Nov 2024 14:12:24 +0800
Subject: [PATCH] =?UTF-8?q?=D0=9C=D1=83=D1=82=D0=B8=D0=BC=20=D1=84=D0=BE?=
=?UTF-8?q?=D1=80=D0=BC=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/Http/Controllers/ComputerController.php | 7 ++-
app/Http/Controllers/JobController.php | 11 +++++
app/Models/Computer.php | 2 +-
...24_10_31_091008_create_computers_table.php | 1 +
resources/App.vue | 6 ++-
resources/store/computers.js | 21 +++++++-
resources/views/Computers/CreateForm.vue | 10 +++-
resources/views/ComputersList.vue | 48 +++++++++++++++++--
8 files changed, 94 insertions(+), 12 deletions(-)
diff --git a/app/Http/Controllers/ComputerController.php b/app/Http/Controllers/ComputerController.php
index 133e1d6..fd780f7 100644
--- a/app/Http/Controllers/ComputerController.php
+++ b/app/Http/Controllers/ComputerController.php
@@ -26,6 +26,7 @@ class ComputerController extends Controller
'user_id' => 'required|exists:users,id',
'name' => 'required|string|max:256',
'cpu' => 'nullable|string|max:256',
+ 'ram' => 'nullable|string|max:256',
'motherboard' => 'nullable|string|max:256',
'gpu' => 'nullable|string|max:256',
'additional_info' => 'nullable|string|max:256',
@@ -41,6 +42,7 @@ class ComputerController extends Controller
'id' => 'required|exists:computers,id',
'name' => 'required|string|max:256',
'cpu' => 'nullable|string|max:256',
+ 'ram' => 'nullable|string|max:256',
'motherboard' => 'nullable|string|max:256',
'gpu' => 'nullable|string|max:256',
'additional_info' => 'nullable|string|max:256',
@@ -60,10 +62,11 @@ class ComputerController extends Controller
public function destroy(Request $request)
{
$request->validate([
- 'id' => 'required|exists:wishes,id',
+ 'id' => 'required|exists:computers,id',
]);
+ $computer = Computer::find($request->get('id'));
+ JobController::destroyByComputerId($computer);
$destroyed = Computer::destroy($request->get('id'));
return response()->json($destroyed, 204);
-
}
}
diff --git a/app/Http/Controllers/JobController.php b/app/Http/Controllers/JobController.php
index 245260a..647e6d7 100644
--- a/app/Http/Controllers/JobController.php
+++ b/app/Http/Controllers/JobController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Models\Job;
+use App\Models\Computer;
use Illuminate\Http\Request;
class JobController extends Controller
@@ -53,4 +54,14 @@ class JobController extends Controller
$destroyed = Job::destroy($request->get('id'));
return response()->json($destroyed, 204);
}
+
+ public static function destroyByComputerId(Computer $computer)
+ {
+ $computerId = $computer->id;
+ $jobs = Job::select()->where('computer_id', '=', $computerId)->get();
+ foreach ($jobs as $job){
+ Job::destroy($job->id);
+ }
+ return true;
+ }
}
diff --git a/app/Models/Computer.php b/app/Models/Computer.php
index 50fbd4e..1a724f5 100644
--- a/app/Models/Computer.php
+++ b/app/Models/Computer.php
@@ -8,7 +8,7 @@ use Illuminate\Database\Eloquent\Model;
class Computer extends Model
{
use HasFactory;
- protected $fillable = ['user_id', 'name', 'cpu', 'motherboard', 'gpu', 'additional_info'];
+ protected $fillable = ['user_id', 'name', 'cpu', 'ram', 'motherboard', 'gpu', 'additional_info'];
public function user(){
return $this->belongsTo(User::class);
diff --git a/database/migrations/2024_10_31_091008_create_computers_table.php b/database/migrations/2024_10_31_091008_create_computers_table.php
index 8d1e133..92e6244 100644
--- a/database/migrations/2024_10_31_091008_create_computers_table.php
+++ b/database/migrations/2024_10_31_091008_create_computers_table.php
@@ -17,6 +17,7 @@ return new class extends Migration
$table->foreign('user_id')->references('id')->on('users');
$table->string('name', length: 256);
$table->string('cpu', length: 256)->nullable();
+ $table->string('ram', length: 256)->nullable();
$table->string('motherboard', length: 256)->nullable();
$table->string('gpu', length: 256)->nullable();
$table->string('additional_info', length: 256)->nullable();
diff --git a/resources/App.vue b/resources/App.vue
index 27502af..fb92bfe 100644
--- a/resources/App.vue
+++ b/resources/App.vue
@@ -44,7 +44,6 @@
@@ -93,6 +92,11 @@ export default {
this.userStore.checkUser();
watch(this.userStore, (newStore)=>{
this.authenticated = newStore.user !== null && newStore.user !== undefined;
+ if (!this.authenticated){
+ this.$router.push('/login');
+ } else {
+ this.$router.push('/');
+ }
});
}
}
diff --git a/resources/store/computers.js b/resources/store/computers.js
index a7f6828..ab7cd9e 100644
--- a/resources/store/computers.js
+++ b/resources/store/computers.js
@@ -34,7 +34,7 @@ export const useComputersStore = defineStore('computers', {
this.computers = response.data;
})
},
- async create(name, cpu, motherboard, gpu, additional_info){
+ async create(name, cpu, ram, motherboard, gpu, additional_info){
if (this.token === null){
this.checkToken();
}
@@ -42,6 +42,7 @@ export const useComputersStore = defineStore('computers', {
user_id: useUserStore().user['id'],
name: name,
cpu: cpu,
+ ram: ram,
motherboard: motherboard,
gpu: gpu,
additional_info: additional_info,
@@ -56,6 +57,24 @@ export const useComputersStore = defineStore('computers', {
}).catch(()=>{
return false;
});
+ },
+ async delete(id){
+ if (this.token === null){
+ this.checkToken();
+ }
+ await axios.post('/api/data/computers/delete', {
+ id: id,
+ }, {
+ headers: {
+ Authorization: `Bearer ${this.token}`,
+ token: this.token
+ },
+ }).then(()=>{
+ this.getComputerList(useUserStore().user['id']);
+ return true;
+ }).catch(()=>{
+ return false;
+ });
}
},
})
diff --git a/resources/views/Computers/CreateForm.vue b/resources/views/Computers/CreateForm.vue
index 8978d83..78e6fc0 100644
--- a/resources/views/Computers/CreateForm.vue
+++ b/resources/views/Computers/CreateForm.vue
@@ -16,6 +16,7 @@ export default {
return {
computerName: null,
computerCpu: null,
+ computerRam: null,
computerMotherboard: null,
computerGpu: null,
computerAdditional: null,
@@ -34,6 +35,7 @@ export default {
this.computersStore.create(
this.computerName,
this.computerCpu,
+ this.computerRam,
this.computerMotherboard,
this.computerGpu,
this.computerAdditional
@@ -48,15 +50,19 @@ export default {
- Создание нового компьютера
+
+ Создание нового компьютера
+
+
+
- Создать
+ Создать
diff --git a/resources/views/ComputersList.vue b/resources/views/ComputersList.vue
index 713bc51..505b337 100644
--- a/resources/views/ComputersList.vue
+++ b/resources/views/ComputersList.vue
@@ -4,7 +4,7 @@ import { useUserStore } from '../store/auth.js';
import {useComputersStore} from "../store/computers.js";
import CreateForm from './Computers/CreateForm.vue';
export default {
- name: "About",
+ name: "ComputersList",
components: {CreateForm},
data() {
return {
@@ -13,9 +13,12 @@ export default {
computerList: [],
createDialogShow: false,
editDialogShow: false,
+ deleteDialogShow: false,
fetching: false,
authenticated: false,
- editLoading: false
+ editLoading: false,
+ deleteLoading: false,
+ computerToDeleteId: null
};
},
methods: {
@@ -27,6 +30,19 @@ export default {
},
showEditDialog(){
this.editDialogShow = true;
+ },
+ showDeleteDialog(id){
+ this.deleteDialogShow = true;
+ this.computerToDeleteId = id;
+ },
+ hideDeleteDialog(){
+ this.deleteDialogShow = false;
+ },
+ deleteComputer(){
+ this.deleteLoading = true;
+ this.computersStore.delete(this.computerToDeleteId).then(()=>{
+ this.deleteLoading = false;
+ })
}
},
mounted() {
@@ -35,13 +51,19 @@ export default {
this.fetching = true;
this.authenticated = newStore.user !== null && newStore.user !== undefined;
this.computersStore.setToken(this.userStore.token);
- if (this.userStore.user['id']){
+ if (this.userStore.user !== null){
this.computersStore.getComputerList(this.userStore.user['id']).then(()=>{
this.computerList = this.computersStore.computers;
this.fetching = false;
})
}
});
+ watch(this.computersStore, (newStore)=>{
+ this.fetching = true;
+ this.computerList = this.computersStore.computers;
+ this.fetching = false;
+ this.hideDeleteDialog();
+ })
}
}
@@ -56,15 +78,19 @@ export default {
{{ computer['name'] }}
CPU: {{ computer['cpu'] }}
+ RAM: {{ computer['ram'] }}
Motherboard: {{ computer['motherboard'] }}
GPU: {{ computer['gpu'] }}
Дополнительная информация: {{ computer['additional_info'] }}
-
@@ -73,9 +99,21 @@ export default {
-
+
+
+
+
+ Вы уверены?
+ Это действие удалит компьютер и все действия связанные с ним
+
+ Да
+ Нет
+
+
+
+