|
@@ -1,32 +1,31 @@
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
-import { transportationMode } from '@/components/TransportationMode'
|
|
|
|
|
|
|
+import { transportationMode } from '@/components/transportationMode'
|
|
|
import { useRouter } from 'vue-router'
|
|
import { useRouter } from 'vue-router'
|
|
|
|
|
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
|
|
|
|
|
|
interface EventCardPropsData {
|
|
interface EventCardPropsData {
|
|
|
type: string // 'milestone' | 'container' | 'delay' | 'change'
|
|
type: string // 'milestone' | 'container' | 'delay' | 'change'
|
|
|
- isMultiple?: boolean
|
|
|
|
|
- numericRecords?: number // 多条记录数
|
|
|
|
|
- isRead: boolean // 是否已读
|
|
|
|
|
- title?: string
|
|
|
|
|
|
|
+ numericRecords?: number // 多条记录数 (Daily Update消息)
|
|
|
|
|
+ isRead: boolean // 是否已读 (true 已读,false 未读)
|
|
|
|
|
+ title?: string // Milestone Update
|
|
|
mode?: string // 运输方式
|
|
mode?: string // 运输方式
|
|
|
no: string // HBOL: SHJN2301234
|
|
no: string // HBOL: SHJN2301234
|
|
|
- tag: string // tag
|
|
|
|
|
|
|
+ tag: string // tag Booking Confirmed
|
|
|
location: string
|
|
location: string
|
|
|
- delayInfo?: {
|
|
|
|
|
- departureDelayNum?: number
|
|
|
|
|
- arrivalDelayNum?: number
|
|
|
|
|
- delayTime: string
|
|
|
|
|
- }
|
|
|
|
|
- changeInfo?: {
|
|
|
|
|
|
|
+ timezone?: string // 时区
|
|
|
|
|
+ time: string
|
|
|
|
|
+ previous?: string
|
|
|
|
|
+ info?: {
|
|
|
|
|
+ route?: []
|
|
|
etdChangeNum?: number
|
|
etdChangeNum?: number
|
|
|
etaChangeNum?: number
|
|
etaChangeNum?: number
|
|
|
- changeTime: string
|
|
|
|
|
|
|
+ time: string
|
|
|
|
|
+ departureDelayNum?: number
|
|
|
|
|
+ arrivalDelayNum?: number
|
|
|
|
|
+ timezone?: string // 时区
|
|
|
|
|
+ leg?: []
|
|
|
}
|
|
}
|
|
|
- changeTime?: string
|
|
|
|
|
- time: string
|
|
|
|
|
- previous?: string
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const props = defineProps<{
|
|
const props = defineProps<{
|
|
@@ -62,20 +61,17 @@ const handleSeeAll = (data: any) => {
|
|
|
</div>
|
|
</div>
|
|
|
<div
|
|
<div
|
|
|
class="more-tips"
|
|
class="more-tips"
|
|
|
- v-if="
|
|
|
|
|
- data.type === 'delay' &&
|
|
|
|
|
- (data.delayInfo.departureDelayNum || data.delayInfo.arrivalDelayNum)
|
|
|
|
|
- "
|
|
|
|
|
|
|
+ v-if="data.type === 'delay' && (data.info.departureDelayNum || data.info.arrivalDelayNum)"
|
|
|
>
|
|
>
|
|
|
<div>
|
|
<div>
|
|
|
- <span v-if="data.delayInfo.departureDelayNum"
|
|
|
|
|
- >Departure Delay ({{ data.delayInfo.departureDelayNum }})</span
|
|
|
|
|
|
|
+ <span v-if="data.info.departureDelayNum"
|
|
|
|
|
+ >Departure Delay ({{ data.info.departureDelayNum }})</span
|
|
|
>
|
|
>
|
|
|
- <span v-if="data.delayInfo.departureDelayNum && data.delayInfo.arrivalDelayNum">
|
|
|
|
|
|
|
+ <span v-if="data.info.departureDelayNum && data.info.arrivalDelayNum">
|
|
|
| </span
|
|
| </span
|
|
|
>
|
|
>
|
|
|
- <span v-if="data.delayInfo.arrivalDelayNum">
|
|
|
|
|
- Arrival Delay ({{ data.delayInfo.arrivalDelayNum }})
|
|
|
|
|
|
|
+ <span v-if="data.info.arrivalDelayNum">
|
|
|
|
|
+ Arrival Delay ({{ data.info.arrivalDelayNum }})
|
|
|
</span>
|
|
</span>
|
|
|
</div>
|
|
</div>
|
|
|
<el-button @click="handleSeeAll(data)" class="see-all-icon el-button--text">
|
|
<el-button @click="handleSeeAll(data)" class="see-all-icon el-button--text">
|
|
@@ -86,20 +82,14 @@ const handleSeeAll = (data: any) => {
|
|
|
|
|
|
|
|
<div
|
|
<div
|
|
|
class="more-tips"
|
|
class="more-tips"
|
|
|
- v-if="
|
|
|
|
|
- data.type === 'change' && (data.changeInfo.etdChangeNum || data.changeInfo.etaChangeNum)
|
|
|
|
|
- "
|
|
|
|
|
|
|
+ v-if="data.type === 'change' && (data.info.etdChangeNum || data.info.etaChangeNum)"
|
|
|
>
|
|
>
|
|
|
<div>
|
|
<div>
|
|
|
- <span v-if="data.changeInfo.etdChangeNum"
|
|
|
|
|
- >ETD Change ({{ data.changeInfo.etdChangeNum }})</span
|
|
|
|
|
- >
|
|
|
|
|
- <span v-if="data.changeInfo.etdChangeNum && data.changeInfo.etaChangeNum">
|
|
|
|
|
|
|
+ <span v-if="data.info.etdChangeNum">ETD Change ({{ data.info.etdChangeNum }})</span>
|
|
|
|
|
+ <span v-if="data.info.etdChangeNum && data.info.etaChangeNum">
|
|
|
| </span
|
|
| </span
|
|
|
>
|
|
>
|
|
|
- <span v-if="data.changeInfo.etaChangeNum">
|
|
|
|
|
- ETA Change ({{ data.changeInfo.etaChangeNum }})
|
|
|
|
|
- </span>
|
|
|
|
|
|
|
+ <span v-if="data.info.etaChangeNum"> ETA Change ({{ data.info.etaChangeNum }}) </span>
|
|
|
</div>
|
|
</div>
|
|
|
<el-button @click="handleSeeAll(data)" class="see-all-icon el-button--text">
|
|
<el-button @click="handleSeeAll(data)" class="see-all-icon el-button--text">
|
|
|
See All
|
|
See All
|
|
@@ -123,21 +113,25 @@ const handleSeeAll = (data: any) => {
|
|
|
<span class="text">{{ data.tag }}</span>
|
|
<span class="text">{{ data.tag }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="route">
|
|
|
|
|
|
|
+ <div class="route" v-if="data?.info?.route?.length > 0">
|
|
|
<span class="font_family icon-icon_route_b"></span>
|
|
<span class="font_family icon-icon_route_b"></span>
|
|
|
- <span>{{ data.location }}</span>
|
|
|
|
|
|
|
+ <span></span>
|
|
|
|
|
+ <template v-for="(item, index) in data.info.route" :key="index">
|
|
|
|
|
+ <span>{{ item }}</span
|
|
|
|
|
+ ><span style="margin: 0 3px" v-if="index !== data.info.route.length - 1">→</span>
|
|
|
|
|
+ </template>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="location">
|
|
|
|
|
|
|
+ <div class="location" v-if="data.location">
|
|
|
<span class="font_family icon-icon_location_b"></span>
|
|
<span class="font_family icon-icon_location_b"></span>
|
|
|
<span>{{ data.location }}</span>
|
|
<span>{{ data.location }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="delay-time" v-if="data.type === 'delay'">
|
|
|
|
|
|
|
+ <div class="delay-time" v-if="data.type === 'delay' && data.info?.time">
|
|
|
<span class="font_family icon-icon_delay_b"></span>
|
|
<span class="font_family icon-icon_delay_b"></span>
|
|
|
- <span>{{ data.delayInfo.delayTime }}</span>
|
|
|
|
|
|
|
+ <span>{{ data.info.time }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="change-time" v-if="data.changeTime">
|
|
|
|
|
|
|
+ <div class="change-time" v-if="data.type === 'change' && data.info?.time">
|
|
|
<span style="margin-left: 1px" class="font_family icon-icon_time_b"></span>
|
|
<span style="margin-left: 1px" class="font_family icon-icon_time_b"></span>
|
|
|
- <span>{{ data.changeTime }}</span>
|
|
|
|
|
|
|
+ <span>{{ data.info?.time }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="time">
|
|
<div class="time">
|
|
|
<span style="margin-left: 1px" class="font_family icon-icon_time_b"></span>
|
|
<span style="margin-left: 1px" class="font_family icon-icon_time_b"></span>
|
|
@@ -264,6 +258,7 @@ const handleSeeAll = (data: any) => {
|
|
|
span {
|
|
span {
|
|
|
color: var(--color-neutral-2);
|
|
color: var(--color-neutral-2);
|
|
|
font-size: 12px;
|
|
font-size: 12px;
|
|
|
|
|
+ line-height: 16px;
|
|
|
}
|
|
}
|
|
|
.font_family {
|
|
.font_family {
|
|
|
font-size: 16px;
|
|
font-size: 16px;
|