From 8ff16e687f3663796d4d855c4e698a40cd7b27b7 Mon Sep 17 00:00:00 2001 From: fakz9 Date: Thu, 9 May 2024 01:32:05 +0300 Subject: [PATCH] tmp --- src/client/index.ts | 2 + .../models/BarcodeTemplateDeleteRequest.ts | 8 +++ .../models/BarcodeTemplateDeleteResponse.ts | 9 +++ src/client/models/ClientSchema.ts | 2 + src/client/services/BarcodeService.ts | 22 +++++++ src/components/Navbar/Navbar.tsx | 17 ++++- src/pages/BarcodePage/BarcodePage.tsx | 63 ++++++++++++++++++- .../BarcodeTemplateAdditionalFieldTable.tsx | 7 +++ .../BarcodeTemplateAttributeMultiselect.tsx | 0 .../BarcodeTemplatesTable.tsx | 6 +- .../BarcodeTemplatesTable/columns.tsx | 11 ++-- .../BarcodeTemplateFormModal.tsx | 47 ++++++-------- .../components/ClientsTable/columns.tsx | 4 ++ .../ClientFormModal/ClientFormModal.tsx | 11 +++- 14 files changed, 171 insertions(+), 38 deletions(-) create mode 100644 src/client/models/BarcodeTemplateDeleteRequest.ts create mode 100644 src/client/models/BarcodeTemplateDeleteResponse.ts create mode 100644 src/pages/BarcodePage/components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx rename src/pages/BarcodePage/{component => components}/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx (100%) rename src/pages/BarcodePage/{component => components}/BarcodeTemplatesTable/BarcodeTemplatesTable.tsx (93%) rename src/pages/BarcodePage/{component => components}/BarcodeTemplatesTable/columns.tsx (75%) diff --git a/src/client/index.ts b/src/client/index.ts index 46bbaeb..b1d0b92 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -12,6 +12,8 @@ export type { AuthLoginResponse } from './models/AuthLoginResponse'; export type { BarcodeTemplateAttributeSchema } from './models/BarcodeTemplateAttributeSchema'; export type { BarcodeTemplateCreateRequest } from './models/BarcodeTemplateCreateRequest'; export type { BarcodeTemplateCreateResponse } from './models/BarcodeTemplateCreateResponse'; +export type { BarcodeTemplateDeleteRequest } from './models/BarcodeTemplateDeleteRequest'; +export type { BarcodeTemplateDeleteResponse } from './models/BarcodeTemplateDeleteResponse'; export type { BarcodeTemplateSchema } from './models/BarcodeTemplateSchema'; export type { BarcodeTemplateUpdateRequest } from './models/BarcodeTemplateUpdateRequest'; export type { BarcodeTemplateUpdateResponse } from './models/BarcodeTemplateUpdateResponse'; diff --git a/src/client/models/BarcodeTemplateDeleteRequest.ts b/src/client/models/BarcodeTemplateDeleteRequest.ts new file mode 100644 index 0000000..fef8563 --- /dev/null +++ b/src/client/models/BarcodeTemplateDeleteRequest.ts @@ -0,0 +1,8 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type BarcodeTemplateDeleteRequest = { + id: number; +}; + diff --git a/src/client/models/BarcodeTemplateDeleteResponse.ts b/src/client/models/BarcodeTemplateDeleteResponse.ts new file mode 100644 index 0000000..20de985 --- /dev/null +++ b/src/client/models/BarcodeTemplateDeleteResponse.ts @@ -0,0 +1,9 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type BarcodeTemplateDeleteResponse = { + ok: boolean; + message: string; +}; + diff --git a/src/client/models/ClientSchema.ts b/src/client/models/ClientSchema.ts index e2c9ae5..a1eea8f 100644 --- a/src/client/models/ClientSchema.ts +++ b/src/client/models/ClientSchema.ts @@ -2,10 +2,12 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ +import type { BarcodeTemplateSchema } from './BarcodeTemplateSchema'; import type { ClientDetailsSchema } from './ClientDetailsSchema'; export type ClientSchema = { id: number; name: string; + barcodeTemplate?: (BarcodeTemplateSchema | null); details?: (ClientDetailsSchema | null); }; diff --git a/src/client/services/BarcodeService.ts b/src/client/services/BarcodeService.ts index 525d1fe..ba0c3c1 100644 --- a/src/client/services/BarcodeService.ts +++ b/src/client/services/BarcodeService.ts @@ -4,6 +4,8 @@ /* eslint-disable */ import type { BarcodeTemplateCreateRequest } from '../models/BarcodeTemplateCreateRequest'; import type { BarcodeTemplateCreateResponse } from '../models/BarcodeTemplateCreateResponse'; +import type { BarcodeTemplateDeleteRequest } from '../models/BarcodeTemplateDeleteRequest'; +import type { BarcodeTemplateDeleteResponse } from '../models/BarcodeTemplateDeleteResponse'; import type { BarcodeTemplateUpdateRequest } from '../models/BarcodeTemplateUpdateRequest'; import type { BarcodeTemplateUpdateResponse } from '../models/BarcodeTemplateUpdateResponse'; import type { CreateBarcodeTemplateAttributeRequest } from '../models/CreateBarcodeTemplateAttributeRequest'; @@ -87,6 +89,26 @@ export class BarcodeService { }, }); } + /** + * Delete Barcode Template + * @returns BarcodeTemplateDeleteResponse Successful Response + * @throws ApiError + */ + public static deleteBarcodeTemplate({ + requestBody, + }: { + requestBody: BarcodeTemplateDeleteRequest, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/barcode/template/delete', + body: requestBody, + mediaType: 'application/json', + errors: { + 422: `Validation Error`, + }, + }); + } /** * Get All Barcode Template Attributes * @returns GetAllBarcodeTemplateAttributesResponse Successful Response diff --git a/src/components/Navbar/Navbar.tsx b/src/components/Navbar/Navbar.tsx index 8d4ca4c..fd873e1 100644 --- a/src/components/Navbar/Navbar.tsx +++ b/src/components/Navbar/Navbar.tsx @@ -1,5 +1,15 @@ import {Center, Image, rem, Stack, Tooltip, UnstyledButton, useMantineColorScheme} from '@mantine/core'; -import {IconBarcode, IconBox, IconCash, IconHome2, IconLogout, IconMan, IconMoon, IconSun,} from '@tabler/icons-react'; +import { + IconBarcode, + IconBox, + IconCash, + IconFileBarcode, + IconHome2, + IconLogout, + IconMan, + IconMoon, + IconSun, +} from '@tabler/icons-react'; import classes from './Navbar.module.css'; import {useAppDispatch} from "../../redux/store.ts"; import {logout} from "../../features/authSlice.ts"; @@ -54,6 +64,11 @@ const mockdata = [ icon: IconBarcode, label: 'Товары', href: '/products' + }, + { + icon: IconFileBarcode, + label: 'Штрихкоды', + href: '/barcode' } ]; diff --git a/src/pages/BarcodePage/BarcodePage.tsx b/src/pages/BarcodePage/BarcodePage.tsx index 7ba3657..f9ed483 100644 --- a/src/pages/BarcodePage/BarcodePage.tsx +++ b/src/pages/BarcodePage/BarcodePage.tsx @@ -1,24 +1,83 @@ import styles from './BarcodePage.module.css'; import PageBlock from "../../components/PageBlock/PageBlock.tsx"; import {Button} from "@mantine/core"; +import BarcodeTemplatesTable from "./components/BarcodeTemplatesTable/BarcodeTemplatesTable.tsx"; +import useGetAllBarcodeTemplates from "../../api/barcode/useGetAllBarcodeTemplates.tsx"; +import {modals} from "@mantine/modals"; +import {BarcodeService, BarcodeTemplateSchema} from "../../client"; +import {notifications} from "../../shared/lib/notifications.ts"; const BarcodePage = () => { + const {barcodeTemplates, refetch} = useGetAllBarcodeTemplates(); + const onCreate = (template: BarcodeTemplateSchema) => { + BarcodeService.createBarcodeTemplate(({ + requestBody: { + ...template, + attributeIds: template.attributes.map(attr => attr.id) + } + })).then(async ({ok, message}) => { + notifications.guess(ok, {message}); + if (!ok) return; + await refetch() + }) + } + + const onChange = (template: BarcodeTemplateSchema) => { + BarcodeService.updateBarcodeTemplate({ + requestBody: { + ...template, + attributeIds: template.attributes.map(attr => attr.id) + } + }).then(async ({ok, message}) => { + notifications.guess(ok, {message}); + if (!ok) return; + await refetch() + }) + } + + const onDelete = (template: BarcodeTemplateSchema) => { + BarcodeService.deleteBarcodeTemplate({ + requestBody: { + id: template.id + } + }).then(async ({ok, message}) => { + notifications.guess(ok, {message}); + if (!ok) return; + await refetch() + }) + } + + const onCreateClick = () => { + modals.openContextModal({ + modal: "barcodeTemplateFormModal", + title: 'Создание шаблона', + withCloseButton: false, + innerProps: { + onCreate: onCreate + } + }); + } return (
- <>dsad +
) diff --git a/src/pages/BarcodePage/components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx b/src/pages/BarcodePage/components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx new file mode 100644 index 0000000..a618baa --- /dev/null +++ b/src/pages/BarcodePage/components/BarcodeTemplateAdditionalFieldTable/BarcodeTemplateAdditionalFieldTable.tsx @@ -0,0 +1,7 @@ +import {GetInputProps} from "@mantine/form/lib/types"; +import {FC} from "react"; + +type Props = GetInputProps> +const BarcodeTemplateAdditionalFieldTable:FC = (props:Props) => { + +} \ No newline at end of file diff --git a/src/pages/BarcodePage/component/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx b/src/pages/BarcodePage/components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx similarity index 100% rename from src/pages/BarcodePage/component/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx rename to src/pages/BarcodePage/components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx diff --git a/src/pages/BarcodePage/component/BarcodeTemplatesTable/BarcodeTemplatesTable.tsx b/src/pages/BarcodePage/components/BarcodeTemplatesTable/BarcodeTemplatesTable.tsx similarity index 93% rename from src/pages/BarcodePage/component/BarcodeTemplatesTable/BarcodeTemplatesTable.tsx rename to src/pages/BarcodePage/components/BarcodeTemplatesTable/BarcodeTemplatesTable.tsx index 55f18b8..473048c 100644 --- a/src/pages/BarcodePage/component/BarcodeTemplatesTable/BarcodeTemplatesTable.tsx +++ b/src/pages/BarcodePage/components/BarcodeTemplatesTable/BarcodeTemplatesTable.tsx @@ -6,6 +6,7 @@ import {BaseTable} from "../../../../components/BaseTable/BaseTable.tsx"; import {modals} from "@mantine/modals"; import {ActionIcon, Flex, Tooltip} from "@mantine/core"; import {IconEdit, IconTrash} from "@tabler/icons-react"; +import {MRT_TableOptions} from "mantine-react-table"; const BarcodeTemplatesTable: FC> = ({ items, @@ -39,8 +40,7 @@ const BarcodeTemplatesTable: FC> = ({ onEditClick(row.original)} - variant={"default"} - > + variant={"default"}> @@ -53,7 +53,7 @@ const BarcodeTemplatesTable: FC> = ({ ) - }} + } as MRT_TableOptions} /> ) diff --git a/src/pages/BarcodePage/component/BarcodeTemplatesTable/columns.tsx b/src/pages/BarcodePage/components/BarcodeTemplatesTable/columns.tsx similarity index 75% rename from src/pages/BarcodePage/component/BarcodeTemplatesTable/columns.tsx rename to src/pages/BarcodePage/components/BarcodeTemplatesTable/columns.tsx index ab77c6d..9382a7d 100644 --- a/src/pages/BarcodePage/component/BarcodeTemplatesTable/columns.tsx +++ b/src/pages/BarcodePage/components/BarcodeTemplatesTable/columns.tsx @@ -1,6 +1,7 @@ import {BarcodeTemplateSchema} from "../../../../client"; import {MRT_ColumnDef} from "mantine-react-table"; import {useMemo} from "react"; +import {IconCheck, IconX} from "@tabler/icons-react"; export const useBarcodeTemplatesTableColumns = () => { return useMemo[]>(() => [ @@ -8,17 +9,19 @@ export const useBarcodeTemplatesTableColumns = () => { accessorKey: "name", header: "Название", }, - { - accessorKey: "isDefault", - header: "По умолчанию", - }, { accessorKey: "attributes", header: "Атрибуты", + Cell: ({row}) => <>{row.original.attributes.map(attr => attr.name).join(', ')} }, { header: "Размер", Cell: ({row}) => <>{row.original.width}x{row.original.height} + }, + { + accessorKey: "isDefault", + header: "По умолчанию", + Cell: ({row}) => row.original.isDefault ? : } ], []); } \ No newline at end of file diff --git a/src/pages/BarcodePage/modals/BarcodeTemplateFormModal/BarcodeTemplateFormModal.tsx b/src/pages/BarcodePage/modals/BarcodeTemplateFormModal/BarcodeTemplateFormModal.tsx index f4306d5..7ce096b 100644 --- a/src/pages/BarcodePage/modals/BarcodeTemplateFormModal/BarcodeTemplateFormModal.tsx +++ b/src/pages/BarcodePage/modals/BarcodeTemplateFormModal/BarcodeTemplateFormModal.tsx @@ -5,7 +5,7 @@ import {useForm} from "@mantine/form"; import {Checkbox, Fieldset, Flex, NumberInput, rem, TextInput} from "@mantine/core"; import {IconX} from "@tabler/icons-react"; import BarcodeTemplateAttributeMultiselect - from "../../component/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx"; + from "../../components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx"; type Props = CreateEditFormProps const BarcodeTemplateFormModal = ({ @@ -30,7 +30,7 @@ const BarcodeTemplateFormModal = ({ name: (name: string | undefined) => name && name.trim() !== '' ? null : "Необходимо ввести название шаблона", } }) - console.log(form.values); + return ( -
- - - - - -
+ + + + +
diff --git a/src/pages/ClientsPage/components/ClientsTable/columns.tsx b/src/pages/ClientsPage/components/ClientsTable/columns.tsx index 800743d..a1ef567 100644 --- a/src/pages/ClientsPage/components/ClientsTable/columns.tsx +++ b/src/pages/ClientsPage/components/ClientsTable/columns.tsx @@ -24,6 +24,10 @@ export const useClientsTableColumns = () => { { accessorKey: "details.inn", header: "ИНН" + }, + { + accessorKey:"barcodeTemplate.name", + header:"Шаблон штрихкодов" } ], []); } diff --git a/src/pages/ClientsPage/modals/ClientFormModal/ClientFormModal.tsx b/src/pages/ClientsPage/modals/ClientFormModal/ClientFormModal.tsx index cdc35f2..c6a25d4 100644 --- a/src/pages/ClientsPage/modals/ClientFormModal/ClientFormModal.tsx +++ b/src/pages/ClientsPage/modals/ClientFormModal/ClientFormModal.tsx @@ -3,6 +3,7 @@ import {Fieldset, TextInput} from "@mantine/core"; import {useForm} from "@mantine/form"; import {ClientSchema} from "../../../../client"; import BaseFormModal, {CreateEditFormProps} from "../BaseFormModal/BaseFormModal.tsx"; +import BarcodeTemplateSelect from "../../../../components/Selects/BarcodeTemplateSelect/BarcodeTemplateSelect.tsx"; type Props = CreateEditFormProps; @@ -22,7 +23,8 @@ const ClientFormModal = ({ phoneNumber: innerProps.element.details?.phoneNumber, email: innerProps.element.details?.email, inn: innerProps.element.details?.inn - } + }, + barcodeTemplate: innerProps.element.barcodeTemplate } : { id: -1, name: '', @@ -89,6 +91,13 @@ const ClientFormModal = ({ {...form.getInputProps('details.inn')} /> +
+ +