Front End bug fixed

This commit is contained in:
hayano
2024-11-08 08:33:18 +00:00
parent 2bf7d44cd3
commit 4e4bd7ac5d
2 changed files with 54 additions and 20 deletions

View File

@ -518,7 +518,7 @@ class EntryMember(models.Model):
class GoalImages(models.Model): class GoalImages(models.Model):
user=models.ForeignKey(CustomUser, on_delete=models.DO_NOTHING) user=models.ForeignKey(CustomUser, on_delete=models.DO_NOTHING)
goalimage = models.FileField(upload_to='goals/%y%m%d', blank=True, null=True) goalimage = models.FileField(upload_to='goals/%y%m%d', blank=True, null=True)
goaltime = models.DateTimeField(_("Goal time"), auto_now=False, auto_now_add=False) goaltime = models.DateTimeField(_("Goal time"), blank=True, null=True,auto_now=False, auto_now_add=False)
team_name = models.CharField(_("Team name"), max_length=255) team_name = models.CharField(_("Team name"), max_length=255)
event_code = models.CharField(_("event code"), max_length=255) event_code = models.CharField(_("event code"), max_length=255)
cp_number = models.IntegerField(_("CP numner")) cp_number = models.IntegerField(_("CP numner"))

View File

@ -245,15 +245,12 @@
const display = document.getElementById('goalTimeDisplay'); const display = document.getElementById('goalTimeDisplay');
const validateElement = document.getElementById('validate'); const validateElement = document.getElementById('validate');
setLatePoint(0);
if (!display) { if (!display) {
console.error('Goal time display element not found'); console.error('Goal time display element not found');
return; return;
} }
try {
const newTime = new Date(input.value);
// inputがnullの場合は棄権処理
if (!input) { if (!input) {
const validateElement = document.getElementById('validate'); const validateElement = document.getElementById('validate');
display.textContent = '棄権'; display.textContent = '棄権';
@ -263,8 +260,32 @@
return; return;
} }
display.textContent = newTime.toLocaleString(); const newTime = new Date(input.value);
updateValidationWithGoalTime(newTime)
display.classList.remove('hidden');
input.classList.add('hidden');
}
function updateValidationWithGoalTime(goaltime) {
const display = document.getElementById('goalTimeDisplay');
if (!goaltime) {
const validateElement = document.getElementById('validate');
display.textContent = '棄権';
if (validateElement) {
validateElement.textContent = '棄権';
}
return 0;
}
try {
const newTime = new Date(goaltime);
display.textContent = newTime.toLocaleString();
let late_point = 0;
const eventCodeSelect = document.getElementById('eventCode'); const eventCodeSelect = document.getElementById('eventCode');
const event_code = eventCodeSelect.value; const event_code = eventCodeSelect.value;
const zekkenNumberSelect = document.getElementById('zekkenNumber'); const zekkenNumberSelect = document.getElementById('zekkenNumber');
@ -305,6 +326,8 @@
lateElement.classList.remove('text-red-600'); lateElement.classList.remove('text-red-600');
} }
} }
console.info('latePoint update=',late_point);
calculatePoints(late_point); // 総合ポイントの計算
}) })
.catch(error => handleApiError(error)); .catch(error => handleApiError(error));
@ -314,7 +337,7 @@
const timeDiff = (newTime - startTime) / 1000; // 分単位の差 const timeDiff = (newTime - startTime) / 1000; // 分単位の差
const maxTime = team.duration + 15*60; // 制限時間+15分 const maxTime = team.duration + 15*60; // 制限時間+15分
//console.info('startTime=',startTime,',goalTime=',newTime,',timeDiff=',timeDiff,'duration=',team.duration,',maxTime=',maxTime); console.info('startTime=',startTime,',goalTime=',newTime,',timeDiff=',timeDiff,'duration=',team.duration,',maxTime=',maxTime);
updateValidation(timeDiff, maxTime ); updateValidation(timeDiff, maxTime );
// 1秒でも遅刻すると、1分につき-50点 // 1秒でも遅刻すると、1分につき-50点
@ -331,22 +354,26 @@
lateElement.classList.remove('text-red-600'); lateElement.classList.remove('text-red-600');
} }
} }
console.info('latePoint update=',late_point);
calculatePoints(late_point); // 総合ポイントの計算
}); });
calculatePoints(); // 総合ポイントの計算 return late_point;
} catch (e) { } catch (e) {
console.error('Error updating goal time:', e); console.error('Error updating goal time:', e);
alert('無効な日時形式です。'); alert('無効な日時形式です。');
return; return 0;
} }
display.classList.remove('hidden');
input.classList.add('hidden');
} }
function setLatePoint(points){
const lateElement = document.getElementById('latePoints');
lateElement.textContent = points;
}
// 判定の更新を行う補助関数 // 判定の更新を行う補助関数
function updateValidation(timeDiff, maxTime) { function updateValidation(timeDiff, maxTime) {
//console.log('updateValidation',timeDiff,' > ',maxTime) console.log('updateValidation:',timeDiff,' > ',maxTime)
const validateElement = document.getElementById('validate'); const validateElement = document.getElementById('validate');
if (validateElement) { if (validateElement) {
if (timeDiff > maxTime) { if (timeDiff > maxTime) {
@ -439,7 +466,7 @@
if (!checkinsResponse.ok) if (!checkinsResponse.ok)
throw new Error(`Checkins fetch failed with status ${checkinsResponse.status}`); throw new Error(`Checkins fetch failed with status ${checkinsResponse.status}`);
setLatePoint(0);
const teamData = await teamResponse.json(); const teamData = await teamResponse.json();
const checkinsData = await checkinsResponse.json(); const checkinsData = await checkinsResponse.json();
@ -447,6 +474,8 @@
updateGoalTimeDisplay(teamData.end_datetime); updateGoalTimeDisplay(teamData.end_datetime);
original_goal_time = teamData.end_datetime; original_goal_time = teamData.end_datetime;
latePoint = updateValidationWithGoalTime(teamData.end_datetime);
// イベントコードに対応するイベントを検索 // イベントコードに対応するイベントを検索
//const event = eventData.find(e => e.code === document.getElementById('eventCode').value); //const event = eventData.find(e => e.code === document.getElementById('eventCode').value);
@ -459,12 +488,14 @@
//'(未ゴール)'; //'(未ゴール)';
const goalTimeDisplay = document.getElementById('goalTimeDisplay'); const goalTimeDisplay = document.getElementById('goalTimeDisplay');
console.info('teamData=',teamData)
console.info('end_datetime=',teamData.end_datetime)
const goalTime = teamData.end_datetime ? const goalTime = teamData.end_datetime ?
new Date(teamData.end_datetime).toLocaleString() : new Date(teamData.end_datetime).toLocaleString() :
'未ゴール'; '未ゴール';
goalTimeDisplay.textContent = goalTime; goalTimeDisplay.textContent = goalTime;
updateGoalTime(goalTime) // ゴール時刻の表示を更新 //updateGoalTime(teamData.end_datetime) // ゴール時刻の表示を更新
console.info('teamData.goal_photo = ',teamData.goal_photo ); console.info('teamData.goal_photo = ',teamData.goal_photo );
@ -572,7 +603,7 @@
//document.getElementById('finalPoints').textContent = //document.getElementById('finalPoints').textContent =
// totalPoints + buyPoints + (teamData.late_points || 0); // totalPoints + buyPoints + (teamData.late_points || 0);
calculatePoints(); // 総合ポイントの計算 calculatePoints(latePoint); // 総合ポイントの計算
} catch (error) { } catch (error) {
console.error('Error loading team info:', error); console.error('Error loading team info:', error);
@ -1007,13 +1038,12 @@ function applyImageOrientation(imgElement) {
} }
// 総合ポイントの計算 // 総合ポイントの計算
function calculatePoints() { function calculatePoints(latePoints=0) {
//console.info('calculatePoints'); //console.info('calculatePoints');
const rows = Array.from(document.getElementById('checkinList').children); const rows = Array.from(document.getElementById('checkinList').children);
let totalPoints = 0; // チェックインポイントの合計をクリア let totalPoints = 0; // チェックインポイントの合計をクリア
let cpPoints = 0; // チェックインポイントの合計をクリア let cpPoints = 0; // チェックインポイントの合計をクリア
let buyPoints = 0; // 買い物ポイントの合計をクリア let buyPoints = 0; // 買い物ポイントの合計をクリア
let latePoints = 0; // 遅刻ポイントの合計をクリア
// 各行のチェックインポイント及び買い物ポイントを合算 // 各行のチェックインポイント及び買い物ポイントを合算
rows.forEach(row => { rows.forEach(row => {
@ -1031,12 +1061,16 @@ function applyImageOrientation(imgElement) {
}); });
// 遅刻ポイントの計算=ゴール時刻がEventのゴール時刻を超えていたら分につき-50点を加算する。 // 遅刻ポイントの計算=ゴール時刻がEventのゴール時刻を超えていたら分につき-50点を加算する。
latePoints = parseInt(document.getElementById('latePoints').textContent) || 0;
if (latePoints===0){
console.info('latePoints=',document.getElementById('latePoints').textContent);
latePoints = parseInt(document.getElementById('latePoints').textContent) || 0;
}
// 総合得点を計算 // 総合得点を計算
const finalPoints = totalPoints + latePoints; const finalPoints = totalPoints + latePoints;
// 判定を更新。順位を表示、ゴール時刻を15分経過したら失格 // 判定を更新。順位を表示、ゴール時刻を15分経過したら失格
//console.info('calculatePoints:totalPoints=',cpPoints,',buyPoints=',buyPoints,',finalPoints=',finalPoints); console.info('calculatePoints:totalPoints=',cpPoints,',buyPoints=',buyPoints,',latePoints=',latePoints,',finalPoints=',finalPoints);
document.getElementById('totalPoints').textContent = cpPoints; document.getElementById('totalPoints').textContent = cpPoints;
document.getElementById('buyPoints').textContent = buyPoints; document.getElementById('buyPoints').textContent = buyPoints;