feat: add ci cd files dont edit those files

This commit is contained in:
mahyargdz
2024-10-21 10:22:26 +03:30
commit fb5b440d42
321 changed files with 188273 additions and 0 deletions
+694
View File
@@ -0,0 +1,694 @@
<template>
<div>
<CustomSubHeader>
<CBreadcrumb class="border-0 mb-0">{{ title }}</CBreadcrumb>
<CButton size="sm" color="primary" class="mr-auto" :to="{ name: 'admin-pages' }">برگشت به صفحه قبل</CButton>
<CButton v-if="$route.params.details === 'new'" size="sm" color="success" class="mr-1" @click="post">افزودن
</CButton>
<CButton v-else size="sm" color="success" class="mr-1" @click="update">بروزرسانی</CButton>
</CustomSubHeader>
<CRow>
<CCol sm="12">
<CCard>
<CCardBody>
<CForm>
<CRow>
<CCol lg="6">
<h6>قسمت انتخابی <i v-c-tooltip="'شما باید تعیین کنید که این صفحه برای کدام قسمت پرتال می باشد'"
class="fas fa-question-circle"></i></h6>
<el-select
:disabled="$route.params.details !== 'new' ? true : $auth.user.portals.length===1"
v-model="page.modelType"
placeholder="انتخاب کنید"
style="width: 100%;"
>
<el-option
v-for="item in portals"
:key="item.value"
:label="item.name"
:value="item.value"
>
</el-option>
</el-select>
<p style="margin-top : 5px !important ; color : red" class="form-err" v-if="validation.modelType">
{{ validation.modelType.msg }}</p>
<el-divider/>
<template v-if="page.modelType">
<CRow>
<CCol sm="12">
<h6>{{ this.$route.params.details !== 'new' ? 'دسته بندی' : 'انتخاب دسته بندی' }}</h6>
<el-select :disabled="$route.params.details !== 'new'" filterable clearable style="width : 100%"
v-model="page.parent" placeholder="انتخاب دسته بندی">
<el-option v-for="item in filterParent" :key="item._id" :label="item.title" :value="item._id">
<!-- <span>{{setTitle(item)}}</span> -->
</el-option>
</el-select>
</CCol>
</CRow>
<el-divider/>
</template>
<CRow>
<CCol sm="12">
<CInput
:class="validation.title ? 'err' : null"
label="عنوان"
:description="validation.title ? validation.title.msg : null"
v-model="page.title"
/>
</CCol>
</CRow>
</CCol>
<CCol lg="6">
<!-- <CRow>-->
<!-- <CCol sm="12" class="mt-1">-->
<!-- <el-checkbox-->
<!-- v-model="showInFooter"-->
<!-- label="نمایش در پایین سایت"-->
<!-- @change="changeSetFooter"-->
<!-- />-->
<!-- <i v-c-tooltip="'با این گزینه می توانید تعیین کنید صفحه در کدام ستون پایین سایت قرار بگیرد'" class="fas fa-question-circle"></i>-->
<!-- <template v-if="showInFooter">-->
<!-- <el-radio-group style="display : inline-flex; margin-right:-30px" class="mt-3" v-model="page.showInFooter">-->
<!-- <el-radio :label="1">نمایش در ستون شماره 1</el-radio>-->
<!-- <el-radio :label="2">نمایش در ستون شماره 2</el-radio>-->
<!-- <el-radio :label="3">نمایش در ستون شماره 3</el-radio>-->
<!-- </el-radio-group>-->
<!-- </template>-->
<!-- </CCol>-->
<!-- </CRow>-->
<!-- <el-divider></el-divider>-->
<CRow>
<CCol sm="12" class="mt-1">
<el-checkbox v-model="page.child" label="این صفحه می تواند زیرمجموعه داشته باشد"/>
<i v-c-tooltip="'منظور از زیرمجموعه یعنی قرار گرفتن صفحات دیگر زیر این صفحه'"
class="fas fa-question-circle"></i>
</CCol>
<CCol v-if="typePage" sm="12" class="mt-1">
<el-checkbox v-model="page.news" label="این صفحه دارای اخبار باشد" @change="changeNews"/>
</CCol>
<el-divider></el-divider>
<p>تنظیمات درون صفحه:</p>
<div>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasNewsTab"
label="در این صفحه دکمه بخش (اخبار) نمایش داده شود"
/>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasNewsFileTab"
label="در این صفحه دکمه بخش (پرونده خبری) نمایش داده شود"
/>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasContentTab"
label="در این صفحه دکمه بخش (درباره...) نمایش داده شود"
/>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasMediaTab"
label="در این صفحه دکمه بخش (چندرسانه ای) نمایش داده شود"
/>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasSubMenusTab"
label="در این صفحه دکمه بخش (صفحات مرتبط) نمایش داده شود"
/>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasTermsTab"
label="در این صفحه دکمه بخش (قوانین و دستورالعمل ها) نمایش داده شود"
/>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasNotificationsTab"
label="در این صفحه دکمه بخش (اطلاعیه ها) نمایش داده شود"
/>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasSpecNewsTab"
label="در این صفحه دکمه بخش (مطالب ویژه) نمایش داده شود"
/>
<el-checkbox
@change="clearDefaultType"
v-model="page.hasNazarTab" style="margin-right: 30px;"
label="در این صفحه دکمه بخش (نظر سنجی) نمایش داده شود"
/>
</div>
<div class="mt-3">
<p>بخش پیش فرض هنگام ورود به این صفحه:</p>
<el-select v-model="page.defaultPageType">
<el-option v-if="page.hasNewsTab" label="اخبار" value="news"/>
<el-option v-if="page.hasNewsFileTab" label="پرونده خبری" value="newsFile"/>
<el-option v-if="page.hasContentTab" label="درباره..." value="content"/>
<el-option v-if="page.hasMediaTab" label="چندرسانه ای - تصاویر" value="gallery-image"/>
<el-option v-if="page.hasMediaTab" label="چندرسانه ای - فیلم ها" value="gallery-video"/>
<el-option v-if="page.hasMediaTab" label="چندرسانه ای - گرافیک ها" value="gallery-graphic"/>
<el-option v-if="page.hasSubMenusTab" label="صفحات مرتبط" value="subMenu"/>
<el-option v-if="page.hasTermsTab" label="قوانین و دستورالعمل ها" value="terms"/>
<el-option v-if="page.hasNotificationsTab" label="اطلاعیه ها" value="event"/>
<el-option v-if="page.hasSpecNewsTab" label="مطالب ویژه" value="special"/>
<el-option v-if="page.hasNazarTab" label="نظرسنجی" value="survey"/>
</el-select>
</div>
<!-- <template v-if="page.news">-->
<!-- <CCol sm="12" class="mt-1">-->
<!-- <el-checkbox-->
<!-- v-model="showInHome"-->
<!-- label="قرار گرفتن در صفحه اصلی پرتال"-->
<!-- @change="changeShowInHome"-->
<!-- />-->
<!-- <CRow>-->
<!-- <CCol sm="12">-->
<!-- <template v-if="showInHome">-->
<!-- <el-radio-group style="display : inline-flex; margin-right:-30px" class="mt-3" v-model="setShowHome">-->
<!-- <el-radio :label="1">نمایش در بخش اول</el-radio>-->
<!-- <el-radio :label="2">نمایش در بخش دوم</el-radio>-->
<!-- <el-radio :label="3">نمایش در بخش سوم</el-radio>-->
<!-- </el-radio-group>-->
<!-- </template>-->
<!-- </CCol>-->
<!-- </CRow>-->
<!-- </CCol>-->
<!-- </template>-->
</CRow>
<el-divider></el-divider>
<CRow>
<CCol sm="12" class="mt-1">
<template>
<h6 class="mt-2">ترتیب نمایش</h6>
<el-select style="width:100%" class="mt-2" v-model="page.navIndex" placeholder="">
<el-option
v-for="item in allPage.length + 10"
v-if="!allPage.find((item2) => item2.navIndex === item)"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
<p class="text-danger" v-if="validation.navIndex">{{ validation.navIndex.msg }}</p>
</template>
</CCol>
</CRow>
</CCol>
<CCol lg="6">
<h4>مشخصات مدیر صفحه:</h4>
<el-divider></el-divider>
<img :src="page.managerCover" alt="" style="width: 100%;">
<input type="file" ref="managerCover" @change="imagePreview">
<el-divider></el-divider>
<el-checkbox
v-model="page.hasManagerInfo"
label="در این صفحه اطلاعات مدیر در سایدبار نمایش داده شود"
/>
<CInput
:class="validation.managerName ? 'err' : null"
label="نام و نام خانوادگی مدیر"
:description="validation.managerName ? validation.managerName.msg : null"
v-model="page.managerName"
/>
<CTextarea
:class="validation.managerDescription ? 'err' : null"
label="توضیحات کوتاه درباره مدیر"
:description="validation.managerDescription ? validation.managerDescription.msg : null"
rows="5"
v-model="page.managerDescription"
/>
</CCol>
</CRow>
<CRow>
<CCol>
<el-divider/>
<!-- <h6>این صفحه:</h6>-->
<!-- <el-radio-group class="mt-3" v-model="typePage">-->
<!-- <el-radio :label="true">دارای محتوا می باشد</el-radio>-->
<!-- <br>-->
<!-- <el-radio :label="false" style="margin-right: 30px;">-->
<!-- <span>به صورت یک لینک خارجی عمل نماید</span>-->
<!-- <i v-c-tooltip="'اگر شما این گزینه را انتخاب کنید صفحه شما به صورت یک لینک عمل می کند یعنی زمانی که کلیک شد روی صفحه به لینک مورد نظر انتقال پیدا می کند'"-->
<!-- class="fas fa-question-circle"></i>-->
<!-- </el-radio>-->
<!-- </el-radio-group>-->
<CRow>
<CCol sm="12" class="mb-3">
<!-- <CInput-->
<!-- v-if="!typePage"-->
<!-- :class="validation.url ? 'err' : null"-->
<!-- label="لینک"-->
<!-- :description="validation.url ? validation.url.msg : null"-->
<!-- v-model="page.url"-->
<!-- />-->
<template v-if="typePage">
<client-only>
<p>درباره ی</p>
<ckeditor v-model="page.pageContent" :config="editorConfig"></ckeditor>
<p class="text-danger" v-if="validation.pageContent">{{ validation.pageContent.msg }}</p>
</client-only>
</template>
</CCol>
</CRow>
</CCol>
</CRow>
</CForm>
</CCardBody>
</CCard>
</CCol>
<CCol sm="12" v-if="$route.params.details !== 'new'">
<CCard>
<CCardBody>
<CRow>
<CCol sm="6">
<h2>لیست فایل های قوانین و مقررات</h2>
<el-divider></el-divider>
<el-table :data="page.terms">
<el-table-column
type="index"
label="#"
>
</el-table-column>
<el-table-column
label="فایل"
width=""
>
<template slot-scope="scope">
<a :href="scope.row.file" target="_blank">{{ scope.row.title }}</a>
</template>
</el-table-column>
<el-table-column
label="ویرایش"
width="75"
align="center"
>
<template slot-scope="scope">
<CButton color="danger" variant="outline" @click="deleteFile(scope.row._id)">
<i class="far fa-trash-alt"></i>
</CButton>
</template>
</el-table-column>
</el-table>
</CCol>
<CCol sm="6">
<h2>افزودن فایل برای قوانین و مقررات</h2>
<el-divider></el-divider>
<input type="file" ref="termsFile"/>
<p class="text-danger" v-if="validation.file">{{ validation.file.msg }}</p>
<br>
<br>
<label>
<input type="text" ref="termsTitle" placeholder="عنوان فایل را بنویسید" style="width: 300px;"/>
</label>
<p class="text-danger" v-if="validation.termsTitle">{{ validation.termsTitle.msg }}</p>
<br>
<br>
<el-button size="small" type="success" @click="addFile">افزودن</el-button>
</CCol>
</CRow>
</CCardBody>
</CCard>
</CCol>
</CRow>
</div>
</template>
<script>
import axiosUploadProcess from "@/mixins/axiosUploadProcess"
export default {
data() {
return {
page: null,
typePage: true,
validation: {},
showInHome: false,
editorConfig: {
language: 'en',
extraPlugins: ['bidi', 'justify']
},
filterParent: [],
portals: null,
showInFooter: false,
parents: null,
allPage: null,
allParents: null
}
},
mixins: [axiosUploadProcess],
computed: {
title() {
return this.$route.params.details === 'new' ? 'افزودن صفحه جدید' : 'مشاهده جزئیات صفحه'
},
parent() {
return this.page.parent
},
modelType() {
return this.page.modelType
}
},
watch: {
parent(newVal, oldVal) {
if (newVal) this.allPage = this.allParents.filter(item => item.parent === newVal);
else this.allPage = this.allParents.filter(item => item.modelType === this.page.modelType && item.parent === null);
},
modelType(newVal, oldVal) {
this.page.parent = null;
this.page.navIndex = null;
this.filterParent = this.parents.filter(item => item.modelType === newVal);
this.allPage = this.allParents.filter(item => item.modelType === newVal && item.parent === null);
}
},
methods: {
changeSetFooter(value) {
if (!value) {
this.page.showInFooter = 0;
}
},
changeNews() {
this.showInHome = false;
// this.setShowHome = null;
},
imagePreview(e) {
this.page.managerCover = URL.createObjectURL(e.target.files[0])
},
post() {
this.validation = {}
const data = new FormData()
data.append("title", this.page.title.trim())
if (this.page.parent) data.append("parent", this.page.parent.trim())
data.append("navIndex", this.page.navIndex)
data.append("priority", this.page.priority)
data.append("siteMap", this.page.siteMap)
data.append("special", this.page.special)
data.append("showInFooter", this.page.showInFooter)
if (this.page.url) data.append("url", this.page.url)
data.append("pageContent", this.page.pageContent)
data.append("news", this.page.news)
data.append("child", this.page.child)
data.append("modelType", this.page.modelType)
data.append("hasNewsTab", this.page.hasNewsTab)
data.append("hasContentTab", this.page.hasContentTab)
data.append("hasMediaTab", this.page.hasMediaTab)
data.append("hasSubMenusTab", this.page.hasSubMenusTab)
data.append("hasTermsTab", this.page.hasTermsTab)
data.append("hasNotificationsTab", this.page.hasNotificationsTab)
data.append("hasSpecNewsTab", this.page.hasSpecNewsTab)
data.append("hasNazarTab", this.page.hasNazarTab)
data.append("hasNewsFileTab", this.page.hasNewsFileTab)
data.append("defaultPageType", this.page.defaultPageType)
data.append("hasManagerInfo", this.page.hasManagerInfo)
data.append("managerName", this.page.managerName)
data.append("managerDescription", this.page.managerDescription)
if (this.$refs.managerCover.files[0]) data.append("managerCover", this.$refs.managerCover.files[0])
this.$axios.post(`/api/admin/category`, data, this.axiosConfig)
.then(response => {
this.$message({
type: 'success',
message: 'صفحه با موفقیت ایجاد شد.'
})
this.$router.push({
name: 'admin-pages'
})
})
.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 === 500) {
return this.$message({
type: 'error',
message: 'مشکلی در ارسال درخواست پیش آمده'
})
}
if (err.response.status === 422) {
this.$message({
type: 'warning',
message: 'پارامترها را بررسی کنید'
})
this.validation = err.response.data.validation
} else console.log(err.response.data)
})
},
update() {
this.validation = {};
const data = new FormData();
data.append("title", this.page.title.trim())
if (this.page.parent) {
data.append("parent", this.page.parent);
}
data.append("navIndex", this.page.navIndex)
data.append("priority", this.page.priority)
data.append("siteMap", this.page.siteMap)
data.append("special", this.page.special)
data.append("showInFooter", this.page.showInFooter)
if (this.page.url) data.append("url", this.page.url)
data.append("pageContent", this.page.pageContent)
data.append("news", this.page.news)
data.append("child", this.page.child)
data.append("modelType", this.page.modelType)
data.append("hasNewsTab", this.page.hasNewsTab)
data.append("hasContentTab", this.page.hasContentTab)
data.append("hasMediaTab", this.page.hasMediaTab)
data.append("hasSubMenusTab", this.page.hasSubMenusTab)
data.append("hasTermsTab", this.page.hasTermsTab)
data.append("hasNotificationsTab", this.page.hasNotificationsTab)
data.append("hasSpecNewsTab", this.page.hasSpecNewsTab)
data.append("hasNazarTab", this.page.hasNazarTab)
data.append("hasNewsFileTab", this.page.hasNewsFileTab)
data.append("defaultPageType", this.page.defaultPageType)
data.append("hasManagerInfo", this.page.hasManagerInfo)
data.append("managerName", this.page.managerName)
data.append("managerDescription", this.page.managerDescription)
if (this.$refs.managerCover.files[0]) data.append("managerCover", this.$refs.managerCover.files[0])
this.$axios.put(`/api/admin/category/${this.page._id}`, data, this.axiosConfig)
.then(response => {
this.$message({
type: 'success',
message: 'اطلاعات بروزرسانی شد.'
})
this.$refs.managerCover.value = null
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 === 500) {
return this.$message({
type: 'error',
message: 'مشکلی در ارسال درخواست پیش آمده'
})
}
if (err.response.status === 422) {
this.$message({
type: 'warning',
message: 'پارامترها را بررسی کنید'
})
this.validation = err.response.data.validation
} else console.log(err.response.data);
})
},
addFile() {
this.validation = {}
const data = new FormData()
data.append('file', this.$refs.termsFile.files[0])
data.append('termsTitle', this.$refs.termsTitle.value)
this.$axios.post(`/api/admin/category/termsFile/${this.page._id}`, data, this.axiosConfig)
.then(res => {
this.$message({
type: 'success',
message: 'فایل با موفقیت اضافه شد'
})
this.$refs.termsFile.value = null
this.$refs.termsTitle.value = null
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 === 500) {
return this.$message({
type: 'error',
message: 'مشکلی در ارسال درخواست پیش آمده'
})
}
if (err.response.status === 422) {
this.$message({
type: 'warning',
message: 'پارامترها را بررسی کنید'
})
this.validation = err.response.data.validation
} else console.log(err.response.data);
})
},
deleteFile(id) {
this.$confirm('فایل حذف شود؟', 'هشدار', {
confirmButtonText: 'بله',
cancelButtonText: 'لغو',
type: 'warning'
})
.then(async () => {
this.$axios.delete(`/api/admin/category/termsFile/${id}`)
.then(res => {
this.$message({
type: 'success',
message: 'فایل با موفقیت حذف شد'
})
this.page.terms = this.page.terms.filter(item => item._id !== id)
})
.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: 'عملیات لغو شد'
})
})
},
clearDefaultType() {
this.page.defaultPageType = 'news'
}
},
head() {
return {
title: this.title
}
},
layout: 'admin',
async asyncData({$axios, $auth, params, query, error}) {
try {
const requests = [
$axios.get('/api/admin/category/permissions', {progress: false}),
$axios.get('/api/admin/category/getParent', {progress: false}),
$axios.get('/api/admin/portals')
];
const fetch = await Promise.all(requests);
let [allParents, parents, portals] = fetch;
if (params.details !== 'new') {
const pages = await $axios.get(`/api/admin/category/${params.details}`);
return {
portals: portals.data,
parents: parents.data,
page: pages.data,
allPage: allParents.data.filter(item => item.parent === pages.data.parent),
allParents: allParents.data,
showInFooter: pages.data.showInFooter !== 0,
filterParent: allParents.data
}
} else {
return {
portals: portals.data,
parents: parents.data,
allPage: query.type ? allParents.data.filter(item => item.parent === query.parent) : allParents.data,
allParents: allParents.data,
filterParent: parents.data,
page: {
title: '',
parent: query ? query.parent : '',
navIndex: null,
priority: 0,
level: 1,
siteMap: true,
special: false,
showInFooter: 0,
url: '',
pageContent: null,
news: true,
child: true,
hasNewsTab: true,
hasContentTab: true,
hasMediaTab: true,
hasSubMenusTab: true,
hasTermsTab: true,
hasNotificationsTab: true,
hasSpecNewsTab: true,
hasNazarTab: true,
hasNewsFileTab: true,
defaultPageType: 'news',
modelType: query.type ? query.type : $auth.user.portals.length !== 1 ? '' : $auth.user.portals[0],
hasManagerInfo: false,
managerName: '',
managerDescription: '',
managerCover: ''
}
}
}
} catch (e) {
if (e?.response?.status === 401) error({status: 401, message: "لطفا دوباره وارد سیستم شوید."})
if (e?.response?.status === 403) error({status: 403, message: e?.response?.data?.message})
if (e?.response?.status === 500) error({status: 500, message: "مشکلی در گرفتن اطلاعات پیش آمده"})
else error({status: 404, message: "صفحه مورد نظر پیدا نشد"})
}
}
}
</script>
+202
View File
@@ -0,0 +1,202 @@
<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>