search_ui/components/search/SearchAccordion.vue

235 lines
5.7 KiB
Vue
Raw Normal View History

2025-02-01 11:06:10 +00:00
<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>