feat: attrs on product
This commit is contained in:
@@ -6,5 +6,6 @@ import type { BarcodeAttributeSchema } from './BarcodeAttributeSchema';
|
|||||||
export type BarcodeSchema = {
|
export type BarcodeSchema = {
|
||||||
barcode: string;
|
barcode: string;
|
||||||
attributes: Array<BarcodeAttributeSchema>;
|
attributes: Array<BarcodeAttributeSchema>;
|
||||||
|
additionalField?: (string | null);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ export type BarcodeTemplateCreateRequest = {
|
|||||||
isDefault: boolean;
|
isDefault: boolean;
|
||||||
size: BarcodeTemplateSizeSchema;
|
size: BarcodeTemplateSizeSchema;
|
||||||
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
|
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
|
||||||
|
additionalField?: (string | null);
|
||||||
attributeIds: Array<number>;
|
attributeIds: Array<number>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ export type BarcodeTemplateSchema = {
|
|||||||
isDefault: boolean;
|
isDefault: boolean;
|
||||||
size: BarcodeTemplateSizeSchema;
|
size: BarcodeTemplateSizeSchema;
|
||||||
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
|
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
|
||||||
|
additionalField?: (string | null);
|
||||||
id: number;
|
id: number;
|
||||||
attributes: Array<BarcodeTemplateAttributeSchema>;
|
attributes: Array<BarcodeTemplateAttributeSchema>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ export type BarcodeTemplateUpdateRequest = {
|
|||||||
isDefault: boolean;
|
isDefault: boolean;
|
||||||
size: BarcodeTemplateSizeSchema;
|
size: BarcodeTemplateSizeSchema;
|
||||||
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
|
additionalAttributes: Array<BarcodeTemplateAdditionalAttributeSchema>;
|
||||||
|
additionalField?: (string | null);
|
||||||
id: number;
|
id: number;
|
||||||
attributeIds: Array<number>;
|
attributeIds: Array<number>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,5 +13,6 @@ export type ProductSchema = {
|
|||||||
brand?: (string | null);
|
brand?: (string | null);
|
||||||
color?: (string | null);
|
color?: (string | null);
|
||||||
composition?: (string | null);
|
composition?: (string | null);
|
||||||
|
size?: (string | null);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,13 @@ type Props = {
|
|||||||
attributes: BarcodeAttributeSchema[]
|
attributes: BarcodeAttributeSchema[]
|
||||||
barcode?: string;
|
barcode?: string;
|
||||||
quantity: number;
|
quantity: number;
|
||||||
|
additionalField?: string | null;
|
||||||
}
|
}
|
||||||
type Ref = HTMLDivElement;
|
type Ref = HTMLDivElement;
|
||||||
const PrintBarcodeContainer = forwardRef<Ref, Props>(function PrintBarcodeContainer(props: Props, ref) {
|
const PrintBarcodeContainer = forwardRef<Ref, Props>(function PrintBarcodeContainer(props: Props, ref) {
|
||||||
const {attributes, barcode, quantity} = props;
|
const {attributes, barcode, quantity, additionalField} = props;
|
||||||
|
|
||||||
const MAX_ATTRIBUTES = 6;
|
const MAX_ATTRIBUTES = additionalField ? 5 : 6;
|
||||||
const MIN_BARCODE_SIZE = 30;
|
const MIN_BARCODE_SIZE = 30;
|
||||||
const MAX_BARCODE_SIZE = 100;
|
const MAX_BARCODE_SIZE = 100;
|
||||||
const STEP = (MAX_BARCODE_SIZE - MIN_BARCODE_SIZE) / MAX_ATTRIBUTES;
|
const STEP = (MAX_BARCODE_SIZE - MIN_BARCODE_SIZE) / MAX_ATTRIBUTES;
|
||||||
@@ -52,6 +53,14 @@ const PrintBarcodeContainer = forwardRef<Ref, Props>(function PrintBarcodeContai
|
|||||||
{getAttributeText(attr)}
|
{getAttributeText(attr)}
|
||||||
</Text>
|
</Text>
|
||||||
))}
|
))}
|
||||||
|
{props.additionalField && (
|
||||||
|
<Text
|
||||||
|
className={styles['barcode-attribute-text']}
|
||||||
|
size={"xs"}
|
||||||
|
>
|
||||||
|
{props.additionalField}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
</Flex>
|
</Flex>
|
||||||
</>
|
</>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
|
|
||||||
.barcode-container {
|
.barcode-container {
|
||||||
|
max-height: 1.45in;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
margin: 1.25mm;
|
margin: 1.25mm;
|
||||||
padding: 1.25mm;
|
padding: 1.25mm;
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ const PrintBarcodeModal = ({
|
|||||||
quantity={quantity}
|
quantity={quantity}
|
||||||
ref={barcodeRef}
|
ref={barcodeRef}
|
||||||
attributes={barcodeData?.attributes || []}
|
attributes={barcodeData?.attributes || []}
|
||||||
|
additionalField={barcodeData?.additionalField}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
} from "../../../../client";
|
} from "../../../../client";
|
||||||
import {ContextModalProps} from "@mantine/modals";
|
import {ContextModalProps} from "@mantine/modals";
|
||||||
import {useForm} from "@mantine/form";
|
import {useForm} from "@mantine/form";
|
||||||
import {Checkbox, Fieldset, Flex, rem, TextInput} from "@mantine/core";
|
import {Checkbox, Fieldset, Flex, rem, Textarea, TextInput} from "@mantine/core";
|
||||||
import BarcodeTemplateAttributeMultiselect
|
import BarcodeTemplateAttributeMultiselect
|
||||||
from "../../components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx";
|
from "../../components/BarcodeTemplateAttributeMultiselect/BarcodeTemplateAttributeMultiselect.tsx";
|
||||||
import BarcodeTemplateAdditionalFieldTable
|
import BarcodeTemplateAdditionalFieldTable
|
||||||
@@ -69,6 +69,11 @@ const BarcodeTemplateFormModal = ({
|
|||||||
label={"Использовать как стандартный шаблон"}
|
label={"Использовать как стандартный шаблон"}
|
||||||
checked={form.getInputProps('isDefault').value as boolean}
|
checked={form.getInputProps('isDefault').value as boolean}
|
||||||
{...form.getInputProps('isDefault')}/>
|
{...form.getInputProps('isDefault')}/>
|
||||||
|
<Textarea
|
||||||
|
label={"Дополнительное поле"}
|
||||||
|
placeholder={"Введите дополнительное поле"}
|
||||||
|
{...form.getInputProps('additionalField')}
|
||||||
|
/>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
|
||||||
</Fieldset>
|
</Fieldset>
|
||||||
|
|||||||
@@ -89,6 +89,11 @@ const CreateProductModal = ({
|
|||||||
label={"Цвет"}
|
label={"Цвет"}
|
||||||
{...form.getInputProps('color')}
|
{...form.getInputProps('color')}
|
||||||
/>
|
/>
|
||||||
|
<TextInput
|
||||||
|
placeholder={"Введите размер"}
|
||||||
|
label={"Размер"}
|
||||||
|
{...form.getInputProps('size')}
|
||||||
|
/>
|
||||||
</Fieldset>
|
</Fieldset>
|
||||||
<Flex justify={"flex-end"} mt={rem(5)} gap={rem(10)}>
|
<Flex justify={"flex-end"} mt={rem(5)} gap={rem(10)}>
|
||||||
<Button onClick={() => onCancelClick()} variant={"subtle"}>Отменить</Button>
|
<Button onClick={() => onCancelClick()} variant={"subtle"}>Отменить</Button>
|
||||||
|
|||||||
Reference in New Issue
Block a user