|
@@ -75,10 +75,16 @@
|
|
|
<!-- 主指标:订单 + 消费 -->
|
|
<!-- 主指标:订单 + 消费 -->
|
|
|
<view class="metrics-primary">
|
|
<view class="metrics-primary">
|
|
|
<view class="metric-card-lg">
|
|
<view class="metric-card-lg">
|
|
|
|
|
+ <view class="metric-lg-icon">
|
|
|
|
|
+ <AppIcon name="clipboard" :size="20" color="#C6171E" />
|
|
|
|
|
+ </view>
|
|
|
<text class="metric-lg-value">{{ todayOrders }}</text>
|
|
<text class="metric-lg-value">{{ todayOrders }}</text>
|
|
|
<text class="metric-lg-label">今日订单</text>
|
|
<text class="metric-lg-label">今日订单</text>
|
|
|
</view>
|
|
</view>
|
|
|
<view class="metric-card-lg">
|
|
<view class="metric-card-lg">
|
|
|
|
|
+ <view class="metric-lg-icon">
|
|
|
|
|
+ <AppIcon name="dollar" :size="20" color="#C6171E" />
|
|
|
|
|
+ </view>
|
|
|
<text class="metric-lg-value">¥{{ formatAmount(todayConsumption) }}</text>
|
|
<text class="metric-lg-value">¥{{ formatAmount(todayConsumption) }}</text>
|
|
|
<text class="metric-lg-label">消费总额</text>
|
|
<text class="metric-lg-label">消费总额</text>
|
|
|
</view>
|
|
</view>
|
|
@@ -128,6 +134,12 @@
|
|
|
</view>
|
|
</view>
|
|
|
<text class="action-label">财务管理</text>
|
|
<text class="action-label">财务管理</text>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
+ <view class="action-item" @click="navigateTo('/pages/user/list')">
|
|
|
|
|
+ <view class="action-icon-wrap">
|
|
|
|
|
+ <AppIcon name="users" :size="26" color="#FFFFFF" />
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <text class="action-label">用户管理</text>
|
|
|
|
|
+ </view>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
|
<!-- 底栏信息 -->
|
|
<!-- 底栏信息 -->
|
|
@@ -248,7 +260,7 @@ const loadData = async (stationId) => {
|
|
|
todayOrders.value = data.todayWashOrders || 0
|
|
todayOrders.value = data.todayWashOrders || 0
|
|
|
todayConsumption.value = data.todayConsumptionAmount || 0
|
|
todayConsumption.value = data.todayConsumptionAmount || 0
|
|
|
avgOrderPrice.value = data.avgOrderPrice || 0
|
|
avgOrderPrice.value = data.avgOrderPrice || 0
|
|
|
- avgDuration.value = data.avgOrderDuration || 0
|
|
|
|
|
|
|
+ avgDuration.value = Math.round((data.avgOrderDuration || 0) / 60 * 10) / 10
|
|
|
todayMembers.value = data.todayRegisteredMembers || 0
|
|
todayMembers.value = data.todayRegisteredMembers || 0
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -407,6 +419,15 @@ onPullDownRefresh(async () => {
|
|
|
gap: 12rpx;
|
|
gap: 12rpx;
|
|
|
transition: box-shadow 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
|
|
transition: box-shadow 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
}
|
|
}
|
|
|
|
|
+.metric-lg-icon {
|
|
|
|
|
+ width: 64rpx;
|
|
|
|
|
+ height: 64rpx;
|
|
|
|
|
+ border-radius: 18rpx;
|
|
|
|
|
+ background: #F5F7FA;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+}
|
|
|
.metric-card-lg:active {
|
|
.metric-card-lg:active {
|
|
|
transform: translateY(-2rpx);
|
|
transform: translateY(-2rpx);
|
|
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);
|
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);
|
|
@@ -487,11 +508,12 @@ onPullDownRefresh(async () => {
|
|
|
/* ===== Quick Actions ===== */
|
|
/* ===== Quick Actions ===== */
|
|
|
.actions-row {
|
|
.actions-row {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
+ flex-wrap: wrap;
|
|
|
gap: 16rpx;
|
|
gap: 16rpx;
|
|
|
margin-bottom: 28rpx;
|
|
margin-bottom: 28rpx;
|
|
|
}
|
|
}
|
|
|
.action-item {
|
|
.action-item {
|
|
|
- flex: 1;
|
|
|
|
|
|
|
+ flex: 0 0 calc(50% - 8rpx);
|
|
|
background: #FFFFFF;
|
|
background: #FFFFFF;
|
|
|
border-radius: 24rpx;
|
|
border-radius: 24rpx;
|
|
|
padding: 32rpx 12rpx 24rpx;
|
|
padding: 32rpx 12rpx 24rpx;
|
|
@@ -499,6 +521,7 @@ onPullDownRefresh(async () => {
|
|
|
flex-direction: column;
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
gap: 18rpx;
|
|
gap: 18rpx;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
}
|
|
}
|
|
|
.action-icon-wrap {
|
|
.action-icon-wrap {
|
|
|
width: 88rpx;
|
|
width: 88rpx;
|