feat: update admin page

This commit is contained in:
2025-11-03 09:20:28 +03:00
parent 30b0108fe7
commit cd818d3356
94 changed files with 4729 additions and 1227 deletions

View File

@@ -0,0 +1,142 @@
import axios from 'axios';
/**
* Получает user_token из глобального объекта TeleCart
*/
function getUserToken() {
if (typeof window !== 'undefined' && window.TeleCart?.user_token) {
return window.TeleCart.user_token;
}
// Fallback: пытаемся получить из URL как запасной вариант
if (typeof window !== 'undefined') {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get('user_token') || '';
}
return '';
}
/**
* Базовый URL для API запросов
*/
function getBaseUrl() {
return '/admin/index.php';
}
/**
* Создает URL для API запроса
* @param {string} apiAction - действие API (например, 'configureBotToken')
* @returns {string} полный URL
*/
function buildApiUrl(apiAction) {
const baseUrl = getBaseUrl();
const userToken = getUserToken();
return `${baseUrl}?route=extension/module/tgshop/handle&api_action=${apiAction}&user_token=${userToken}`;
}
/**
* HTTP клиент для работы с API
*/
const httpClient = axios.create({
headers: {
'Content-Type': 'application/json',
},
});
/**
* Выполняет POST запрос к API
* @param {string} apiAction - действие API
* @param {object} data - данные для отправки
* @returns {Promise} результат запроса
*/
export async function apiPost(apiAction, data = {}) {
const url = buildApiUrl(apiAction);
try {
const response = await httpClient.post(url, data);
return {
success: true,
data: response.data,
status: response.status,
};
} catch (error) {
// Обработка ошибок axios
if (error.response) {
// Сервер вернул ошибку
const status = error.response.status;
const errorData = error.response.data;
return {
success: false,
error: errorData?.error || error.response.statusText,
status,
data: errorData,
};
} else if (error.request) {
// Запрос был отправлен, но ответа не получено
return {
success: false,
error: 'Не удалось получить ответ от сервера',
status: 0,
};
} else {
// Ошибка при настройке запроса
return {
success: false,
error: error.message || 'Произошла неизвестная ошибка',
status: 0,
};
}
}
}
/**
* Выполняет GET запрос к API
* @param {string} apiAction - действие API
* @param {object} params - query параметры
* @returns {Promise} результат запроса
*/
export async function apiGet(apiAction, params = {}) {
const url = buildApiUrl(apiAction);
try {
const response = await httpClient.get(url, { params: params });
return {
success: true,
data: response.data.data,
status: response.status,
};
} catch (error) {
if (error.response) {
const status = error.response.status;
const errorData = error.response.data;
return {
success: false,
error: errorData?.error || error.response.statusText,
status,
data: errorData,
};
} else if (error.request) {
return {
success: false,
error: 'Не удалось получить ответ от сервера',
status: 0,
};
} else {
return {
success: false,
error: error.message || 'Произошла неизвестная ошибка',
status: 0,
};
}
}
}
export default {
apiPost,
apiGet,
getUserToken,
};