1
1
<script setup lang="ts">
2
2
import { VForm } from ' vuetify/components/VForm'
3
-
4
- interface Permission {
5
- name: string
6
- read: boolean
7
- write: boolean
8
- create: boolean
9
- }
10
-
11
- interface Roles {
12
- name: string
13
- permissions: Permission []
14
- }
3
+ import { usePermissionStore } from ' ~/stores/admin/permission'
4
+ import { type Role , useRoleStore } from ' ~/stores/admin/role'
15
5
16
6
interface Props {
17
- rolePermissions? : Roles
18
7
isDialogVisible: boolean
8
+ roleData? : Partial <Role >
19
9
}
20
10
interface Emit {
21
11
(e : ' update:isDialogVisible' , value : boolean ): void
22
- (e : ' update:rolePermissions' , value : Roles ): void
12
+ (e : ' update:rolePermissions' , value : Partial < Role > ): void
23
13
}
24
14
25
- const props = withDefaults (defineProps <Props >(), {
26
- rolePermissions : () => ({
27
- name: ' ' ,
28
- permissions: [],
29
- }),
30
- })
31
-
15
+ const props = defineProps <Props >()
32
16
const emit = defineEmits <Emit >()
33
17
34
- // 👉 Permission List
35
- const permissions = ref <Permission []>([
36
- {
37
- name: ' User Management' ,
38
- read: false ,
39
- write: false ,
40
- create: false ,
41
- },
42
- {
43
- name: ' Content Management' ,
44
- read: false ,
45
- write: false ,
46
- create: false ,
47
- },
48
- {
49
- name: ' Disputes Management' ,
50
- read: false ,
51
- write: false ,
52
- create: false ,
53
- },
54
- {
55
- name: ' Database Management' ,
56
- read: false ,
57
- write: false ,
58
- create: false ,
59
- },
60
- {
61
- name: ' Financial Management' ,
62
- read: false ,
63
- write: false ,
64
- create: false ,
65
- },
66
- {
67
- name: ' Reporting' ,
68
- read: false ,
69
- write: false ,
70
- create: false ,
71
- },
72
- {
73
- name: ' API Control' ,
74
- read: false ,
75
- write: false ,
76
- create: false ,
77
- },
78
- {
79
- name: ' Repository Management' ,
80
- read: false ,
81
- write: false ,
82
- create: false ,
83
- },
84
- {
85
- name: ' Payroll' ,
86
- read: false ,
87
- write: false ,
88
- create: false ,
89
- },
90
- ])
18
+ const roleStore = useRoleStore ()
19
+ const { roleList } = storeToRefs (roleStore )
20
+ const permissionStore = usePermissionStore ()
21
+ const { permissionList } = storeToRefs (permissionStore )
91
22
92
- const isSelectAll = ref (false )
93
- const role = ref (' ' )
94
23
const refPermissionForm = ref <VForm >()
24
+ const isFormValid = ref (false )
95
25
96
- const checkedCount = computed (() => {
97
- let counter = 0
98
-
99
- permissions .value .forEach ((permission ) => {
100
- Object .entries (permission ).forEach (([key , value ]) => {
101
- if (key !== ' name' && value )
102
- counter ++
103
- })
104
- })
105
-
106
- return counter
26
+ const isSelectAll = ref (false )
27
+ const localRoleData = ref <Partial <Role >>({
28
+ id: ' ' ,
29
+ name: ' ' ,
107
30
})
108
31
109
- const isIndeterminate = computed (() => checkedCount .value > 0 && checkedCount .value < (permissions .value .length * 3 ))
32
+ // const checkedCount = computed(() => {
33
+ // let counter = 0
34
+
35
+ // permissions.value.forEach((permission) => {
36
+ // Object.entries(permission).forEach(([key, value]) => {
37
+ // if (key !== 'name' && value)
38
+ // counter++
39
+ // })
40
+ // })
41
+
42
+ // return counter
43
+ // })
44
+
45
+ // const isIndeterminate = computed(() => checkedCount.value > 0 && checkedCount.value < (permissions.value.length * 3))
46
+
47
+ // // select all
48
+ // watch(isSelectAll, (val) => {
49
+ // permissions.value = permissions.value.map(permission => ({
50
+ // ...permission,
51
+ // read: val,
52
+ // write: val,
53
+ // create: val,
54
+ // }))
55
+ // })
56
+
57
+ // // if Indeterminate is false, then set isSelectAll to false
58
+ // watch(isIndeterminate, () => {
59
+ // if (!isIndeterminate.value)
60
+ // isSelectAll.value = false
61
+ // })
62
+
63
+ // // if all permissions are checked, then set isSelectAll to true
64
+ // watch(permissions, () => {
65
+ // if (checkedCount.value === (permissions.value.length * 3))
66
+ // isSelectAll.value = true
67
+ // }, { deep: true })
68
+
69
+ // // if rolePermissions is not empty, then set permissions
70
+ // watch(() => props, () => {
71
+ // if (props.rolePermissions && props.rolePermissions.permissions.length) {
72
+ // role.value = props.rolePermissions.name
73
+ // permissions.value = permissions.value.map((permission) => {
74
+ // const rolePermission = props.rolePermissions?.permissions.find(item => item.name === permission.name)
75
+
76
+ // if (rolePermission) {
77
+ // return {
78
+ // ...permission,
79
+ // ...rolePermission,
80
+ // }
81
+ // }
82
+
83
+ // return permission
84
+ // })
85
+ // }
86
+ // })
110
87
111
- // select all
112
- watch (isSelectAll , (val ) => {
113
- permissions .value = permissions .value .map (permission => ({
114
- ... permission ,
115
- read: val ,
116
- write: val ,
117
- create: val ,
118
- }))
119
- })
88
+ function onReset() {
89
+ emit (' update:isDialogVisible' , false )
120
90
121
- // if Indeterminate is false, then set isSelectAll to false
122
- watch (isIndeterminate , () => {
123
- if (! isIndeterminate .value )
124
- isSelectAll .value = false
125
- })
91
+ isSelectAll .value = false
92
+ refPermissionForm .value ?.reset ()
126
93
127
- // if all permissions are checked, then set isSelectAll to true
128
- watch (permissions , () => {
129
- if (checkedCount .value === (permissions .value .length * 3 ))
130
- isSelectAll .value = true
131
- }, { deep: true })
132
-
133
- // if rolePermissions is not empty, then set permissions
134
- watch (() => props , () => {
135
- if (props .rolePermissions && props .rolePermissions .permissions .length ) {
136
- role .value = props .rolePermissions .name
137
- permissions .value = permissions .value .map ((permission ) => {
138
- const rolePermission = props .rolePermissions ?.permissions .find (item => item .name === permission .name )
139
-
140
- if (rolePermission ) {
141
- return {
142
- ... permission ,
143
- ... rolePermission ,
144
- }
145
- }
146
-
147
- return permission
148
- })
94
+ localRoleData .value = {
95
+ id: ' ' ,
96
+ name: ' ' ,
149
97
}
150
- })
98
+ }
151
99
152
100
function onSubmit() {
153
- const rolePermissions = {
154
- name: role .value ,
155
- permissions: permissions .value ,
156
- }
157
-
158
- emit (' update:rolePermissions' , rolePermissions )
159
- emit (' update:isDialogVisible' , false )
160
- isSelectAll .value = false
161
- refPermissionForm .value ?.reset ()
101
+ refPermissionForm .value ?.validate ().then (({ valid }) => {
102
+ if (valid ) {
103
+ emit (' update:rolePermissions' , props .roleData
104
+ ? localRoleData .value
105
+ : {
106
+ name: localRoleData .value .name ,
107
+ })
108
+
109
+ onReset ()
110
+ }
111
+ })
162
112
}
163
113
164
- function onReset() {
165
- emit ( ' update:isDialogVisible ' , false )
166
- isSelectAll .value = false
167
- refPermissionForm . value ?. reset ()
168
- }
114
+ watch (() => props . roleData , ( newRoleData ) => {
115
+ if ( newRoleData ) {
116
+ localRoleData .value = { ... newRoleData }
117
+ }
118
+ }, { immediate: true })
169
119
</script >
170
120
171
121
<template >
@@ -186,19 +136,16 @@ function onReset() {
186
136
<!-- 👉 Title -->
187
137
<div class =" text-center mb-10" >
188
138
<h4 class =" text-h4 mb-2" >
189
- {{ props.rolePermissions.name ? 'Edit ' : 'Add ' }} Role
139
+ {{ ! props.roleData ? 'Add ' : 'Edit ' }} Role
190
140
</h4 >
191
-
192
- <p class =" text-body-1" >
193
- {{ props.rolePermissions.name ? 'Edit' : 'Add' }} Role
194
- </p >
195
141
</div >
196
142
197
143
<!-- 👉 Form -->
198
- <VForm ref =" refPermissionForm" >
144
+ <VForm ref =" refPermissionForm" v-model = " isFormValid " @submit.prevent >
199
145
<!-- 👉 Role name -->
200
146
<VTextField
201
- v-model =" role"
147
+ v-model =" localRoleData.name"
148
+ :rules =" [requiredValidator]"
202
149
label =" Role Name"
203
150
placeholder =" Enter Role Name"
204
151
/>
@@ -211,9 +158,9 @@ function onReset() {
211
158
212
159
<VTable class =" permission-table text-no-wrap" >
213
160
<!-- 👉 Admin -->
214
- <tr >
161
+ <!-- < tr>
215
162
<td class="text-h6">
216
- Administrator Access
163
+ Admin
217
164
</td>
218
165
<td colspan="3">
219
166
<div class="d-flex justify-end">
@@ -224,16 +171,16 @@ function onReset() {
224
171
/>
225
172
</div>
226
173
</td>
227
- </tr >
174
+ </tr> -->
228
175
229
176
<!-- 👉 Other permission loop -->
230
- <template
231
- v-for =" permission in permissions "
232
- :key =" permission .name "
177
+ <!-- < template
178
+ v-for="permission in permissionList "
179
+ :key="permission.id "
233
180
>
234
181
<tr>
235
182
<td class="text-h6">
236
- {{ permission.name }}
183
+ {{ permission.action }}
237
184
</td>
238
185
<td style="inline-size: 5.75rem;">
239
186
<div class="d-flex justify-end">
@@ -260,7 +207,7 @@ function onReset() {
260
207
</div>
261
208
</td>
262
209
</tr>
263
- </template >
210
+ </template> -->
264
211
</VTable >
265
212
266
213
<!-- 👉 Actions button -->
0 commit comments