Files
2026-06-02 15:28:25 +08:00

149 lines
3.8 KiB
Vue

<template>
<view class="page-container">
<scroll-view class="page-body" scroll-y>
<view class="filter-bar">
<input class="filter-input" v-model="startDate" placeholder="起始日期" />
<input class="filter-input" v-model="endDate" placeholder="结束日期" />
<button class="filter-btn" @click="handleQuery">查询</button>
</view>
<view class="stat-cards">
<view class="stat-card">
<text class="stat-label">入库总重量</text>
<view class="stat-number">38.5 <text class="stat-unit">KG</text></view>
</view>
<view class="stat-card">
<text class="stat-label">入库总数量</text>
<view class="stat-number">26 <text class="stat-unit"></text></view>
</view>
<view class="stat-card">
<text class="stat-label">贮存地点</text>
<view class="stat-number">2 <text class="stat-unit"></text></view>
</view>
<view class="stat-card">
<text class="stat-label">危废种类</text>
<view class="stat-number">4 <text class="stat-unit"></text></view>
</view>
</view>
<view class="chart-title">各类危废重量分布</view>
<view class="bar-chart">
<view class="bar-row">
<text class="bar-label">感染性</text>
<view class="bar-track"><view class="bar-fill red" style="width:75%;">18.5 KG</view></view>
</view>
<view class="bar-row">
<text class="bar-label">损伤性</text>
<view class="bar-track"><view class="bar-fill orange" style="width:45%;">10.2 KG</view></view>
</view>
<view class="bar-row">
<text class="bar-label">病理性</text>
<view class="bar-track"><view class="bar-fill blue" style="width:20%;">5.3 KG</view></view>
</view>
<view class="bar-row">
<text class="bar-label">药物性</text>
<view class="bar-track"><view class="bar-fill green" style="width:18%;">4.5 KG</view></view>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
import { api } from '@/api/index'
import { getMonthStartDate, getDate } from '@/utils/common.js'
export default {
data() {
return {
startDate: getMonthStartDate(),
endDate: getDate()
}
},
methods: {
handleQuery() { uni.showToast({ title: '查询中...', icon: 'none' }) }
}
}
</script>
<style lang="scss" scoped>
.stat-cards {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: $spacing-base;
padding: $spacing-md;
}
.stat-card {
background: #ffffff;
border-radius: $border-radius-md;
padding: $spacing-base;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
.stat-label {
font-size: $font-size-sm;
color: $text-placeholder;
}
.stat-number {
font-size: $font-size-xxl;
font-weight: 700;
color: $text-primary;
margin-top: $spacing-xs;
.stat-unit {
font-size: $font-size-base;
color: $text-placeholder;
font-weight: 400;
}
}
}
.chart-title {
padding: 0 $spacing-md $spacing-sm;
font-size: $font-size-base;
font-weight: 600;
color: $text-primary;
}
.bar-chart {
padding: 0 $spacing-md;
}
.bar-row {
display: flex;
align-items: center;
gap: $spacing-sm;
margin-bottom: $spacing-sm;
}
.bar-label {
width: 50px;
font-size: $font-size-sm;
color: $text-secondary;
text-align: right;
flex-shrink: 0;
}
.bar-track {
flex: 1;
height: 20px;
background: #f0f0f0;
border-radius: 4px;
overflow: hidden;
}
.bar-fill {
height: 100%;
border-radius: 4px;
display: flex;
align-items: center;
padding-left: 6px;
font-size: $font-size-xs;
color: #ffffff;
&.red { background: $danger-color; }
&.orange { background: $warning-color; }
&.blue { background: $primary-color; }
&.green { background: $success-color; }
}
</style>