fix: modal for place qr code cards, deal services editing

This commit is contained in:
2025-05-12 00:42:49 +04:00
parent 2a7a50886c
commit cc39d13b1c
5 changed files with 62 additions and 15 deletions

View File

@@ -44,6 +44,7 @@ import CreateProjectModal
import CardTagModal from "../pages/CardsPage/drawers/ProjectEditDrawer/tabs/Tags/modals/CardTagModal.tsx"; import CardTagModal from "../pages/CardsPage/drawers/ProjectEditDrawer/tabs/Tags/modals/CardTagModal.tsx";
import PlaceTypeModal from "../pages/AdminPage/tabs/WarehouseManagement/placeType/modals/PlaceTypeModal.tsx"; import PlaceTypeModal from "../pages/AdminPage/tabs/WarehouseManagement/placeType/modals/PlaceTypeModal.tsx";
import PlaceModal from "../pages/AdminPage/tabs/WarehouseManagement/place/modals/PlaceModal.tsx"; import PlaceModal from "../pages/AdminPage/tabs/WarehouseManagement/place/modals/PlaceModal.tsx";
import SelectPlaceQrType from "../pages/AdminPage/tabs/WarehouseManagement/place/modals/SelectPlaceQrType.tsx";
export const modals = { export const modals = {
enterDeadline: EnterDeadlineModal, enterDeadline: EnterDeadlineModal,
@@ -86,4 +87,5 @@ export const modals = {
cardTagModal: CardTagModal, cardTagModal: CardTagModal,
placeTypeModal: PlaceTypeModal, placeTypeModal: PlaceTypeModal,
placeModal: PlaceModal, placeModal: PlaceModal,
selectPlaceQrType: SelectPlaceQrType,
}; };

View File

@@ -12,6 +12,7 @@ import { RootState } from "../../../../../../redux/store.ts";
import useCardProductAndServiceTabState from "../../hooks/useProductAndServiceTabState.tsx"; import useCardProductAndServiceTabState from "../../hooks/useProductAndServiceTabState.tsx";
import LockCheckbox from "../../../../../../components/LockCheckbox/LockCheckbox.tsx"; import LockCheckbox from "../../../../../../components/LockCheckbox/LockCheckbox.tsx";
import { useDebouncedCallback } from "@mantine/hooks"; import { useDebouncedCallback } from "@mantine/hooks";
import { isDealLocked } from "../../../../../../pages/CardsPage/utils/isDealPaid.ts";
type RestProps = { type RestProps = {
onKitAdd?: (kit: GetServiceKitSchema) => void; onKitAdd?: (kit: GetServiceKitSchema) => void;
@@ -31,7 +32,7 @@ const CardServicesTable: FC<Props> = ({
const authState = useSelector((state: RootState) => state.auth); const authState = useSelector((state: RootState) => state.auth);
const { cardState } = useCardProductAndServiceTabState(); const { cardState } = useCardProductAndServiceTabState();
const isLocked = Boolean(cardState.card?.billRequests) || Boolean(cardState.card?.group?.billRequests); const isLocked = isDealLocked(cardState.card);
const [currentService, setCurrentService] = useState< const [currentService, setCurrentService] = useState<
CardServiceSchema | undefined CardServiceSchema | undefined

View File

@@ -1,5 +1,5 @@
import { PlaceSchema } from "../../../../../../client"; import { PlaceSchema } from "../../../../../../client";
import { IconBoxAlignBottom, IconPlaylistAdd, IconQrcode, IconTrash } from "@tabler/icons-react"; import { IconPlaylistAdd, IconQrcode, IconTrash } from "@tabler/icons-react";
import { ActionIcon, Flex, Tooltip } from "@mantine/core"; import { ActionIcon, Flex, Tooltip } from "@mantine/core";
import React, { ReactNode } from "react"; import React, { ReactNode } from "react";
import { useWarehouseManagementTabContext } from "../../placeType/contexts/WarehouseManagementTabContext.tsx"; import { useWarehouseManagementTabContext } from "../../placeType/contexts/WarehouseManagementTabContext.tsx";
@@ -37,14 +37,9 @@ const PlaceActions = ({ place }: Props) => {
const actions = [ const actions = [
getAction( getAction(
"Распечатать QR-код", "Распечатать QR-код",
() => generateQrCode(place, false), () => generateQrCode(place),
<IconQrcode />, <IconQrcode />,
), ),
getAction(
"Распечатать QR-код ",
() => generateQrCode(place, true),
<IconBoxAlignBottom />,
),
getAction( getAction(
"Добавить", "Добавить",
() => onCreatePlace(place), () => onCreatePlace(place),

View File

@@ -0,0 +1,46 @@
import { ContextModalProps } from "@mantine/modals";
import { PlaceSchema } from "../../../../../../client";
import { Stack } from "@mantine/core";
import InlineButton from "../../../../../../components/InlineButton/InlineButton.tsx";
import { IconBoxAlignBottom, IconQrcode } from "@tabler/icons-react";
type Props = {
place: PlaceSchema;
}
const SelectPlaceQrType = ({
context,
id,
innerProps,
}: ContextModalProps<Props>) => {
const { place } = innerProps;
const closeModal = () => {
context.closeContextModal(id);
};
const generateQrCode = (isShort: boolean) => {
const pdfWindow = window.open(
`${import.meta.env.VITE_API_URL}/wms/place/pdf/${place.id}/${isShort}`,
);
if (!pdfWindow) return;
pdfWindow.print();
closeModal();
};
return (
<Stack>
<InlineButton onClick={() => generateQrCode(false)}>
<IconQrcode />
Целая наклейка
</InlineButton>
<InlineButton onClick={() => generateQrCode(true)}>
<IconBoxAlignBottom />
Половина наклейки
</InlineButton>
</Stack>
);
};
export default SelectPlaceQrType;

View File

@@ -14,7 +14,7 @@ type WarehouseManagementTabContextState = {
placeCrud: PlaceCrud; placeCrud: PlaceCrud;
places: PlaceSchema[]; places: PlaceSchema[];
onCreatePlace: (place?: PlaceSchema) => void; onCreatePlace: (place?: PlaceSchema) => void;
generateQrCode: (place: PlaceSchema, isShort: boolean) => void; generateQrCode: (place: PlaceSchema) => void;
}; };
const WarehouseManagementTabContext = createContext<WarehouseManagementTabContextState | undefined>( const WarehouseManagementTabContext = createContext<WarehouseManagementTabContextState | undefined>(
@@ -59,12 +59,15 @@ const useWarehouseManagementTabContextState = () => {
.catch(err => console.log(err)); .catch(err => console.log(err));
}; };
const generateQrCode = (place: PlaceSchema, isShort: boolean) => { const generateQrCode = (place: PlaceSchema) => {
const pdfWindow = window.open( modals.openContextModal({
`${import.meta.env.VITE_API_URL}/wms/place/pdf/${place.id}/${isShort}`, modal: "selectPlaceQrType",
); withCloseButton: false,
if (!pdfWindow) return; centered: true,
pdfWindow.print(); innerProps: {
place,
},
});
}; };
return { return {