init
This commit is contained in:
101
src/data/box/box.model.ts
Normal file
101
src/data/box/box.model.ts
Normal 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;
|
||||
}[];
|
||||
};
|
||||
67
src/data/box/box.requests.ts
Normal file
67
src/data/box/box.requests.ts
Normal 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;
|
||||
},
|
||||
};
|
||||
0
src/data/box/box.service.ts
Normal file
0
src/data/box/box.service.ts
Normal file
15
src/data/customers/customer.model.ts
Normal file
15
src/data/customers/customer.model.ts
Normal 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;
|
||||
};
|
||||
45
src/data/customers/customer.requests.ts
Normal file
45
src/data/customers/customer.requests.ts
Normal 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' });
|
||||
},
|
||||
};
|
||||
4
src/data/invoice/invoice.model.ts
Normal file
4
src/data/invoice/invoice.model.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export type CreateInvoiceParams = {
|
||||
packetId: number;
|
||||
clientId: number;
|
||||
};
|
||||
9
src/data/invoice/invoice.requests.ts
Normal file
9
src/data/invoice/invoice.requests.ts
Normal 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 });
|
||||
},
|
||||
};
|
||||
31
src/data/item/item.mode.ts
Normal file
31
src/data/item/item.mode.ts
Normal 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;
|
||||
};
|
||||
43
src/data/item/item.requests.ts
Normal file
43
src/data/item/item.requests.ts
Normal 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',
|
||||
},
|
||||
});
|
||||
},
|
||||
};
|
||||
0
src/data/item/item.service.ts
Normal file
0
src/data/item/item.service.ts
Normal file
0
src/data/news/news.model.ts
Normal file
0
src/data/news/news.model.ts
Normal file
0
src/data/news/news.requests.ts
Normal file
0
src/data/news/news.requests.ts
Normal file
0
src/data/news/news.service.ts
Normal file
0
src/data/news/news.service.ts
Normal file
12
src/data/order/order.model.ts
Normal file
12
src/data/order/order.model.ts
Normal 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;
|
||||
}[];
|
||||
};
|
||||
9
src/data/order/order.requests.ts
Normal file
9
src/data/order/order.requests.ts
Normal 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 });
|
||||
},
|
||||
};
|
||||
34
src/data/party/party.model.ts
Normal file
34
src/data/party/party.model.ts
Normal 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',
|
||||
},
|
||||
];
|
||||
38
src/data/party/party.requests.ts
Normal file
38
src/data/party/party.requests.ts
Normal 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' });
|
||||
},
|
||||
};
|
||||
0
src/data/party/party.service.ts
Normal file
0
src/data/party/party.service.ts
Normal file
8
src/data/passport/passport.model.ts
Normal file
8
src/data/passport/passport.model.ts
Normal 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;
|
||||
}
|
||||
20
src/data/passport/passport.request.ts
Normal file
20
src/data/passport/passport.request.ts
Normal 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)
|
||||
};
|
||||
8
src/data/staff/staff.model.ts
Normal file
8
src/data/staff/staff.model.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
export type CreateStaffBodyType = {
|
||||
username: string;
|
||||
password: string;
|
||||
fullName: string;
|
||||
role: string;
|
||||
phone: string;
|
||||
address: string;
|
||||
};
|
||||
13
src/data/staff/staff.requests.ts
Normal file
13
src/data/staff/staff.requests.ts
Normal 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);
|
||||
},
|
||||
};
|
||||
16
src/data/user/user.model.ts
Normal file
16
src/data/user/user.model.ts
Normal 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;
|
||||
};
|
||||
19
src/data/user/user.requests.ts
Normal file
19
src/data/user/user.requests.ts
Normal 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);
|
||||
},
|
||||
};
|
||||
0
src/data/user/user.service.ts
Normal file
0
src/data/user/user.service.ts
Normal file
Reference in New Issue
Block a user