Merge branch 'develop'
This commit is contained in:
commit
a682b88c3d
@ -364,7 +364,7 @@ DEFAULT_FROM_EMAIL = os.getenv(
|
||||
# SITE SETTINGS
|
||||
# -----------------------------------------------------------------------------
|
||||
# Название сайта для email уведомлений и UI
|
||||
SITE_NAME = os.getenv("SITE_NAME", "CORP HiRo")
|
||||
SITE_NAME = os.getenv("SITE_NAME", "CORP - HiRo")
|
||||
SITE_URL = os.getenv("SITE_URL", "https://corp.robotail.pro")
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
@ -436,7 +436,7 @@ REST_FRAMEWORK = {
|
||||
SPECTACULAR_SETTINGS = {
|
||||
"TITLE": f"{SITE_NAME} API",
|
||||
"DESCRIPTION": (
|
||||
"OpenAPI-документация backend API EUSRR. "
|
||||
"OpenAPI-документация backend API CORP - HiRo. "
|
||||
"Включает JWT-аутентификацию, session auth и основные REST endpoints."
|
||||
),
|
||||
"VERSION": "1.0.0",
|
||||
@ -598,7 +598,7 @@ LDAP_POSITIONS_BASE = os.getenv(
|
||||
"LDAP_POSITIONS_BASE", "OU=Positions,DC=eusrr,DC=local"
|
||||
)
|
||||
|
||||
BRAND_NAME = os.getenv("BRAND_NAME", "HiRo")
|
||||
BRAND_NAME = os.getenv("BRAND_NAME", "CORP - HiRo")
|
||||
BRAND_LOGO = "img/logo.png"
|
||||
|
||||
# Web Push Notifications (VAPID)
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>EUSRR WebSocket AsyncAPI</title>
|
||||
<title>CORP - HiRo WebSocket AsyncAPI</title>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
@ -88,7 +88,7 @@
|
||||
<section class="hero">
|
||||
<h1>WebSocket AsyncAPI</h1>
|
||||
<p>
|
||||
Отдельная документация realtime-контура EUSRR. HTTP API продолжает
|
||||
Отдельная документация realtime-контура CORP - HiRo. HTTP API продолжает
|
||||
жить в OpenAPI, а WebSocket-контур документируется отдельно через
|
||||
AsyncAPI, без смешивания двух протоколов в одной схеме.
|
||||
</p>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Подтверждение email — HiRo{% endblock %}
|
||||
{% block title %}Подтверждение email — CORP - HiRo{% endblock %}
|
||||
|
||||
{# ВАЖНО: применяем тему ещё в <head>, до рендера страницы #}
|
||||
{% block extra_css %}
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
{# КРИТИЧНО: Применяем тему ДО загрузки CSS для предотвращения FOUC #}
|
||||
<script src="{% static 'js/utils/themeInitializer.js' %}"></script>
|
||||
|
||||
<title>{% block title %}HiRo{% endblock %}</title>
|
||||
<title>{% block title %}CORP - HiRo{% endblock %}</title>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{% static 'img/favicon-32.png' %}">
|
||||
<link rel="apple-touch-icon" href="{% static 'img/apple-touch-icon.png' %}">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="{% static 'img/logo-192.png' %}">
|
||||
|
||||
BIN
frontend/public/notification-badge.png
Normal file
BIN
frontend/public/notification-badge.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
@ -6,11 +6,12 @@
|
||||
* нативные уведомления даже когда страница закрыта.
|
||||
*/
|
||||
|
||||
const SW_VERSION = '2.0.0';
|
||||
const SW_VERSION = '2.1.0';
|
||||
const STATIC_CACHE = `eusrr-static-${SW_VERSION}`;
|
||||
const PRECACHE_URLS = [
|
||||
'/manifest.webmanifest',
|
||||
'/favicon-source.svg',
|
||||
'/notification-badge.png',
|
||||
'/logo.png',
|
||||
'/logo.webp',
|
||||
'/icon-192.png',
|
||||
@ -21,8 +22,8 @@ const PRECACHE_URLS = [
|
||||
|
||||
// Настройки по умолчанию для уведомлений
|
||||
const DEFAULT_NOTIFICATION_OPTIONS = {
|
||||
icon: '/logo.png',
|
||||
badge: '/logo.png',
|
||||
icon: '/icon-192.png',
|
||||
badge: '/notification-badge.png',
|
||||
vibrate: [100, 50, 100],
|
||||
requireInteraction: false,
|
||||
renotify: true,
|
||||
@ -183,33 +184,44 @@ self.addEventListener('notificationclick', (event) => {
|
||||
event.notification.close();
|
||||
|
||||
// Получаем URL из данных уведомления
|
||||
const urlToOpen = event.notification.data?.url || '/';
|
||||
const urlToOpen = new URL(
|
||||
event.notification.data?.url || '/',
|
||||
self.location.origin,
|
||||
).toString();
|
||||
|
||||
// Открываем или фокусируемся на странице
|
||||
// Для установленного PWA даём браузеру самому решить, открыть app window
|
||||
// или вкладку. Не фокусируем произвольную already-open same-origin вкладку.
|
||||
event.waitUntil(
|
||||
clients.matchAll({ type: 'window', includeUncontrolled: true })
|
||||
.then((windowClients) => {
|
||||
// Ищем уже открытую вкладку с нашим сайтом
|
||||
for (let client of windowClients) {
|
||||
if (client.url.includes(self.location.origin) && 'focus' in client) {
|
||||
return client.focus().then((client) => {
|
||||
// Отправляем сообщение для навигации
|
||||
if ('navigate' in client) {
|
||||
return client.navigate(urlToOpen);
|
||||
}
|
||||
return client.postMessage({
|
||||
type: 'NOTIFICATION_CLICK',
|
||||
url: urlToOpen,
|
||||
notificationId: event.notification.data?.notification_id
|
||||
});
|
||||
});
|
||||
}
|
||||
.then(async (windowClients) => {
|
||||
const exactClient = windowClients.find(
|
||||
(client) => client.url === urlToOpen && 'focus' in client,
|
||||
);
|
||||
if (exactClient) {
|
||||
return exactClient.focus();
|
||||
}
|
||||
|
||||
// Если открытой вкладки нет, открываем новую
|
||||
|
||||
if (clients.openWindow) {
|
||||
return clients.openWindow(urlToOpen);
|
||||
}
|
||||
|
||||
const sameOriginClient = windowClients.find(
|
||||
(client) =>
|
||||
client.url.startsWith(self.location.origin) &&
|
||||
'focus' in client,
|
||||
);
|
||||
if (sameOriginClient) {
|
||||
return sameOriginClient.focus().then((client) => {
|
||||
if ('navigate' in client) {
|
||||
return client.navigate(urlToOpen);
|
||||
}
|
||||
return client.postMessage({
|
||||
type: 'NOTIFICATION_CLICK',
|
||||
url: urlToOpen,
|
||||
notificationId: event.notification.data?.notification_id
|
||||
});
|
||||
});
|
||||
}
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
@ -16,14 +16,14 @@ const geistMono = Geist_Mono({
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "EUSRR - Корпоративная система",
|
||||
description: "Корпоративная система управления EUSRR",
|
||||
applicationName: "EUSRR",
|
||||
title: "CORP - HiRo",
|
||||
description: "Корпоративная система управления CORP - HiRo",
|
||||
applicationName: "CORP - HiRo",
|
||||
manifest: "/manifest.webmanifest",
|
||||
appleWebApp: {
|
||||
capable: true,
|
||||
statusBarStyle: "default",
|
||||
title: "EUSRR",
|
||||
title: "CORP - HiRo",
|
||||
},
|
||||
icons: {
|
||||
icon: [
|
||||
|
||||
@ -10,7 +10,7 @@ const sections = [
|
||||
{
|
||||
title: "1. Общие положения",
|
||||
body: [
|
||||
"Настоящая Политика определяет порядок обработки персональных данных пользователей сервиса EUSRR и действует в отношении всей информации, которую оператор может получить при использовании сайта, внутренних веб-интерфейсов и связанных сервисов.",
|
||||
"Настоящая Политика определяет порядок обработки персональных данных пользователей сервиса CORP - HiRo и действует в отношении всей информации, которую оператор может получить при использовании сайта, внутренних веб-интерфейсов и связанных сервисов.",
|
||||
"Политика подготовлена с учетом требований законодательства Российской Федерации о персональных данных, включая Федеральный закон от 27.07.2006 № 152-ФЗ.",
|
||||
],
|
||||
},
|
||||
|
||||
@ -76,7 +76,7 @@ export default function TermsPage() {
|
||||
<p className="app-text-muted text-xs uppercase tracking-[0.2em]">Legal</p>
|
||||
<h1 className="mt-3 text-3xl font-semibold">Условия использования</h1>
|
||||
<p className="app-text-muted mt-3 text-sm leading-6">
|
||||
Общие правила доступа и использования сервиса EUSRR.
|
||||
Общие правила доступа и использования сервиса CORP - HiRo.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@ -2,9 +2,9 @@ import type { MetadataRoute } from "next";
|
||||
|
||||
export default function manifest(): MetadataRoute.Manifest {
|
||||
return {
|
||||
name: "EUSRR",
|
||||
short_name: "EUSRR",
|
||||
description: "Корпоративная система управления EUSRR",
|
||||
name: "CORP - HiRo",
|
||||
short_name: "CORP - HiRo",
|
||||
description: "Корпоративная система управления CORP - HiRo",
|
||||
start_url: "/",
|
||||
scope: "/",
|
||||
display: "standalone",
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
export const LEGAL_OPERATOR_NAME = "Сервис EUSRR";
|
||||
export const LEGAL_OPERATOR_NAME = "Сервис CORP - HiRo";
|
||||
export const LEGAL_SITE_URL = "https://corp.robotail.pro";
|
||||
export const LEGAL_CONTACT_EMAIL = "robotail-info@yandex.ru";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user