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

<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>