devpilot.
К выбору примеров

УЧЕБНЫЙ ПРИМЕР

Форма, которая уточняет задачу

Выберите сайт, рекламу или интеграцию — форма покажет нужные уточнения. Заполненные поля проверяются и собираются в JSON прямо на странице.

DEMOБез выдуманных показателей продаж
Холст:

Это ширина демонстрационного холста. Она не заменяет проверку настоящего устройства.

DEMO / form-rules

Форма, которая уточняет задачу

Одинаковый набор вопросов неудобен для разных услуг: сайту нужно число страниц, рекламе — страна, интеграции — источник и получатель данных. Демонстрация меняет вопросы по типу задачи и показывает подготовленную структуру без настоящей отправки.

Открыть рабочую демонстрацию
УСЛОВНАЯ ЛОГИКАLOCAL / JS

Форма, которая уточняет задачу

Уточняет сведения под выбранную услугу, не перегружая человека вопросами других направлений.

Форма, которая уточняет задачу
Сайт

Подготовленная структура заявки

Это проверка полей и подготовка JSON: заявка никуда не отправляется.

Для запуска примера нужен JavaScript; описание и разбор доступны без запуска.

Посмотреть рабочий код
function buildConditionalRequest(type, values) {
  if (!['site', 'ads', 'integration'].includes(type)) throw new Error('RULES_TYPE');
  if (values === null || typeof values !== 'object' || Array.isArray(values) ||
      Object.getPrototypeOf(values) !== Object.prototype) throw new Error('RULES_VALUES');
  const company = values.company === undefined ? '' : values.company;
  if (typeof company !== 'string' || company.trim().length > 100) throw new Error('RULES_COMPANY');
  if (typeof values.task !== 'string' || values.task.trim().length < 10 ||
      values.task.trim().length > 1500) throw new Error('RULES_TASK');

  let details;
  if (type === 'site') {
    if (!['string', 'number'].includes(typeof values.pages)) throw new Error('RULES_PAGES');
    const pages = Number(values.pages);
    if (!Number.isInteger(pages) || pages < 1 || pages > 100) throw new Error('RULES_PAGES');
    details = {pages};
  } else if (type === 'ads') {
    if (typeof values.country !== 'string' || !values.country.trim() ||
        values.country.trim().length > 100) throw new Error('RULES_COUNTRY');
    details = {country: values.country.trim()};
  } else {
    if (typeof values.source !== 'string' || !values.source.trim() ||
        values.source.trim().length > 100) throw new Error('RULES_SOURCE');
    if (typeof values.target !== 'string' || !values.target.trim() ||
        values.target.trim().length > 100) throw new Error('RULES_TARGET');
    details = {source: values.source.trim(), target: values.target.trim()};
  }
  return {type, company: company.trim(), task: values.task.trim(), details};
}

Локальная демонстрация: сервер, сохранение и настоящая отправка не подключены.

Только текст, без HTML. Изменения остаются во вкладке.

Задача в этом сценарии

Одинаковый набор вопросов неудобен для разных услуг: сайту нужно число страниц, рекламе — страна, интеграции — источник и получатель данных. Демонстрация меняет вопросы по типу задачи и показывает подготовленную структуру без настоящей отправки.

Как устроено решение

  • Оставляем общее описание задачи обязательным, а название компании — необязательным. Тип запроса определяет, какие уточняющие поля показываются.
  • Для сайта нужно целое число страниц от одного до ста, для рекламы обязательно указать страну, для интеграции — источник и получатель. Описание задачи должно содержать от десяти до полутора тысяч символов.
  • Проверяем заполнение и собираем JSON с общими сведениями и полями выбранного типа. Скрытые уточнения других типов в результат не включаем; сеть и канал доставки не подключены.

Промежуточные материалы

  1. Исходная задача и ограничения → Одинаковый набор вопросов неудобен для разных услуг: сайту нужно число страниц, рекламе — страна, интеграции — источник и получатель данных. Демонстрация меняет вопросы по типу задачи и показывает подготовленную структуру без настоящей отправки.
  2. Состав решения → Три типа запроса с соответствующими уточняющими полями.
  3. Проверка перед запуском → Переключить все типы, проверить обязательные уточнения, границы числа страниц и длину описания, затем сверить поля результата.

Что проверить перед запуском

  • Переключить все типы, проверить обязательные уточнения, границы числа страниц и длину описания, затем сверить поля результата.
  • Для настоящей формы согласовать состав заявки и получателя; отдельно реализовать серверную проверку, сохранение и доставку.

Что входит в пример

  • Три типа запроса с соответствующими уточняющими полями.
  • Проверка обязательных значений, описания задачи и числа страниц.
  • Подготовленный JSON для просмотра без реальной отправки.

Технический паспорт

DevPilot 1.5.2 · Охват проверок, исходники и дата свидетельств

Статус
DEMO · Вымышленная компания и учебные данные
Материалы
Собственные HTML/CSS/SVG, исходники и локальные алгоритмы. Фотографии клиентов не используются.
Обработка
Демонстрация выполняется в браузере. Открытие примера не создаёт заявку или оплаченный проект.
Доказательства
Содержимое и локальные проверки отделены от реальной браузерной, хостинговой и коммерческой приёмки.