This commit is contained in:
azizziy
2025-05-20 17:02:10 +05:00
commit c01e852a59
257 changed files with 27766 additions and 0 deletions

101
src/data/box/box.model.ts Normal file
View File

@@ -0,0 +1,101 @@
export type BoxStatus = 'READY_TO_INVOICE' | 'READY';
export const BoxStatusList: BoxStatus[] = ['READY_TO_INVOICE', 'READY'];
export interface IBox {
packetNetWeight: string;
totalNetWeight: string;
cargoId: string;
passportName: string;
id: number;
partyName: string;
boxType: string;
name: string;
volume: string;
boxWeight: number;
brutto: number;
hasInvoice: boolean;
totalItems: number;
status: BoxStatus;
totalBrutto: number;
}
export interface IBoxDetail {
packet: {
id: number;
cargoId: string;
packetNetWeight: number;
passportName: string;
totalItems: number;
totalNetWeight: number;
partyName: string;
partyId: string;
boxType: string;
name: string;
volume: string;
boxWeight: number;
brutto: number;
hasInvoice: boolean;
status: BoxStatus;
};
client: {
passportId: number;
passportName: string;
};
items: [
{
id: number;
partyName: string;
boxName: string;
cargoId: string;
trekId: string;
name: string;
nameRu: string;
amount: number;
weight: number;
price: number;
totalPrice: number;
hasImage: boolean;
imageUrl: string | null;
packetName: string;
status: BoxStatus;
},
];
}
export type CreateBoxBodyType = {
status: BoxStatus;
cargoId: string;
passportId: string;
partyId: string;
items: {
trekId: string;
name: string;
amount: number;
weight: number;
}[];
};
export type UpdateBoxBodyType = {
passportId: number;
status: BoxStatus;
packetId: string;
// clientId: number;
cargoId: string;
// type: string;
// name: string;
// volume: string;
// boxWeight: number;
// brutto: number;
items: {
cargoId: string;
trekId: string;
name: string;
amount: number;
weight: number;
id: number;
price: number;
totalPrice: number;
}[];
};

View File

@@ -0,0 +1,67 @@
import { IBox, CreateBoxBodyType, UpdateBoxBodyType, IBoxDetail, BoxStatus } from '@/data/box/box.model';
import { CommonResponseType, PageAble } from '@/helpers/types';
import { request } from '@/services/request';
import axios from 'axios';
export const box_requests = {
async getAll(params?: {
page?: number;
sort?: string;
direction?: string;
cargoId?: string;
partyId?: string | number;
status?: BoxStatus;
}) {
return request.get<CommonResponseType<PageAble<IBox>>>('/packets/list', { params });
},
async changeStatus(params: { packetId: string | number; status: BoxStatus }) {
return request.put('/packets/change', undefined, { params });
},
async create({ partyId, ...body }: CreateBoxBodyType) {
return request.post<CommonResponseType>('/packets/create', body, {
params: { partyId },
});
},
async update({ packetId, ...body }: UpdateBoxBodyType) {
return request.put<CommonResponseType>('/packets/update', body, {
params: { packetId },
});
},
async find(params: { packetId?: number | string }) {
return request.get<CommonResponseType<IBoxDetail>>('/packets/find', { params });
},
async delete(params: { packetId: number | string }) {
return request.delete<CommonResponseType>('/packets/delete', { params });
},
async downloadExcel(params: { packetId: number | string }) {
return request.get<Blob>('/packets/download', { params, responseType: 'blob' });
},
async translateWithGoogleApi(params: { text: string }): Promise<string> {
const response = await axios.post('https://translation.googleapis.com/language/translate/v2', undefined, {
params: {
q: params.text,
target: 'ru',
source: 'zh',
key: 'AIzaSyA5uAPZyjF_yo1hYOWWJ2uP7XgcmohZc8o',
},
});
return response.data.data.translations?.[0]?.translatedText ?? '';
},
async translateWithMemoryApi(params: { text: string }): Promise<string> {
const response = await axios.get<{
responseData: {
translatedText: string;
match: number;
};
}>('https://api.mymemory.translated.net/get', {
params: {
q: params.text,
langpair: 'zh|ru',
// key: '7a4ac2e07cde1ff1e9de',
},
});
return response.data.responseData.translatedText;
},
};

View File

View File

@@ -0,0 +1,15 @@
export type Customer = {
id: number;
chatId: string;
fullName: string;
phone: string;
address: string;
cargoId: string;
aviaCargoId: string;
autoCargoId: string;
pinfl: string;
passportSeries: string;
dateOfBirth: string;
};

View File

@@ -0,0 +1,45 @@
import { Customer } from '@/data/customers/customer.model';
import { CommonResponseType, PageAble } from '@/helpers/types';
import { request } from '@/services/request';
import omit from 'lodash.omit';
export const customer_requests = {
async getAll(params?: {
cargoId?: string;
aviaCargoId?: string;
autoCargoId?: string;
page?: number;
sort?: string;
direction?: string;
}) {
return request.get<CommonResponseType<PageAble<Customer>>>('/clients/list', { params });
},
async notAttached(params: { clientName?: string; partyId: number; page: number }) {
return request.get<CommonResponseType<Customer[]>>('/clients/notAttached', { params });
},
async edit(body: {
clientId: number;
fullName: string;
phone: string;
address: string;
pinfl: string;
passportSeries: string;
dateOfBirth: string;
}) {
const id = body.clientId;
const data = omit(body, 'clientId');
return request.put<CommonResponseType<Customer[]>>(`/clients/edit/${id}`, data);
},
async create(body: { fullName: string; phone: string; address: string; pinfl: string; passport: string; dateOfBirth: string }) {
return request.post<CommonResponseType<Customer[]>>(`/clients/create`, body);
},
async delete(params: { clientId: number | string }) {
return request.delete<CommonResponseType>(`/clients/delete/${params.clientId}`);
},
async downloadClientsExcel() {
return request.get<Blob>('/clients/download', { responseType: 'blob' });
},
};

View File

@@ -0,0 +1,4 @@
export type CreateInvoiceParams = {
packetId: number;
clientId: number;
};

View File

@@ -0,0 +1,9 @@
import { CreateInvoiceParams } from '@/data/invoice/invoice.model';
import { CommonResponseType } from '@/helpers/types';
import { request } from '@/services/request';
export const invoice_requests = {
async create(params: CreateInvoiceParams) {
return request.post<CommonResponseType>('/invoice/create', undefined, { params });
},
};

View File

@@ -0,0 +1,31 @@
import { BoxStatus } from '@/data/box/box.model';
export type Product = {
id: number;
partyName: string;
boxName: string;
cargoId: string;
trekId: string;
name: string;
amount: number;
weight: number;
price?: number;
totalPrice?: number;
status: BoxStatus;
hasImage: boolean;
};
export type CreateProductBodyType = {
packetId: number;
};
export type UpdateProductBodyType = {
itemId: number;
cargoId: string;
trekId: string;
name: string;
amount: number;
weight: number;
};

View File

@@ -0,0 +1,43 @@
import { BoxStatus } from '@/data/box/box.model';
import { Product, CreateProductBodyType, UpdateProductBodyType } from '@/data/item/item.mode';
import { CommonResponseType, PageAble } from '@/helpers/types';
import { request } from '@/services/request';
export const item_requests = {
async getAll(params?: {
packetId?: number | string;
partyId?: number | string;
name?: string;
trekId?: string;
page?: number;
sort?: string;
status?: BoxStatus;
direction?: 'asc' | 'desc';
}) {
return request.get<CommonResponseType<PageAble<Product>>>('/items/list', { params });
},
async create({ packetId, ...body }: CreateProductBodyType) {
return request.post<CommonResponseType>('/items/create', body, {
params: { packetId },
});
},
async update({ itemId, ...body }: UpdateProductBodyType) {
return request.put<CommonResponseType<Product[]>>('/items/update', body, {
params: { itemId },
});
},
async find(params: { itemId?: number | string }) {
return request.get<CommonResponseType<Product[]>>('/items/find', { params });
},
async delete(params: { itemId: number | string }) {
return request.delete<CommonResponseType>('/items/delete', { params });
},
async addPhotos(params: { itemId: number | string; weight: number; summa: number }, body: FormData) {
return request.post<CommonResponseType>('/photos/assignPhoto', body, {
params,
headers: {
'Content-Type': 'multipart/form-data',
},
});
},
};

View File

View File

View File

View File

View File

@@ -0,0 +1,12 @@
export type Order = {
partyName: string;
cargoId: string;
trekId: string;
name: string;
amount: number;
weight: number;
dates: {
status: string;
date: string;
}[];
};

View File

@@ -0,0 +1,9 @@
import { Order } from '@/data/order/order.model';
import { CommonResponseType } from '@/helpers/types';
import { request } from '@/services/request';
export const order_requests = {
async check(params: { trekId: string }) {
return request.get<CommonResponseType<Order[]>>('/orders/check', { params });
},
};

View File

@@ -0,0 +1,34 @@
export type Party = {
id: number;
name: string;
partyStatus: PartyStatus;
totalBoxes: number;
};
export type PartyStatus = 'COLLECTING' | 'ON_THE_WAY' | 'IN_CUSTOMS' | 'IN_WAREHOUSE' | 'ARRIVED' | 'DELIVERED';
export const PartyStatusList: PartyStatus[] = ['COLLECTING', 'ON_THE_WAY', 'IN_CUSTOMS', 'IN_WAREHOUSE', 'ARRIVED', 'DELIVERED'];
export const PartyStatusOptions: {
label: string;
value: PartyStatus;
}[] = [
{
label: 'COLLECTING',
value: 'COLLECTING',
},
{
label: 'ON_THE_WAY',
value: 'ON_THE_WAY',
},
{
label: 'IN_CUSTOMS',
value: 'IN_CUSTOMS',
},
{
label: 'IN_WAREHOUSE',
value: 'IN_WAREHOUSE',
},
{
label: 'ARRIVED',
value: 'ARRIVED',
},
];

View File

@@ -0,0 +1,38 @@
import { Party, PartyStatus } from '@/data/party/party.model';
import { CommonResponseType, PageAble } from '@/helpers/types';
import { request } from '@/services/request';
export const party_requests = {
async getAll(params?: { page?: number; sort?: string; direction?: string; partyName?: string; status?: PartyStatus }) {
return request.get<CommonResponseType<PageAble<Party>>>('/parties/list', { params });
},
async changeStatus(params: { partyId: string | number; status: PartyStatus }) {
return request.put('/parties/change', undefined, { params });
},
async create(body: { name: string }) {
return request.post<CommonResponseType>('/parties/create', body);
},
async update(body: { id: number | string; name: string }) {
return request.put<CommonResponseType<Party[]>>(
'/parties/update',
{ name: body.name },
{
params: {
partyId: body.id,
},
}
);
},
async find(params: { partyId: number | string }) {
return request.get<CommonResponseType<Party>>('/parties/find', { params });
},
async delete(params: { partyId: number | string }) {
return request.delete<CommonResponseType>('/parties/delete', { params });
},
async downloadExcel(params: { partyId: number | string }) {
return request.get<Blob>('/parties/download', { params, responseType: 'blob' });
},
async downloadPartyItemsExcel(params: { partyId: number | string }) {
return request.get<Blob>('/parties/items/download', { params, responseType: 'blob' });
},
};

View File

View File

@@ -0,0 +1,8 @@
// src/data/passport/passport.model.ts
export interface Passport {
id: number;
fullName: string;
// Agar boshqa maydonlar ham bo'lsa (masalan, passport raqami va h.k.), ularni ham qo'shing.
// passport_number?: string;
}

View File

@@ -0,0 +1,20 @@
// src/data/passport/passport.requests.ts
import { Passport } from '@/data/passport/passport.model';
import { CommonResponseType, PageAble } from '@/helpers/types';
import { request } from '@/services/request';
export const passport_requests = {
/**
* Passport'lar ro'yxatini olish.
* @param params Filtrlar va sahifalash parametrlari. `cargoId` majburiy.
*/
async getAll(params: { cargoId: number; page?: number; sort?: string; direction?: string; passportNumber?: string }) {
if (!params || !params.cargoId) {
throw new Error("cargoId is required for passport_requests.getAll");
}
// CommonResponseType ichida data: Passport[] bo'ladi, PageAble kerak emas bu yerda, chunki server PageAble qaytarmayapti.
return request.get<CommonResponseType<Passport[]>>('/passports', { params });
},
// Boshqa metodlar (agar kerak bo'lsa - izohda qoldirilgan)
};

View File

@@ -0,0 +1,8 @@
export type CreateStaffBodyType = {
username: string;
password: string;
fullName: string;
role: string;
phone: string;
address: string;
};

View File

@@ -0,0 +1,13 @@
import { CreateStaffBodyType } from '@/data/staff/staff.model';
import { User } from '@/data/user/user.model';
import { CommonResponseType, PageAble } from '@/helpers/types';
import { request } from '@/services/request';
export const staff_requests = {
async getAll(params?: { page?: number; sort?: string; direction?: string }) {
return request.get<CommonResponseType<PageAble<User>>>('/users/list');
},
async create(body: CreateStaffBodyType) {
return request.post<CommonResponseType>('/users/create', body);
},
};

View File

@@ -0,0 +1,16 @@
export type UserRole = 'ADMIN' | 'CHINA_WORKER';
export enum UserRoleEnum {
ADMIN = 'ADMIN',
CHINA_WORKER = 'CHINA_WORKER',
UZB_WORKER = 'UZB_WORKER',
}
export type User = {
id: number;
username: string;
fullName?: string;
phone?: string;
address?: string;
role: UserRoleEnum;
active: boolean;
};

View File

@@ -0,0 +1,19 @@
import { User } from '@/data/user/user.model';
import { CommonResponseType } from '@/helpers/types';
import { request } from '@/services/request';
export const user_requests = {
async getMe() {
return request.get<CommonResponseType<User>>('/users/info');
},
async login(body: { username: string; password: string }) {
return request.post<
CommonResponseType<{
username: string;
accessToken: string;
roles: string[];
}>
>('/auth/token', body);
},
};

View File