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>
|