Files
qipai/miniapp/pages/manager/operations.wxml
T
2026-08-10 10:52:06 +08:00

72 lines
4.6 KiB
Plaintext

<scroll-view class="scrollarea" scroll-y type="list">
<view class="container operations-page">
<view class="page-heading">
<view>
<view class="title">保洁与设备</view>
<view class="subtitle">{{storeName || '当前门店'}}</view>
</view>
<view class="permission-tag">{{canWriteCleaning || canWriteDevices ? '可操作' : '只读'}}</view>
</view>
<view wx:if="{{errorMessage}}" class="error">{{errorMessage}}</view>
<view wx:if="{{loading}}" class="loading">正在加载运营数据...</view>
<block wx:if="{{canReadCleaning}}">
<view class="section-title">保洁任务</view>
<view class="summary-grid">
<view class="summary-card"><strong>{{cleaningSummary.taskTotal}}</strong><text>任务</text></view>
<view class="summary-card warning"><strong>{{cleaningSummary.pendingReview}}</strong><text>待验收</text></view>
<view class="summary-card primary"><strong>{{cleaningSummary.active}}</strong><text>处理中</text></view>
<view class="summary-card danger"><strong>{{cleaningSummary.rejected}}</strong><text>已驳回</text></view>
<view class="summary-card success"><strong>{{cleaningSummary.completed}}</strong><text>已完成</text></view>
</view>
<view wx:if="{{!loading && cleaningTasks.length === 0}}" class="empty">当前门店暂无保洁任务</view>
<view wx:for="{{cleaningTasks}}" wx:key="id" class="operation-card">
<view class="card-main">
<view>
<view class="card-title">{{item.roomText}}</view>
<view class="card-meta">{{item.taskNo}} · {{item.rewardText}}</view>
</view>
<view class="status-pill status-{{item.status}}">{{item.statusText}}</view>
</view>
<view wx:if="{{item.requirement}}" class="detail-line">要求:{{item.requirement}}</view>
<view wx:if="{{item.rejectReason}}" class="reject-reason">驳回:{{item.rejectReason}}</view>
<view wx:if="{{canWriteCleaning && (item.canReview || item.canExempt)}}" class="card-actions">
<button wx:if="{{item.canReview}}" size="mini" type="primary" loading="{{busyTaskId === item.id}}" data-task-id="{{item.id}}" data-action="complete" bindtap="reviewTask">验收通过</button>
<button wx:if="{{item.canReview}}" size="mini" data-task-id="{{item.id}}" data-action="reject" bindtap="reviewTask">驳回补做</button>
<button wx:if="{{item.canExempt}}" size="mini" data-task-id="{{item.id}}" data-action="exempt" bindtap="reviewTask">免清洁</button>
</view>
</view>
</block>
<block wx:if="{{canReadDevices}}">
<view class="section-heading">
<view class="section-title">设备状态</view>
<view class="section-count">告警 {{openAlerts.length}} · 维护 {{maintenance.length}}</view>
</view>
<view wx:if="{{!loading && devices.length === 0}}" class="empty">当前门店暂无设备</view>
<view wx:for="{{devices}}" wx:key="id" class="operation-card">
<view class="card-main">
<view>
<view class="card-title">{{item.typeText}} · {{item.deviceId}}</view>
<view class="card-meta">{{item.roomText}} / {{item.model}}</view>
</view>
<view class="status-pill device-{{item.status}}">{{item.statusText}}</view>
</view>
<view class="detail-line">最近心跳:{{item.lastSeenText}}</view>
<view wx:if="{{canWriteDevices && item.roomId && item.deviceType === 'CONTROL_BOX'}}" class="card-actions controls">
<button size="mini" loading="{{busyDeviceKey === item.roomId + ':door-open'}}" data-room-id="{{item.roomId}}" data-action="door-open" bindtap="controlDevice">临时开门</button>
<button size="mini" data-room-id="{{item.roomId}}" data-action="power-on" bindtap="controlDevice">全屋通电</button>
<button size="mini" type="warn" data-room-id="{{item.roomId}}" data-action="power-off" bindtap="controlDevice">全屋断电</button>
</view>
<view wx:if="{{canWriteDevices && item.roomId && item.deviceType === 'SMART_SOCKET'}}" class="card-actions controls">
<button size="mini" data-room-id="{{item.roomId}}" data-action="socket-on" bindtap="controlDevice">插座通电</button>
<button size="mini" type="warn" data-room-id="{{item.roomId}}" data-action="socket-off" bindtap="controlDevice">插座断电</button>
</view>
</view>
</block>
<view wx:if="{{!loading && !canReadCleaning && !canReadDevices}}" class="empty">当前账号没有保洁或设备查看权限</view>
</view>
</scroll-view>