Files
ostandari/pages/admin/pages/index.vue
T
2024-10-21 10:22:26 +03:30

203 lines
5.5 KiB
Vue

<template>
<div>
<CustomSubHeader>
<CBreadcrumb class="border-0 mb-0">{{ title }}</CBreadcrumb>
<CButton v-if="!$auth.user.specialPermissions.length" size="sm" color="success" :to="{name: 'admin-pages-details',params:{details: 'new'}}" class="mr-auto">
افزودن
</CButton>
</CustomSubHeader>
<CCard>
<CCardHeader>
<slot name="header">
<i class="fal fa-filter"></i>
<span style="color:#000">فیلتر</span>
</slot>
</CCardHeader>
<CCardBody>
<CRow>
<CCol class="col">
<CRow>
<el-input
v-model="search"
size="medium"
placeholder="جستجو"/>
</CRow>
</CCol>
</CRow>
</CCardBody>
</CCard>
<CCard>
<CCardHeader>
<slot name="header">
<i class="fal fa-bars"></i>
<span>{{ list_title }}</span>
</slot>
<slot>
</slot>
</CCardHeader>
<CCardBody>
<el-tree
:data="filteredPages"
:props="defaultProps"
class="filter-tree"
:filter-node-method="filterNode"
ref="tree"
@node-click="handleNodeClick"
>
<span class="custom-tree-node" slot-scope="{ node }">
<span style="flex: content;">{{ node.label }}</span>
<el-tag class="flagType" style="width: 80px;text-align: center;">{{
node.data.modelType === 'ostandari' ? 'استانداری' : 'ستاد انتخابات'
}}</el-tag>
<span style="margin-left: 10px;" class="btns">
<el-button
v-if="!$auth.user.specialPermissions.length"
type="text"
icon="el-icon-plus"
style="color : lightseagreen"
size="medium"
@click="() => append(node)">
</el-button>
<el-button
type="text"
icon="el-icon-edit-outline"
style="color : orange"
size="medium"
@click="() => goUpdate(node)">
</el-button>
<el-button
v-if="!$auth.user.specialPermissions.length"
type="text"
icon="el-icon-delete"
style="color : red"
size="medium"
@click="() => deletePage(node.data._id)">
</el-button>
</span>
</span>
</el-tree>
</CCardBody>
</CCard>
</div>
</template>
<script>
export default {
data() {
return {
title: 'لیست صفحات',
list_title: 'لیست',
pages: null,
search: '',
defaultProps: {
children: 'childs',
label: 'title'
}
}
},
computed: {
filteredPages() {
if (this.$auth.user.permissions.includes('superAdmin')) return this.pages
else return this.pages.map(item => {
return {
...item,
childs: []
}
})
}
},
watch: {
search(val) {
this.$refs.tree.filter(val);
}
},
methods: {
filterNode(value, data) {
if (!value) return true;
return data.title.indexOf(value) !== -1;
},
append(data) {
this.$router.push({
name: "admin-pages-details",
params: {details: 'new'},
query: {parent: data.data._id, type: data.data.modelType}
});
},
goUpdate(data) {
this.$router.push({name: "admin-pages-details", params: {details: data.data._id}});
},
handleNodeClick(data) {
// console.log(data);
},
deletePage(id) {
this.$confirm('صفحه حذف شود؟', 'هشدار', {
confirmButtonText: 'بله',
cancelButtonText: 'لغو',
type: 'warning'
}).then(async () => {
this.$axios.delete(`/api/admin/category/${id}`)
.then(res => {
this.$message({
type: 'success',
message: 'صفحه با موفقیت حذف شد'
})
this.pages = this.pages.filter(item => item._id !== id)
this.$nuxt.refresh();
})
.catch(err => {
if (err.response.status === 401) {
return this.$message({
type: 'error',
message: 'لطفا دوباره وارد سیستم شوید.'
})
}
if (err.response.status === 403) {
return this.$message({
type: 'error',
message: err.response.data.message
})
}
if (err.response.status === 422) {
return this.$message({
type: 'error',
message: err.response.data.message
})
}
console.log(err.response.data)
})
}).catch(() => {
this.$message({
type: 'warning',
message: 'عملیات لغو شد'
})
})
}
},
head() {
return {
title: this.title
}
},
layout: 'admin',
async asyncData({$axios, error}) {
try {
const category = await $axios.get(`/api/admin/category`);
return {
pages: category.data
}
} catch (e) {
if (e?.response?.status === 401) {
error({status: 401, message: 'شما اجازه دسترسی به این صفحه را ندارید'})
} else {
error({status: 500, message: 'there is a problem here'})
}
}
}
}
</script>