Skip to content

Commit 9e7afed

Browse files
authored
Create README.fa.md
1 parent 3c2cefc commit 9e7afed

File tree

1 file changed

+284
-0
lines changed

1 file changed

+284
-0
lines changed

README.fa.md

Lines changed: 284 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,284 @@
1+
# Vue3 Starter Template
2+
3+
ماجرای ساخت starter kit از آنجایی آغاز شد که قرار بود پروژههای جدید و شروع کنیم. میتونستیم هر پروژه رو به صورت جداگانهای توسعه بدیم و برای
4+
هر کدوم یک تیم قرار بدیم و مشخصا راه پروژهها و تیم ها از هم جدا میشد. برای حل این مشکل و یکپارچه کردن پروژهها تصمیم گرفتیم یک استاندارد
5+
کلی بزاریم و تمامی پروژهها از این استاندارد پیروی کنند. پیروی از این استاندارد باعث شد پروژهها تا حد زیادی در یک مسیر قرار بگیرن و نگهداری
6+
اونها آسونتر بشه و همچنین سازگاری تیمها با پروژهها افزایش پیدا کنه.
7+
8+
## **مشکلات استفاده از فریمورکها**
9+
10+
استفاده از UI فریمورک ها باعث افزایش سرعت develop میشه و کامپوننتهای زیادی رو در اختیار ما قرار میده و این کامپوننتها قابلیتهای زیادی رو
11+
پشتیبانی میکنه که با دادن پراپسها و اسلاتهای مختلف میشه از این قابلیتها استفاده کرد اما استفاده از این قابلیت ها باعث بروز مشکلاتی مانند
12+
سرعت پایین کامپوننتها، قابلیت شخصی سازی پایین استایلها، امکانات اضافه و در دسترس نبودن منطق کامپوننت ها اشاره کرد که در starter kit این
13+
مشکلات بر طرف شده
14+
15+
## **چرا این پروژه ایجاد شده؟**
16+
17+
راه اندازی سریع یک پروژه vue به خاطر اینکه استور، سرویسها، کامپوننتها و پیش نیاز های پروژه نوشته شدهاند، قابلیت شخصی سازی استایل کامپوننت
18+
ها، سبک بودن کامپوننتها و افزایش سرعت پروژه، برآورده کردن نیازهای اولیه پروژه مثل سرویسها و ابزارها و پیروی پروژهها از یک استاندارد کلی
19+
علت های اصلی ایجاد این پروژه هستند.
20+
21+
## **چرا کامپوننت ها بازنویسی شدن؟**
22+
23+
* سرعت: وجود پراپس ها و اسلات های کم و مورد استفاده باعث شده که سرعت صفحات حتی با وجود استفاده زیاد از کامپوننت ها به شدت بالا باشه و تفاوت
24+
کمی با استفاده از تگهای HTML داشته باشه.
25+
* امکانات لازم: به صورت پیشفرض برای کامپوننتها قابلیت های پر استفاده و لازم پیاده سازی شده و در هر پروژه اگر نیاز به فیچر و قابلیت خاصی
26+
باشد باید پیاده سازی شود.
27+
* شخصیسازی استایلها: برای هر کامپوننت یک فایل SCSS ساخته شده که استایلهای مربوط به اون کامپوننت داخلش نوشته شده. استایل هر کامپوننت با
28+
توجه به دیزاین پروژه تغییر پذیره.
29+
* منطق: با توجه به اینکه کامپوننتها به صورت اوپن سورس هستند به منطق هر کامپوننت دسترسی کامل دارید و برای اضافه کردن فیچر جدید یا رفع باگ (
30+
در صورت وجود) نیاز به انتظار برای نسخه جدید ندارید.
31+
32+
## **این پروژه شامل چه بخش هایی است؟**
33+
34+
در این پروژه نیازهای اولیه که برای راه اندازی یک پروژه vue لازم است پیاده سازی شده که شامل بخش های استور[^1]، روتر[^2]، سرویسها[^3]،
35+
چندزبانه[^4]، ابزارها[^5] است.برای استور و روتر از pinia و vue-router استفاده شده است که پکیج های رسمی vue هستند.
36+
سرویسها: شامل یک پروایدر برای مدیریت درخواستهای AJAX و سرویس های لازم برای مدیریت لوکالاستورج ، توکنها، دسترسی ها، زبان برنامه و احراز
37+
هویت کاربر است.
38+
چندزبانه: مدیریت متنها به وسیله کتابخانه قدرتمند i18n و تعریف متنهای پیشفرض برنامه به زبان های فارسی و انگلیسی.
39+
ابزارها: متدهای پر استفاده به صورت پیشفرض در این بخش قرار داده شدهاند.
40+
41+
## **اعتبارسنجی فرمها**
42+
43+
برخی از فیلدهای فرم، نیازمند اعتبارسنجی با توجه به نوع ورودی که برای آنها تعیین شده دارند و برای این کار پکیج های زیادی وجود داره اما برای
44+
اینکه وابستگی های پروژه کم بشه این امکان برای فرمها و اینپوتها پیاده سازی شده.
45+
این امکان قابلیت اضافه کردن قوانین مورد نیاز برای اعتبار سنجی فیلدها به صورت نامحدود رو داره و میشه چند قانون رو برای یک فیلد در نظر گرفت.
46+
داخل بخش کامپوننت ها مثال هایی زده شده.
47+
48+
## **از چه پکیج هایی استفاده شده؟**
49+
50+
* Vite
51+
از vite ورژن 4.3 به خاطر سرعت بالا در توسعه و امکاناتی که برای توسعه دهنده قرار میده استفاده شده.
52+
* Pinia
53+
سرعت بالا و راحتی توسعه و همچنین پشتیبانی از قابلیت composition api از pinia استفاده شده
54+
* Vue-router
55+
از نسخه 4 به خاطر پشتیبانی از composition api استفاده شده
56+
* Vue-i18n
57+
برای مدیریت چند زبانی پروژه از این پکیج استفاده شده و زبان های فارسی و انگلیسی به صورت پیشفرض اضافه شده است
58+
* Bootstrap
59+
استایل پیشفرض کامپوننت ها و پروژه با bootstrap ورژن 5 پیاده سازی شده و میشه با پکیج هایی مثل tailwind و … جایگزین بشه
60+
* Axios
61+
درخواست های سرویس با این پکیج مدیریت میشه
62+
* Rtlcss
63+
مدیریت استایل rtl و ltr در زبان های مختلف توسط این پکیج مدیریت میشه
64+
65+
## **Folder Structure**
66+
67+
`📂starter kit`
68+
`├──📂 src`
69+
`│ ├──📂 asset`
70+
`│ ├──📂 components`
71+
`│ ├──📂 composables`
72+
`│ ├──📂 directives`
73+
`│ ├──📂 enums`
74+
`│ ├──📂 locales`
75+
`│ ├──📂 router`
76+
`│ ├──📂 services`
77+
`│ ├──📂 stores`
78+
`│ ├──📂 utils`
79+
`│ ├──📂 views`
80+
`│ ├──📄 app.vue`
81+
`│ ├──📄 bootstrap.js`
82+
`│ └──📄 main.js`
83+
`├──📄 vite.config.js`
84+
`├──📄 package.json`
85+
`└──🌐 index.html`
86+
87+
## **چه کامپوننت هایی ساخته شده است و هر کدام چه امکاناتی دارند**
88+
89+
VForm
90+
این کامپوننت به جای تگ form استفاده میشه و امکان ولیدیشن (validation) رو فراهم میسازه.
91+
92+
VInput
93+
این کامپوننت علاوه بر امکاناتی که خود تگ input داره چند قابلیت دیگه رو هم پشتیبانی میکنه:
94+
95+
* اعتبارسنجی و نمایش متن خطا با توجه به قانون تعریف شده در پراپس rules
96+
* اسلاتهای append و prepend که قابلیت شخصی سازی بیشتری رو فراهم میکنند
97+
* امکان حذف مقادیر input با استفاده از پراپس clearable
98+
* غیرفعال کردن با استفاده از پراپس disabled
99+
* اسلات label
100+
101+
```vue
102+
103+
<VInput v-model="value" :rules="[validator.required('required')]" clearable disabled>
104+
<template #prepend>prepend</template>
105+
<template #label>test</template>
106+
<template #append>append</template>
107+
</VInput>
108+
```
109+
110+
VAutoComplete
111+
یکی از پرکاربردترین کامپوننت ها که قابلیت های زیادی رو پشتیبانی میکنه:
112+
113+
* پاس دادن آیتم ها به کامپوننت به وسیله پراپس items
114+
* اعتبارسنجی و نمایش متن خطا با توجه به قانون تعریف شده در پراپس rules
115+
* اسلاتهای append و prepend که قابلیت شخصی سازی بیشتری رو فراهم میکنند
116+
* امکان حذف مقادیر input با استفاده از پراپس clearable
117+
* تعیین متن آیتمهای منو بر اساس فیلد خاصی از آیتم های پاس داده شده با استفاده از پراپس item-text
118+
* تعیین value کامپوننت بر اساس فیلد خاصی از آیتم های پاس داده شده با استفاده از پراپس item-key
119+
* شخصی سازی آیتمهای منو به وسیله اسلات item
120+
* اسلات label
121+
* غیرفعال کردن با استفاده از پراپس disabled
122+
* تعین سایز کامپوننت به وسیله پراپس size
123+
124+
```vue
125+
126+
<VAutoComplete
127+
v-model="value"
128+
:items="items"
129+
item-key="id"
130+
item-text="name"
131+
size="md"
132+
clearable
133+
disabled
134+
:rules="[validator.required('required')]"
135+
>
136+
<template #label>test</template>
137+
<template #item="{item}">{{item}}</template>
138+
</VAutoComplete>
139+
```
140+
141+
VRadioGroup
142+
این کامپوننت به عنوان پروایدر عمل میکنه و گروه بندی input ها رو انجام میده
143+
144+
* اعتبارسنجی و نمایش متن خطا با توجه به قانون تعریف شده در پراپس rules
145+
* تعیین name مشترک برای تمام input ها با پراپس name
146+
147+
VRadio
148+
این کامپوننت به عنوان input با تایپ radio استفاده میشه:
149+
150+
* پراپس value برای مشخص کردن مقدار input
151+
* غیرفعال کردن با استفاده از پراپس disabled
152+
* پراپس های outlined و button برای تغییر استایل
153+
* پراپس theme برای تغییر رنگ کامپوننت
154+
* اسلات label
155+
156+
```vue
157+
158+
<VRadioGroup name="radio-button" v-model="value" :rules="[validator.required('required')]">
159+
<VRadio outlined value="1">
160+
<template #label>number one</template>
161+
</VRadio>
162+
<VRadio button theme="danger" value="2">
163+
<template #label>number two</template>
164+
</VRadio>
165+
<VRadio disabled outlined theme="dark" value="3">
166+
<template #label>number three</template>
167+
</VRadio
168+
</VRadioGroup>
169+
```
170+
171+
VTextArea
172+
این کامپوننت علاوه بر امکاناتی که خود تگ textarea داره چند قابلیت دیگه رو هم پشتیبانی میکنه:
173+
174+
* اعتبارسنجی و نمایش متن خطا با توجه به قانون تعریف شده در پراپس rules
175+
* غیرفعال کردن با استفاده از پراپس disabled
176+
* اسلات label
177+
178+
```vue
179+
180+
<VTextArea v-model="value" :rules="[validator.required('required')]" disabled>
181+
<template #label>label</template>
182+
</VTextArea>
183+
```
184+
185+
VTooltip
186+
187+
* پراپس position برای تعیین مکان tooltip
188+
* پراپس trigger برای تعیین ایونت کامپوننت (hover , click , focus)
189+
* تغییر استایل کامپوننت با استفاده از پراپس theme
190+
* اسلات activator
191+
192+
```vue
193+
194+
<VTooltip theme="warning" position="start">
195+
<template #activator="{on}">
196+
<button v-on="on">activator</button>
197+
</template>
198+
<template #default>Tooltip</template>
199+
</VTooltip>
200+
```
201+
202+
VModal
203+
یکی از پرکاربردترین کامپوننت ها که قابلیت های زیادی رو پشتیبانی میکنه و قابلیت شخصی سازی زیادی هم داره:
204+
205+
* پراپس show برای نمایش کامپوننت
206+
* پراپس size برای تعیین اندازه کامپوننت
207+
* پراپس mobile-breakpoint برای تمام صفحه شدن کامپوننت در سایز های موبایل
208+
* اسلات header برای شخصی سازی header کامپوننت
209+
* اسلات title برای تغییر عنوان کامپوننت
210+
* اسلات body برای پیاده سازی محتوای کامپوننت
211+
* اسلات footer برای قرار دادن اکشن ها و شخصی سازی footer کامپوننت
212+
* ایونت show قابلیت انجام عملیات هنگام بازٰشدن مودال رو میده
213+
* ایونت hide قابلیت انجام عملیات هنگام بسته شدن مودال رو میده
214+
215+
```vue
216+
217+
<VModal v-model:show="value" size="md" mobile-breakpoint="sm" @show="doSomthingOnShow" @hide="doSomthingOnHide">
218+
<template #title>title</template>
219+
<template #body>body</template>
220+
<template #footer>footer</template>
221+
</VModal>
222+
```
223+
224+
ٰTable
225+
این پروژه دو کامپوننت جدول دارد که یکی برای دادههای سمت سرور و دیگری داده های استاتیک.
226+
227+
VTable و VTableServer
228+
VTable جدولی برای داده های استاتیک و VTableServer برای دادههای سمت سرور
229+
230+
* پاس دادن آیتم ها به کامپوننت به وسیله پراپس items
231+
* تعداد کل آیتمها توسط پراپس items-length
232+
* تعداد ردیفهای جدول با پراپس items-per-page
233+
* تعیین شماره صفحه با پراپس page
234+
* حالت لودینگ جدول با پراپس is-loading
235+
* اسلات row برای شخصی سازی ردیف های جدول
236+
237+
```vue
238+
239+
<VTable :items="items" :items-length="items.length" items-per-page="10" :page="page" :is-loading="isLoading">
240+
<template #row="{item, columns}">
241+
<tr>
242+
<component :is="column" v-for="(column, index) of columns" :key="index"/>
243+
</tr>
244+
</template>
245+
<VColumn field="name" header="name"></VColumn>
246+
<VColumn field="id" header="id"></VColumn>
247+
</VTable>
248+
<VTableServer :items="items" :items-length="items.length" items-per-page="10" :page="page" :is-loading="isLoading">
249+
<template #row="{item, columns}">
250+
<tr>
251+
<component :is="column" v-for="(column, index) of columns" :key="index"/>
252+
</tr>
253+
</template>
254+
<VColumn field="name" header="name"></VColumn>
255+
<VColumn field="id" header="id"></VColumn>
256+
</VTableServer>
257+
```
258+
259+
VColumn
260+
261+
کامپوننتی برای تعین ستون های جدول
262+
263+
* پراپس field برای تعیین مقدار ستون با توجه به هر آیتم
264+
* پراپس header برای تعیین هدر هر ستون
265+
* اسلات body برای شخصی سازی مقدار هر ستون
266+
* اسلات header برای شخصی سازی هدر هر ستون
267+
268+
```vue
269+
270+
<VColumn>
271+
<template #header> name</template>
272+
<template #body="{item}"> {{item.name}}</template>
273+
</VColumn>
274+
```
275+
276+
[^1]: store
277+
278+
[^2]: router
279+
280+
[^3]: services
281+
282+
[^4]: localization
283+
284+
[^5]: utils

0 commit comments

Comments
 (0)