You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
392 lines
7.5 KiB
392 lines
7.5 KiB
<template> |
|
<div class="todayDetail"> |
|
<!-- banner图 --> |
|
<div class="todayDetail__banner mb8"> |
|
<div class="description"> |
|
<div class="title">智慧物流解决方案</div> |
|
<p class="text"> |
|
针对物流行业仓储、运输等场景,提供物联、LBS、大数据、安全管理、人工智能等能力,助力物流行业快速发展。 |
|
</p> |
|
</div> |
|
</div> |
|
|
|
<!-- 搜索控件 --> |
|
<div class="todayDetail__searchControl mb8"> |
|
<!-- 日期 --> |
|
<div class="date"> |
|
<div |
|
:class="{ date__item: true, active: item.isActive }" |
|
v-for="item in dateSearchList" |
|
:key="item.label" |
|
@click="changeDateItemState(item)" |
|
> |
|
{{ item.label }} |
|
</div> |
|
|
|
<!-- 日期选择器 --> |
|
<div class="date-picker-container"> |
|
<div class="date-picker-title">时间</div> |
|
<el-date-picker |
|
v-model="datePickerValue" |
|
type="daterange" |
|
range-separator="To" |
|
start-placeholder="开始日期" |
|
end-placeholder="结束日期" |
|
clear-icon="Delete" |
|
/> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<!-- 干线数据 --> |
|
<div class="todayDetail__dataCard mb8" v-for="item in dataList" :key="item.title"> |
|
<div class="title">{{ item.title }}</div> |
|
|
|
<ul class="list"> |
|
<li class="listItem" v-for="value in item.data"> |
|
<div class="number">{{ value.num }}</div> |
|
<div class="label">{{ value.label }}</div> |
|
</li> |
|
</ul> |
|
</div> |
|
|
|
<!-- 仓储和统计 --> |
|
<div style="display: flex; justify-content: space-between"> |
|
<!-- 仓储 --> |
|
<div class="todayDetail__dataCard storage"> |
|
<div class="title">仓储</div> |
|
|
|
<ul class="list" style="flex-wrap: wrap"> |
|
<li class="listItem" v-for="value in storageData.data" :key="(value.label as any)"> |
|
<div class="number">{{ value.num }}</div> |
|
<div class="label">{{ value.label }}</div> |
|
</li> |
|
</ul> |
|
</div> |
|
|
|
<!-- 统计 --> |
|
<div class="todayDetail__dataCard" style="display: flex; flex-direction:column;"> |
|
<div class="title">统计</div> |
|
|
|
<ul class="list" style="flex: 1; align-items: center;"> |
|
<li class="listItem" v-for="value in statisticsData.data" :key="(value.label as any)"> |
|
<div class="number">{{ value.num }}</div> |
|
<div class="label">{{ value.label }}</div> |
|
</li> |
|
</ul> |
|
</div> |
|
</div> |
|
</div> |
|
</template> |
|
|
|
<script setup lang="ts"> |
|
import { reactive, ref } from 'vue'; |
|
|
|
interface DateSearchItem { |
|
/** |
|
* 标题 |
|
*/ |
|
label: string; |
|
/** |
|
* 是否激活 |
|
*/ |
|
isActive: boolean; |
|
} |
|
|
|
type DateSearchList = DateSearchItem[]; |
|
|
|
// 日期选择列表 |
|
const dateSearchList = reactive<DateSearchList>([ |
|
{ label: '今日', isActive: true }, |
|
{ label: '昨日', isActive: false }, |
|
{ label: '最近七天', isActive: false }, |
|
{ label: '最近30天', isActive: false }, |
|
{ label: '近365天', isActive: false }, |
|
]); |
|
|
|
const changeDateItemState = (item: DateSearchItem): void => { |
|
dateSearchList.forEach(val => { |
|
val.isActive = false; |
|
}); |
|
item.isActive = true; |
|
}; |
|
|
|
// 时间选择器值 |
|
const datePickerValue = ref(''); |
|
|
|
// 干线 && 配送 假数据 |
|
const dataList = [ |
|
{ |
|
title: '干线', |
|
data: [ |
|
{ |
|
label: '装车中车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '在途车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '作业中车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '已卸车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '已入库次数', |
|
num: 168, |
|
}, |
|
], |
|
}, |
|
{ |
|
title: '配送', |
|
data: [ |
|
{ |
|
label: '配送待装车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '配送中车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '已完成车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '配送中签收件数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '未入签收件数', |
|
num: 0, |
|
}, |
|
], |
|
}, |
|
]; |
|
|
|
// 仓储假数据 |
|
const storageData = { |
|
title: '仓储', |
|
data: [ |
|
{ |
|
label: '入库件数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '出库总件数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '待上架件数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '库存总数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '已用库位数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '控制库位数', |
|
num: 0, |
|
}, |
|
], |
|
}; |
|
|
|
// 统计假数据 |
|
const statisticsData = { |
|
title: '统计', |
|
data: [ |
|
{ |
|
label: '配送待装车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '配送中车次数', |
|
num: 168, |
|
}, |
|
{ |
|
label: '配送中车次数', |
|
num: 168, |
|
}, |
|
], |
|
}; |
|
</script> |
|
|
|
<style scoped lang="scss"> |
|
// 主题颜色 |
|
$theme-colors: #d3832a; |
|
|
|
// 去除ul默认样式 |
|
ul { |
|
list-style: none; |
|
padding: 0; |
|
margin: 0; |
|
} |
|
|
|
.todayDetail { |
|
padding: 0 10px 10px 10px; |
|
|
|
// banner图 |
|
&__banner { |
|
width: 100%; |
|
height: 218px; |
|
background: linear-gradient(135deg, #ffffff 0%, #ffe0be 0%, #fff2e4 100%); |
|
border-radius: 5px; |
|
color: $theme-colors; |
|
display: flex; |
|
align-items: center; |
|
justify-content: center; |
|
|
|
.title { |
|
padding: 0 5px; |
|
font-family: YouSheBiaoTiHei-Bold; |
|
font-weight: 600; |
|
font-size: 36px; |
|
line-height: 47px; |
|
width: fit-content; |
|
border: 2px dashed #ccc; |
|
font-style: italic; |
|
} |
|
|
|
.text { |
|
width: 453px; |
|
font-size: 16px; |
|
line-height: 27px; |
|
margin: 8px 0 0 0; |
|
} |
|
} |
|
|
|
// 搜索控件高度 |
|
$searchHeight: 52px; |
|
|
|
// 搜索控件 |
|
&__searchControl { |
|
display: flex; |
|
align-items: center; |
|
padding-left: 55px; |
|
height: $searchHeight; |
|
background: #fff; |
|
border-radius: 5px; |
|
font-size: 16px; |
|
white-space: nowrap; |
|
|
|
// 时间 |
|
.date { |
|
height: 100%; |
|
display: flex; |
|
color: #000; |
|
|
|
&__item { |
|
line-height: $searchHeight; |
|
margin-right: 24px; |
|
cursor: pointer; |
|
transition: all 0.5s; |
|
} |
|
} |
|
} |
|
|
|
// 数据卡片 |
|
&__dataCard { |
|
box-sizing: border-box; |
|
width: 100%; |
|
background: #fff; |
|
padding: 26px 20px 32px; |
|
border-radius: 5px; |
|
|
|
// 标题 |
|
& .title { |
|
font-size: 18px; |
|
font-weight: bold; |
|
margin-bottom: 29px; |
|
} |
|
|
|
& .list { |
|
display: flex; |
|
} |
|
} |
|
} |
|
|
|
// 搜索控件激活状态 |
|
.date__item.active { |
|
color: $theme-colors; |
|
position: relative; |
|
|
|
&::after { |
|
content: ''; |
|
display: block; |
|
width: 90%; |
|
border: 1px solid $theme-colors; |
|
left: 5%; |
|
} |
|
} |
|
|
|
.date__item { |
|
&:hover { |
|
color: $theme-colors; |
|
} |
|
|
|
&::after { |
|
content: ''; |
|
display: block; |
|
width: 0; |
|
position: absolute; |
|
bottom: 0; |
|
left: 50%; |
|
transition: all 0.5s; |
|
} |
|
} |
|
|
|
// 日期搜索框样式 |
|
:deep(.el-range-editor.el-input__wrapper) { |
|
width: 220px !important; |
|
height: 32px !important; |
|
} |
|
|
|
.date-picker-container { |
|
height: 100%; |
|
display: flex; |
|
align-items: center; |
|
} |
|
|
|
.date-picker-title { |
|
margin-right: 16px; |
|
} |
|
|
|
// 底部外边距8px |
|
.mb8 { |
|
margin-bottom: 8px; |
|
} |
|
|
|
// 列表每一项数据 |
|
.listItem { |
|
flex: none; |
|
width: 200px; |
|
|
|
& .number { |
|
font-weight: bold; |
|
font-family: DIN-Bold; |
|
font-size: 28px; |
|
line-height: 34px; |
|
margin-bottom: 13px; |
|
} |
|
|
|
& .label { |
|
color: #afb4ba; |
|
font-size: 14px; |
|
} |
|
} |
|
|
|
// 仓储列表样式 |
|
.storage { |
|
width: 750px; |
|
margin-right: 20px; |
|
flex: none; |
|
} |
|
</style>
|
|
|