|
1 | 1 | <script lang="ts" setup>
|
| 2 | +import ProjectCardCompact from "~/components/ProjectCardCompact.vue"; |
| 3 | +import events from "~/assets/data/events.json"; |
| 4 | +import type { EventSummary } from "~/model/event"; |
| 5 | +
|
| 6 | +// idに対応するcardを表示 |
| 7 | +
|
2 | 8 | interface RankingData {
|
3 | 9 | FOOD: number[];
|
4 | 10 | EXHIBITION: number[];
|
5 | 11 | PERFORMANCE: number[];
|
| 12 | + DRINK: number[]; |
| 13 | + VISUAL: number[]; |
| 14 | + UPDATED: string; |
6 | 15 | }
|
7 | 16 |
|
8 |
| -// const rankingData = await useFetch("/api/contest").then((res) => { |
9 |
| -// if ( |
10 |
| -// res.data.value.FOOD && |
11 |
| -// res.data.value.EXHIBITION && |
12 |
| -// res.data.value.PERFORMANCE |
13 |
| -// ) { |
14 |
| -// return res.data.value as RankingData; |
15 |
| -// } |
16 |
| -// return null; |
17 |
| -// }); |
| 17 | +const rankingData = await useFetch("/api/contest").then((res) => { |
| 18 | + if ( |
| 19 | + res.data.value.FOOD && |
| 20 | + res.data.value.EXHIBITION && |
| 21 | + res.data.value.PERFORMANCE |
| 22 | + ) { |
| 23 | + return res.data.value as RankingData; |
| 24 | + } |
| 25 | + return null; |
| 26 | +}); |
18 | 27 |
|
19 | 28 | useHead({
|
20 | 29 | title: "企画コンテスト | 23常盤祭公式HP~未来航路~",
|
@@ -70,28 +79,63 @@ gtag("event", "screen_view", {
|
70 | 79 | </ul>
|
71 | 80 | 全企画が対象で見た目を観点に投票します。Xを用いて投票をお願いします。写真をたくさん撮ろう!
|
72 | 81 | </div>
|
73 |
| - <SectionTitle text="結果発表" /> |
74 |
| - <div class="result-description">中間発表はこれから!!お楽しみに!!</div> |
75 |
| - <!-- <table class="result-table">--> |
76 |
| - <!-- <tr>--> |
77 |
| - <!-- <td>順位</td>--> |
78 |
| - <!-- <td>飲食部門</td>--> |
79 |
| - <!-- <td></td>--> |
80 |
| - <!-- <td>縦方向のセルの並び</td>--> |
81 |
| - <!-- </tr>--> |
82 |
| - <!-- <tr>--> |
83 |
| - <!-- <td>第1位</td>--> |
84 |
| - <!-- <td>意味</td>--> |
85 |
| - <!-- </tr>--> |
86 |
| - <!-- <tr>--> |
87 |
| - <!-- <td>第2位</td>--> |
88 |
| - <!-- <td>表の中の1つ1つの項目</td>--> |
89 |
| - <!-- </tr>--> |
90 |
| - <!-- <tr>--> |
91 |
| - <!-- <td>第3位</td>--> |
92 |
| - <!-- <td>横方向のセルの並び</td>--> |
93 |
| - <!-- </tr>--> |
94 |
| - <!-- </table>--> |
| 82 | + <SponsorsListTitle text="中間結果発表" /> |
| 83 | + <div v-if="rankingData" class="result-table-section"> |
| 84 | + <h2>{{ rankingData.UPDATED }} 更新</h2> |
| 85 | + <div class="result-table-holder"> |
| 86 | + <table class="result-table"> |
| 87 | + <tr> |
| 88 | + <td>順位</td> |
| 89 | + <td>第1位</td> |
| 90 | + <td>第2位</td> |
| 91 | + <td>第3位</td> |
| 92 | + </tr> |
| 93 | + <tr> |
| 94 | + <td>飲食</td> |
| 95 | + <td v-for="(e, index) in rankingData.FOOD" :key="index"> |
| 96 | + <ProjectCardCompact |
| 97 | + :event-data="events.find((s: EventSummary) => s.id === e)" |
| 98 | + /> |
| 99 | + </td> |
| 100 | + </tr> |
| 101 | + <tr> |
| 102 | + <td>展示・物販</td> |
| 103 | + <td v-for="(e, index) in rankingData.EXHIBITION" :key="index"> |
| 104 | + <ProjectCardCompact |
| 105 | + :event-data="events.find((s: EventSummary) => s.id === e)" |
| 106 | + /> |
| 107 | + </td> |
| 108 | + </tr> |
| 109 | + <tr> |
| 110 | + <td>パフォーマンス</td> |
| 111 | + <td v-for="(e, index) in rankingData.PERFORMANCE" :key="index"> |
| 112 | + <ProjectCardCompact |
| 113 | + :event-data="events.find((s: EventSummary) => s.id === e)" |
| 114 | + /> |
| 115 | + </td> |
| 116 | + </tr> |
| 117 | + <tr> |
| 118 | + <td>オリジナルドリンク</td> |
| 119 | + <td v-for="(e, index) in rankingData.DRINK" :key="index"> |
| 120 | + <ProjectCardCompact |
| 121 | + :event-data="events.find((s: EventSummary) => s.id === e)" |
| 122 | + /> |
| 123 | + </td> |
| 124 | + </tr> |
| 125 | + <tr> |
| 126 | + <td>ビジュアル</td> |
| 127 | + <td v-for="(e, index) in rankingData.VISUAL" :key="index"> |
| 128 | + <ProjectCardCompact |
| 129 | + :event-data="events.find((s: EventSummary) => s.id === e)" |
| 130 | + /> |
| 131 | + </td> |
| 132 | + </tr> |
| 133 | + </table> |
| 134 | + </div> |
| 135 | + </div> |
| 136 | + <div v-else class="result-description"> |
| 137 | + 中間発表はこれから!!お楽しみに!! |
| 138 | + </div> |
95 | 139 | </div>
|
96 | 140 | <BackToHome />
|
97 | 141 | </div>
|
@@ -157,21 +201,44 @@ gtag("event", "screen_view", {
|
157 | 201 | }
|
158 | 202 | }
|
159 | 203 |
|
160 |
| -.section-title { |
161 |
| - align-self: center; |
162 |
| - width: 500px !important; |
163 |
| - font-size: 2em !important; |
164 |
| - @include md { |
165 |
| - align-self: flex-start; |
| 204 | +.result-description { |
| 205 | + font-size: 1.3em; |
| 206 | + text-align: center; |
| 207 | +} |
| 208 | +
|
| 209 | +.result-table-section { |
| 210 | + text-align: center; |
| 211 | +
|
| 212 | + > h2 { |
| 213 | + font-size: 1.5em; |
| 214 | + margin: 1em 0; |
166 | 215 | }
|
167 | 216 | }
|
168 | 217 |
|
169 |
| -.result-description { |
170 |
| - font-size: 1.3em; |
| 218 | +.result-table-holder { |
171 | 219 | text-align: center;
|
| 220 | + overflow-x: scroll; |
172 | 221 | }
|
173 | 222 |
|
174 |
| -.result-table { |
| 223 | +tr { |
| 224 | + td { |
| 225 | + padding: 0.5em 1.5em 1.5em 0.5em; |
| 226 | + border: 2px solid var(--thick-font-color); |
| 227 | +
|
| 228 | + &:first-child { |
| 229 | + padding: 0; |
| 230 | + vertical-align: middle; |
| 231 | + min-width: 10em; |
| 232 | + } |
| 233 | + } |
| 234 | +
|
| 235 | + &:first-child { |
| 236 | + td { |
| 237 | + padding: 0; |
| 238 | + vertical-align: middle; |
| 239 | + line-height: 2em; |
| 240 | + } |
| 241 | + } |
175 | 242 | }
|
176 | 243 |
|
177 | 244 | .back-button {
|
|
0 commit comments