This commit is contained in:
HAM!DREZA
2024-05-31 00:03:10 +03:30
parent fd5b06c2d7
commit 2242ed022f
17 changed files with 379 additions and 96 deletions
+23 -8
View File
@@ -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('متن تست')
+8 -6
View File
@@ -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
View File
@@ -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"
+1
View File
@@ -10,6 +10,7 @@ export default defineNuxtConfig({
'@nuxtjs/tailwindcss',
'@nuxt/image',
'vue3-carousel-nuxt',
"@formkit/nuxt"
],
tailwindcss: {
cssPath: '~/assets/css/tailwind.css',
+178 -26
View File
@@ -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",
+1
View File
@@ -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
View File
@@ -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>
+4 -7
View File
@@ -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: {
+1 -1
View File
@@ -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;
}
+33
View File
@@ -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()
// }
+1 -2
View File
@@ -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) {
-2
View File
@@ -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) {
+27
View File
@@ -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
}
})