chore: add shafafiat route

This commit is contained in:
mahyargdz
2024-11-18 19:35:42 +03:30
parent f75f890fa5
commit 1c89bc5f08
5 changed files with 397 additions and 215 deletions
+71 -124
View File
@@ -2,9 +2,7 @@
<div class="off-canvas">
<div class="side d-none d-md-block">
<div class="relativePos">
<div
class="closeBtn d-none d-md-inline-block"
@click="closeOffCanvas">
<div class="closeBtn d-none d-md-inline-block" @click="closeOffCanvas">
<div class="x"></div>
<span>بستن</span>
</div>
@@ -12,15 +10,12 @@
</div>
<div style="overflow-y: auto; width: 100%">
<div class="main">
<div
class="closeBtnMobile d-block d-md-none"
@click="closeOffCanvas">
<div class="closeBtnMobile d-block d-md-none" @click="closeOffCanvas">
<div class="x"></div>
</div>
<div class="container-fluid">
<div class="row">
<div
class="col-12 col-lg-4 order-0 order-lg-1 mb-5 mb-lg-0">
<div class="col-12 col-lg-4 order-0 order-lg-1 mb-5 mb-lg-0">
<div class="searchBox">
<div class="title">
<p class="title-search">
@@ -32,7 +27,8 @@
type="text"
name="search"
v-model="searchableText"
placeholder="عبارت مدنظر خود را بنویسید" />
placeholder="عبارت مدنظر خود را بنویسید"
/>
<button type="submit">
<i class="fal fa-search"></i>
</button>
@@ -52,11 +48,10 @@
},
}"
v-slot="{ navigate, href }"
custom>
custom
>
<div class="mt-3" @click="navigate">
<a
class="btn bigBtn btn-primary"
:href="href">
<a class="btn bigBtn btn-primary" :href="href">
{{
currentPortal === "ostandari"
? "برو به صفحه ستاد انتخابات"
@@ -77,13 +72,10 @@
params: { portal: currentPortal },
}"
v-slot="{ href, navigate, isActive }"
custom>
<li
@click="navigate"
:class="isActive ? 'active' : null">
<a class="mainLink" :href="href"
>صفحه اصلی</a
>
custom
>
<li @click="navigate" :class="isActive ? 'active' : null">
<a class="mainLink" :href="href">صفحه اصلی</a>
</li>
</nuxt-link>
@@ -94,13 +86,10 @@
params: { portal: currentPortal },
}"
v-slot="{ navigate, href, isActive }"
custom>
<li
@click="navigate"
:class="isActive ? 'active' : null">
<a class="mainLink" :href="href"
>تماس با ما</a
>
custom
>
<li @click="navigate" :class="isActive ? 'active' : null">
<a class="mainLink" :href="href">تماس با ما</a>
</li>
</nuxt-link>
@@ -111,13 +100,10 @@
params: { portal: currentPortal },
}"
v-slot="{ navigate, href, isActive }"
custom>
<li
@click="navigate"
:class="isActive ? 'active' : null">
<a class="mainLink" :href="href"
>میز خدمت</a
>
custom
>
<li @click="navigate" :class="isActive ? 'active' : null">
<a class="mainLink" :href="href">میز خ2دمت</a>
</li>
</nuxt-link>
@@ -137,20 +123,14 @@
page: 1,
},
}"
v-slot="{
navigate,
href,
isActive,
}"
custom>
v-slot="{ navigate, href, isActive }"
custom
>
<li
@click="navigate"
:class="
isActive ? 'active' : null
">
<a class="mainLink" :href="href"
>عکس</a
>
:class="isActive ? 'active' : null"
>
<a class="mainLink" :href="href">عکس</a>
</li>
</nuxt-link>
@@ -166,20 +146,14 @@
page: 1,
},
}"
v-slot="{
navigate,
href,
isActive,
}"
custom>
v-slot="{ navigate, href, isActive }"
custom
>
<li
@click="navigate"
:class="
isActive ? 'active' : null
">
<a class="mainLink" :href="href"
>فیلم</a
>
:class="isActive ? 'active' : null"
>
<a class="mainLink" :href="href">فیلم</a>
</li>
</nuxt-link>
@@ -195,42 +169,32 @@
page: 1,
},
}"
v-slot="{
navigate,
href,
isActive,
}"
custom>
v-slot="{ navigate, href, isActive }"
custom
>
<li
@click="navigate"
:class="
isActive ? 'active' : null
">
<a class="mainLink" :href="href"
>گرافیک</a
>
:class="isActive ? 'active' : null"
>
<a class="mainLink" :href="href">گرافیک</a>
</li>
</nuxt-link>
<nuxt-link
class="col-12 col-md-4 mb-2"
to="/ostandari/digital-books"
v-slot="{
navigate,
href,
isActive,
}"
custom>
<li
@click="navigate"
:class="
isActive ? 'active' : null
">
<a class="mainLink" :href="href"
>کتابخانه دیجیتال</a
class="col-12 col-md-4 mb-2"
to="/ostandari/digital-books"
v-slot="{ navigate, href, isActive }"
custom
>
<li
@click="navigate"
:class="isActive ? 'active' : null"
>
</li>
</nuxt-link>
<a class="mainLink" :href="href"
>کتابخانه دیجیتال</a
>
</li>
</nuxt-link>
</ul>
</div>
</li>
@@ -242,13 +206,10 @@
params: { portal: currentPortal },
}"
v-slot="{ navigate, href, isActive }"
custom>
<li
@click="navigate"
:class="isActive ? 'active' : null">
<a class="mainLink" :href="href"
>میز خدمت</a
>
custom
>
<li @click="navigate" :class="isActive ? 'active' : null">
<a class="mainLink" :href="href">میز خدمت</a>
</li>
</nuxt-link>
@@ -265,12 +226,11 @@
query: categoryURLQuery(item),
}"
v-slot="{ href, navigate, isActive }"
custom>
custom
>
<a class="mainLink">{{ item.title }}</a>
<li
@click="navigate"
:class="isActive ? 'active' : null">
<li @click="navigate" :class="isActive ? 'active' : null">
<div class="children">
<ul>
<!-- <nuxt-link-->
@@ -288,9 +248,9 @@
:data="item.childs"
:props="defaultProps"
accordion
ref="tree">
<div
slot-scope="{ node, data }">
ref="tree"
>
<div slot-scope="{ node, data }">
<nuxt-link
:to="{
name: 'portal-category-details',
@@ -298,31 +258,19 @@
portal: currentPortal,
details: node.label,
},
query:
categoryURLQuery(data),
}"
v-slot="{
href,
navigate,
isActive,
query: categoryURLQuery(data),
}"
v-slot="{ href, navigate, isActive }"
custom
:class="
!data.childs.length &&
'test'
">
:class="!data.childs.length && 'test'"
>
<li
@click="navigate"
:class="
isActive
? 'active'
: null
">
<a
class="subLink"
:href="href"
>{{ node.label }}</a
>
:class="isActive ? 'active' : null"
>
<a class="subLink" :href="href">{{
node.label
}}</a>
</li>
</nuxt-link>
</div>
@@ -441,8 +389,7 @@ export default {
type: item.defaultPageType,
id: item._id,
};
if (item.defaultPageType === "news")
return { ...query, page: 1 };
if (item.defaultPageType === "news") return { ...query, page: 1 };
if (item.defaultPageType === "gallery")
return { ...query, galleryType: "image", page: 1 };
else return query;
+205 -91
View File
@@ -2,12 +2,20 @@
<div class="site--header">
<div class="col-12">
<!------------------------ countDown modal ------------------------>
<el-dialog v-if="counterDown" append-to-body :visible.sync="showAlert" :show-close="false" :title="'مانده تا' + ' ' + counterDown.title">
<el-dialog
v-if="counterDown"
append-to-body
:visible.sync="showAlert"
:show-close="false"
:title="'مانده تا' + ' ' + counterDown.title"
>
<div>
<flip-countdown :deadline="counterDown1[0]"></flip-countdown>
</div>
<div slot="footer" class="dialog-footer">
<el-button class="btn bigBtn btn-primary" @click="showAlert = false">بستن</el-button>
<el-button class="btn bigBtn btn-primary" @click="showAlert = false"
>بستن</el-button
>
</div>
</el-dialog>
<!------------------------ countDown modal ------------------------>
@@ -21,15 +29,27 @@
</span>
</div>
<div class="col-12 col-md-6 site-top-left">
<el-button type="text" @click="showAlert = true" v-if="counterDown">
<span class="timer">{{ jDate2(counterDown.expireDate) + ' مانده تا ' + counterDown.title }}</span>
<el-button
type="text"
@click="showAlert = true"
v-if="counterDown"
>
<span class="timer">{{
jDate2(counterDown.expireDate) +
" مانده تا " +
counterDown.title
}}</span>
</el-button>
<div class="email-top" v-else>
<a class="email-text" :href="`mailto: ${yearBanner.email}`" target="_blank">{{ yearBanner.email }}</a>
<a
class="email-text"
:href="`mailto: ${yearBanner.email}`"
target="_blank"
>{{ yearBanner.email }}</a
>
<i class="far fa-envelope"></i>
</div>
</div>
</div>
</div>
@@ -37,9 +57,14 @@
</div>
<div class="view-banner">
<img v-if="yearBanner.iranFlag" class="iran-flag" src="~/assets/img/iran.png" alt="">
<img
v-if="yearBanner.iranFlag"
class="iran-flag"
src="~/assets/img/iran.png"
alt=""
/>
<div class="banner">
<img :src="yearBanner.mainCover" alt="">
<img :src="yearBanner.mainCover" alt="" />
</div>
<div class="relativePos">
<div class="container navigations">
@@ -47,18 +72,36 @@
<div class="col-12 col-lg-10 menu-desk">
<nav>
<ul>
<nuxt-link :to="{name: 'portal',params: {portal: currentPortal}}" v-slot="{navigate,href,isActive}" custom exact>
<nuxt-link
:to="{ name: 'portal', params: { portal: currentPortal } }"
v-slot="{ navigate, href, isActive }"
custom
exact
>
<li @click="navigate" :class="isActive ? 'active' : null">
<a :href="href">صفحه اصلی</a>
</li>
</nuxt-link>
<nuxt-link
to="/ostandari/shafaf"
v-slot="{ navigate, href, isActive }"
custom
>
<li @click="navigate" :class="isActive ? 'active' : null">
<a :href="href">شفافیت</a>
</li>
</nuxt-link>
<!-- ***************** dynamic routes ***************** -->
<nuxt-link
v-for="item in header.categories"
:key="item._id"
:to="{name: 'portal-category-details',params: {portal: currentPortal,details: item.title},query: categoryURLQuery(item)}"
v-slot="{navigate,href,isActive}"
custom
v-for="item in header.categories"
:key="item._id"
:to="{
name: 'portal-category-details',
params: { portal: currentPortal, details: item.title },
query: categoryURLQuery(item),
}"
v-slot="{ navigate, href, isActive }"
custom
>
<li :class="isActive ? 'active' : null">
<a class="pointer">{{ item.title }}</a>
@@ -73,12 +116,20 @@
<!-- </li>-->
<!-- </ul>-->
<!-- recursive tree -->
<TreeItem :array="item.childs"/>
<TreeItem :array="item.childs" />
</div>
</li>
</nuxt-link>
<!-- ***************** dynamic routes ***************** -->
<nuxt-link :to="{name: 'portal-services' ,params: {portal: currentPortal}}" v-slot="{navigate,href,isActive}" custom>
<nuxt-link
:to="{
name: 'portal-services',
params: { portal: currentPortal },
}"
v-slot="{ navigate, href, isActive }"
custom
>
<li @click="navigate" :class="isActive ? 'active' : null">
<a :href="href">میز خدمت</a>
</li>
@@ -89,21 +140,23 @@
<ul class="tree">
<li class="treeItem">
<nuxt-link
:to="{
name: 'portal-gallery',
params: {portal: currentPortal},
query: {type:'image', page: 1}
}">
:to="{
name: 'portal-gallery',
params: { portal: currentPortal },
query: { type: 'image', page: 1 },
}"
>
عکس
</nuxt-link>
</li>
<li class="treeItem">
<nuxt-link
:to="{
name: 'portal-videos',
params: {portal: currentPortal},
query: {type:'video', page: 1}
}">
:to="{
name: 'portal-videos',
params: { portal: currentPortal },
query: { type: 'video', page: 1 },
}"
>
فیلم
</nuxt-link>
<!-- <nuxt-link-->
@@ -117,18 +170,17 @@
</li>
<li class="treeItem">
<nuxt-link
:to="{
name: 'portal-graphics',
params: {portal: currentPortal},
query: {type:'graphic', page: 1}
}">
:to="{
name: 'portal-graphics',
params: { portal: currentPortal },
query: { type: 'graphic', page: 1 },
}"
>
گرافیک
</nuxt-link>
</li>
<li class="treeItem">
<nuxt-link
to="/ostandari/digital-books"
>
<nuxt-link to="/ostandari/digital-books">
کتابخانه دیجیتال
</nuxt-link>
</li>
@@ -136,35 +188,70 @@
</div>
</li>
<nuxt-link
v-if="yearBanner.electionBtn"
:to="{name: 'portal',params: {portal: currentPortal === 'ostandari' ? 'election' : 'ostandari'}}"
v-slot="{navigate,href}"
custom
v-if="yearBanner.electionBtn"
:to="{
name: 'portal',
params: {
portal:
currentPortal === 'ostandari'
? 'election'
: 'ostandari',
},
}"
v-slot="{ navigate, href }"
custom
>
<li @click="navigate">
<a :href="href">{{ currentPortal === 'ostandari' ? 'ستاد انتخابات' : 'استانداری' }}</a>
<a :href="href">{{
currentPortal === "ostandari"
? "ستاد انتخابات"
: "استانداری"
}}</a>
</li>
</nuxt-link>
<nuxt-link :to="{name: 'portal-info-page', params:{portal: currentPortal,page: 'aboutState'}}" v-slot="{navigate,href,isActive}" custom
v-if="header.staticContents">
<nuxt-link
:to="{
name: 'portal-info-page',
params: { portal: currentPortal, page: 'aboutState' },
}"
v-slot="{ navigate, href, isActive }"
custom
v-if="header.staticContents"
>
<li :class="isActive ? 'active' : null">
<a class="pointer">درباره استان</a>
<div class="mega-menu">
<!-- item route -->
<ul class="tree">
<nuxt-link :to="{name: 'portal-info-page', params:{portal: currentPortal,page: 'sima'}}" v-slot="{navigate,href,isActive}" custom>
<li @click="navigate" :class="isActive ? 'active' : null" class="treeItem">
<a :href="href">
سیمای استان
</a>
<nuxt-link
:to="{
name: 'portal-info-page',
params: { portal: currentPortal, page: 'sima' },
}"
v-slot="{ navigate, href, isActive }"
custom
>
<li
@click="navigate"
:class="isActive ? 'active' : null"
class="treeItem"
>
<a :href="href"> سیمای استان </a>
</li>
</nuxt-link>
</ul>
</div>
</li>
</nuxt-link>
<nuxt-link :to="{name: 'portal-contact' ,params: {portal: currentPortal}}" v-slot="{navigate,href,isActive}" custom>
<nuxt-link
:to="{
name: 'portal-contact',
params: { portal: currentPortal },
}"
v-slot="{ navigate, href, isActive }"
custom
>
<li @click="navigate" :class="isActive ? 'active' : null">
<a :href="href">تماس با ما</a>
</li>
@@ -175,7 +262,11 @@
<div class="col-12 col-lg-2 left">
<ul>
<li class="searchBtns">
<i class="fal fa-search" v-if="!searching" @click="search(true)"></i>
<i
class="fal fa-search"
v-if="!searching"
@click="search(true)"
></i>
<i class="fal fa-times" v-else @click="search(false)"></i>
</li>
<li class="menu" @click="showOffCanvas">
@@ -185,12 +276,18 @@
</div>
</div>
</div>
<div class="searchBox" :class="searching? 'active-search' : null">
<div class="searchBox" :class="searching ? 'active-search' : null">
<div class="container">
<div class="row">
<div class="col-12">
<form @submit.prevent="doSearch" class="searchInput">
<input type="text" name="search" id="searchInput" placeholder="عبارت مدنظر خود را جستجو کنید" v-model="searchableText">
<input
type="text"
name="search"
id="searchInput"
placeholder="عبارت مدنظر خود را جستجو کنید"
v-model="searchableText"
/>
<button type="submit">
<i class="fas fa-arrow-circle-left"></i>
</button>
@@ -205,93 +302,110 @@
</template>
<script>
import moment from 'moment-jalaali'
import FlipCountdown from '~/components/vue2-flip-countdown.js'
import moment from "moment-jalaali";
import FlipCountdown from "~/components/vue2-flip-countdown.js";
export default {
name: "SiteHeader",
data() {
return {
searching: false,
searchableText: '',
searchableText: "",
date: Date.now(),
dialogTimeVisible: false,
showAlert: false
}
showAlert: false,
};
},
mounted() {
setInterval(() => this.date = Date.now(), 1000)
setInterval(() => (this.date = Date.now()), 1000);
$(window).scroll(() => {
if ($(window).scrollTop() > 300) $('.app-front').addClass('miniHeader')
if ($(window).scrollTop() < 290) $('.app-front').removeClass('miniHeader')
})
if ($(window).scrollTop() > 300) $(".app-front").addClass("miniHeader");
if ($(window).scrollTop() < 290)
$(".app-front").removeClass("miniHeader");
});
if (this.$route.name !== 'portal') {
if (this.$route.name !== "portal") {
(async () => {
try {
const homeData = await this.$axios.get(`/api/public/home?portal=${this.$route.params.portal}`, {progress: false})
this.$store.commit('front/setHomePageData', homeData.data)
const homeData = await this.$axios.get(
`/api/public/home?portal=${this.$route.params.portal}`,
{ progress: false }
);
this.$store.commit("front/setHomePageData", homeData.data);
} catch (e) {
console.log(e)
console.log(e);
}
})()
})();
}
},
components: {FlipCountdown},
components: { FlipCountdown },
computed: {
yearBanner() {
return this.$store.state.front.yearBanner
return this.$store.state.front.yearBanner;
},
currentPortal() {
return this.$route.params.portal
return this.$route.params.portal;
},
header() {
return this.$store.state.front.headerData
return this.$store.state.front.headerData;
},
jDate() {
return moment(this.date).locale('fa').format('dddd - LL - h:mm:ss ')
return moment(this.date).locale("fa").format("dddd - LL - h:mm:ss ");
},
counterDown() {
return this.$store.state.front.counterDown
return this.$store.state.front.counterDown;
},
counterDown1() {
return this.$store.state.front.counterDown.expireDate.split('T')
return this.$store.state.front.counterDown.expireDate.split("T");
},
homePageData() {
return this.$store.state.front.homePageData
return this.$store.state.front.homePageData;
},
},
methods: {
categoryURLQuery(item) {
const query = {type: item.defaultPageType, id: item._id}
if (item.defaultPageType === 'news') return {...query, page: 1}
if (item.defaultPageType === 'gallery-image') return {...query, page: 1, type: 'gallery', galleryType: 'image'}
if (item.defaultPageType === 'gallery-video') return {...query, page: 1, type: 'gallery', galleryType: 'video'}
if (item.defaultPageType === 'gallery-graphic') return {...query, page: 1, type: 'gallery', galleryType: 'graphic'}
else return query
const query = { type: item.defaultPageType, id: item._id };
if (item.defaultPageType === "news") return { ...query, page: 1 };
if (item.defaultPageType === "gallery-image")
return { ...query, page: 1, type: "gallery", galleryType: "image" };
if (item.defaultPageType === "gallery-video")
return { ...query, page: 1, type: "gallery", galleryType: "video" };
if (item.defaultPageType === "gallery-graphic")
return { ...query, page: 1, type: "gallery", galleryType: "graphic" };
else return query;
},
showOffCanvas() {
this.$store.commit('front/setOffCanvas', true)
this.$store.commit("front/setOffCanvas", true);
},
search(status) {
this.searching = status
if (status) setTimeout(() => $('#searchInput').focus(), 100)
else this.searchableText = ''
this.searching = status;
if (status) setTimeout(() => $("#searchInput").focus(), 100);
else this.searchableText = "";
},
doSearch() {
if (this.searchableText.length) {
this.$router.push({name: 'portal-search', params: {portal: this.currentPortal}, query: {sq: this.searchableText}})
setTimeout(() => this.search(false), 100)
this.$router.push({
name: "portal-search",
params: { portal: this.currentPortal },
query: { sq: this.searchableText },
});
setTimeout(() => this.search(false), 100);
} else {
this.$message({
type: 'warning',
message: 'ابتدا عبارت مورد نظر را بنویسید'
})
type: "warning",
message: "ابتدا عبارت مورد نظر را بنویسید",
});
}
},
jDate2(e) {
return moment(e).locale('fa').fromNow(true)
}
}
}
return moment(e).locale("fa").fromNow(true);
},
},
};
</script>
<style scoped>
li:nth-child(6) {
display: none !important;
}
</style>