somewhere
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
<template>
|
||||
<div class="download-details--page page">
|
||||
<section class="s1">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="item">
|
||||
<div class="title">
|
||||
<h1>{{ download.title }}</h1>
|
||||
</div>
|
||||
<div class="description">
|
||||
<div class="ck-content" v-html="download.description"></div>
|
||||
<div class="imgBox">
|
||||
<img :src="download.image" :alt="download.title" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="download">
|
||||
<div class="row">
|
||||
<div class="col-12 mb-4">
|
||||
<h3>دانلود با لینک مستقیم:</h3>
|
||||
</div>
|
||||
<div v-if="filteredFilesByOs('windows')" class="col-12 col-md-4 mb-5">
|
||||
<div class="title">
|
||||
<img src="/assets/img/download/windows.png" alt="نسخه ویندوز" />
|
||||
<h3>نسخه ویندوز</h3>
|
||||
</div>
|
||||
<ul>
|
||||
<li v-for="item in filteredFilesByOs('windows')" :key="item._id">
|
||||
<a :href="item.file" download target="_blank">
|
||||
<i class="fal fa-cloud-download"></i>
|
||||
<span>{{ item.name }}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="filteredFilesByOs('mac').length" class="col-12 col-md-4 mb-5">
|
||||
<div class="title">
|
||||
<img src="/assets/img/download/mac.png" alt="نسخه مک" />
|
||||
<h3>نسخه مک</h3>
|
||||
</div>
|
||||
<ul>
|
||||
<li v-for="item in filteredFilesByOs('mac')" :key="item._id">
|
||||
<a :href="item.file" download target="_blank">
|
||||
<i class="fal fa-cloud-download"></i>
|
||||
<span>{{ item.name }}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="filteredFilesByOs('linux').length" class="col-12 col-md-4 mb-5">
|
||||
<div class="title">
|
||||
<img src="/assets/img/download/linux.png" alt="نسخه لینوکس" />
|
||||
<h3>نسخه لینوکس</h3>
|
||||
</div>
|
||||
<ul>
|
||||
<li v-for="item in filteredFilesByOs('linux')" :key="item._id">
|
||||
<a :href="item.file" download target="_blank">
|
||||
<i class="fal fa-cloud-download"></i>
|
||||
<span>{{ item.name }}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div v-if="filteredFilesByOs('android').length" class="col-12 col-md-4 mb-5">
|
||||
<div class="title">
|
||||
<img src="/assets/img/download/android.svg" alt="نسخه اندروید" />
|
||||
<h3>نسخه اندروید</h3>
|
||||
</div>
|
||||
<ul>
|
||||
<li v-for="item in filteredFilesByOs('android')" :key="item._id">
|
||||
<a :href="item.file" download target="_blank">
|
||||
<i class="fal fa-cloud-download"></i>
|
||||
<span>{{ item.name }}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div v-if="filteredFilesByOs('ios').length" class="col-12 col-md-4 mb-5">
|
||||
<div class="title">
|
||||
<img src="/assets/img/download/ios.svg" alt="نسخه iOS" />
|
||||
<h3>نسخه iOS</h3>
|
||||
</div>
|
||||
<ul>
|
||||
<li v-for="item in filteredFilesByOs('ios')" :key="item._id">
|
||||
<a :href="item.file" download target="_blank">
|
||||
<i class="fal fa-cloud-download"></i>
|
||||
<span>{{ item.name }}</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zip-pass">
|
||||
<p>پسورد فایل فشرده: www.asan-service.com</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'DownloadDetailesPage',
|
||||
async asyncData({ $axios, params, error }) {
|
||||
try {
|
||||
const download = await $axios.get(`/api/public/downloads/${encodeURIComponent(params.item)}`)
|
||||
return {
|
||||
download: download.data
|
||||
}
|
||||
} catch (e) {
|
||||
error({ status: 404, message: 'Page not found' })
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
download: null
|
||||
}
|
||||
},
|
||||
head() {
|
||||
return {
|
||||
title: 'دانلود ' + this.download.title,
|
||||
meta: [
|
||||
{
|
||||
hid: 'description',
|
||||
name: 'description',
|
||||
content: this.download.title
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
filteredFilesByOs(os) {
|
||||
return this.download.files.filter(item => item.os === os)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,185 @@
|
||||
<template>
|
||||
<div class="download--page page">
|
||||
<hero title="دانلود ها" />
|
||||
<section class="s1">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="filters">
|
||||
<ul>
|
||||
<nuxt-link tag="li" :to="{ name: 'download', query: { category: 'all', page: 1 } }">
|
||||
<a :class="$route.query.category === 'all' ? 'active' : null">همه</a>
|
||||
</nuxt-link>
|
||||
|
||||
<nuxt-link
|
||||
v-for="item in dCategories"
|
||||
:key="item._id"
|
||||
tag="li"
|
||||
:to="{ name: 'download', query: { category: item.name, page: 1 } }"
|
||||
>
|
||||
<a :class="$route.query.category === item.name ? 'active' : null">{{ item.name }}</a>
|
||||
</nuxt-link>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s2">
|
||||
<div class="container">
|
||||
<div class="row align-items-stretch">
|
||||
<div v-for="item in topPartList" :key="item._id" class="col-12 col-xxl-6 mb-3">
|
||||
<div class="item fadeInAnim">
|
||||
<div class="imgBox">
|
||||
<img :src="item.image" :alt="item.title" />
|
||||
</div>
|
||||
<div class="txtBox">
|
||||
<h2>
|
||||
<b>{{ item.title }}</b>
|
||||
<span>{{ categoryName(item.category) }}</span>
|
||||
</h2>
|
||||
<p>{{ item.short_description }}</p>
|
||||
<nuxt-link :to="{ name: 'download-item+', params: { item: item.title } }" class="btn btn-primary"
|
||||
>ادامه مطلب</nuxt-link
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- untrack -->
|
||||
<div v-if="downloads.docs.length >= 4" class="col-12">
|
||||
<div class="untrack">
|
||||
<h3>جدیدترین ها:</h3>
|
||||
<div class="row">
|
||||
<div v-for="item in downloads_newest" :key="item._id + '_special'" class="col-12 col-lg-4 mb-3 mb-lg-0">
|
||||
<div class="latest fadeInAnim">
|
||||
<div class="normal">
|
||||
<img :src="item.image" :alt="item.title" />
|
||||
<h2>{{ item.title }}</h2>
|
||||
</div>
|
||||
<div class="hover">
|
||||
<h2>{{ item.title }}</h2>
|
||||
<p>{{ item.short_description }}</p>
|
||||
<nuxt-link :to="{ name: 'download-item+', params: { item: item.title } }" class="btn btn-primary"
|
||||
>ادامه مطلب
|
||||
</nuxt-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- untrack -->
|
||||
|
||||
<div v-for="item in bottomPartList" :key="item._id" class="col-12 col-xxl-6 mb-3">
|
||||
<div class="item fadeInAnim">
|
||||
<div class="imgBox">
|
||||
<img :src="item.image" :alt="item.title" />
|
||||
</div>
|
||||
<div class="txtBox">
|
||||
<h2>
|
||||
<b>{{ item.title }}</b>
|
||||
<span>{{ categoryName(item.category) }}</span>
|
||||
</h2>
|
||||
<p>{{ item.short_description }}</p>
|
||||
<nuxt-link :to="{ name: 'download-item+', params: { item: item.title } }" class="btn btn-primary"
|
||||
>ادامه مطلب</nuxt-link
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="!downloads.docs.length" class="col-12 no-post">
|
||||
<h2>چیزی برای دانلود در این صفحه وجود نداد.</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s3">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<el-pagination
|
||||
v-if="paginate"
|
||||
layout="prev, pager, next"
|
||||
:current-page="Number($route.query.page)"
|
||||
:page-count="Number(downloads.totalPages)"
|
||||
@current-change="pageNumber"
|
||||
>
|
||||
</el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import FadeInAnimation from '~/mixins/FadeInAnimation'
|
||||
|
||||
export default {
|
||||
name: 'DownloadsListPage',
|
||||
mixins: [FadeInAnimation],
|
||||
async asyncData({ $axios, query, error }) {
|
||||
try {
|
||||
const allData = await Promise.all([
|
||||
// fetch download categories
|
||||
$axios.get(`/api/public/dCategory`),
|
||||
// fetch downloads
|
||||
$axios.get(`/api/public/downloads/page/${encodeURIComponent(query.category)}/${query.page}`)
|
||||
])
|
||||
|
||||
const dCategories = allData[0]
|
||||
const downloads = allData[1]
|
||||
let downloads_newest = []
|
||||
if (downloads.data.docs.length >= 4) downloads_newest = await $axios.get(`/api/public/downloads-newest`)
|
||||
return {
|
||||
dCategories: dCategories.data,
|
||||
downloads: downloads.data,
|
||||
downloads_newest: downloads_newest.data || downloads_newest
|
||||
}
|
||||
} catch (e) {
|
||||
error({ status: 404, message: 'There is a problem here' })
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dCategories: null,
|
||||
downloads: null,
|
||||
downloads_newest: null,
|
||||
partSize: 4
|
||||
}
|
||||
},
|
||||
head() {
|
||||
return {
|
||||
title: 'آسان سرویس | دانلود ها'
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
paginate() {
|
||||
return this.downloads.totalPages > 1
|
||||
},
|
||||
pageQueries() {
|
||||
return this.$route.query.page + this.$route.query.category
|
||||
},
|
||||
topPartList() {
|
||||
return this.downloads.docs.filter((item, index) => index < this.partSize)
|
||||
},
|
||||
bottomPartList() {
|
||||
return this.downloads.docs.filter((item, index) => index >= this.partSize)
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
pageQueries(newVal, oldVal) {
|
||||
this.$nuxt.refresh()
|
||||
$(window).scrollTop(0)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageNumber(val) {
|
||||
this.$router.push({ name: 'download', query: { category: this.$route.query.category, page: val } })
|
||||
},
|
||||
categoryName(id) {
|
||||
return this.dCategories.find(item => item._id === id)?.name
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user