add service part 1

This commit is contained in:
hamid zarghami
2025-01-23 10:40:02 +03:30
parent 73a385a031
commit b9b2283ba4
8 changed files with 115 additions and 7 deletions
+22
View File
@@ -31,6 +31,7 @@
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.17.0", "@eslint/js": "^9.17.0",
"@types/draft-js": "^0.11.18",
"@types/react": "^18.3.17", "@types/react": "^18.3.17",
"@types/react-dom": "^18.3.5", "@types/react-dom": "^18.3.5",
"@types/swiper": "^5.4.3", "@types/swiper": "^5.4.3",
@@ -1815,6 +1816,17 @@
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/draft-js": {
"version": "0.11.18",
"resolved": "https://registry.npmjs.org/@types/draft-js/-/draft-js-0.11.18.tgz",
"integrity": "sha512-lP6yJ+EKv5tcG1dflWgDKeezdwBa8wJ7KkiNrrHqXuXhl/VGes1SKjEfKHDZqOz19KQbrAhFvNhDPWwnQXYZGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/react": "*",
"immutable": "~3.7.4"
}
},
"node_modules/@types/estree": { "node_modules/@types/estree": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -3296,6 +3308,16 @@
"node": ">= 4" "node": ">= 4"
} }
}, },
"node_modules/immutable": {
"version": "3.7.6",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz",
"integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/import-fresh": { "node_modules/import-fresh": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+1
View File
@@ -33,6 +33,7 @@
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.17.0", "@eslint/js": "^9.17.0",
"@types/draft-js": "^0.11.18",
"@types/react": "^18.3.17", "@types/react": "^18.3.17",
"@types/react-dom": "^18.3.5", "@types/react-dom": "^18.3.5",
"@types/swiper": "^5.4.3", "@types/swiper": "^5.4.3",
+1
View File
@@ -9,6 +9,7 @@ export const Pages = {
mine: "/services", mine: "/services",
other: "/other-service", other: "/other-service",
detail: "/services/detail/", detail: "/services/detail/",
add: "/services/add",
}, },
transactions: "/transactions", transactions: "/transactions",
receipts: { receipts: {
+8 -2
View File
@@ -69,7 +69,8 @@
"logout": "خروج" "logout": "خروج"
}, },
"submenu": { "submenu": {
"services_list": "لیست سرویس ها" "services_list": "لیست سرویس ها",
"add_service": "افزودن سرویس"
}, },
"header": { "header": {
"search": "جستجو" "search": "جستجو"
@@ -118,8 +119,13 @@
"enter_title_comment": "عنوان نظر خود را وارد کنید", "enter_title_comment": "عنوان نظر خود را وارد کنید",
"your_comment": "نظر شما", "your_comment": "نظر شما",
"write_your_comment": "نظر خود را راجع به این سرویس بنویسید", "write_your_comment": "نظر خود را راجع به این سرویس بنویسید",
"users_comments": "نظرات کاربران" "users_comments": "نظرات کاربران",
"add_service": "افزودن سرویس",
"service_name": "نام سرویس",
"description_short": "توضیح کوتاه سرویس",
"company_developed": "شرکت توسعه دهنده"
}, },
"select": "انتخاب",
"footer": { "footer": {
"home": "صفحه اصلی", "home": "صفحه اصلی",
"other_services": "سایر سرویس ها", "other_services": "سایر سرویس ها",
+67
View File
@@ -0,0 +1,67 @@
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import Input from '../../components/Input'
import Select from '../../components/Select'
const AddService: FC = () => {
const { t } = useTranslation('global')
return (
<div className='w-full flex gap-6 mt-4'>
<div className='flex-1'>
<div>
{t('service.add_service')}
</div>
<div className='flex-1 mt-10 bg-white py-8 xl:px-10 px-4 rounded-3xl'>
<Input
label={t('service.service_name')}
/>
<div className='mt-8'>
<Input
label={t('service.description_short')}
/>
</div>
<div className='mt-8 rowTwoInput'>
<Input
label={t('service.company_developed')}
/>
<Input
label={t('service.year_make')}
/>
</div>
<div className='mt-8 rowTwoInput'>
<Input
label={t('service.user_count')}
/>
<Select
label={t('service.lang_app')}
items={[
{
label: 'فارسی',
value: ''
}
]}
placeholder={t('select')}
/>
</div>
<div className='mt-8'>
</div>
</div>
</div>
<div className='bg-white w-sidebar text-xs hidden 2xl:block h-fit px-5 py-7 rounded-3xl'>
</div>
</div>
)
}
export default AddService
+2
View File
@@ -24,6 +24,7 @@ import DetailService from '../pages/service/DetailService'
import { clx } from '../helpers/utils' import { clx } from '../helpers/utils'
import { useSharedStore } from '../shared/store/sharedStore' import { useSharedStore } from '../shared/store/sharedStore'
import CreateReceipt from '../pages/receipts/Create' import CreateReceipt from '../pages/receipts/Create'
import AddService from '../pages/service/AddService'
const MainRouter: FC = () => { const MainRouter: FC = () => {
@@ -46,6 +47,7 @@ const MainRouter: FC = () => {
<Route path={Pages.services.mine} element={<MyServices />} /> <Route path={Pages.services.mine} element={<MyServices />} />
<Route path={Pages.services.other} element={<OtherServices />} /> <Route path={Pages.services.other} element={<OtherServices />} />
<Route path={Pages.services.detail + ':id'} element={<DetailService />} /> <Route path={Pages.services.detail + ':id'} element={<DetailService />} />
<Route path={Pages.services.add} element={<AddService />} />
<Route path={Pages.ticket.list} element={<TicketList />} /> <Route path={Pages.ticket.list} element={<TicketList />} />
<Route path={Pages.ticket.create} element={<CreateTicket />} /> <Route path={Pages.ticket.create} element={<CreateTicket />} />
<Route path={Pages.ticket.detail + ':id'} element={<TicketDetail />} /> <Route path={Pages.ticket.detail + ':id'} element={<TicketDetail />} />
+8 -2
View File
@@ -3,6 +3,7 @@ import { FC } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import SubMenuItem from './SubMenuItem' import SubMenuItem from './SubMenuItem'
import { useLocation } from 'react-router-dom' import { useLocation } from 'react-router-dom'
import { Pages } from '../../config/Pages'
const ServicesSubMenu: FC = () => { const ServicesSubMenu: FC = () => {
@@ -30,8 +31,13 @@ const ServicesSubMenu: FC = () => {
<div className='flex flex-col mt-10 gap-4'> <div className='flex flex-col mt-10 gap-4'>
<SubMenuItem <SubMenuItem
title={t('submenu.services_list')} title={t('submenu.services_list')}
isActive={isActive('services')} isActive={isActive('list')}
link='/services' link={Pages.services.mine}
/>
<SubMenuItem
title={t('submenu.add_service')}
isActive={isActive('add')}
link={Pages.services.add}
/> />
</div> </div>
</div> </div>
+6 -3
View File
@@ -1,7 +1,10 @@
import { defineConfig } from 'vite' import { defineConfig } from "vite";
import react from '@vitejs/plugin-react' import react from "@vitejs/plugin-react";
// https://vite.dev/config/ // https://vite.dev/config/
export default defineConfig({ export default defineConfig({
plugins: [react()], plugins: [react()],
}) define: {
global: "window", // تعریف `global` برای مرورگر
},
});