Skip to content

Commit 8949439

Browse files
committed
Merge branch 'contest-announce' into stg
2 parents 4c1d53e + 3b5e10c commit 8949439

File tree

3 files changed

+141
-52
lines changed

3 files changed

+141
-52
lines changed

components/ProjectCardCompact.vue

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@ import { Genre, genreToString, getTagColor } from "~/model/genre";
33
import { Area, placeToString } from "~/model/area";
44
55
const props = defineProps<{
6-
eventData: {
7-
id: number;
8-
e_name: string;
9-
e_genre: Genre;
10-
o_name: string;
11-
area: Area;
12-
p_name: string;
13-
};
6+
eventData:
7+
| {
8+
id: number;
9+
e_name: string;
10+
e_genre: Genre;
11+
o_name: string;
12+
area: Area;
13+
p_name: string;
14+
}
15+
| null
16+
| undefined;
1417
}>();
1518
const showNoImage = function (e: any) {
1619
e.target.src =
@@ -27,7 +30,7 @@ const eventTagStyle = (genre: Genre) => {
2730
</script>
2831

2932
<template>
30-
<div class="project-card">
33+
<div class="project-card" v-if="props.eventData">
3134
<div class="incline-card">
3235
<img
3336
:src="iconURL"
@@ -39,7 +42,7 @@ const eventTagStyle = (genre: Genre) => {
3942
<p class="event-name">{{ props.eventData.e_name }}</p>
4043
<hr class="line" />
4144
<p class="org-name">{{ props.eventData.o_name }}</p>
42-
<p class="genre" :style="eventTagStyle(props.eventData.e_genre)">
45+
<p :style="eventTagStyle(props.eventData.e_genre)" class="genre">
4346
{{ genreToString(props.eventData.e_genre) }}
4447
</p>
4548
<p class="place">

pages/sp/contest.vue

Lines changed: 108 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
11
<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+
28
interface RankingData {
39
FOOD: number[];
410
EXHIBITION: number[];
511
PERFORMANCE: number[];
12+
DRINK: number[];
13+
VISUAL: number[];
14+
UPDATED: string;
615
}
716
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+
});
1827
1928
useHead({
2029
title: "企画コンテスト | 23常盤祭公式HP~未来航路~",
@@ -70,28 +79,63 @@ gtag("event", "screen_view", {
7079
</ul>
7180
全企画が対象で見た目を観点に投票します。Xを用いて投票をお願いします。写真をたくさん撮ろう!
7281
</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>
95139
</div>
96140
<BackToHome />
97141
</div>
@@ -157,21 +201,44 @@ gtag("event", "screen_view", {
157201
}
158202
}
159203
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;
166215
}
167216
}
168217
169-
.result-description {
170-
font-size: 1.3em;
218+
.result-table-holder {
171219
text-align: center;
220+
overflow-x: scroll;
172221
}
173222
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+
}
175242
}
176243
177244
.back-button {

server/contest.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ function doGet(e) {
1515
C[0] = sheet[4][1];
1616
C[1] = sheet[4][2];
1717
C[2] = sheet[4][3];
18+
const D = [];
19+
D[0] = sheet[5][1];
20+
D[1] = sheet[5][2];
21+
D[2] = sheet[5][3];
22+
const E = [];
23+
E[0] = sheet[6][1];
24+
E[1] = sheet[6][2];
25+
E[2] = sheet[6][3];
1826
// check validity
1927
if (
2028
!A[0] ||
@@ -25,7 +33,13 @@ function doGet(e) {
2533
!B[2] ||
2634
!C[0] ||
2735
!C[1] ||
28-
!C[2]
36+
!C[2] ||
37+
!D[0] ||
38+
!D[1] ||
39+
!D[2] ||
40+
!E[0] ||
41+
!E[1] ||
42+
!E[2]
2943
) {
3044
return respond({});
3145
}
@@ -35,11 +49,16 @@ function doGet(e) {
3549
A[i] = resolveEventNum(A[i]);
3650
B[i] = resolveEventNum(B[i]);
3751
C[i] = resolveEventNum(C[i]);
52+
D[i] = resolveEventNum(D[i]);
53+
E[i] = resolveEventNum(E[i]);
3854
}
3955
return respond({
4056
FOOD: A,
4157
EXHIBITION: B,
4258
PERFORMANCE: C,
59+
DRINK: D,
60+
VISUAL: E,
61+
UPDATED: sheet[7][1],
4362
});
4463
}
4564

0 commit comments

Comments
 (0)