@@ -8,14 +8,14 @@ import FeaturesBlock from "@/src/shared/components/pages_components/main_page/Fe import ServicesBlock from "@/src/shared/components/pages_components/main_page/ServicesBlock"; import NewWayBlock from "@/src/shared/components/pages_components/main_page/NewWayBlock"; -import { products } from "@/src/shared/utils/staticMockData"; +// import { products } from "@/src/shared/utils/staticMockData"; import ReadyImagesBlock from "@/src/shared/components/pages_components/main_page/ReadyImagesBlock"; import FaqBlock from "@/src/shared/components/shared_components/FaqBlock/FaqBlock"; import FeedbackBlock from "@/src/shared/components/shared_components/FeedbackBlock/FeedbackBlock"; import Footer from "@/src/shared/components/shared_components/Footer/Footer"; import QuestionButton from "@/src/shared/components/shared_components/QuestionButton/QuestionButton"; -import { getContacts, getFaq, getPortfolio } from "../shared/api/requests"; +import { getContacts, getFaq, getPortfolio, getProductsSlice } from "../shared/api/requests"; export const dynamic = "force-dynamic" @@ -23,13 +23,14 @@ export default async function Home() { const contacts = (await getContacts()).data const faqData = (await getFaq()).data const portfolio = (await getPortfolio()).data + const productsSlice = (await getProductsSlice({ slice: true, qty: 4 })).data return ( <>
- +
@@ -38,7 +39,7 @@ export default async function Home() { - + @@ -1,7 +1,7 @@ import axios from "axios" -import { IContacts, IFaq, IFeedback, IPortfolioItem, IPriceListItem } from "../models/models" +import { IContacts, IFaq, IFeedback, IPortfolioItem, IPriceListItem, IProduct } from "../models/models" -const DOMAIN = process.env.API_URL +const DOMAIN = process.env.NEXT_PUBLIC_API_URL const url = `${DOMAIN}/api` @@ -10,7 +10,11 @@ export const getContacts = async () => { } export const getProducts = async () => { - return await axios.get(url + "/products") + return await axios.get(url + `/products/`) +} + +export const getProductsSlice = async ({ slice, qty }: { slice?: boolean, qty?: number }) => { + return await axios.get(url + `/products?${slice === true ? `slice=true&` : ""}${slice === true && qty !== undefined ? `limit=${qty}` : ""}`) } export const sendFeedback = async (data: IFeedback) => { @@ -22,5 +26,5 @@ export const getFaq = async () => { } export const getPortfolio = async () => { - return await axios.get(url + "/portfolio/") + return await axios.get(url + `/portfolio/`) } \ No newline at end of file @@ -12,6 +12,7 @@ import ThanksModal from "@/src/shared/components/shared_components/Modals/Thanks import { useRef, useState } from "react"; import { IContacts, IFeedback } from "@/src/shared/models/models"; import { sendFeedback } from '@/src/shared/api/requests'; +import { prettifyPhoneNumber } from '@/src/shared/utils/funcs/prettifyPhoneNumber'; const schema = yup.object().shape({ name: yup.string().required('Введите имя'), @@ -56,7 +57,7 @@ export default function ContactsBlock({ contacts }: { contacts: IContacts }) {

контакты и обратная связь

Если у Вас есть какие-либо вопросы или Вам нужна помощь, Вы можете связаться с нами.
- Тел: +7 927 520 33 00 Мы доступны с 10 утра до 20 вечера.
+ Тел: {contacts.phone && prettifyPhoneNumber(contacts.phone)}. Мы доступны с 10 утра до 20 вечера.
Также Вы можете заполнить форму обратной связи ниже.
Ответ поступит на указанный e-mail.

@@ -39,6 +39,8 @@ export default function PortfolioBlock({ contacts, portfolioItems }: IProps) { } }; + console.log(portfolioItems); + return (
{isModalFeedbackOpened && } @@ -1,5 +1,5 @@ 'use client' -import { faqData } from '@/src/shared/utils/staticMockData'; +import { faqData, rules } from '@/src/shared/utils/staticMockData'; import { useState } from 'react'; @@ -8,7 +8,7 @@ import useWindowSize from '@/src/shared/utils/hooks/useWindowSize'; export default function RulesPageBlock() { const [selected, setSelected] = useState(null); - const {height, width} = useWindowSize() + const { height, width } = useWindowSize() const toggle = (i: number) => { @@ -26,7 +26,7 @@ export default function RulesPageBlock() {
- {faqData.map((item, idx) => ( + {rules.map((item, idx) => (
toggle(idx)}>

{item.title}

@@ -39,7 +39,7 @@ export default function RulesPageBlock() {
- {item.content} +
))} @@ -13,6 +13,7 @@ import { useState } from "react" import dynamic from 'next/dynamic'; import Link from "next/link"; +import { prettifyPhoneNumber } from "@/src/shared/utils/funcs/prettifyPhoneNumber"; const ModalFeedback = dynamic(() => import('@/src/shared/components/shared_components/Modals/ModalFeedback/ModalFeedback')); interface IProps { @@ -29,8 +30,8 @@ export default function Footer(props: IProps) {
контактные данные - Телефон: +7 927 520 33 00 - Почта: studio@xessence.ru + Телефон: {props.contacts.phone && prettifyPhoneNumber(props.contacts.phone)} + Почта: {props.contacts.email} ОГРН 323344300080545 ИНН 344600442682 / ИП Плещенко Н.Н. @@ -18,6 +18,7 @@ import { IContacts } from '@/src/shared/models/models' import { useRouter } from 'next/navigation' import dynamic from 'next/dynamic'; +import { prettifyPhoneNumber } from "@/src/shared/utils/funcs/prettifyPhoneNumber"; const ModalFeedback = dynamic(() => import('@/src/shared/components/shared_components/Modals/ModalFeedback/ModalFeedback')); @@ -68,17 +69,17 @@ export default function Header(props: IProps) {
-
{setIsModalFeedbackOpened(true)}} className='flex items-center gap-[5px] mt-[10px] lg:hidden'> +
{ setIsModalFeedbackOpened(true) }} className='flex items-center gap-[5px] mt-[10px] lg:hidden'> Icon Связь
-
{setIsModalFeedbackOpened(true)}} className='hidden justify-center items-center border-[2px] border-red-main w-[170px] h-[50px] hover:cursor-pointer lg:flex'> +
{ setIsModalFeedbackOpened(true) }} className='hidden justify-center items-center border-[2px] border-red-main w-[170px] h-[50px] hover:cursor-pointer lg:flex'> Связаться
@@ -18,6 +18,8 @@ export interface IContacts {// реф. - контакты в хедере, фу whatsapp?: string, instagram?: string, youtube?: string + phone?: string + email?: string } export interface IProduct {// реф. - товар (на странице Прайс-лист) @@ -0,0 +1,18 @@ +export function prettifyPhoneNumber(phone: string): string { + let newPhone = "" + const spacePositions = [0, 3, 6, 8] + + if (/^\d+$/.test(phone) && phone.length === 11) { // если строка содержит только цифры + for (let i = 0; i < phone.length; i++) { + if (spacePositions.includes(i)) { + newPhone += phone[i] + " " + } else { + newPhone += phone[i] + } + } + return "+" + newPhone + } else { + return phone + } + +} \ No newline at end of file @@ -82,7 +82,7 @@ export const products2: IProduct[] = [ ] -export const faqData:IFaq[] = [ +export const faqData: IFaq[] = [ { id: 0, title: "от чего зависит цена заказа?", @@ -265,4 +265,67 @@ export const measurments: IMeasurement[] = [ direction: "reverse", order: 12 }, -] \ No newline at end of file +] + + +export const rules: IFaq[] = [ + { + id: 0, + title: "Первый визит или обращение", + content: + `Режим работы ателье устанавливается руководством ателье в зависимости от сезона. Заказчик может посетить Ателье в любой удобный для него день и момент, в рамках рабочего времени. Желательно осуществлять предварительную запись. В рамках первого визита Заказчик должен изложить суть обращения: рассказать, какая именно услуга востребована: пошив, ремонт или подгонка одежды. В зависимости от этого Администратор Ателье вызовет соответствующего специалиста. Совместно с Мастером и администратором утверждается модель (эскиз) изделия, на основании которого будет произведен расчет стоимости пошива и примерный расход материалов и фурнитуры, а так же выбираются подходящие материалы для пошива.`, + }, + { + id: 1, + title: "Назначение стоимости работ и услуг", + content: `После того, как Заказчик вместе с Мастером оговорит нюансы заказа, администратор ателье назначает стоимость работ. Стоимость пошива определяется согласно утвержденному исполнителем прайс-листу и может изменяться в зависимости от модели изделия, наличия усложняющих элементов, используемого материала, а так же сроков пошива и в зависимости от сезонной нагрузки. Прайс-лист услуг по пошиву одежды является открытой информацией и размещен на стенде в Ателье, а так же в сети Интернет на нашем сайте. Расходные материалы (фурнитура), относящиеся к технологическим: (клеевая, плечевые накладки, долевики, нитки, отделочные канты (представленные в ассортименте в ателье) бейки, резинка (не декоративная), ригелин (до 10см шириной) бретели силиконовые, бегунки (за исключением именных и декоративных), регулировочные кольца, Чашечки (без PUSH UP), косточки для бюстгальтера и корсета, заглушки на косточки для корсета, крючки ( не декоративные), шнурки (не декоративные) идут как прикладные материалы и входят в стоимость пошива Изделия. Расходные материалы (фурнитура) не относящаяся к технологическим: (молнии, пуговицы, кнопки, люверсы, декоративные ленты, бахрома, аппликации, броши, стразы, бисер, декоративные клепки и т.д.), необходимые для декорирования заказа, оплачиваются Заказчиком отдельно. Количество, вид и стоимость фурнитуры согласовывается с заказчиком во время принятия заказа и вносится в бланк Заказа.`, + }, + { + id: 2, + title: "доставка заказа по россии и снг", + content: `После согласования даты тестирования, Вам будут высланы реквизиты, + согласно которым Вы сможете произвести оплату.`, + }, + { + id: 3, + title: "Оформление заказа", + content: `Если заказчик согласен со стоимостью работы по его заказу, то администратор приступает к процедуре оформления заказа, оформляет бланк. В бланке заказа администратор фиксирует номер и дату заказа, ФИО заказчика, данные для связи с ним, наименования работ и их стоимость, а так же выбранные заказчиком материалы и утвержденная необходимая фурнитура для выполнения заказа. Сроки пошива устанавливаются в индивидуальном порядке в соответствии со сложностью изделия и общей загруженностью Исполнителя на момент обращения Заказчика. Они так же вносятся в бланк заказа с указанием примерных дат примерки и даты сдачи изделия. схематично заносится модель изделия в Бланк заказа, которая не подлежит кардинальным изменениям с момента подписания бланка. В бланк заказа вносится информация о внесенной предоплате Заказчиком, а также ставится подпись Заказчика, которая свидетельствует утверждение заказа, его стоимость и выбранных им материалов, а также подтверждает согласие с правилами заказа в Ателье, с которыми ознакомился.`, + }, + { + id: 4, + title: "Оплата заказа", + content: `Заказ поступает в производство только после внесения Заказчиком 100% предоплаты за выбранные и заказанные им материалы, а также в размере 30-50% от стоимости пошива изделия. Факт оплаты аванса фиксируется в бланке заказа, а клиенту выписывается квитанция (в случае наличной оплаты) и выдается чек (в случае безналичной оплаты). Остаточная стоимость заказа оплачивается в момент сдачи изделия после полной удовлетворенности клиента в качестве выполненных работ.`, + }, + { + id: 5, + title: "Снятие мерок (в том числе и онлайн)", + content: `Индивидуальный план создается на основе результатов тестирования. В него + входит подробное описание материала, который будет использоваться в + процессе, а также оценка Вашего текущего уровня.`, + }, + { + id: 6, + title: "Примерка", + content: `Исполнитель оставляет за собой право на различных этапах пошива проводить примерки, необходимые для посадки изделия. Для того, чтобы изделие, переданное, в пошив или на подгонку по фигуре сидело на теле идеально, мастерам необходимо на различных этапах кроя и шитья производить несколько примерок, в зависимости от категории сложности пошива Изделия. На первой примерке мастер с Заказчиком корректируют посадку и все детали будущего изделия, за исключением кардинального изменения модели в случае перекроя по желанию заказчика, дополнительные материалы оплачиваются им перед началом кроя. На второй примерке, корректируется длина и утверждается окончательный вид изделия. Возможно, в зависимости от сложности изделия, потребуется дополнительная примерка на усмотрение мастера, а также, по желанию заказчика, возможно, произвести дополнительные примерки, которые оплачиваются в размере 10% от стоимости пошива изделия. Если заказчик отказывается от одной или всех примерок, Исполнитель не несет ответственности за посадку изделия. Если заказчик по объективным причинам не может присутствовать на примерке в назначенный день/время, он обязан предварительно предупредить Исполнителя о своем отсутствии и перенести примерку на другой день/время. В таком случае, Заказчика ставят в известность, что сроки сдачи изделия увеличиваются.`, + }, + { + id: 7, + title: "Выдача и доставка заказов", + content: `Выдача заказов осуществляется после финальной примерки и по факту полной выплаты остаточной стоимости заказа, после авансовой части стоимости работ. В случае внесений изменений и добавлений к заказу, изменения стоимости пошива, а также дополнительных материалов, то разница от стоимости так же оплачивается Заказчиком в полном объеме в день сдачи заказа. При невозможности внести финальную оплату, Заказчик соглашается, что изделие находится у Исполнителя до полного финального расчета по заказу. Так же возможно получения заказа после полной оплаты и без финальной примерки, в таком случае все претензии по посадке и пошиву не принимаются. Все корректировки и замечания по пошиву Изделия принимаются до сдачи готового изделия и полной оплаты.`, + }, + { + id: 8, + title: "Права и обязанности заказчика", + content: `Все права заказчика регулируются законом о защите прав потребителя. +Если Заказчиком обнаружено в момент получения заказа, что вещь плохо сшита, Заказчик вправе потребовать: +
- безвозмездного устранения недостатков оказанной услуги (выполненной работы) указав в письменном виде все замечания по пошиву и что именно Заказчик хотел бы изменить +соответствующего уменьшения цены оказанной услуги (выполненной работы) до 50%. +
- в случае, если изделие не подлежит корректировке, Заказчик в праве потребовать бесплатного изготовления другой вещи из аналогичных по качеству и расцветке материалов или повторного выполнения работы. Некачественно сшитую вещь при этом, Заказчик обязан вернуть исполнителю. +
- возмещению понесенных Заказчиком расходов по устранению недостатков оказанной услуги (выполненной работы) своими силами или третьим лицом. +
- возмещение убытков осуществляется по предоставленным подтверждающимся документам (квитанциям, чекам) по оплате услуг по устранению недостатков. +
- При обнаружении дефектов изделия, которые не были выявлены на финальной примерке, Заказчик обязан в 10-ти дневной срок после сдачи предоставить изделие в ателье или уведомить об этом руководство ателье, путем обращения на официальную почту компании или отправкой заказного письма/телеграммы в адрес компании и на имя Генерального Директора. Все Претензии по качеству выполненных работ после забора изделия и полной оплаты принимаются в ПИСЬМЕННОМ виде, написанном заказчиком в двух экземплярах ( один экземпляр, заверенный печатью и подписью Генерального Директора, остается у Заказчика). +
- Претензии по качеству исполненных работ не принимаются, в случае, если Заказчик надевал платье, костюм и т.д. (исключая примерку дома) и провел в нем более часа (мероприятие, свадьба, корпоратив, фотосессия, прогулка, и другие выходы), об этом могут свидетельствовать следы носки изделия, запах, загрязнения, фото. +
- Заказчик вправе заказать курьерскую доставку. Оплату по услуге доставки Заказчик оплачивает в полном объеме курьеру или Исполнителю, на основании квитанции, уплаченной им за доставку изделия. За сохранность, сроки доставки и вид изделия Исполнитель ответственности не несет с момента передачи изделия курьеру. +
- Заказчик вправе проконсультироваться у Исполнителя по уходу за изделием или попросить осуществить доставку и забор изделия в Химчистку. Оплату Заказчик производит в соответствии с квитанцией из Химчистки и транспортных расходов. За работу химчистки, надлежащий вид изделия и сохранность изделия Исполнитель ответственности не несет с момента передачи изделия курьеру или сотруднику Химчистки.`, + }, +] @@ -1 +1,2 @@ -NEXT_PUBLIC_CAPTCHA_KEY = 6LdbelMqAAAAABQIy1wn53ie7gOw_4bPfAnS0EwU \ No newline at end of file +NEXT_PUBLIC_CAPTCHA_KEY = 6LdbelMqAAAAABQIy1wn53ie7gOw_4bPfAnS0EwU +NEXT_PUBLIC_API_URL = https://x-essense.ru \ No newline at end of file