feat(admin): edit domain settings inline and copy saved configurations
deploy-preland / deploy zoomstage.online (push) Successful in 57s
deploy-preland / deploy zoomstage.online (push) Successful in 57s
This commit is contained in:
1 parent
84f70b1c71
commit
dd6d221dd7
19 files changed
+402
-409
No files matched your search
+49
-20
@@ -1,22 +1,33 @@
|
||||
# Админка прелендингов — preland#22
|
||||
|
||||
Отдельное PHP-приложение для `admin.zoomstage.online`. Формы редактируют фактические
|
||||
`config.json`, выбранные поля применяются к одному или нескольким доменам. ZIP indpic
|
||||
`config.json` в общей таблице; сохранённые настройки можно скопировать в выбранные домены. ZIP indpic
|
||||
проверяется по контракту CPanel и доставляется на выбранные хостинги. Изменение контента
|
||||
не требует Git/push/deploy; `admin/` не входит в публичную поставку прелендингов.
|
||||
|
||||
Редактирование реквизитов отключено по поручению владельца: `requisites` скрыты в сводке и редакторе, не входят в «Выбрать все поля». Данные config сохраняются.
|
||||
Реквизиты и устаревший `utm.chb` скрыты и защищены от записи. Неизвестные поля показаны только для чтения и сохраняются.
|
||||
|
||||
Спецификация и план — `docs/superpowers/{specs,plans}/2026-10-25-preland22-*` в репозитории,
|
||||
копии и фактический статус — в базе знаний, основной реестр — preland#22.
|
||||
|
||||
## Сводка и конструктор ссылки
|
||||
|
||||
Первый экран читает сохранённые конфиги всех подключений: основной сайт,
|
||||
дополнительные поля, default и все веса UTM. У каждой колонки своё время чтения,
|
||||
версия, обновление и ошибка; при отказе прежний снимок явно помечается. Обновление
|
||||
сводки не сбрасывает черновик редактора и не меняет его версию для CAS.
|
||||
Первый экран — редактор фактических конфигов всех подключений. Основной сайт,
|
||||
варианты, веса и default редактируются в соответствующей колонке. Доля вычисляется
|
||||
автоматически:3:1 →75%/25%; нулевые веса дают0%. Default выбирается radio обычного
|
||||
начертания. Отсутствующая группа добавляется только явно. «Сохранить» и «Отмена»
|
||||
работают отдельно для каждого домена; ошибка и конфликт сохраняют черновик.
|
||||
Перечитывание другой колонки сохраняет DOM, фокус и курсор. После конфликта нужно
|
||||
явно загрузить сохранённое либо отменить черновик. Версии CAS остаются внутренними;
|
||||
даты заметок и версии конфигов в таблице не показываются.
|
||||
|
||||
Под таблицей — копирование сохранённых host и восьми канонических UTM из одного
|
||||
источника в несколько получателей. Источник исключён из получателей. Черновики
|
||||
источника и выбранных получателей сначала нужно сохранить или отменить. Неизвестные
|
||||
поля, реквизиты, заметки и файлы ZIP не копируются. Отсутствующая группа источника
|
||||
оставляет группу получателя. Источник и каждая цель проверяются по своей версии;
|
||||
сохранение/копирование считаются завершёнными после результата задания и перечитывания.
|
||||
Ошибки отдельных целей видны в колонке и журнале; успешные цели не повторяются.
|
||||
Конструктор работает отдельно: значения или «Рандом» в восьми списках, затем
|
||||
«Сформировать и сохранить». Последний выбор и точный URL сохраняются на сервере
|
||||
отдельно по ID домена, восстанавливаются после перезагрузки. Изменение списка скрывает
|
||||
@@ -33,10 +44,7 @@
|
||||
|
||||
## Компактная сводка и заметки — preland#23 / #24
|
||||
|
||||
Ячейка UTM содержит только номер и долю заданного веса: `1 (100%)`,
|
||||
`2 (0%) - default`. Положительные номер и доля выделены жирным; суффикс ` - default` всегда обычный. Проценты округляются
|
||||
до двух знаков без лишних нулей; при всех нулевых весах у всех вариантов `0%`.
|
||||
Таблица не меняет default/веса и не подставляет другому варианту `100%`.
|
||||
С версии preland#25 ячейки содержат inline-редактор, описанный выше.
|
||||
|
||||
В блоке каждой UTM верхняя строка содержит название один раз и общую заметку
|
||||
в объединённой ячейке доменов. Ниже — пустая первая ячейка и значения доменов.
|
||||
@@ -99,16 +107,16 @@ Imagick не нужен. Замена реквизитов сбрасывает
|
||||
|
||||
## Работа через формы
|
||||
|
||||
1. Выбрать исходный домен: данные и SHA-версия читаются с его хостинга.
|
||||
2. Изменить поля. Отмечаются только введённые поля; можно явно выбрать группу/всю форму.
|
||||
3. Отметить домены и нажать «Применить к выбранным». Каждый домен использует собственную
|
||||
прочитанную версию и сохраняет свои остальные значения. После сохранения перечитать домен.
|
||||
4. В журнале проверить отдельные статусы. Успешные цели не повторяются. Конфликт требует
|
||||
перечитать данные; после неизвестного результата повтор сначала сверяет фактический хеш.
|
||||
5. В indpic выбрать ZIP либо проверить уже загруженную SFTP-папку. Новый набор сам не
|
||||
меняет default/веса. Чтобы назначить новый номер indpic default, он должен присутствовать
|
||||
в таблице весов — можно с весом0. Это действующее правило resolver, а не вес трафика.
|
||||
|
||||
1. Изменить основной сайт или UTM в нужной колонке, проверить проценты и default,
|
||||
нажать «Сохранить» под колонкой. Остальные поля сохраняются; ошибка оставляет черновик.
|
||||
2. Для копирования выбрать источник и получателей под таблицей. Сначала сохранить
|
||||
либо отменить их черновики, затем нажать кнопку с числом получателей.
|
||||
3. Проверить итог каждой цели в колонках и журнале. При конфликте явно перечитать
|
||||
сохранённые настройки; неизвестный результат требует проверки журнала и фактического состояния.
|
||||
4. Раздел indpic имеет собственные «Открытый домен» и checkbox целей ZIP/проверки.
|
||||
Выбор копирования настроек на эти цели не влияет. Резерв относится к открытому домену indpic.
|
||||
5. Загрузить ZIP или проверить SFTP-папку, при необходимости назначить новый default
|
||||
в основной таблице: его номер должен присутствовать в весах, допускается вес0.
|
||||
Номера — 1–9, ZIP содержит папку номера и ровно90 изображений установленных форматов/
|
||||
размеров; лимит8МиБ на файл,64МиБ распакованного набора. При нулевой сумме весов rnd
|
||||
использует первый ключ weights по порядку config.json; только cons использует default.
|
||||
@@ -160,3 +168,24 @@ Git-снимком. Для отката приложения вернуть пр
|
||||
|
||||
Фактические production-команды, версии, ограничения, свидетельства UI и статус подключения
|
||||
четырёх доменов фиксируются в preland#22 и KB; этот README сам не доказывает завершение выпуска.
|
||||
|
||||
## Browser проверки preland#25
|
||||
|
||||
`ui-matrix.cjs` выполняет полный цикл на четырёх disposable local-целях a/b/c/d:
|
||||
inline input/default/add/remove/missing, Save/Cancel, параллельные черновики,
|
||||
задержанный GET, настоящий CAS-конфликт и offline/recovery, copy двух получателей,
|
||||
partial failure/source changed, aliases/unknown/requisites, независимые ZIP-цели,
|
||||
ошибочный ZIP, конструктор/заметки и1440/390. Скрипту нужны writable mount fixture
|
||||
в `/fixture` и output в `/output`; он возвращает исходные config-файлы в finally.
|
||||
`ui-regression.cjs` — совместимая точка входа этого же сценария, отдельно повторять её
|
||||
не требуется. `ui-utm.cjs` отдельно проверяет настоящую ZIP-доставку в a+b, variant3
|
||||
с весом0/default и обратное восстановление через controls; нужен `VALID_ZIP` набора3.
|
||||
`ui-notes.cjs`, `ui-link-builder.cjs`, `ui-verified-refresh.cjs`, `ui-remember.cjs`,
|
||||
`ui-requisites.cjs` и `ui-smoke.cjs` сохраняют отдельные сценарии своих подсистем.
|
||||
Ни один browser write-test не предназначен для production.
|
||||
|
||||
|
||||
Отдельный `ui-session-jobs.cjs` удерживает ответ настоящего завершённого Save/Copy
|
||||
через выход и повторный вход: старое продолжение не сбрасывает новый черновик,
|
||||
не подменяет результаты/notice и не снимает busy новой операции. Серверные задания
|
||||
при выходе продолжаются; отменяются только устаревшие UI-продолжения.
|
||||
Reference in new issue
Block a user