Skip to content
This repository was archived by the owner on Jan 3, 2023. It is now read-only.

Commit 0c91268

Browse files
committed
add multi selection for delete
1 parent e5b1fc1 commit 0c91268

26 files changed

+384
-71
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ class User extends Authenticatable
5858
- install JS dependencies
5959

6060
```bash
61-
yarn add vue axios vue-tippy@v1 vuedraggable vue-notif list.js
61+
yarn add vue axios vue-tippy@v1 vuedraggable vue-notif vue-multi-ref list.js
6262
# or
63-
npm install vue axios vue-tippy@v1 vuedraggable vue-notif list.js --save
63+
npm install vue axios vue-tippy@v1 vuedraggable vue-notif vue-multi-ref list.js --save
6464
```
6565

6666
- add this one liner to your main js file and run `npm run watch` to compile your `js/css` files.

src/Controllers/Admin/MenusController.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,17 @@ public function destroy($id, Request $request)
126126

127127
return redirect()->route($this->crud_prefix . '.menus.index')->with('status', 'Model Deleted!');
128128
}
129+
130+
public function destroyMulti(Request $request)
131+
{
132+
$ids = explode(',', $request->ids);
133+
134+
foreach ($ids as $one) {
135+
$menu = Menu::find($one);
136+
$menu->pages()->detach();
137+
$menu->delete();
138+
}
139+
140+
return redirect()->route($this->crud_prefix . '.menus.index')->with('status', 'Models Deleted!');
141+
}
129142
}

src/Controllers/Admin/PagesController.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,23 @@ public function update($id, Request $request)
118118
*/
119119
public function destroy($id, Request $request)
120120
{
121-
$page = Page::find($id);
122-
$page->delete();
121+
Page::destroy($id);
123122

124123
if ($request->expectsJson()) {
125124
return response()->json(['done'=>true]);
126125
}
127126

128127
return redirect()->route($this->crud_prefix . '.pages.index')->with('status', 'Model Deleted!');
129128
}
129+
130+
public function destroyMulti(Request $request)
131+
{
132+
$ids = explode(',', $request->ids);
133+
134+
foreach ($ids as $one) {
135+
Page::destroy($one);
136+
}
137+
138+
return redirect()->route($this->crud_prefix . '.pages.index')->with('status', 'Models Deleted!');
139+
}
130140
}

src/Controllers/Admin/PermissionsController.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public function update($id, Request $request)
9595
*/
9696
public function destroy($id, Request $request)
9797
{
98-
Permission::find($id)->delete();
98+
Permission::destroy($id);
9999

100100
$this->clearCache();
101101

@@ -105,4 +105,15 @@ public function destroy($id, Request $request)
105105

106106
return redirect()->route($this->crud_prefix . '.permissions.index')->with('status', 'Model Deleted!');
107107
}
108+
109+
public function destroyMulti(Request $request)
110+
{
111+
$ids = explode(',', $request->ids);
112+
113+
foreach ($ids as $one) {
114+
Permission::destroy($one);
115+
}
116+
117+
return redirect()->route($this->crud_prefix . '.permissions.index')->with('status', 'Models Deleted!');
118+
}
108119
}

src/Controllers/Admin/RolesController.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public function update($id, Request $request)
106106
*/
107107
public function destroy($id, Request $request)
108108
{
109-
Role::find($id)->delete();
109+
Role::destroy($id);
110110

111111
$this->clearCache();
112112

@@ -116,4 +116,15 @@ public function destroy($id, Request $request)
116116

117117
return redirect()->route($this->crud_prefix . '.roles.index')->with('status', 'Model Deleted!');
118118
}
119+
120+
public function destroyMulti(Request $request)
121+
{
122+
$ids = explode(',', $request->ids);
123+
124+
foreach ($ids as $one) {
125+
Role::destroy($one);
126+
}
127+
128+
return redirect()->route($this->crud_prefix . '.roles.index')->with('status', 'Models Deleted!');
129+
}
119130
}

src/Controllers/Admin/UsersController.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,23 @@ public function destroy($id, Request $request)
120120
abort(403);
121121
}
122122

123-
$this->userModel->find($id)->delete();
123+
$this->userModel->destroy($id);
124124

125125
if ($request->expectsJson()) {
126126
return response()->json(['done'=>true]);
127127
}
128128

129129
return redirect()->route($this->crud_prefix . '.users.index')->with('status', 'Model Deleted!');
130130
}
131+
132+
public function destroyMulti(Request $request)
133+
{
134+
$ids = explode(',', $request->ids);
135+
136+
foreach ($ids as $one) {
137+
User::destroy($one);
138+
}
139+
140+
return redirect()->route($this->crud_prefix . '.users.index')->with('status', 'Models Deleted!');
141+
}
131142
}

src/Traits/Ops.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,21 +80,26 @@ public function menuRoutes()
8080
], function () use ($controllers) {
8181
/* Roles */
8282
Route::resource('roles', $controllers['roles'], ['except'=>'show']);
83+
Route::post('roles/remove-multi', $controllers['roles'] . '@destroyMulti')->name('roles.destroy_multi');
8384

8485
/* Perms */
8586
Route::resource('permissions', $controllers['permissions'], ['except'=>'show']);
87+
Route::post('permissions/remove-multi', $controllers['permissions'] . '@destroyMulti')->name('permissions.destroy_multi');
8688

8789
/* Menus */
8890
Route::post('menus/removechild', $controllers['menus'] . '@removeChild')->name('menus.removeChild');
8991
Route::post('menus/removepage/{id}', $controllers['menus'] . '@removePage')->name('menus.removePage');
9092
Route::get('menus/getmenupages/{id}', $controllers['menus'] . '@getMenuPages')->name('menus.getMenuPages');
9193
Route::resource('menus', $controllers['menus'], ['except'=>'show']);
94+
Route::post('menus/remove-multi', $controllers['menus'] . '@destroyMulti')->name('menus.destroy_multi');
9295

9396
/* Users */
9497
Route::resource('users', $controllers['users'], ['except'=>'show']);
98+
Route::post('users/remove-multi', $controllers['users'] . '@destroyMulti')->name('users.destroy_multi');
9599

96100
/* Pages */
97101
Route::resource('pages', $controllers['pages'], ['except'=>'show']);
102+
Route::post('pages/remove-multi', $controllers['pages'] . '@destroyMulti')->name('pages.destroy_multi');
98103
});
99104
});
100105
}

src/resources/assets/js/bulma/index-comp.vue

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ export default {
44
props: ['count'],
55
data() {
66
return {
7-
itemsCount: this.count
7+
itemsCount: this.count,
8+
ids: []
89
}
910
},
1011
mounted() {
@@ -24,6 +25,17 @@ export default {
2425
})
2526
},
2627
methods: {
28+
selectAll() {
29+
// clear
30+
if (this.ids.length) {
31+
return this.ids = []
32+
}
33+
34+
// add
35+
this.$refs['sm-ids'].map((e) => {
36+
this.ids.push(e.value)
37+
})
38+
},
2739
DelItem(event, name) {
2840
2941
let id = event.target.dataset.id
@@ -52,6 +64,7 @@ export default {
5264
5365
this.itemsCount = --this.itemsCount
5466
}
67+
5568
}).catch((err) => {
5669
console.error(err)
5770
})
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
$grey-lighter: #dbdbdb;
2+
$primary: #ff3860;
3+
4+
.cbx-checkbox {
5+
&[type='checkbox'],
6+
&:checked {
7+
display: none;
8+
}
9+
}
10+
11+
.cbx {
12+
position: relative;
13+
top: 1px;
14+
display: inline-block;
15+
width: 14px;
16+
height: 14px;
17+
margin-right: 6px;
18+
cursor: pointer;
19+
vertical-align: sub;
20+
border: 1px solid $grey-lighter;
21+
border-radius: 3px;
22+
23+
&::before {
24+
position: absolute;
25+
top: 50%;
26+
left: 50%;
27+
width: 20px;
28+
height: 20px;
29+
margin: -10px 0 0 -10px;
30+
content: '';
31+
transform: scale(0);
32+
border-radius: 100%;
33+
background: $primary;
34+
}
35+
36+
&::after {
37+
position: absolute;
38+
top: 5px;
39+
left: 5px;
40+
width: 2px;
41+
height: 2px;
42+
content: '';
43+
transform: scale(0);
44+
border-radius: 2px;
45+
box-shadow: 0 -18px 0 $primary, 12px -12px 0 $primary, 18px 0 0 $primary, 12px 12px 0 $primary, 0 18px 0 $primary, -12px 12px 0 $primary, -18px 0 0 $primary, -12px -12px 0 $primary;
46+
}
47+
48+
svg {
49+
position: relative;
50+
top: -1px;
51+
transform: scale(0);
52+
fill: none;
53+
stroke-linecap: round;
54+
stroke-linejoin: round;
55+
56+
polyline {
57+
stroke: $primary;
58+
stroke-width: 2;
59+
}
60+
}
61+
}
62+
63+
input:checked + .cbx {
64+
top: 0;
65+
border-color: transparent;
66+
67+
&::before {
68+
transition: all 0.3s ease;
69+
transform: scale(1);
70+
opacity: 0;
71+
}
72+
73+
&::after {
74+
transition: all 0.6s ease;
75+
transform: scale(1);
76+
opacity: 0;
77+
}
78+
79+
svg {
80+
transition: all 0.4s ease;
81+
transition-delay: 0.1s;
82+
transform: scale(1);
83+
}
84+
}

src/resources/assets/sass/style.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@import 'checkbox';
2+
13
td {
24
vertical-align: middle !important;
35
}

0 commit comments

Comments
 (0)