- Add customizable background color - Add wheel animations and sound effects - Add reward description field and winner modal - Change font to Dana - Add configurable reward probabilities - Support reward types (Empty, Discount Code, LiveCoin) - Replace reward title with reward type selector - Allow wheel page title customization from admin panel
74 lines
2.3 KiB
JavaScript
74 lines
2.3 KiB
JavaScript
const BASE = 'http://127.0.0.1:8000';
|
|
|
|
// ---------------- USER ----------------
|
|
export const getItems = () =>
|
|
fetch(`${BASE}/user/items`).then(r => r.json());
|
|
|
|
export const spinWheel = () =>
|
|
fetch(`${BASE}/user/spin`, { method: 'POST' }).then(async (r) => {
|
|
if (!r.ok) throw new Error('Spin failed');
|
|
return r.json();
|
|
});
|
|
|
|
// ---------------- ADMIN ----------------
|
|
export const adminGetItems = () =>
|
|
fetch(`${BASE}/admin/items`).then(r => r.json());
|
|
|
|
export const createItem = (data) =>
|
|
fetch(`${BASE}/admin/items`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
title: data.title,
|
|
prize: data.prize,
|
|
prize_type: data.prize_type,
|
|
description: data.description,
|
|
probability: data.probability
|
|
})
|
|
}).then(r => r.json());
|
|
|
|
export const updateItem = (id, data) =>
|
|
fetch(`${BASE}/admin/items/${id}`, {
|
|
method: 'PUT',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
title: data.title,
|
|
prize: data.prize,
|
|
prize_type: data.prize_type,
|
|
description: data.description,
|
|
probability: data.probability
|
|
})
|
|
}).then(r => r.json());
|
|
|
|
export const deleteItem = (id) =>
|
|
fetch(`${BASE}/admin/items/${id}`, { method: 'DELETE' }).then(async (r) => {
|
|
if (!r.ok && r.status !== 204) throw new Error('Delete failed');
|
|
return {};
|
|
});
|
|
|
|
// ---------------- رنگ پسزمینه ----------------
|
|
export const getBgColor = () =>
|
|
localStorage.getItem('wheelBgColor') || '#7B241C';
|
|
|
|
export const saveBgColor = (color) => {
|
|
localStorage.setItem('wheelBgColor', color);
|
|
window.dispatchEvent(new StorageEvent('storage', {
|
|
key: 'wheelBgColor',
|
|
newValue: color
|
|
}));
|
|
};
|
|
|
|
// ---------------- عنوان صفحه گردونه ----------------
|
|
export const getTitleSettings = () => {
|
|
const saved = localStorage.getItem('wheelTitleSettings');
|
|
return saved ? JSON.parse(saved) : { text: 'گردونه شانس', color: '#FFD700' };
|
|
};
|
|
|
|
export const saveTitleSettings = (text, color) => {
|
|
const settings = { text, color };
|
|
localStorage.setItem('wheelTitleSettings', JSON.stringify(settings));
|
|
window.dispatchEvent(new StorageEvent('storage', {
|
|
key: 'wheelTitleSettings',
|
|
newValue: JSON.stringify(settings)
|
|
}));
|
|
}; |