Skip to content

Commit 59fed79

Browse files
authored
Merge pull request #16 from ut-code/lv5
Lv5
2 parents 10e4b34 + 344942f commit 59fed79

File tree

15 files changed

+399
-1
lines changed

15 files changed

+399
-1
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<!DOCTYPE html>
2+
<html lang="ja">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>管理者ページ</title>
7+
<link rel="stylesheet" href="style.css" />
8+
<script type="module" src="script.mjs" defer></script>
9+
</head>
10+
<body class="admin">
11+
<header>
12+
<h1>管理者ページ</h1>
13+
<nav>
14+
<a href="index.html">ホームへ戻る</a>
15+
</nav>
16+
</header>
17+
18+
<main>
19+
<section id="admin-login">
20+
<h2>ログイン</h2>
21+
<input type="password" id="admin-pass" placeholder="パスワードを入力" />
22+
<button id="login-btn" disabled>ログイン</button>
23+
<br>
24+
<p>※現在メンテナンス中につきログインボタンを無効化しています。ご了承ください。</p>
25+
<p id="login-msg"></p>
26+
</section>
27+
28+
<section id="admin-panel" class="hidden">
29+
<h2>チケット予約管理</h2>
30+
<button id="toggle-ticket">チケット予約を解禁する</button>
31+
<p id="ticket-state"></p>
32+
</section>
33+
</main>
34+
35+
<footer>
36+
<p>©2025 ut.code(); 当サイトのコンテンツはフィクションであり、実際の商品・会社とは一切関係ありません。</p>
37+
</footer>
38+
</body>
39+
</html>
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<!DOCTYPE html>
2+
<html lang="ja">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>Summer Rock Live</title>
7+
<link rel="stylesheet" href="style.css" />
8+
<script type="module" src="script.mjs" defer></script>
9+
</head>
10+
<body>
11+
<header>
12+
<h1>Summer Rock Live</h1>
13+
<nav>
14+
<a href="index.html">ホーム</a>
15+
<a href="#overview">概要</a>
16+
<a href="#venue">会場</a>
17+
<a href="#price">料金</a>
18+
<a href="#review">レビュー</a>
19+
<a href="admin.html">管理者ページ</a>
20+
</nav>
21+
</header>
22+
23+
<main>
24+
<section id="overview">
25+
<h2>イベント概要</h2>
26+
<p>この夏、ロックで盛り上がろう!!!</p>
27+
<p>20名の豪華バンドを招待!!</p>
28+
</section>
29+
30+
<section id="venue">
31+
<h2>会場情報</h2>
32+
<p>岩ホール(東京都世畑山区代替1-2-3)</p>
33+
<p>最寄り駅:宇の足線 湖ノ下駅 徒歩5分</p>
34+
</section>
35+
36+
<section id="price">
37+
<h2>料金</h2>
38+
<ul>
39+
<li>一般:20,000円</li>
40+
<li>学生(高校生以下):10,000円</li>
41+
<li>児童(未就学児):無料</li>
42+
</ul>
43+
</section>
44+
45+
<section id="ticket">
46+
<h2>チケット予約</h2>
47+
<div id="ticket-status" class="off">
48+
現在チケット予約は受付を停止しています。
49+
</div>
50+
<form id="ticket-form" class="hidden">
51+
<label for="user-name">名前:</label>
52+
<input type="text" id="user-name" required>
53+
<label for="user-email">メールアドレス:</label>
54+
<input type="email" id="user-email" required>
55+
<button type="submit">予約する</button>
56+
</form>
57+
</section>
58+
59+
<section id="review">
60+
<h2>レビュー</h2>
61+
<blockquote>
62+
「懐かしいバンドもあって良かった。若い頃聞いていたあの曲を、現代バンドのカバーで聞くのも悪くないと思った。」 — 50代男性
63+
</blockquote>
64+
<blockquote>
65+
「一昔前の曲と触れ合ういい機会になった。盛り上がりはどこのライブにも負けてない!」 — 20代女性
66+
</blockquote>
67+
</section>
68+
</main>
69+
70+
<footer>
71+
<p>©2025 ut.code(); 当サイトのコンテンツはフィクションであり、実際の商品・会社とは一切関係ありません。</p>
72+
</footer>
73+
</body>
74+
</html>
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// --- 設定 ---
2+
const ADMIN_PASSWORD = "GekiA2Rock"; // 管理者パスワード
3+
4+
// --- ページ判定 ---
5+
const path = window.location.pathname;
6+
7+
if (path.includes("admin.html")) {
8+
initAdminPage();
9+
} else if (path.includes("index.html") || path.endsWith("/")) {
10+
initUserPage();
11+
}
12+
13+
// --- 管理者ページ処理 ---
14+
function initAdminPage() {
15+
const loginBtn = document.getElementById("login-btn");
16+
const loginMsg = document.getElementById("login-msg");
17+
const adminPanel = document.getElementById("admin-panel");
18+
const loginSection = document.getElementById("admin-login");
19+
const toggleBtn = document.getElementById("toggle-ticket");
20+
const ticketState = document.getElementById("ticket-state");
21+
22+
// ロード時にパネルは完全非表示
23+
adminPanel.style.display = "none";
24+
25+
loginBtn?.addEventListener("click", () => {
26+
const input = document.getElementById("admin-pass").value.trim();
27+
if (input === ADMIN_PASSWORD) {
28+
loginMsg.textContent = "ログイン成功しました";
29+
loginMsg.style.color = "lightgreen";
30+
31+
// ログインフォーム非表示、パネル表示
32+
loginSection.style.display = "none";
33+
adminPanel.style.display = "block";
34+
adminPanel.classList.remove("hidden");
35+
updateTicketStateText();
36+
} else {
37+
loginMsg.textContent = "パスワードが違います";
38+
loginMsg.style.color = "tomato";
39+
}
40+
});
41+
42+
toggleBtn?.addEventListener("click", () => {
43+
const current = localStorage.getItem("ticketOpen") === "true";
44+
localStorage.setItem("ticketOpen", (!current).toString());
45+
updateTicketStateText();
46+
});
47+
48+
function updateTicketStateText() {
49+
const open = localStorage.getItem("ticketOpen") === "true";
50+
ticketState.textContent = open
51+
? "現在チケット予約は解禁中です。"
52+
: "現在チケット予約は停止中です。";
53+
toggleBtn.textContent = open
54+
? "チケット予約を停止する"
55+
: "チケット予約を解禁する";
56+
}
57+
}
58+
59+
// --- 一般ページ処理 ---
60+
function initUserPage() {
61+
const open = localStorage.getItem("ticketOpen") === "true";
62+
const ticketStatus = document.getElementById("ticket-status");
63+
const ticketForm = document.getElementById("ticket-form");
64+
65+
if (open) {
66+
ticketStatus.textContent = "チケット予約を受付中です!";
67+
ticketStatus.classList.remove("off");
68+
ticketStatus.classList.add("on");
69+
ticketForm.classList.remove("hidden");
70+
} else {
71+
ticketStatus.textContent = "現在チケット予約は受付を停止しています。";
72+
ticketStatus.classList.remove("on");
73+
ticketStatus.classList.add("off");
74+
ticketForm.classList.add("hidden");
75+
}
76+
77+
ticketForm?.addEventListener("submit", (e) => {
78+
e.preventDefault();
79+
alert("予約を受け付けました!");
80+
ticketForm.reset();
81+
});
82+
}

0 commit comments

Comments
 (0)