update
This commit is contained in:
+23
-8
@@ -3,12 +3,12 @@
|
||||
<div class="relative text-center h-[56.154vw] md:h-[11.406vw]">
|
||||
<p
|
||||
class="post w-[30.769vw] md:w-[6.979vw] h-[9.487vw] md:h-[2.24vw] flexBox text-[3.59vw] md:text-[0.938vw] absolute left-0 bottom-0 bg-white rounded-tr-[3.59vw] md:rounded-tr-[0.781vw]">
|
||||
540,000
|
||||
{{props.course?.price}},000
|
||||
<span class="ms-[1vw] md:ms-[0.2vw] text-[2.236vw] md:text-[0.585vw]">تومان</span>
|
||||
</p>
|
||||
<NuxtImg style="object-fit: cover;" :src="props.course?.image" alt="laravel"
|
||||
:placeholder="[30, 20]"
|
||||
:format="webp"
|
||||
|
||||
class="h-[56.154vw] md:h-[11.406vw] w-full rounded-[3.846vw] md:rounded-[0.781vw]" />
|
||||
|
||||
</div>
|
||||
@@ -17,10 +17,10 @@
|
||||
|
||||
<div class="flexBox flex-col">
|
||||
<div class="w-[69.231vw] md:w-[16vw] space-y-[9vw] md:space-y-[1.4vw] mt-[4vw] md:mt-[0vw] xl:mt-[0.7vw]">
|
||||
<NuxtLink to="/ترفندهای-پایتون"
|
||||
<h1
|
||||
class="hover:text-primaryGreen text-[3.59vw] md:text-[0.833vw] text-[#383E43] w-full">
|
||||
{{props.course?.name}}
|
||||
</NuxtLink>
|
||||
</h1>
|
||||
<div class="flex justify-between text-[3.614vw] md:text-[0.658vw]">
|
||||
<p class="flex items-center text-[#878787]">
|
||||
<svg
|
||||
@@ -39,7 +39,22 @@
|
||||
stroke-linejoin="round" />
|
||||
</svg>
|
||||
|
||||
<span class="md:ms-[0.2vw]">بک اند</span>
|
||||
<span class="md:ms-[0.2vw]"
|
||||
v-for="category in props.course?.categories"
|
||||
:key="category.id"
|
||||
>
|
||||
{{category.name}}
|
||||
|
||||
<!-- <span v-if="props.course?.categories[0] === '66587a9498d0a0db14693a5b'">
|
||||
بک اند
|
||||
</span>
|
||||
<span v-if="props.course?.categories[0] === '66587ae698d0a0db14693a5e'">
|
||||
فرانت اند
|
||||
</span>
|
||||
<span v-else>
|
||||
{{props.course?.categories}}
|
||||
</span> -->
|
||||
</span>
|
||||
</p>
|
||||
<p class="flex items-center text-[#878787]">
|
||||
<svg
|
||||
@@ -60,7 +75,7 @@
|
||||
fill="#E5E5E5" />
|
||||
</svg>
|
||||
|
||||
<span class="md:ms-[0.2vw]">825 دانشجو</span>
|
||||
<span class="md:ms-[0.2vw]">{{props.course?.studentsCount}} دانشجو</span>
|
||||
</p>
|
||||
<p class="flex items-center text-[#878787]">
|
||||
<svg
|
||||
@@ -72,7 +87,7 @@
|
||||
fill="#E5E5E5" />
|
||||
</svg>
|
||||
|
||||
<span class="md:ms-[0.2vw]">00:28</span>
|
||||
<span class="md:ms-[0.2vw]">{{props.course?.duration}} ساعت</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
@@ -127,7 +142,7 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import { useToast } from 'vue-toastification'
|
||||
const props = defineProps(['course'])
|
||||
const props = defineProps(['course']);
|
||||
const toast = useToast()
|
||||
const change = () =>{
|
||||
toast.error('متن تست')
|
||||
|
||||
@@ -49,12 +49,13 @@
|
||||
<li class="pb-[0.681vw]">گران ترین</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div
|
||||
class="mt-[4.051vw] md:mt-[2.1vw] grid gap-[4vw] md:gap-[1.25vw] grid-cols-1 md:grid-cols-4"
|
||||
v-for="(course, index) in data.data.value"
|
||||
:key="index"
|
||||
<div class="mt-[4.051vw] md:mt-[2.1vw] grid gap-[4vw] md:gap-[1.25vw] grid-cols-1 md:grid-cols-4"
|
||||
>
|
||||
<Card :course="course" />
|
||||
<div v-for="(course, index) in data.data.courses"
|
||||
:key="index">
|
||||
<Card :course="course" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -62,7 +63,8 @@
|
||||
<script setup>
|
||||
// const pages = 17 / 16
|
||||
// console.log(Math.ceil(pages));
|
||||
const data = await useFetch("/api/course");
|
||||
//const data = await useFetch("/api/course");
|
||||
const data = defineProps(['data']);
|
||||
const openSortOptions = () => {
|
||||
if (process.client) {
|
||||
document
|
||||
|
||||
@@ -17,7 +17,9 @@
|
||||
</h3>
|
||||
<span
|
||||
class="mt-[3vw] md:mt-[3vw] text-[#878787] text-[3.59vw] md:text-[0.833vw] md:me-[1.563vw]"
|
||||
>42 ویدیو آموزشی</span
|
||||
>
|
||||
{{data?.count}}
|
||||
ویدیو آموزشی</span
|
||||
>
|
||||
</div>
|
||||
<p
|
||||
@@ -79,8 +81,9 @@
|
||||
:wrapAround="true"
|
||||
class="w-full md:w-[95%]"
|
||||
>
|
||||
<Slide v-for="slide in categories" :key="slide">
|
||||
<div class="categoriesOption">{{ slide }}</div>
|
||||
<Slide v-for="slide in categories" :key="slide" @click="selectCategory(slide.id)">
|
||||
<div class="categoriesOption"
|
||||
>{{ slide.name }}</div>
|
||||
</Slide>
|
||||
</Carousel>
|
||||
|
||||
@@ -98,21 +101,30 @@
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="pending" class="grid grid-cols-4 gap-[2vw] mt-[2vw]">
|
||||
<Loading />
|
||||
<Loading />
|
||||
<Loading />
|
||||
<Loading />
|
||||
</div>
|
||||
<courses-pageCourses-list :data="data"/>
|
||||
</template>
|
||||
<script setup>
|
||||
const categories = [
|
||||
"Python",
|
||||
"JavaScript",
|
||||
"C#",
|
||||
"php",
|
||||
"C++",
|
||||
"Ruby",
|
||||
"Node.js",
|
||||
"php",
|
||||
"C++",
|
||||
"Ruby",
|
||||
"Node.js",
|
||||
];
|
||||
const changeCategory = ref('')
|
||||
const {data, refresh, pending} = await useFetch(() => "/api/course", {
|
||||
method: "POST",
|
||||
body: {
|
||||
changeCategory
|
||||
}
|
||||
});
|
||||
const categoryLis = await useFetch("/api/category");
|
||||
// console.log('daste bandy', categoryLis.data.value);
|
||||
const categories = categoryLis.data.value;
|
||||
function selectCategory (id){
|
||||
changeCategory.value = '/category/' + id
|
||||
refresh()
|
||||
}
|
||||
|
||||
const breakpoints = {
|
||||
// 700px and up
|
||||
300: {
|
||||
|
||||
@@ -10,14 +10,15 @@
|
||||
<div
|
||||
class="mt-[4.051vw] md:mt-[2.1vw] grid gap-[4vw] md:gap-[1.25vw] grid-cols-1 md:grid-cols-4"
|
||||
>
|
||||
<Card />
|
||||
<Card />
|
||||
<Card />
|
||||
<Card />
|
||||
<Card />
|
||||
<Card />
|
||||
<Card />
|
||||
<Card />
|
||||
<div v-for="(course, index) in selectedItems"
|
||||
:key="index">
|
||||
<Card :course="course" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
<script setup>
|
||||
const data = await useFetch("/api/course");
|
||||
const selectedItems = data.data.value.courses.slice(0, 8);
|
||||
</script>
|
||||
+8
-1
@@ -245,7 +245,14 @@
|
||||
<p
|
||||
class="py-[2vw] md:py-0 text-[17.72px] md:text-[1.502vw] text-[#383E43] mt-[0.417vw]"
|
||||
>
|
||||
علی مصلحی عزیز خوش اومدی
|
||||
<span v-if="authUser.name">
|
||||
{{authUser?.name}}
|
||||
</span>
|
||||
|
||||
<span v-else>کاربر</span>
|
||||
|
||||
|
||||
عزیز خوش اومدی
|
||||
</p>
|
||||
<svg
|
||||
class="hidden md:block float-left"
|
||||
|
||||
@@ -10,6 +10,7 @@ export default defineNuxtConfig({
|
||||
'@nuxtjs/tailwindcss',
|
||||
'@nuxt/image',
|
||||
'vue3-carousel-nuxt',
|
||||
"@formkit/nuxt"
|
||||
],
|
||||
tailwindcss: {
|
||||
cssPath: '~/assets/css/tailwind.css',
|
||||
|
||||
Generated
+178
-26
@@ -7,6 +7,7 @@
|
||||
"name": "nuxt-app",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@formkit/nuxt": "^1.6.5",
|
||||
"@nuxt/image": "^1.7.0",
|
||||
"nuxt": "^3.11.2",
|
||||
"vue": "^3.4.27",
|
||||
@@ -23,7 +24,7 @@
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
||||
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
@@ -1131,6 +1132,134 @@
|
||||
"integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@formkit/core": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.6.5.tgz",
|
||||
"integrity": "sha512-LLq8+vLd9ddPYA0NkyvnKycN4ESU8Wqcl9TrllPyU/axduJunSIJMZz4LHzlwK8G26b0pQNegXF/hXaj4wbmng==",
|
||||
"dependencies": {
|
||||
"@formkit/utils": "1.6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/dev": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/dev/-/dev-1.6.5.tgz",
|
||||
"integrity": "sha512-dg62HTehLPi9lLBShixr9AoYgIv13gpxTZgiHEvf1UZz2HQq0Lcp63d0a+XT/tQ2HTz2ewLUGeXSN9dUVkYFSg==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5",
|
||||
"@formkit/utils": "1.6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/i18n": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/i18n/-/i18n-1.6.5.tgz",
|
||||
"integrity": "sha512-mM1UKGSa0Mdd8a8AAF+6BCNFnf8gUD1nOzU6dJ9UoPE8M/qA+hmcPR3PJm39p6e3OaT5O0Gn/J6JxgccPyWmGA==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5",
|
||||
"@formkit/utils": "1.6.5",
|
||||
"@formkit/validation": "1.6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/inputs": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/inputs/-/inputs-1.6.5.tgz",
|
||||
"integrity": "sha512-mHLMF0JMFZL/JC6NYrG4xaIdi7lUNE+tdC+QMipBdhobUhND0EJSpO6QNPGF6OLd9Zm9MDgqAzNXEtc05/nvow==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5",
|
||||
"@formkit/utils": "1.6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/nuxt": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/nuxt/-/nuxt-1.6.5.tgz",
|
||||
"integrity": "sha512-/jzQ833DoUmD3qWc7RHxJDpfT1kRQBi4oqRzwKIzOJ1+s0/Q1p11m1XAWayF4io/kEs3rHEnIn6X+nzpxzjICw==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5",
|
||||
"@formkit/i18n": "1.6.5",
|
||||
"@formkit/vue": "1.6.5",
|
||||
"@nuxt/kit": "^3.10.3",
|
||||
"chokidar": "^3.6.0",
|
||||
"pathe": "^1.1.2",
|
||||
"unplugin": "^1.9.0",
|
||||
"unplugin-formkit": "^0.2.13"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/observer": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/observer/-/observer-1.6.5.tgz",
|
||||
"integrity": "sha512-3Vh2Pj6tHX3wosbNm5VvwVVlTI5Zq0FT3dl/+DAuaCG84abpTLoc3O0C2pmbQcDaJ4aCuxu3+tBmhY9J7qFXMQ==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5",
|
||||
"@formkit/utils": "1.6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/rules": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/rules/-/rules-1.6.5.tgz",
|
||||
"integrity": "sha512-j9ylAibBvNx+3tEAkYzl2HjQwDzWV2mRPmFH7GTAmtxijFiktPS8HTU9H88H/x2stkYk9S13/MMeqDgZnc3VrQ==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5",
|
||||
"@formkit/utils": "1.6.5",
|
||||
"@formkit/validation": "1.6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/themes": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/themes/-/themes-1.6.5.tgz",
|
||||
"integrity": "sha512-C+ANzH6qw4zS7niv+RamJAqpASOPfrZvMURVj5HQcT1XlcYB7ULvA9UmDW/AKOqP/OGf/OL6WvOzA7B16UkiiA==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"tailwindcss": "^3.2.0",
|
||||
"unocss": "0.x.x",
|
||||
"windicss": "^3.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"tailwindcss": {
|
||||
"optional": true
|
||||
},
|
||||
"unocss": {
|
||||
"optional": true
|
||||
},
|
||||
"windicss": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/utils": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.6.5.tgz",
|
||||
"integrity": "sha512-fohOg344tqFujHlEwvyHzzH5YiOBgecuOPkg7r7QObUrsH8gP1N8Rp9CHZlafxZ1zAEHZY2nTNx0VVQBkVmJbA=="
|
||||
},
|
||||
"node_modules/@formkit/validation": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/validation/-/validation-1.6.5.tgz",
|
||||
"integrity": "sha512-mnU+F6uXsNlczbU7QOq6QfsafSYNmMF9zvOpk4ravn9mba0IDXRhkPgU/+VFpcF/EEiXmqQql3pqQ7Vqv2wVbg==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5",
|
||||
"@formkit/observer": "1.6.5",
|
||||
"@formkit/utils": "1.6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/vue": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/vue/-/vue-1.6.5.tgz",
|
||||
"integrity": "sha512-D5W8JfhFJXUXm8RX0OfPbPZt3Ds68iqxSrvbvmyabae2cBlGl8sqhMEuc48FptnsGOYqYXOhG+CPni+uE72Whw==",
|
||||
"dependencies": {
|
||||
"@formkit/core": "1.6.5",
|
||||
"@formkit/dev": "1.6.5",
|
||||
"@formkit/i18n": "1.6.5",
|
||||
"@formkit/inputs": "1.6.5",
|
||||
"@formkit/observer": "1.6.5",
|
||||
"@formkit/rules": "1.6.5",
|
||||
"@formkit/themes": "1.6.5",
|
||||
"@formkit/utils": "1.6.5",
|
||||
"@formkit/validation": "1.6.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@iconify/types": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
|
||||
@@ -4236,7 +4365,7 @@
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
|
||||
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/anymatch": {
|
||||
"version": "3.1.3",
|
||||
@@ -4364,7 +4493,7 @@
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
||||
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "2.0.1",
|
||||
@@ -4845,7 +4974,7 @@
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
|
||||
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
@@ -5677,7 +5806,7 @@
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
|
||||
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/diff": {
|
||||
"version": "5.2.0",
|
||||
@@ -5691,7 +5820,7 @@
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
||||
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/dom-serializer": {
|
||||
"version": "2.0.0",
|
||||
@@ -7385,7 +7514,7 @@
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
||||
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/listhen": {
|
||||
"version": "1.7.2",
|
||||
@@ -7915,7 +8044,7 @@
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
|
||||
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"any-promise": "^1.0.0",
|
||||
"object-assign": "^4.0.1",
|
||||
@@ -8589,7 +8718,7 @@
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
|
||||
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
@@ -8936,7 +9065,7 @@
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@@ -8945,7 +9074,7 @@
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
|
||||
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
@@ -9126,7 +9255,7 @@
|
||||
"version": "15.1.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
|
||||
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"postcss-value-parser": "^4.0.0",
|
||||
"read-cache": "^1.0.0",
|
||||
@@ -9143,7 +9272,7 @@
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
|
||||
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"camelcase-css": "^2.0.1"
|
||||
},
|
||||
@@ -9162,7 +9291,7 @@
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
|
||||
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
@@ -9289,7 +9418,7 @@
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
|
||||
"integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"postcss-selector-parser": "^6.0.11"
|
||||
},
|
||||
@@ -9791,7 +9920,7 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
||||
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"pify": "^2.3.0"
|
||||
}
|
||||
@@ -10842,7 +10971,7 @@
|
||||
"version": "3.35.0",
|
||||
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
|
||||
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.2",
|
||||
"commander": "^4.0.0",
|
||||
@@ -10864,7 +10993,7 @@
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
||||
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
@@ -10873,7 +11002,7 @@
|
||||
"version": "10.3.14",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.14.tgz",
|
||||
"integrity": "sha512-4fkAqu93xe9Mk7le9v0y3VrPDqLKHarNi2s4Pv7f2yOvfhWfhc7hRPHC/JyqMqb8B/Dt/eGS4n7ykwf3fOsl8g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"foreground-child": "^3.1.0",
|
||||
"jackspeak": "^2.3.6",
|
||||
@@ -10895,7 +11024,7 @@
|
||||
"version": "9.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
|
||||
"integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"brace-expansion": "^2.0.1"
|
||||
},
|
||||
@@ -11070,7 +11199,7 @@
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz",
|
||||
"integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"@alloc/quick-lru": "^5.2.0",
|
||||
"arg": "^5.0.2",
|
||||
@@ -11107,7 +11236,7 @@
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
|
||||
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"is-glob": "^4.0.3"
|
||||
},
|
||||
@@ -11119,7 +11248,7 @@
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
|
||||
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
@@ -11233,7 +11362,7 @@
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
|
||||
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"any-promise": "^1.0.0"
|
||||
}
|
||||
@@ -11242,7 +11371,7 @@
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
|
||||
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"thenify": ">= 3.1.0 < 4"
|
||||
},
|
||||
@@ -11299,7 +11428,7 @@
|
||||
"version": "0.1.13",
|
||||
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
|
||||
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/tsscmp": {
|
||||
"version": "1.0.6",
|
||||
@@ -11584,6 +11713,29 @@
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/unplugin-formkit": {
|
||||
"version": "0.2.13",
|
||||
"resolved": "https://registry.npmjs.org/unplugin-formkit/-/unplugin-formkit-0.2.13.tgz",
|
||||
"integrity": "sha512-qNHz7/0QDO0uVD5MoUZz49CI7q8cHM24RQDwbs5NfRJ6EiyZ1gBmWq9ta3QHR2nD7xacXV+yzmfDbnwlNpkzsg==",
|
||||
"dependencies": {
|
||||
"pathe": "^1.1.1",
|
||||
"unplugin": "^1.4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"esbuild": {
|
||||
"optional": true
|
||||
},
|
||||
"rollup": {
|
||||
"optional": true
|
||||
},
|
||||
"vite": {
|
||||
"optional": true
|
||||
},
|
||||
"webpack": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/unplugin-vue-router": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.7.0.tgz",
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"postinstall": "nuxt prepare"
|
||||
},
|
||||
"dependencies": {
|
||||
"@formkit/nuxt": "^1.6.5",
|
||||
"@nuxt/image": "^1.7.0",
|
||||
"nuxt": "^3.11.2",
|
||||
"vue": "^3.4.27",
|
||||
|
||||
+51
-14
@@ -71,43 +71,80 @@
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<FormKit type="form" @submit="edit" :incomplete-message="false" :actions="false">
|
||||
<div class="relative items-center gap-[5vw] md:gap-0 grid grid-cols-1 md:grid-cols-2 mt-[2vw] w-full md:w-[65%]">
|
||||
<div class="flex flex-col space-y-[0.2vw] mb-[0.5vw]">
|
||||
<label for="" class="text-[3.19vw] md:text-[0.833vw] font-[400]">شماره موبایل</label>
|
||||
<input
|
||||
:value="authUser?.phone"
|
||||
type="text"
|
||||
class="bg-[#F5F5F5] h-[13.59vw] md:h-[2.969vw] w-full md:w-[19.01vw] rounded-[2.564vw] md:rounded-[0.521vw] px-[1vw]"
|
||||
<input type="text" name="name"
|
||||
:value="authUser?.phone"
|
||||
readonly
|
||||
class="bg-[#F5F5F5] h-[13.59vw] md:h-[2.969vw] w-full md:w-[19.01vw] rounded-[2.564vw] md:rounded-[0.521vw] px-[1vw]"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex flex-col space-y-[0.2vw] mb-[0.5vw]">
|
||||
<label for="" class="text-[3.19vw] md:text-[0.833vw] font-[400]"
|
||||
>نام و نام خانوادگی</label
|
||||
>
|
||||
<input
|
||||
<FormKit
|
||||
name="name"
|
||||
:value="authUser?.name"
|
||||
type="text"
|
||||
class="bg-[#F5F5F5] h-[13.59vw] md:h-[2.969vw] w-full md:w-[19.01vw] rounded-[2.564vw] md:rounded-[0.521vw]"
|
||||
input-class="bg-[#F5F5F5] h-[13.59vw] md:h-[2.969vw] w-full md:w-[19.01vw] rounded-[2.564vw] md:rounded-[0.521vw] px-[1vw]"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex flex-col space-y-[0.2vw]">
|
||||
<label for="" class="text-[3.19vw] md:text-[0.833vw] font-[400]">نام کاربری</label>
|
||||
<FormKit
|
||||
name="userName"
|
||||
:value="authUser?.userName"
|
||||
type="text"
|
||||
input-class="bg-[#F5F5F5] h-[13.59vw] md:h-[2.969vw] w-full md:w-[19.01vw] rounded-[2.564vw] md:rounded-[0.521vw] px-[1vw]"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex flex-col space-y-[0.2vw]">
|
||||
<label for="" class="text-[3.19vw] md:text-[0.833vw] font-[400]">ایمیل</label>
|
||||
<input
|
||||
<FormKit
|
||||
name="email"
|
||||
:value="authUser?.email"
|
||||
type="text"
|
||||
class="bg-[#F5F5F5] h-[13.59vw] md:h-[2.969vw] w-full md:w-[19.01vw] rounded-[2.564vw] md:rounded-[0.521vw]"
|
||||
input-class="bg-[#F5F5F5] h-[13.59vw] md:h-[2.969vw] w-full md:w-[19.01vw] rounded-[2.564vw] md:rounded-[0.521vw] px-[1vw]"
|
||||
/>
|
||||
</div>
|
||||
<button
|
||||
class="text-[3.59vw] md:text-[0.833vw] absolute md:left-[1vw] top-[80vw] md:top-[11vw] greenButton h-[13.59vw] md:h-[2.813vw] w-full md:w-[8.438vw] rounded-[2.564vw] md:rounded-[0.521vw] flexBox px-0"
|
||||
>
|
||||
ثبت اطلاعات
|
||||
</button>
|
||||
<FormKit
|
||||
input-class="
|
||||
text-[3.59vw] md:text-[0.833vw] absolute md:left-[1vw] top-[80vw] md:top-[11vw] greenButton h-[13.59vw]
|
||||
md:h-[2.813vw] w-full md:w-[8.438vw] rounded-[2.564vw] md:rounded-[0.521vw] flexBox px-0
|
||||
"
|
||||
type="submit">
|
||||
ویرایش
|
||||
</FormKit>
|
||||
</div>
|
||||
</FormKit>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
<script setup>
|
||||
import { useToast } from 'vue-toastification'
|
||||
const toast = useToast()
|
||||
const { authUser } = useAuth();
|
||||
const loading = ref(false)
|
||||
|
||||
const edit = async(formData) => {
|
||||
console.log('form :',formData);
|
||||
try {
|
||||
loading.value = true;
|
||||
await $fetch('/api/user/update', {
|
||||
method: 'PUT',
|
||||
body: formData
|
||||
})
|
||||
// toast.success("ویرایش اطلاعات شما باموفقیت انجام شد");
|
||||
location.reload()
|
||||
} catch (error) {
|
||||
toast.error(error)
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -385,7 +385,6 @@ import { useToast } from 'vue-toastification'
|
||||
const toast = useToast()
|
||||
|
||||
const { data: tickets, refresh: load } = await useFetch("/api/ticket");
|
||||
console.log('cli tick', tickets);
|
||||
const loading = ref(false);
|
||||
const addTicketForm = ref(false);
|
||||
const subject = ref(null);
|
||||
@@ -401,12 +400,13 @@ const sendTicket = async () => {
|
||||
const data = await useFetch("/api/ticket", {
|
||||
method: "POST",
|
||||
body: {
|
||||
subject,
|
||||
subject: subject.value,
|
||||
},
|
||||
});
|
||||
subject.value = '';
|
||||
addTicketForm.value = false;
|
||||
load()
|
||||
addTicketForm.value = false;
|
||||
subject.value = null;
|
||||
console.log('تیکت',data);
|
||||
|
||||
};
|
||||
|
||||
@@ -424,9 +424,6 @@ const openTicket = async (data) => {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
const {data: single, refresh: reload} = await useFetch("/api/ticket/id", {
|
||||
method: "POST",
|
||||
body: {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="courses">
|
||||
<div >
|
||||
<home-page-courses-sectionCategories />
|
||||
<courses-pageCourses-list />
|
||||
<!-- <courses-pageCourses-list /> -->
|
||||
<courses-pagePagination />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { public: { apiBase } } = useRuntimeConfig();
|
||||
try {
|
||||
const data = await $fetch(`${apiBase}/course`, {
|
||||
const categoryLis = await $fetch(`${apiBase}/courseCategory`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
}
|
||||
});
|
||||
return data;
|
||||
return categoryLis;
|
||||
} catch (error) {
|
||||
return error;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const { public: { apiBase } } = useRuntimeConfig();
|
||||
const body = await readBody(event);
|
||||
console.log(body);
|
||||
|
||||
try {
|
||||
const data = await $fetch(`${apiBase}/course${body.changeCategory}`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
}
|
||||
});
|
||||
return data;
|
||||
} catch (error) {
|
||||
return error;
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
// const page = ref(0);
|
||||
|
||||
// const { data, refresh } = await useFetch(() => '/api/global', {
|
||||
// query: { url: '/orders', page },
|
||||
// headers: useRequestHeaders(['cookie'])
|
||||
// })
|
||||
|
||||
// function paginate(value) {
|
||||
// page.value = value;
|
||||
// refresh()
|
||||
// }
|
||||
@@ -3,7 +3,7 @@ export default defineEventHandler(async (event) => {
|
||||
const { public: { apiBase } } = useRuntimeConfig();
|
||||
const token = getCookie(event, 'token');
|
||||
const body = await readBody(event);
|
||||
console.log('body', body.id);
|
||||
console.log('badane :', body);
|
||||
try {
|
||||
const data = await $fetch(`${apiBase}/ticket/${body.id}`, {
|
||||
method: 'GET',
|
||||
@@ -13,7 +13,6 @@ console.log('body', body.id);
|
||||
},
|
||||
id: body.id
|
||||
});
|
||||
console.log('tttt :', data);
|
||||
return data;
|
||||
} catch (error) {
|
||||
return error;
|
||||
|
||||
@@ -3,7 +3,7 @@ export default defineEventHandler(async (event) => {
|
||||
const { public: { apiBase } } = useRuntimeConfig();
|
||||
const token = getCookie(event, 'token');
|
||||
const body = await readBody(event);
|
||||
|
||||
console.log(body);
|
||||
try {
|
||||
const data = await $fetch(`${apiBase}/ticket`, {
|
||||
method: 'POST',
|
||||
@@ -11,8 +11,9 @@ export default defineEventHandler(async (event) => {
|
||||
'Accept': 'application/json',
|
||||
'Authorization': `Bearer ${token}`
|
||||
},
|
||||
body
|
||||
body,
|
||||
});
|
||||
|
||||
return data;
|
||||
} catch (error) {
|
||||
|
||||
@@ -3,7 +3,6 @@ export default defineEventHandler(async (event) => {
|
||||
const { public: { apiBase } } = useRuntimeConfig();
|
||||
const token = getCookie(event, 'token');
|
||||
const body = await readBody(event);
|
||||
console.log('bod' , body);
|
||||
try {
|
||||
const data = await $fetch(`${apiBase}/ticket/message`, {
|
||||
method: 'POST',
|
||||
@@ -13,7 +12,6 @@ console.log('bod' , body);
|
||||
},
|
||||
body
|
||||
});
|
||||
console.log('new :', data);
|
||||
return data;
|
||||
} catch (error) {
|
||||
// if (error.statusCode == 401) {
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody(event);
|
||||
const { public: { apiBase } } = useRuntimeConfig();
|
||||
const token = getCookie(event, 'token');
|
||||
console.log(body);
|
||||
try {
|
||||
const data = await $fetch(`${apiBase}/user/update`, {
|
||||
method: 'PUT',
|
||||
body: {
|
||||
avatarMediaId: "",
|
||||
name: body.name,
|
||||
lastName: "",
|
||||
userName: "",
|
||||
email: body.email,
|
||||
userName: body.userName
|
||||
},
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Authorization': `Bearer ${token}`
|
||||
}
|
||||
});
|
||||
return data;
|
||||
} catch (err) {
|
||||
return err
|
||||
}
|
||||
|
||||
})
|
||||
Reference in New Issue
Block a user