create-ex-den-kit
Version:
Create exam projects with Ex-Den-Kit
165 lines (158 loc) • 5.58 kB
JavaScript
// Конфигурация для разных тем экзамена
export const themeConfigs = {
bookexchange: {
name: 'Буквоежка',
description: 'Система обмена книгами',
icon: '📚',
colors: {
primary: '#4F46E5',
secondary: '#7C3AED',
accent: '#EC4899',
},
admin: {
login: 'admin',
password: 'bookworm',
},
fields: [
{ name: 'author', label: 'Автор книги', type: 'text', required: true },
{ name: 'title', label: 'Название книги', type: 'text', required: true },
{
name: 'action',
label: 'Действие',
type: 'radio',
required: true,
options: ['Готов поделиться', 'Хочу в свою библиотеку']
},
{ name: 'publisher', label: 'Издательство', type: 'text', required: false },
{ name: 'year', label: 'Год издания', type: 'number', required: false },
{ name: 'binding', label: 'Переплет', type: 'text', required: false },
{ name: 'condition', label: 'Состояние книги', type: 'text', required: false },
],
statuses: ['new', 'approved', 'rejected'],
features: {
archive: true,
rejectionReason: true,
},
},
cargo: {
name: 'Грузовозофф',
description: 'Система заказа грузоперевозок',
icon: '🚚',
colors: {
primary: '#EA580C',
secondary: '#DC2626',
accent: '#FBBF24',
},
admin: {
login: 'admin',
password: 'gruzovik2024',
},
fields: [
{ name: 'date', label: 'Дата перевозки', type: 'date', required: true },
{ name: 'time', label: 'Время', type: 'time', required: true },
{ name: 'weight', label: 'Вес груза (кг)', type: 'number', required: true },
{ name: 'dimensions', label: 'Габариты груза', type: 'text', required: true },
{
name: 'cargoType',
label: 'Тип груза',
type: 'select',
required: true,
options: ['Хрупкое', 'Скоропортящееся', 'Требует рефрижератор', 'Животные', 'Жидкость', 'Мебель', 'Мусор']
},
{ name: 'addressFrom', label: 'Адрес отправления', type: 'text', required: true },
{ name: 'addressTo', label: 'Адрес доставки', type: 'text', required: true },
],
statuses: ['new', 'in_work', 'cancelled'],
features: {
archive: false,
rejectionReason: false,
},
},
courses: {
name: 'Корочки.есть',
description: 'Система записи на онлайн курсы',
icon: '🎓',
colors: {
primary: '#059669',
secondary: '#0891B2',
accent: '#8B5CF6',
},
admin: {
login: 'admin',
password: 'education',
},
fields: [
{
name: 'courseName',
label: 'Название курса',
type: 'select',
required: true,
options: ['Основы алгоритмизации и программирования', 'Основы веб-дизайна', 'Основы проектирования баз данных']
},
{ name: 'startDate', label: 'Желаемая дата начала', type: 'date', required: true },
{
name: 'paymentMethod',
label: 'Способ оплаты',
type: 'radio',
required: true,
options: ['Наличными', 'Переводом на банковский счет']
},
],
statuses: ['new', 'studying', 'completed'],
features: {
reviews: true,
statusRestrictions: {
review: ['completed'], // Отзыв только после завершения
},
},
},
restaurant: {
name: 'Я буду кушац',
description: 'Система бронирования столиков',
icon: '🍴',
colors: {
primary: '#DC2626',
secondary: '#EA580C',
accent: '#FBBF24',
},
admin: {
login: 'admin',
password: 'restaurant',
},
fields: [
{ name: 'date', label: 'Дата бронирования', type: 'date', required: true },
{ name: 'time', label: 'Время', type: 'time', required: true },
{
name: 'guests',
label: 'Количество гостей',
type: 'number',
required: true,
min: 1,
max: 10,
},
{ name: 'phone', label: 'Контактный телефон', type: 'tel', required: true },
],
statuses: ['new', 'visited', 'cancelled'],
features: {
reviews: true,
statusRestrictions: {
review: ['visited'], // Отзыв только после посещения
},
},
},
};
// Получаем текущую тему из localStorage или используем дефолтную
export const getCurrentTheme = () => {
const savedTheme = localStorage.getItem('examTheme');
return savedTheme || 'bookexchange';
};
// Сохраняем выбранную тему
export const setCurrentTheme = (theme) => {
localStorage.setItem('examTheme', theme);
document.documentElement.setAttribute('data-theme', theme);
};
// Получаем конфигурацию текущей темы
export const getThemeConfig = () => {
const currentTheme = getCurrentTheme();
return themeConfigs[currentTheme];
};