structure

This commit is contained in:
hamid zarghami
2025-08-26 22:17:42 +03:30
commit c69d4ea60b
100 changed files with 9431 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
export const SIDEBAR_SIZE_LEFT = 300;
+119
View File
@@ -0,0 +1,119 @@
export const Pages = {
auth: {
login: "/auth/login",
register: "/auth/register",
forgotPassword: "/auth/forgot",
},
dashboard: "/dashboard",
services: {
mine: "/services",
other: "/other-service",
detail: "/services/detail/",
update: "/services/update/",
add: "/services/add",
list: "/services/list",
category: "/services/category",
plan: "/services/plan/",
review: "/services/reviews",
guide: "/services/guide/",
},
sliders: {
list: "/sliders/list",
create: "/sliders/create",
detail: "/sliders/detail/",
},
transactions: "/transactions",
receipts: {
index: "/receipts/list",
detail: "/receipts/detail/",
create: "/receipts/create",
},
ticket: {
list: "/tickets/list",
create: "/tickets/create",
detail: "/tickets/messages/",
category: "/tickets/category",
},
announcement: {
list: "/announcement",
detail: "/announcement/detail/",
create: "/announcement/create",
},
criticisms: {
list: "/criticisms/list",
detail: "/ccriticisms/detail/",
},
feedback: {
list: "/feedback/list",
},
learning: {
list: "/learning/list",
detail: "/learning/detail/",
create: "/learning/create",
category: "/learning/category",
},
setting: "/setting",
wallet: "/wallet",
profile: "/profile",
customers: {
list: "/customers/list",
},
representative: {
list: "/representatives/list",
},
developers: {
list: "/developers/list",
},
discount: {
list: "/discounts/list",
create: "/discounts/create",
detail: "/discounts/detail/",
},
referralCode: {
list: "/referral-code/list",
},
users: {
list: "/users/list",
create: "/users/create",
detail: "/users/detail/",
roleList: "/users/roles-all",
roleCreate: "/users/roles-add",
groupAdd: "/users/group-add",
groupList: "/users/groups",
},
ads: {
list: "/ads/list",
create: "/ads/create",
update: "/ads/update/",
},
blog: {
list: "/blog/list",
create: "/blog/create",
category: "/blog/category",
detail: "/blog/detail/",
comments: "/blog/comments",
},
messages: {
list: "/messages/list",
detail: "/messages/detail/",
},
customer: {
list: "/customers/list",
create: "/customers/create",
update: "/customers/update/",
},
cardBank: {
list: "/card-bank/list",
create: "/card-bank/create",
detail: "/card-bank/detail/",
},
payment: {
list: "/payments/list",
},
support: {
create: "/support/create",
list: "/support/list",
detail: "/support/detail/",
planUsers: "/support/plan-users/",
},
};
+10
View File
@@ -0,0 +1,10 @@
export const SideBarItemHasSubMenu = [
"services",
"customers",
"receipts",
"users",
"tickets",
"learning",
"blog",
"support",
];
+22
View File
@@ -0,0 +1,22 @@
import axios from "axios";
import { getToken } from "./func";
const axiosInstance = axios.create({
baseURL: import.meta.env.VITE_BASE_URL || "http://localhost:3000/api",
});
axiosInstance.interceptors.response.use(
(response) => response,
(error) => {
return Promise.reject(error);
}
);
axiosInstance.interceptors.request.use(async function (config) {
const token = getToken();
config.headers.Authorization = "Bearer " + token;
return config;
});
export default axiosInstance;
+58
View File
@@ -0,0 +1,58 @@
export function isEmail(input: string): boolean {
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return emailRegex.test(input);
}
export function NumberFormat(number: number): string {
return Intl.NumberFormat("fa-IR").format(number);
}
const TOKEN_NAME = import.meta.env.VITE_TOKEN_NAME || "access_token";
const REFRESH_TOKEN_NAME =
import.meta.env.VITE_REFRESH_TOKEN_NAME || "refresh_token";
export const getToken = () => {
return localStorage.getItem(TOKEN_NAME);
};
export const getRefreshToken = () => {
return localStorage.getItem(REFRESH_TOKEN_NAME);
};
export const setToken = (token: string) => {
localStorage.setItem(TOKEN_NAME, token);
};
export const setRefreshToken = (refreshToken: string) => {
localStorage.setItem(REFRESH_TOKEN_NAME, refreshToken);
};
export const removeToken = () => {
localStorage.removeItem(TOKEN_NAME);
};
export const removeRefreshToken = () => {
localStorage.removeItem(REFRESH_TOKEN_NAME);
};
export const timeAgo = (date: string | Date): string => {
const now = new Date();
const past = new Date(date);
const diff = Math.floor((now.getTime() - past.getTime()) / 1000); // اختلاف بر حسب ثانیه
const units = [
{ name: "سال", value: 60 * 60 * 24 * 365 },
{ name: "ماه", value: 60 * 60 * 24 * 30 },
{ name: "روز", value: 60 * 60 * 24 },
{ name: "ساعت", value: 60 * 60 },
{ name: "دقیقه", value: 60 },
{ name: "ثانیه", value: 1 },
];
for (const unit of units) {
const amount = Math.floor(diff / unit.value);
if (amount >= 1) return `${amount} ${unit.name} پیش`;
}
return "همین الان";
};