Spaces:
Sleeping
Sleeping
Upload 37 files
Browse files- pages/GameLucky.tsx +2 -2
- server.js +11 -2
pages/GameLucky.tsx
CHANGED
|
@@ -118,8 +118,8 @@ export const GameLucky: React.FC = () => {
|
|
| 118 |
setActiveCardIndex(null);
|
| 119 |
}, 2000);
|
| 120 |
} catch (e: any) {
|
| 121 |
-
|
| 122 |
-
|
| 123 |
setIsFlipping(false);
|
| 124 |
setActiveCardIndex(null);
|
| 125 |
}
|
|
|
|
| 118 |
setActiveCardIndex(null);
|
| 119 |
}, 2000);
|
| 120 |
} catch (e: any) {
|
| 121 |
+
// Use backend message directly if available, otherwise fallback
|
| 122 |
+
alert(e.message || '抽奖失败,请稍后重试');
|
| 123 |
setIsFlipping(false);
|
| 124 |
setActiveCardIndex(null);
|
| 125 |
}
|
server.js
CHANGED
|
@@ -287,6 +287,17 @@ app.post('/api/games/lucky-draw', async (req, res) => {
|
|
| 287 |
const defaultPrize = config?.defaultPrize || '再接再厉';
|
| 288 |
const dailyLimit = config?.dailyLimit || 3;
|
| 289 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 290 |
// 2.5 Daily Limit Check
|
| 291 |
// Only limit if it's a STUDENT drawing for themselves. Teachers/Admins bypass limits.
|
| 292 |
if (userRole === 'STUDENT') {
|
|
@@ -316,8 +327,6 @@ app.post('/api/games/lucky-draw', async (req, res) => {
|
|
| 316 |
await student.save();
|
| 317 |
}
|
| 318 |
|
| 319 |
-
// 3. Global Inventory Check
|
| 320 |
-
const availablePrizes = prizes.filter(p => (p.count === undefined || p.count > 0));
|
| 321 |
// 4. Weighted Random Logic
|
| 322 |
let selectedPrize = defaultPrize;
|
| 323 |
let rewardType = 'CONSOLATION'; // Default to consolation
|
|
|
|
| 287 |
const defaultPrize = config?.defaultPrize || '再接再厉';
|
| 288 |
const dailyLimit = config?.dailyLimit || 3;
|
| 289 |
|
| 290 |
+
// 2.2 PRE-CHECK: Inventory Check
|
| 291 |
+
const availablePrizes = prizes.filter(p => (p.count === undefined || p.count > 0));
|
| 292 |
+
if (availablePrizes.length === 0) {
|
| 293 |
+
// Determine error message based on who is drawing
|
| 294 |
+
const isTeacherOrAdmin = userRole === 'TEACHER' || userRole === 'ADMIN';
|
| 295 |
+
const msg = isTeacherOrAdmin
|
| 296 |
+
? '奖品库存不足,不能抽奖,请先补充库存'
|
| 297 |
+
: '奖品库存不足,不能抽奖,请联系班主任补充库存';
|
| 298 |
+
return res.status(400).json({ error: 'POOL_EMPTY', message: msg });
|
| 299 |
+
}
|
| 300 |
+
|
| 301 |
// 2.5 Daily Limit Check
|
| 302 |
// Only limit if it's a STUDENT drawing for themselves. Teachers/Admins bypass limits.
|
| 303 |
if (userRole === 'STUDENT') {
|
|
|
|
| 327 |
await student.save();
|
| 328 |
}
|
| 329 |
|
|
|
|
|
|
|
| 330 |
// 4. Weighted Random Logic
|
| 331 |
let selectedPrize = defaultPrize;
|
| 332 |
let rewardType = 'CONSOLATION'; // Default to consolation
|