Update: перенастройка сайта что бы открывать 1 порт на сайт

This commit is contained in:
2026-02-11 15:46:19 +05:00
parent 65a9143bd0
commit 62340e4406
25 changed files with 1393 additions and 1216 deletions

View File

@@ -1,9 +1,20 @@
/// <reference types="vite/client" />
import { Post, NewsArticle, ResearchPaper, BusinessStory, ServiceItemData, ClientLogo, BusinessCourse, StudentProgram, AcceleratorProject, InvestmentProject, Vacancy, GalleryItem } from './types';
const STRAPI_URL = 'https://n8n.iieasy.ru';
const API_TOKEN = '91344ae88ae3e496f72d6ae9c157a3e929c3078b6269b57d3751d81026880cca6e7dcec074bffd77c8fe853dce9308f8d7dd494cf7b8c804a2875f0f4c24c0419cee196adf247d01cd5ddd5893d325bff34ad236febe0b508114ec906b12423e658d7210be94f2fcc37184334e11065538531c6d935de5becf81f2a48fdd6318';
/**
* Базовый URL Strapi API.
* - В dev: пустая строка — запросы идут через Vite proxy на Strapi.
* - В prod за прокси: задайте VITE_STRAPI_URL="" при сборке — запросы на тот же origin (порт 85).
* - В prod без прокси: задайте VITE_STRAPI_URL=http://... при сборке; иначе используется запасной URL.
*/
const _url = import.meta.env?.VITE_STRAPI_URL;
export const STRAPI_URL =
import.meta.env?.DEV
? ''
: typeof _url === 'string'
? _url
: 'http://192.168.88.121:1337';
const API_TOKEN = '9e4de071544acf9ca7a9bc2b01c2fdc913c1e92e930b6c04193a00cb71a27787c19fd546e4fcebee6ed34b284015506a6eb650cea99291149328f78b4020c5028337e3dcd45f50ca379944b0a4a8276bb7f9127aa816a8b35eb68a7beef54d52a0eeea84991776165347039c20fa8b447df6c4ff653a82d4684da9db9f7716db';
interface StrapiResponse<T> {
data: StrapiDataItem<T>[];
@@ -439,4 +450,41 @@ export const fetchBusinessCourses = (): Promise<BusinessCourse[]> => fetchData('
export const fetchStudentPrograms = (): Promise<StudentProgram[]> => fetchData('student-programs', transformStudentProgram);
export const fetchAcceleratorProjects = (): Promise<AcceleratorProject[]> => fetchData('accelerator-projects', transformAcceleratorProject);
export const fetchInvestmentProjects = (): Promise<InvestmentProject[]> => fetchData('investment-opportunities', transformInvestmentProject);
export const fetchVacancies = (): Promise<Vacancy[]> => fetchData('vacancies', transformVacancy);
export const fetchVacancies = (): Promise<Vacancy[]> => fetchData('vacancies', transformVacancy);
/** Список файлов из Strapi Media Library (для страницы «О нас» и др.).
* В Strapi: Settings → API Tokens → роль токена должна иметь Plugins → Upload → find (доступ к медиа). */
export interface StrapiUploadFile {
url: string;
name?: string;
id?: number;
}
function parseUploadItem(item: any): StrapiUploadFile | null {
const attrs = item?.attributes ?? item;
const url = typeof attrs?.url === 'string' ? attrs.url : typeof item?.url === 'string' ? item.url : '';
if (!url) return null;
const name = attrs?.name ?? attrs?.fileName ?? item?.name ?? '';
return { id: item?.id ?? attrs?.id, url, name };
}
/** Папки в Content API недоступны — запрос без фильтра folder. */
export async function fetchUploadFiles(): Promise<StrapiUploadFile[]> {
try {
const response = await fetch(`${STRAPI_URL}/api/upload/files`, {
headers: { Authorization: `Bearer ${API_TOKEN}` },
});
if (!response.ok) {
console.warn('fetchUploadFiles:', response.status, await response.text());
return [];
}
const json = await response.json();
const list = Array.isArray(json) ? json : json?.data;
if (!Array.isArray(list)) return [];
const files = list.map((item: any) => parseUploadItem(item)).filter(Boolean) as StrapiUploadFile[];
return files.sort((a, b) => (a.name ?? '').localeCompare(b.name ?? ''));
} catch (e: any) {
console.warn('fetchUploadFiles error:', e?.message);
return [];
}
}