| | |
| | | <el-row :gutter="10" class="kpi-row"> |
| | | <el-col :lg="3" :sm="8" :xs="12"> |
| | | <kpi-card label="在线分拣员" :value="data.kpis.sorterOnline" |
| | | :hint="`${data.kpis.sorterOnline} / ${data.kpis.sorterTotal}`" /> |
| | | :hint="`${data.kpis.sorterOnline} / ${data.kpis.sorterTotal}`" |
| | | :demo="isDemoField('kpis.sorterOnline')" /> |
| | | </el-col> |
| | | <el-col :lg="3" :sm="8" :xs="12"> |
| | | <kpi-card label="在线车辆" :value="data.kpis.vehicleOnline" |
| | | :hint="`${data.kpis.vehicleOnline} / ${data.kpis.vehicleTotal}`" /> |
| | | :hint="`${data.kpis.vehicleOnline} / ${data.kpis.vehicleTotal}`" |
| | | :demo="isDemoField('kpis.vehicleOnline')" /> |
| | | </el-col> |
| | | <el-col :lg="3" :sm="8" :xs="12"> |
| | | <kpi-card label="在线分拣点" :value="data.kpis.siteOnline" |
| | | :hint="`${data.kpis.siteOnline} / ${data.kpis.siteTotal},按站点启用`" /> |
| | | :hint="`${data.kpis.siteOnline} / ${data.kpis.siteTotal},按站点启用`" |
| | | :demo="isDemoField('kpis.siteOnline')" /> |
| | | </el-col> |
| | | <el-col :lg="3" :sm="8" :xs="12"> |
| | | <kpi-card label="今日回收订单" :value="data.kpis.todayOrders" :hint="``" /> |
| | | <kpi-card label="今日回收订单" :value="data.kpis.todayOrders" :demo="isDemoField('kpis.todayOrders')" /> |
| | | </el-col> |
| | | <el-col :lg="4" :sm="8" :xs="12"> |
| | | <kpi-card label="今日预约 / 待处理" :value="data.kpis.todayAppointments" |
| | | :hint="`待处理 ${data.kpis.pendingAppointments}`" /> |
| | | :hint="`待处理 ${data.kpis.pendingAppointments}`" |
| | | :demo="isDemoField('kpis.todayAppointments')" /> |
| | | </el-col> |
| | | <el-col :lg="4" :sm="8" :xs="12"> |
| | | <kpi-card label="异常告警" :value="data.kpis.alerts" alert |
| | | :hint="`健康异常 ${data.kpis.healthAlerts},不展示隐私体征`" /> |
| | | :hint="`健康异常 ${data.kpis.healthAlerts},不展示隐私体征`" |
| | | :demo="isDemoField('kpis.alerts')" /> |
| | | </el-col> |
| | | <el-col :lg="4" :sm="8" :xs="12"> |
| | | <kpi-card label="车辆安全事件" :value="safetyCount" hint="超速 / 急刹等,来自车辆日汇总" /> |
| | | <kpi-card label="车辆安全事件" :value="safetyCount" hint="超速 / 急刹等,来自车辆日汇总" |
| | | :demo="isDemoSection('vehicles')" /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10" class="mid-row"> |
| | | <el-col :lg="14" :xs="24"> |
| | | <panel-card title="订单趋势" sub="现场 / 预约 / 大屏 / 活动,按天对比"> |
| | | <panel-card title="订单趋势" sub="现场 / 预约 / 大屏 / 活动,按天对比" :demo="isDemoSection('ordersByType')"> |
| | | <v-chart :option="orderOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="10" :xs="24"> |
| | | <panel-card title="预约订单漏斗" sub="新增/待审核 → 已确认/已接单 → 已完成"> |
| | | <panel-card title="预约订单漏斗" sub="新增/待审核 → 已确认/已接单 → 已完成" :demo="isDemoSection('appointmentFlow')"> |
| | | <div class="funnel"> |
| | | <div v-for="(item, index) in data.appointmentFlow" :key="item.name" class="funnel__item"> |
| | | <div class="funnel__name">{{ item.name }}</div> |
| | |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :lg="8" :xs="24"> |
| | | <panel-card title="分拣员状态" sub="来自分拣员日表,只汇总状态,不展示体征明细"> |
| | | <panel-card title="分拣员状态" sub="来自分拣员日表,只汇总状态,不展示体征明细" :demo="isDemoSection('sorterStatus')"> |
| | | <div class="status-list"> |
| | | <div v-for="item in data.sorterStatus" :key="item.name" class="status-list__item"> |
| | | <i :style="{ background: item.color }" /> |
| | |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="8" :xs="24"> |
| | | <panel-card title="车辆运行" sub="公司领导看运力与安全,不进校领导首页"> |
| | | <panel-card title="车辆运行" sub="公司领导看运力与安全,不进校领导首页" :demo="isDemoSection('vehicles')"> |
| | | <div class="table table--vehicle"> |
| | | <div class="table__head"> |
| | | <span>车牌</span> |
| | |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="8" :xs="24"> |
| | | <panel-card title="分拣点吞吐" sub="运营维度才下钻到点位"> |
| | | <panel-card title="分拣点吞吐" sub="运营维度才下钻到点位" :demo="isDemoSection('sites')"> |
| | | <div class="table table--site"> |
| | | <div class="table__head"> |
| | | <span>收集点</span> |
| | |
| | | import { computed } from 'vue'; |
| | | import KpiCard from '../../components/kpi-card.vue'; |
| | | import PanelCard from '../../components/panel-card.vue'; |
| | | import { useChartTheme, useScreenData } from '../../hooks/use-screen'; |
| | | import { useChartTheme, useScreenData, useScreenFieldSource } from '../../hooks/use-screen'; |
| | | |
| | | const { data } = useScreenData(); |
| | | const { isDemoField, isDemoSection } = useScreenFieldSource(); |
| | | const { mutedColor, splitColor, tooltip } = useChartTheme(); |
| | | |
| | | const safetyCount = computed(() => data.value.vehicles.reduce((s, e) => s + e.overspeed, 0)); |