235 lines
5.7 KiB
Vue
235 lines
5.7 KiB
Vue
<template>
|
||
<div class="overlay-plugin firefox-scrollbar">
|
||
<div class="accordion ps-3" id="accordionExample">
|
||
<div
|
||
v-for="(item, index) in suggestions"
|
||
:key="index"
|
||
class="card border-0"
|
||
>
|
||
<div class="card-header border-bottom-0 p-0" :id="'heading-' + index">
|
||
<button
|
||
class="btn btn-link btn-block has-indicator"
|
||
type="button"
|
||
data-bs-toggle="collapse"
|
||
:data-bs-target="'#collapse-' + index"
|
||
aria-expanded="true"
|
||
:aria-controls="'collapse-' + index"
|
||
>
|
||
{{ item.title }}
|
||
</button>
|
||
</div>
|
||
<div
|
||
:id="'collapse-' + index"
|
||
class="collapse show"
|
||
:aria-labelledby="'heading-' + index"
|
||
data-parent="#accordionExample"
|
||
>
|
||
<div class="card-body">
|
||
<ul class="list-group list-group-flush">
|
||
<li
|
||
:key="j"
|
||
v-for="(child, j) in item.data"
|
||
class="list-group-item text__14"
|
||
>
|
||
<div class="form-check">
|
||
<input
|
||
@change.prevent="changePermission(child)"
|
||
class="form-check-input"
|
||
type="checkbox"
|
||
:checked="child?.check"
|
||
:value="child?.check"
|
||
:id="'role-' + j"
|
||
/>
|
||
<label class="form-check-label pe-2" :for="'role-' + j">
|
||
{{ child.title }}
|
||
</label>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import apis from "~/permission/permitApi";
|
||
import { mapState } from "pinia";
|
||
|
||
export default {
|
||
props: {
|
||
user_id: {
|
||
type: Number,
|
||
default: undefined,
|
||
},
|
||
role_id: {
|
||
type: Number,
|
||
default: undefined,
|
||
},
|
||
},
|
||
data() {
|
||
return {
|
||
suggestions: [
|
||
{
|
||
title: "موضوعات",
|
||
data: [
|
||
{
|
||
id: 1,
|
||
title: "اقتصاد کلان",
|
||
count: 1,
|
||
},
|
||
{
|
||
id: 2,
|
||
title: "اقتصاد کلان 2",
|
||
count: 2,
|
||
},
|
||
{
|
||
id: 3,
|
||
title: "اقتصاد کلان 3",
|
||
count: 3,
|
||
},
|
||
],
|
||
},
|
||
{
|
||
title: "نمایه ها",
|
||
data: [
|
||
{
|
||
id: 1,
|
||
title: "اقتصاد کلان",
|
||
count: 1,
|
||
},
|
||
{
|
||
id: 2,
|
||
title: "اقتصاد کلان 2",
|
||
count: 2,
|
||
},
|
||
{
|
||
id: 3,
|
||
title: "اقتصاد کلان 3",
|
||
count: 3,
|
||
},
|
||
],
|
||
},
|
||
{
|
||
title: "برچسب ها",
|
||
data: [
|
||
{
|
||
id: 1,
|
||
title: "اقتصاد کلان",
|
||
count: 1,
|
||
},
|
||
{
|
||
id: 2,
|
||
title: "اقتصاد کلان 2",
|
||
count: 2,
|
||
},
|
||
{
|
||
id: 3,
|
||
title: "اقتصاد کلان 3",
|
||
count: 3,
|
||
},
|
||
],
|
||
},
|
||
],
|
||
collapseAll: false,
|
||
grouplist: [],
|
||
groupbyList: {},
|
||
roles: [],
|
||
};
|
||
},
|
||
computed: {
|
||
...mapState("permit", ["projectGetter"]),
|
||
},
|
||
mounted() {
|
||
// this.getRoles();
|
||
},
|
||
methods: {
|
||
getRoles() {
|
||
const payload = {
|
||
user_id: this.user_id,
|
||
role_id: this.role_id,
|
||
project_id: this.projectGetter?.id,
|
||
};
|
||
|
||
const { listUserPermission, listRolePermission } = apis.permissions;
|
||
const url = this.user_id ? listUserPermission : listRolePermission;
|
||
|
||
ApiService.formData(url, payload).then(({ data }) => {
|
||
this.listUserPermission = data.data;
|
||
this.groupbyList = this.groupBy(data.data, "section_title");
|
||
});
|
||
},
|
||
|
||
changePermission(action) {
|
||
action.check
|
||
? this.deletePermission(action)
|
||
: this.addOrUpdatePermission(action);
|
||
},
|
||
addOrUpdatePermission(action) {
|
||
const payload = {
|
||
user_id: this.user_id,
|
||
role_id: this.role_id,
|
||
project_id: this.projectGetter?.id,
|
||
section_id: action.section_id,
|
||
state: 0,
|
||
section_user_id: action.section_user_id ?? undefined,
|
||
section_role_id: action.section_role_id ?? undefined,
|
||
};
|
||
|
||
const { addOrEditUserPermission, addOrEditRolePermission } =
|
||
apis.permissions;
|
||
const url = this.user_id
|
||
? addOrEditUserPermission
|
||
: addOrEditRolePermission;
|
||
|
||
ApiService.formData(url, payload).then(({ data }) => {
|
||
this.mySwalToast({
|
||
title: "تبریک",
|
||
html: data.message,
|
||
icon: "success",
|
||
});
|
||
});
|
||
|
||
action.check = true;
|
||
},
|
||
deletePermission(action) {
|
||
const payload = {
|
||
project_id: this.projectGetter?.id,
|
||
|
||
id: action.section_user_id ?? undefined,
|
||
};
|
||
if (action.section_role_id) payload.id = action.section_role_id;
|
||
|
||
const { deleteUserPermission, deleteRolePermission } = apis.permissions;
|
||
const url = this.user_id ? deleteUserPermission : deleteRolePermission;
|
||
|
||
ApiService.formData(url, payload).then(({ data }) => {
|
||
this.mySwalToast({
|
||
title: "تبریک",
|
||
html: data.message,
|
||
icon: "success",
|
||
});
|
||
|
||
action.check = false;
|
||
});
|
||
},
|
||
},
|
||
watch: {
|
||
role_id() {
|
||
this.getRoles();
|
||
},
|
||
user_id() {
|
||
this.getRoles();
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
.overlay-plugin {
|
||
height: 20em;
|
||
overflow:auto
|
||
}
|
||
</style>
|