1
1
<script setup lang="ts">
2
2
import { createError , useAsyncData , useHead , useRoute , useSponsor } from ' #imports'
3
- import type { Speaker , Sponsor } from ' @vuejs-jp/model'
3
+ import type { Job , Speaker , Sponsor } from ' @vuejs-jp/model'
4
4
import { useLocaleCurrent } from ' ~/composables/useLocaleCurrent'
5
5
import { useSupabase } from ' ~/composables/useSupabase'
6
6
import { conferenceTitle , linkUrl , ogSponsorDescription } from ' ~/utils/constants'
@@ -28,6 +28,12 @@ const { data: speakers } = await useAsyncData('speakers', async () => {
28
28
29
29
const speakerData = speakers .value ?.data as Speaker []
30
30
31
+ const { data : jobs } = await useAsyncData (' jobs' , async () => {
32
+ return await fetchData (' jobs' , { sponsorId: sponsorData [0 ].id })
33
+ })
34
+
35
+ const jobData = jobs .value ?.data as Job []
36
+
31
37
const currentLocale = useLocaleCurrent ().locale
32
38
const { color, borderColor } = useSponsor ()
33
39
@@ -84,6 +90,9 @@ useHead({
84
90
</div >
85
91
86
92
<div v-if =" sponsorData[0].speaker_id" class =" detailbody-persons" >
93
+ <h3 class =" sponsor-subtitle" >
94
+ {{ `${sponsorData[0].name}のスポンサーセッション` }}
95
+ </h3 >
87
96
<VFSpeaker
88
97
:image =" speakerData[0].image_url"
89
98
:company =" currentLocale === 'en' ? speakerData[0].caption_en : speakerData[0].caption_ja"
@@ -97,6 +106,15 @@ useHead({
97
106
</div >
98
107
</div >
99
108
109
+ <div v-if =" jobData.length !== 0" class =" detailbody-jobboard" >
110
+ <h3 class =" sponsor-subtitle" >
111
+ {{ `${sponsorData[0].name}のジョブボード` }}
112
+ </h3 >
113
+ <nuxt-link :to =" jobData[0].link_url" target =" _blank" >
114
+ <img :src =" jobData[0].image_url" :alt =" jobData[0].image_alt" />
115
+ </nuxt-link >
116
+ </div >
117
+
100
118
<div class =" back" >
101
119
<VFLinkButton
102
120
class =" back-action"
@@ -173,6 +191,7 @@ useHead({
173
191
margin-top : calc (var (--unit ) * 4 );
174
192
color : #292C33 ;
175
193
gap : calc (var (--unit ) * 5 );
194
+ padding : calc (var (--unit ) * 2.5 ) 0 calc (var (--unit ) * 5 );
176
195
}
177
196
178
197
.detailhead-body ::v-deep(a ) {
@@ -245,11 +264,25 @@ useHead({
245
264
}
246
265
}
247
266
267
+ .sponsor-subtitle {
268
+ --sponsor-subtitle-font-size : 2rem ;
269
+ --sponsor-subtitle-font-weight : 700 ;
270
+
271
+ font-size : var (--sponsor-subtitle-font-size );
272
+ font-weight : var (--sponsor-subtitle-font-weight );
273
+ line-height : normal ;
274
+ background : var (--color-vue-green-gradation );
275
+ background-clip : text ;
276
+ color : transparent ;
277
+ }
278
+
248
279
.detailbody-persons {
249
280
font-size : 18px ;
250
281
display : grid ;
251
282
grid-template-columns : auto 1fr ;
252
283
gap : calc (var (--unit ) * 4 );
284
+ padding : calc (var (--unit ) * 5 ) 0 ;
285
+ border-top : 1px solid rgba (0 , 0 , 0 , 0.2 );
253
286
}
254
287
255
288
.detailbody-persons ::v-deep(img ) {
@@ -278,6 +311,20 @@ useHead({
278
311
transition : 0.2s ;
279
312
}
280
313
314
+ .detailbody-jobboard {
315
+ display : grid ;
316
+ gap : calc (var (--unit ) * 2.5 );
317
+ padding : calc (var (--unit ) * 5 ) 0 ;
318
+ border-top : 1px solid rgba (0 , 0 , 0 , 0.2 );
319
+ }
320
+
321
+ .detailbody-jobboard ::v-deep(a ) {
322
+ width : 460px ;
323
+
324
+ @media (--mobile ) {
325
+ width : 100% ;
326
+ }
327
+ }
281
328
282
329
.back {
283
330
margin : 40px auto 0 ;
0 commit comments